### Functions and Their Basic Properties

by
Czeslaw Bylinski

Copyright (c) 1989 Association of Mizar Users

MML identifier: FUNCT_1
[ MML identifier index ]

```environ

vocabulary RELAT_1, BOOLE, FUNCT_1;
notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1;
constructors TARSKI, RELAT_1, SUBSET_1, XBOOLE_0;
clusters SUBSET_1, RELAT_1, ZFMISC_1, XBOOLE_0;
requirements SUBSET, BOOLE;
definitions TARSKI, XBOOLE_0, RELAT_1;
theorems TARSKI, XBOOLE_0, ZFMISC_1, RELAT_1, XBOOLE_1;
schemes TARSKI, XBOOLE_0;

begin

reserve X,X1,X2,Y,Y1,Y2 for set,
p,x,x1,x2,y,y1,y2,z,z1,z2 for set;

definition let X be set;
attr X is Function-like means
:Def1: for x,y1,y2 st [x,y1] in X & [x,y2] in X holds y1 = y2;
end;

definition
cluster Relation-like Function-like set;
existence
proof take {};
thus (for p st p in {} ex x,y st [x,y] = p) &
(for x,y1,y2 st [x,y1] in {} & [x,y2] in {} holds y1 = y2);
end;
end;

definition
mode Function is Function-like Relation-like set;
end;

definition
cluster empty -> Function-like set;
coherence
proof let f be set;
assume f is empty;
hence for x,y1,y2 st [x,y1] in f & [x,y2] in f holds y1 = y2;
end;
end;

reserve f,g,g1,g2,h for Function,
R,S for Relation;

canceled;

theorem
for F being set st
(for p st p in F ex x,y st [x,y] = p) &
(for x,y1,y2 st [x,y1] in F & [x,y2] in F holds y1 = y2)
holds F is Function by Def1,RELAT_1:def 1;

scheme GraphFunc{A()->set,P[set,set]}:
ex f st for x,y holds [x,y] in f iff x in A() & P[x,y]
provided
A1: for x,y1,y2 st P[x,y1] & P[x,y2] holds y1 = y2
proof
defpred R[set,set] means P[\$1,\$2];
A2: for x,y1,y2 st R[x,y1] & R[x,y2] holds y1 = y2 by A1;
consider Y such that
A3:   for y holds y in Y iff ex x st x in A() & R[x,y] from Fraenkel(A2);
defpred R[set] means ex x,y st [x,y] = \$1 & P[x,y];
consider F being set such that
A4: p in F iff p in [:A(),Y:] & R[p] from Separation;
now
thus p in F implies ex x,y st [x,y] = p
proof p in F implies ex x,y st [x,y] = p & P[x,y] by A4;
hence thesis;
end;
let x,y1,y2;
assume [x,y1] in F;
then consider x1,z1 such that
A5:  [x1,z1] = [x,y1] and
A6:  P[x1,z1] by A4;
assume [x,y2] in F;
then consider x2,z2 such that
A7:  [x2,z2] = [x,y2] and
A8:  P[x2,z2] by A4;
x = x1 & z1 = y1 & x = x2 & z2 = y2 by A5,A7,ZFMISC_1:33;
hence y1 = y2 by A1,A6,A8;
end;
then reconsider f = F as Function by Def1,RELAT_1:def 1;
take f; let x,y;
thus [x,y] in f implies x in A() & P[x,y]
proof assume
A9:     [x,y] in f;
then [x,y] in [:A(),Y:] by A4;
hence x in A() by ZFMISC_1:106;
consider x1,y1 such that
A10:     [x1,y1] = [x,y] and
A11:     P[x1,y1] by A4,A9;
x1 = x & y1 = y by A10,ZFMISC_1:33;
hence thesis by A11;
end;
assume that
A12:  x in A() and
A13:  P[x,y];
y in Y by A3,A12,A13;
then [x,y] in [:A(),Y:] by A12,ZFMISC_1:106;
hence thesis by A4,A13;
end;

definition let f,x;
canceled 2;

func f.x -> set means
:Def4: [x,it] in f if x in dom f otherwise it = {};
existence by RELAT_1:def 4;
uniqueness by Def1;
consistency;
end;

canceled 5;

theorem Th8:
[x,y] in f iff x in dom f & y = f.x
proof
thus [x,y] in f implies x in dom f & y = f.x
proof assume
A1:   [x,y] in f;
hence x in dom f by RELAT_1:def 4;
hence thesis by A1,Def4;
end;
thus thesis by Def4;
end;

theorem Th9:
dom f = dom g & (for x st x in dom f holds f.x = g.x) implies f = g
proof assume that
A1:  dom f = dom g and
A2:  for x st x in dom f holds f.x = g.x;
A3:   (for p st p in f ex x,y st [x,y] = p) &
(for p st p in g ex x,y st [x,y] = p) by RELAT_1:def 1;
[x,y] in f iff [x,y] in g
proof
thus [x,y] in f implies [x,y] in g
proof assume
A4:       [x,y] in f;
then A5:       x in dom f by RELAT_1:def 4;
then f.x = y by A4,Def4;
then g.x = y by A2,A5;
hence thesis by A1,A5,Def4;
end;
assume
A6:     [x,y] in g;
then A7:     x in dom g by RELAT_1:def 4;
then g.x = y by A6,Def4;
then f.x = y by A1,A2,A7;
hence thesis by A1,A7,Def4;
end;
hence thesis by A3,ZFMISC_1:112;
end;

definition let f;
redefine func rng f means
:Def5: for y holds y in it iff ex x st x in dom f & y = f.x;
compatibility
proof let Y;
hereby assume
A1:  Y = rng f;
let y;
hereby assume y in Y;
then consider x such that
A2:   [x,y] in f by A1,RELAT_1:def 5;
take x;
thus x in dom f & y = f.x by A2,Th8;
end;
given x such that
A3:   x in dom f and
A4:   y = f.x;
[x,y] in f by A3,A4,Def4;
hence y in Y by A1,RELAT_1:def 5;
end;
assume
A5:  for y holds y in Y iff ex x st x in dom f & y = f.x;
hereby
let y;
assume y in Y;
then consider x such that
A6:  x in dom f and
A7:  y = f.x by A5;
[x,y] in f by A6,A7,Def4;
hence y in rng f by RELAT_1:def 5;
end;
let y;
assume y in rng f;
then consider x such that
A8:  [x,y] in f by RELAT_1:def 5;
x in dom f & y = f.x by A8,Th8;
hence y in Y by A5;
end;
end;

canceled 2;

theorem
x in dom f implies f.x in rng f by Def5;

canceled;

theorem Th14:
dom f = {x} implies rng f = {f.x}
proof assume
A1: dom f = {x};
y in rng f iff y in {f.x}
proof
thus y in rng f implies y in {f.x}
proof assume y in rng f;
then consider z such that
A2:    z in dom f and
A3:    y = f.z by Def5;
z = x by A1,A2,TARSKI:def 1;
hence thesis by A3,TARSKI:def 1;
end;
assume y in {f.x};
then y = f.x & x in dom f by A1,TARSKI:def 1;
hence y in rng f by Def5;
end;
hence thesis by TARSKI:2;
end;

scheme FuncEx{A()->set,P[set,set]}:
ex f st dom f = A() & for x st x in A() holds P[x,f.x]
provided
A1: for x,y1,y2 st x in A() & P[x,y1] & P[x,y2] holds y1 = y2 and
A2: for x st x in A() ex y st P[x,y]
proof
defpred R[set,set] means \$1 in A() & P[\$1,\$2];
A3: for x,y1,y2 st R[x,y1] & R[x,y2] holds y1 = y2 by A1;
consider f being Function such that
A4:  for x,y holds [x,y] in f iff x in A() & R[x,y]
from GraphFunc(A3);
take f;
x in dom f iff x in A()
proof
thus x in dom f implies x in A()
proof assume x in dom f;
then ex y st [x,y] in f by RELAT_1:def 4;
hence x in A() by A4;
end;
assume
A5:     x in A();
then consider y such that
A6:     P[x,y] by A2;
[x,y] in f by A4,A5,A6;
hence x in dom f by RELAT_1:def 4;
end;
hence
A7:  dom f = A() by TARSKI:2;
let x;
assume
A8:   x in A();
then consider y such that
A9:   P[x,y] by A2;
[x,y] in f by A4,A8,A9;
hence thesis by A7,A8,A9,Def4;
end;

scheme Lambda{A()->set,F(set)->set}:
ex f being Function st dom f = A() & for x st x in A() holds f.x = F(x)
proof
deffunc G(set) = F(\$1);
defpred P[set,set] means \$2 = G(\$1);
A1:  for x,y1,y2 st x in A() & P[x,y1] & P[x,y2] holds y1 = y2;
A2:  for x st x in A() ex y st P[x,y];
thus ex f being Function st dom f = A() &
for x st x in A() holds P[x,f.x] from FuncEx(A1,A2);
end;

theorem
X <> {} implies for y ex f st dom f = X & rng f = {y}
proof assume
A1:  X <> {};
let y;
deffunc F(set) = y;
consider f such that
A2:  dom f = X and
A3:  for x st x in X holds f.x = F(x) from Lambda;
take f;
thus dom f = X by A2;
y1 in rng f iff y1 = y
proof
A4: now assume y1 in rng f;
then ex x st x in dom f & y1 = f.x by Def5;
hence y1 = y by A2,A3;
end;
now assume
A5:    y1 = y;
consider x being Element of X;
f.x = y by A1,A3;
hence y1 in rng f by A1,A2,A5,Def5;
end;
hence thesis by A4;
end;
hence rng f = {y} by TARSKI:def 1;
end;

theorem
(for f,g st dom f = X & dom g = X holds f = g) implies X = {}
proof assume
A1:  for f,g st dom f = X & dom g = X holds f = g;
consider x being Element of X;
assume
A2: not thesis;
deffunc F(set) = 0;
consider f being Function such that
A3:    dom f = X and
A4:    for x st x in X holds f.x = F(x) from Lambda;
deffunc F(set) = 1;
consider g being Function such that
A5:    dom g = X and
A6:    for x st x in X holds g.x = F(x) from Lambda;
f.x = 0 & g.x = 1 by A2,A4,A6;
end;

theorem
dom f = dom g & rng f = {y} & rng g = {y} implies f = g
proof assume that
A1:   dom f = dom g and
A2:   rng f = {y} & rng g = {y};
x in dom f implies f.x = g.x
proof assume x in dom f;
then f.x in rng f & g.x in rng g by A1,Def5;
then f.x = y & g.x = y by A2,TARSKI:def 1;
hence thesis;
end;
hence f = g by A1,Th9;
end;

theorem
Y <> {} or X = {} implies ex f st X = dom f & rng f c= Y
proof assume
A1:     Y <> {} or X = {};
A2: now assume
A3:     X = {};
deffunc F(set) = \$1;
consider f being Function such that
A4:     dom f = {} and for x st x in {} holds f.x = F(x) from Lambda;
take f;
thus dom f = X by A3,A4;
rng f = {} by A4,RELAT_1:65;
hence rng f c= Y by XBOOLE_1:2;
end;
now assume
A5:  X <> {};
consider y being Element of Y;
A6:  y in Y by A1,A5;
deffunc F(set) = y;
consider f such that
A7:      dom f = X and
A8:      for x st x in X holds f.x = F(x) from Lambda;
take f;
thus dom f = X by A7;
z in rng f implies z in Y
proof assume z in rng f;
then ex x st x in dom f & z = f.x by Def5;
hence z in Y by A6,A7,A8;
end;
hence rng f c= Y by TARSKI:def 3;
end;
hence thesis by A2;
end;

theorem
(for y st y in Y ex x st x in dom f & y = f.x) implies Y c= rng f
proof assume
A1:  for y st y in Y ex x st x in dom f & y = f.x;
let y;
assume y in Y;
then ex x st x in dom f & y = f.x by A1;
hence y in rng f by Def5;
end;

definition let f,g;
redefine func f*g;
synonym g*f;
end;

definition let f,g;
cluster g*f -> Function-like;
coherence
proof
let x,y1,y2;
assume [x,y1] in g*f;
then consider z1 such that
A1:  [x,z1] in f & [z1,y1] in g by RELAT_1:def 8;
assume [x,y2] in g*f;
then consider z2 such that
A2:  [x,z2] in f & [z2,y2] in g by RELAT_1:def 8;
z1 = z2 by A1,A2,Def1;
hence y1 = y2 by A1,A2,Def1;
end;
end;

theorem
for h st
(for x holds x in dom h iff x in dom f & f.x in dom g) &
(for x st x in dom h holds h.x = g.(f.x))
holds h = g*f
proof let h;
assume that
A1: for x holds x in dom h iff x in dom f & f.x in dom g and
A2: for x st x in dom h holds h.x = g.(f.x);
now let x,y;
hereby assume
A3:     [x,y] in h;
then A4:     x in dom h by RELAT_1:def 4;
then A5:     y = h.x by A3,Def4
.= g.(f.x) by A2,A4;
take y1 = f.x;
x in dom f by A1,A4;
hence [x,y1] in f by Def4;
f.x in dom g by A1,A4;
hence [y1,y] in g by A5,Def4;
end;
given z such that
A6:  [x,z] in f and
A7:  [z,y] in g;
A8:  x in dom f by A6,RELAT_1:def 4;
then A9:   z = f.x by A6,Def4;
A10:  z in dom g by A7,RELAT_1:def 4;
then A11:   y = g.z by A7,Def4;
A12:  x in dom h by A1,A8,A9,A10;
then y = h.x by A2,A9,A11;
hence [x,y] in h by A12,Def4;
end;
hence h = g*f by RELAT_1:def 8;
end;

theorem Th21:
x in dom(g*f) iff x in dom f & f.x in dom g
proof set h = g*f;
hereby
assume x in dom h;
then consider y such that
A1:     [x,y] in h by RELAT_1:def 4;
consider z such that
A2:   [x,z] in f and
A3:   [z,y] in g by A1,RELAT_1:def 8;
thus x in dom f by A2,RELAT_1:def 4;
then z = f.x by A2,Def4;
hence f.x in dom g by A3,RELAT_1:def 4;
end;
assume
A4:   x in dom f;
then consider z such that
A5:    [x,z] in f by RELAT_1:def 4;
assume f.x in dom g;
then consider y such that
A6:    [f.x,y] in g by RELAT_1:def 4;
z = f.x by A4,A5,Def4;
then [x,y] in h by A5,A6,RELAT_1:def 8;
hence x in dom h by RELAT_1:def 4;
end;

theorem Th22:
x in dom(g*f) implies (g*f).x = g.(f.x)
proof set h = g*f;
assume
A1:  x in dom h;
then consider y such that
A2:   [x,y] in h by RELAT_1:def 4;
consider z such that
A3:  [x,z] in f and
A4:  [z,y] in g by A2,RELAT_1:def 8;
x in dom f by A3,RELAT_1:def 4;
then A5:   z = f.x by A3,Def4;
then f.x in dom g by A4,RELAT_1:def 4;
then y = g.(f.x) by A4,A5,Def4;
hence h.x = g.(f.x) by A1,A2,Def4;
end;

theorem Th23:
x in dom f implies (g*f).x = g.(f.x)
proof assume
A1:  x in dom f;
per cases;
suppose f.x in dom g;
then x in dom(g*f) by A1,Th21;
hence (g*f).x = g.(f.x) by Th22;
suppose
A2:  not f.x in dom g;
then not x in dom(g*f) by Th21;
hence (g*f).x = {} by Def4 .= g.(f.x) by A2,Def4;
end;

canceled;

theorem
z in rng(g*f) implies z in rng g
proof assume z in rng(g*f);
then consider x such that
A1:   x in dom(g*f) and
A2:   z = (g*f).x by Def5;
f.x in dom g & (g*f).x = g.(f.x) by A1,Th21,Th22;
hence z in rng g by A2,Def5;
end;

canceled;

theorem Th27:
dom(g*f) = dom f implies rng f c= dom g
proof
assume
A1: dom(g*f) = dom f;
let y;
assume y in rng f;
then ex x st x in dom f & y = f.x by Def5;
hence y in dom g by A1,Th21;
end;

canceled 5;

theorem
rng f c= Y & (for g,h st dom g = Y & dom h = Y & g*f = h*f holds g = h)
implies Y = rng f
proof assume that
A1:  rng f c= Y and
A2:  for g,h st dom g = Y & dom h = Y & g*f = h*f holds g = h;
Y c= rng f
proof let y;
assume that
A3:   y in Y and
A4:   not y in rng f;
deffunc F(set) = 0;
consider g being Function such that
A5:    dom g = Y and
A6:    x in Y implies g.x = F(x) from Lambda;
defpred P[set,set] means
(\$1 = y implies \$2 = 1) & (\$1 <> y implies \$2 = 0);
A7:    x in Y implies ex y1 st P[x,y1]
proof assume x in Y;
(x = y implies thesis) & (x <> y implies thesis);
hence thesis;
end;
A8:    for x,y1,y2 st x in Y & P[x,y1] & P[x,y2] holds y1 = y2;
consider h being Function such that
A9:    dom h = Y and
A10:    for x st x in Y holds P[x,h.x] from FuncEx(A8,A7);
A11:  dom(g*f) = dom f & dom(h*f) = dom f by A1,A5,A9,RELAT_1:46;
x in dom f implies (g*f).x = (h*f).x
proof assume
A12:     x in dom f;
then f.x in rng f by Def5;
then g.(f.x) = 0 & h.(f.x) = 0 & (g*f).x = g.(f.x) & (h*f).x = h.(f.x)
by A1,A4,A6,A10,A11,A12,Th22;
hence thesis;
end;
then g*f = h*f by A11,Th9;
then g.y = 0 & h.y = 1 & g = h by A2,A3,A5,A6,A9,A10;
end;
hence thesis by A1,XBOOLE_0:def 10;
end;

definition let X;
cluster id X -> Function-like;
coherence
proof let x,y1,y2;
assume [x,y1] in id X & [x,y2] in id X;
then x = y1 & x = y2 by RELAT_1:def 10;
hence y1 = y2;
end;
end;

theorem Th34:
f = id X iff dom f = X & for x st x in X holds f.x = x
proof
hereby
assume
A1:   f = id X;
hence
A2:   dom f = X by RELAT_1:71;
let x;
assume
A3:   x in X;
then [x,x] in f by A1,RELAT_1:def 10;
hence f.x = x by A2,A3,Def4;
end;
assume that
A4: dom f = X and
A5: for x st x in X holds f.x = x;
now let x,y;
hereby assume
A6:   [x,y] in f;
hence x in X by A4,Th8;
then y = f.x & x = f.x by A5,A6,Th8;
hence x = y;
end;
assume
A7:  x in X;
then f.x = x by A5;
hence x = y implies [x,y] in f by A4,A7,Th8;
end;
hence f = id X by RELAT_1:def 10;
end;

theorem
x in X implies (id X).x = x by Th34;

canceled;

theorem Th37:
dom(f*(id X)) = dom f /\ X
proof
x in dom(f*(id X)) iff x in dom f /\ X
proof
x in dom(f*(id X)) iff x in dom f & x in X
proof
thus x in dom(f*(id X)) implies x in dom f & x in X
proof assume x in dom(f*(id X));
then x in dom((id X)) & dom((id X)) = X & (id X).x in dom f
by Th21,Th34;
hence thesis by Th34;
end;
assume
A1:       x in dom f;
assume
A2:       x in X;
then (id X).x in dom f & dom((id X)) = X by A1,Th34;
hence thesis by A2,Th21;
end;
hence thesis by XBOOLE_0:def 3;
end;
hence thesis by TARSKI:2;
end;

theorem
x in dom f /\ X implies f.x = (f*(id X)).x
proof assume x in dom f /\ X;
then dom id X = X & x in X & x in dom f by Th34,XBOOLE_0:def 3;
then (id X).x = x & x in dom id X & x in dom f by Th34;
hence thesis by Th23;
end;

canceled;

theorem
x in dom((id Y)*f) iff x in dom f & f.x in Y
proof dom((id Y)) = Y by Th34;
hence thesis by Th21;
end;

canceled;

theorem
f*(id dom f) = f & (id rng f)*f = f by RELAT_1:77,79;

theorem
(id X)*(id Y) = id(X /\ Y)
proof
A1:   dom((id X)*(id Y)) = dom((id X)) /\ Y by Th37
.= X /\ Y by Th34;
A2:   X /\ Y = dom id(X /\ Y) by Th34;
z in X /\ Y implies ((id X)*(id Y)).z = (id(X /\ Y)).z
proof assume
A3:    z in X /\ Y;
then A4:    z in X & z in Y by XBOOLE_0:def 3;
thus ((id X)*(id Y)).z = (id X).((id Y).z) by A1,A3,Th22
.= (id X).z by A4,Th34
.= z by A4,Th34
.= (id(X /\ Y)).z by A3,Th34;
end;
hence thesis by A1,A2,Th9;
end;

theorem Th44:
rng f = dom g & g*f = f implies g = id dom g
proof
assume that
A1:  rng f = dom g and
A2:  g*f = f;
set X = dom g;
x in X implies g.x = x
proof assume
x in X;
then ex y st y in dom f & f.y = x by A1,Def5;
hence x = g.x by A2,Th23;
end;
hence g = id X by Th34;
end;

definition let f;
canceled 2;

attr f is one-to-one means
:Def8: for x1,x2 st x1 in dom f & x2 in dom f & f.x1 = f.x2 holds x1 = x2;
end;

canceled;

theorem Th46:
f is one-to-one & g is one-to-one implies g*f is one-to-one
proof assume that
A1:  f is one-to-one and
A2:  g is one-to-one;
now let x1,x2;
assume
A3:  x1 in dom(g*f) & x2 in dom(g*f);
then A4:  f.x1 in dom g & f.x2 in dom g & (g*f).x1 = g.(f.x1) & (g*f).x2 = g
.(f.x2)
by Th21,Th22;
assume (g*f).x1 = (g*f).x2;
then f.x1 = f.x2 & x1 in dom f & x2 in dom f by A2,A3,A4,Def8,Th21;
hence x1 = x2 by A1,Def8;
end;
hence thesis by Def8;
end;

theorem Th47:
g*f is one-to-one & rng f c= dom g implies f is one-to-one
proof assume that
A1:  g*f is one-to-one and
A2:  rng f c= dom g;
now let x1,x2;
assume that
A3:   x1 in dom f & x2 in dom f and
A4:   f.x1 =f.x2;
(g*f).x1 = g.(f.x1) & (g*f).x2 = g.(f.x2) &
x1 in dom(g*f) & x2 in dom(g*f) by A2,A3,Th23,RELAT_1:46;
hence x1 = x2 by A1,A4,Def8;
end;
hence f is one-to-one by Def8;
end;

theorem
g*f is one-to-one & rng f = dom g implies f is one-to-one & g is
one-to-one
proof assume that
A1:  g*f is one-to-one and
A2:  rng f = dom g;
thus f is one-to-one by A1,A2,Th47;
assume not g is one-to-one;
then consider y1,y2 such that
A3:  y1 in dom g and
A4:  y2 in dom g and
A5:  g.y1 = g.y2 and
A6:  y1 <> y2 by Def8;
consider x1 such that
A7:  x1 in dom f and
A8:  f.x1 = y1 by A2,A3,Def5;
consider x2 such that
A9:  x2 in dom f and
A10: f.x2 = y2 by A2,A4,Def5;
dom(g*f) = dom f & (g*f).x1 = g.(f.x1) & (g*f).x2 = g.(f.x2)
by A2,A7,A9,Th23,RELAT_1:46;
end;

theorem
f is one-to-one iff
(for g,h st rng g c= dom f & rng h c= dom f & dom g = dom h & f*g = f*h
holds g = h)
proof
thus f is one-to-one implies
(for g,h st rng g c=dom f & rng h c=dom f & dom g = dom h & f*g = f*h
holds g = h)
proof assume
A1:     f is one-to-one;
let g,h such that
A2:     rng g c= dom f and
A3:     rng h c= dom f and
A4:     dom g = dom h and
A5:     f*g = f*h;
x in dom g implies g.x = h.x
proof assume x in dom g;
then (f*g).x = f.(g.x) & (f*h).x = f.(h.x) &
g.x in rng g & h.x in rng h &
(g.x in rng g implies g.x in dom f) &
(h.x in rng h implies h.x in dom f)
by A2,A3,A4,Def5,Th23;
hence thesis by A1,A5,Def8;
end;
hence g = h by A4,Th9;
end;
assume
A6:    for g,h st rng g c=dom f & rng h c=dom f & dom g = dom h & f*g = f*h
holds g = h;
x1 in dom f & x2 in dom f & f.x1 = f.x2 implies x1 = x2
proof assume that
A7:     x1 in dom f & x2 in dom f and
A8:     f.x1 = f.x2;
deffunc F(set) = x1;
consider g being Function such that
A9:    dom g = {{}} and
A10:   for x st x in {{}} holds g.x = F(x) from Lambda;
deffunc F(set) = x2;
consider h being Function such that
A11:    dom h = {{}} and
A12:   for x st x in {{}} holds h.x = F(x) from Lambda;
{} in {{}} by TARSKI:def 1;
then A13:    g.{} = x1 & h.{} = x2 by A10,A12;
then rng g = {x1} & rng h = {x2} by A9,A11,Th14;
then A14:     rng g c= dom f & rng h c= dom f by A7,ZFMISC_1:37;
then A15:     dom(f*g) = dom g & dom(f*h) = dom h by RELAT_1:46;
x in dom(f*g) implies (f*g).x = (f*h).x
proof assume
x in dom(f*g);
then (f*g).x = f.(g.x) & (f*h).x = f.(h.x) & g.x = x1 & h.x = x2
by A9,A10,A11,A12,A15,Th22;
hence thesis by A8;
end;
then f*g = f*h by A9,A11,A15,Th9;
hence thesis by A6,A13,A14,A15;
end;
hence f is one-to-one by Def8;
end;

theorem
dom f = X & dom g = X & rng g c= X & f is one-to-one & f*g = f
implies g = id X
proof assume that
A1:  dom f = X and
A2:  dom g = X and
A3:  rng g c= X and
A4:  f is one-to-one and
A5:  f*g = f;
x in X implies g.x = x
proof assume
A6:  x in X;
then g.x in rng g by A2,Def5;
then f.x = f.(g.x) & g.x in X by A2,A3,A5,A6,Th23;
hence x = g.x by A1,A4,A6,Def8;
end;
hence g = id X by A2,Th34;
end;

theorem
rng(g*f) = rng g & g is one-to-one implies dom g c= rng f
proof assume that
A1:   rng(g*f) = rng g and
A2:   g is one-to-one;
let y;
assume
A3:   y in dom g;
then g.y in rng(g*f) by A1,Def5;
then consider x such that
A4:  x in dom(g*f) and
A5:  g.y = (g*f).x by Def5;
(g*f).x = g.(f.x) & f.x in dom g by A4,Th21,Th22;
then y = f.x & x in dom f by A2,A3,A4,A5,Def8,Th21;
hence y in rng f by Def5;
end;

theorem Th52:
id X is one-to-one
proof let x1,x2;
assume x1 in dom id X & x2 in dom id X;
then x1 in X & x2 in X by Th34;
then (id X).x1 = x1 & (id X).x2 = x2 by Th34;
hence thesis;
end;

theorem
(ex g st g*f = id dom f) implies f is one-to-one
proof given g such that
A1:   g*f = id dom f;
dom(g*f) = dom f by A1,RELAT_1:71;
then g*f is one-to-one & rng f c= dom g by A1,Th27,Th52;
hence f is one-to-one by Th47;
end;

definition
cluster empty Function;
existence
proof
{} is Function;
hence thesis;
end;
end;

definition
cluster empty -> one-to-one Function;
coherence
proof let f be Function;
assume
A1:  f is empty;
let x1,x2;
thus thesis by A1,RELAT_1:60;
end;
end;

definition
cluster one-to-one Function;
existence
proof consider f being empty Function;
take f;
thus thesis;
end;
end;

definition let f be one-to-one Function;
cluster f~ -> Function-like;
coherence
proof let x,y1,y2;
assume [x,y1] in f~ & [x,y2] in f~;
then A1:      [y1,x] in f & [y2,x] in f by RELAT_1:def 7;
then A2:     y1 in dom f & y2 in dom f by RELAT_1:def 4;
then x = f.y1 & x = f.y2 by A1,Def4;
hence y1 = y2 by A2,Def8;
end;
end;

definition let f;
assume
A1:  f is one-to-one;
func f" -> Function equals
:Def9: f~;
coherence
proof reconsider g=f as one-to-one Function by A1;
g~ is Function;
hence f~ is Function;
end;
end;

theorem Th54:
f is one-to-one implies
for g being Function holds g=f" iff
dom g = rng f &
for y,x holds y in rng f & x = g.y iff x in dom f & y = f.x
proof assume
A1:  f is one-to-one;
let g be Function;
thus g = f" implies dom g = rng f &
for y,x holds y in rng f & x = g.y iff x in dom f & y = f.x
proof assume g = f";
then A2:     g = f~ by A1,Def9;
hence dom g = rng f by RELAT_1:37;
let y,x;
thus y in rng f & x = g.y implies x in dom f & y = f.x
proof
assume that
A3:     y in rng f and
A4:     x = g.y;
y in dom g by A2,A3,RELAT_1:37;
then [y,x] in g by A4,Def4;
then A5:       [x,y] in f by A2,RELAT_1:def 7;
hence x in dom f by RELAT_1:def 4;
hence y = f.x by A5,Def4;
end;
assume that
A6:   x in dom f and
A7:   y = f.x;
A8:    [x,y] in f by A6,A7,Def4;
hence y in rng f by RELAT_1:def 5;
then A9:     y in dom g by A2,RELAT_1:37;
[y,x] in g by A2,A8,RELAT_1:def 7;
hence x = g.y by A9,Def4;
end;
assume that
A10: dom g = rng f and
A11: for y,x holds y in rng f & x = g.y iff x in dom f & y = f.x;
let a,b be set;
thus [a,b] in g implies [a,b] in f"
proof assume
A12:   [a,b] in g;
then a in dom g by RELAT_1:def 4;
then a in rng f & b = g.a by A10,A12,Def4;
then b in dom f & a = f.b by A11;
then [b,a] in f by Def4;
then [a,b] in f~ by RELAT_1:def 7;
hence [a,b] in f" by A1,Def9;
end;
assume [a,b] in f";
then [a,b] in f~ by A1,Def9;
then A13:   [b,a] in f by RELAT_1:def 7;
then A14:   b in dom f by RELAT_1:def 4;
then a = f.b by A13,Def4;
then a in rng f & b = g.a by A11,A14;
hence [a,b] in g by A10,Def4;
end;

theorem Th55:
f is one-to-one implies rng f = dom(f") & dom f = rng(f")
proof assume f is one-to-one;
then f" = f~ by Def9;
hence thesis by RELAT_1:37;
end;

theorem Th56:
f is one-to-one & x in dom f implies x = (f").(f.x) & x = (f"*f).x
proof assume
A1:  f is one-to-one;
assume
A2:  x in dom f;
hence x = (f").(f.x) by A1,Th54;
hence thesis by A2,Th23;
end;

theorem Th57:
f is one-to-one & y in rng f implies y = f.((f").y) & y = (f*f").y
proof assume
A1:  f is one-to-one;
assume
A2:   y in rng f;
hence
A3:   y = f.((f").y) by A1,Th54;
rng f = dom(f") & dom f = rng(f") by A1,Th55;
hence thesis by A2,A3,Th23;
end;

theorem Th58:
f is one-to-one implies dom(f"*f) = dom f & rng(f"*f) = dom f
proof assume
A1:   f is one-to-one;
then A2:   rng f = dom(f") by Th55;
then rng(f"*f) = rng(f") by RELAT_1:47;
hence thesis by A1,A2,Th55,RELAT_1:46;
end;

theorem Th59:
f is one-to-one implies dom(f*f") = rng f & rng(f*f") = rng f
proof assume
A1:   f is one-to-one;
then A2:   rng(f") = dom f by Th55;
then dom(f*f") = dom(f") by RELAT_1:46;
hence thesis by A1,A2,Th55,RELAT_1:47;
end;

theorem
f is one-to-one & dom f = rng g & rng f = dom g &
(for x,y st x in dom f & y in dom g holds f.x = y iff g.y = x)
implies g = f"
proof assume that
A1:  f is one-to-one and
A2:  dom f = rng g and
A3:  rng f = dom g and
A4:  for x,y st x in dom f & y in dom g holds f.x = y iff g.y = x;
A5:  rng f = dom(f") by A1,Th54;
y in dom g implies g.y = (f").y
proof assume
A6:  y in dom g;
then A7:  g.y in dom f by A2,Def5;
then f.(g.y) = y by A4,A6;
hence thesis by A1,A7,Th54;
end;
hence g = f" by A3,A5,Th9;
end;

theorem Th61:
f is one-to-one implies f"*f = id dom f & f*f" = id rng f
proof assume
A1:  f is one-to-one;
A2:  x in dom(f"*f) implies (f"*f).x = x
proof assume x in dom(f"*f);
then x in dom f by A1,Th58;
hence thesis by A1,Th56;
end;
dom(f"*f) = dom f by A1,Th58;
hence f"*f = id dom f by A2,Th34;
A3:  x in dom(f*f") implies (f*f").x = x
proof assume x in dom(f*f");
then x in rng f by A1,Th59;
hence thesis by A1,Th57;
end;
dom(f*f") = rng f by A1,Th59;
hence thesis by A3,Th34;
end;

theorem Th62:
f is one-to-one implies f" is one-to-one
proof assume
A1:  f is one-to-one;
let y1,y2;
assume
y1 in dom(f") & y2 in dom(f");
then y1 in rng f & y2 in rng f by A1,Th54;
then y1 = f.((f").y1) & y2 = f.((f").y2) by A1,Th57;
hence thesis;
end;

Lm1:
rng(g2) = X & f*g2 = id dom g1 & g1*f = id X implies g1 = g2
proof assume that
A1:    rng(g2) = X and
A2:    f*g2 = id dom g1 and
A3:    g1*f = id X;
g1*(f*g2) = (g1*f)*g2 & g1*(id dom g1) = g1 & (id X)*g2 = g2
by A1,RELAT_1:55,77,79;
hence thesis by A2,A3;
end;

theorem Th63:
f is one-to-one & rng f = dom g & g*f = id dom f implies g = f"
proof assume that
A1:   f is one-to-one and
A2:   rng f = dom g and
A3:   g*f = id dom f;
f*f" = id rng f & rng(f") = dom f by A1,Th55,Th61;
hence thesis by A2,A3,Lm1;
end;

theorem
f is one-to-one & rng g = dom f & f*g = id rng f implies g = f"
proof assume that
A1:   f is one-to-one and
A2:   rng g = dom f and
A3:   f*g = id rng f;
f"*f = id dom f & dom(f") = rng f by A1,Th55,Th61;
hence g = f" by A2,A3,Lm1;
end;

theorem
f is one-to-one implies (f")" = f
proof assume
A1: f is one-to-one;
then A2:  dom f = rng(f") & rng f = dom(f") by Th55;
then f" is one-to-one & f*f" = id dom(f") & f"*f = id rng(f")
by A1,Th61,Th62;
hence thesis by A2,Th63;
end;

theorem
f is one-to-one & g is one-to-one implies (g*f)" = f"*g"
proof assume that
A1:   f is one-to-one and
A2:   g is one-to-one;
A3:   g*f is one-to-one by A1,A2,Th46;
y in rng(g*f) iff y in dom(f"*g")
proof
thus y in rng(g*f) implies y in dom(f"*g")
proof assume y in rng(g*f);
then consider x such that
A4:        x in dom(g*f) and
A5:        y = (g*f).x by Def5;
A6:        x in dom f & f.x in dom g & y = g.(f.x) by A4,A5,Th21,Th22;
then y in rng g by Def5;
then A7:        y in dom(g") by A2,Th54;
(g").(g.(f.x)) = (g"*g).(f.x) by A6,Th23
.= (id dom g).(f.x) by A2,Th61
.= f.x by A6,Th34;
then (g").y in rng f by A6,Def5;
then (g").y in dom(f") by A1,Th54;
hence thesis by A7,Th21;
end;
assume y in dom(f"*g");
then A8:      y in dom(g") & (g").y in dom(f") by Th21;
then y in rng g by A2,Th54;
then consider z such that
A9:      z in dom g and
A10:      y = g.z by Def5;
(g").(g.z) in rng f & g.z in dom(g") by A1,A8,A10,Th54;
then (g"*g).z in rng f by A9,Th23;
then (id dom g).z in rng f by A2,Th61;
then z in rng f by A9,Th34;
then consider x such that
A11:      x in dom f and
A12:      z = f.x by Def5;
x in dom(g*f) & y = (g*f).x by A9,A10,A11,A12,Th21,Th23;
hence thesis by Def5;
end;
then A13:     rng(g*f) = dom(f"*g") by TARSKI:2;
x in dom((f"*g")*(g*f)) iff x in dom(g*f)
proof
thus x in dom((f"*g")*(g*f)) implies x in dom(g*f) by Th21;
assume
A14:      x in dom(g*f);
then (g*f).x in rng(g*f) by Def5;
hence thesis by A13,A14,Th21;
end;
then A15:  dom((f"*g")*(g*f)) = dom(g*f) by TARSKI:2;
x in dom(g*f) implies ((f"*g")*(g*f)).x = x
proof assume
A16:    x in dom(g*f);
then A17:    f.x in dom g by Th21;
A18:    x in dom f by A16,Th21;
(g*f).x in rng(g*f) by A16,Def5;
then A19:    g.(f.x) in dom(f"*g") by A13,A16,Th22;
thus ((f"*g")*(g*f)).x = (f"*g").((g*f).x) by A15,A16,Th22
.= (f"*g").(g.(f.x)) by A16,Th22
.= (f").((g").(g.(f.x))) by A19,Th22
.= (f").((g"*g).(f.x)) by A17,Th23
.= (f").((id dom g).(f.x)) by A2,Th61
.= (f").(f.x) by A17,Th34
.= x by A1,A18,Th56;
end;
then (f"*g")*(g*f) = id dom(g*f) by A15,Th34;
hence thesis by A3,A13,Th63;
end;

theorem
(id X)" = (id X)
proof
A1:    id X is one-to-one by Th52;
dom id X = X by RELAT_1:71;
then (id X)"*(id X) = id X & dom((id X)") = rng id X & rng id X = X
by A1,Th55,Th61,RELAT_1:71;
hence thesis by Th44;
end;

definition let f,X;
cluster f|X -> Function-like;
coherence
proof
let x,y1,y2;
assume [x,y1] in f|X & [x,y2] in f|X;
then [x,y1] in f & [x,y2] in f by RELAT_1:def 11;
hence y1 = y2 by Def1;
end;
end;

theorem Th68:
g = f|X iff dom g = dom f /\ X & for x st x in dom g holds g.x = f.x
proof
hereby assume
A1:   g = f|X;
hence
A2:   dom g = dom f /\ X by RELAT_1:90;
A3:  g c= f by A1,RELAT_1:88;
let x;
assume
A4:  x in dom g;
then A5:   [x,g.x] in g by Def4;
x in dom f by A2,A4,XBOOLE_0:def 3;
hence g.x = f.x by A3,A5,Def4;
end;
assume that
A6: dom g = dom f /\ X and
A7: for x st x in dom g holds g.x = f.x;
now let x,y;
hereby assume
A8:     [x,y] in g;
then A9:   x in dom g by RELAT_1:def 4;
hence x in X by A6,XBOOLE_0:def 3;
A10:   x in dom f by A6,A9,XBOOLE_0:def 3;
y = g.x by A8,A9,Def4
.= f.x by A7,A9;
hence [x,y] in f by A10,Def4;
end;
assume
A11:   x in X;
assume
A12:   [x,y] in f;
then A13:   x in dom f by RELAT_1:def 4;
then A14:   x in dom g by A6,A11,XBOOLE_0:def 3;
y = f.x by A12,A13,Def4
.= g.x by A7,A14;
hence [x,y] in g by A14,Def4;
end;
hence g = f|X by RELAT_1:def 11;
end;

canceled;

theorem
x in dom(f|X) implies (f|X).x = f.x by Th68;

theorem
x in dom f /\ X implies (f|X).x = f.x
proof assume x in dom f /\ X;
then x in dom(f|X) by Th68;
hence thesis by Th68;
end;

Lm2:
x in dom(f|X) iff x in dom f & x in X
proof dom(f|X) = dom f /\ X by Th68; hence thesis by XBOOLE_0:def 3; end;

theorem Th72:
x in X implies (f|X).x = f.x
proof assume
A1: x in X;
per cases;
suppose x in dom f;
then x in dom(f|X) by A1,Lm2;
hence thesis by Th68;
suppose
A2:   not x in dom f;
then not x in dom(f|X) by Lm2;
hence (f|X).x = {} by Def4 .= f.x by A2,Def4;
end;

theorem
x in dom f & x in X implies f.x in rng(f|X)
proof assume
A1:  x in dom f & x in X;
then x in dom f /\ X by XBOOLE_0:def 3;
then x in dom(f|X) & (f|X).x = f.x by A1,Th68,Th72;
hence thesis by Def5;
end;

canceled 2;

theorem
dom(f|X) c= dom f & rng(f|X) c= rng f by RELAT_1:89,99;

canceled 5;

theorem
X c= Y implies (f|X)|Y = f|X & (f|Y)|X = f|X by RELAT_1:102,103;

canceled;

theorem
f is one-to-one implies f|X is one-to-one
proof assume
A1:   f is one-to-one;
let x1,x2;
assume
A2:  x1 in dom(f|X) & x2 in dom(f|X);
then x1 in dom f /\ X & x2 in dom f /\ X by Th68;
then x1 in dom f & x2 in dom f & (f|X).x1 = f.x1 & (f|X).x2 = f.x2
by A2,Th68,XBOOLE_0:def 3;
hence thesis by A1,Def8;
end;

definition let Y,f;
cluster Y|f -> Function-like;
coherence
proof
let x,y1,y2;
assume [x,y1] in Y|f & [x,y2] in Y|f;
then [x,y1] in f & [x,y2] in f by RELAT_1:def 12;
hence y1 = y2 by Def1;
end;
end;

theorem Th85:
g = Y|f iff (for x holds x in dom g iff x in dom f & f.x in Y) &
(for x st x in dom g holds g.x = f.x)
proof
hereby assume
A1:  g = Y|f;
hereby let x;
hereby assume x in dom g;
then A2:      [x,g.x] in g by Def4;
then A3:     [x,g.x] in f by A1,RELAT_1:def 12;
hence
x in dom f by RELAT_1:def 4;
then f.x = g.x by A3,Def4;
hence f.x in Y by A1,A2,RELAT_1:def 12;
end;
assume
x in dom f;
then A4:   [x,f.x] in f by Def4;
assume f.x in Y;
then [x,f.x] in g by A1,A4,RELAT_1:def 12;
hence x in dom g by RELAT_1:def 4;
end;
let x;
assume x in dom g;
then [x,g.x] in g by Def4;
then A5:     [x,g.x] in f by A1,RELAT_1:def 12;
then x in dom f by RELAT_1:def 4;
hence f.x = g.x by A5,Def4;
end;
assume that
A6: for x holds x in dom g iff x in dom f & f.x in Y and
A7: for x st x in dom g holds g.x = f.x;
now let x,y;
hereby assume
A8:     [x,y] in g;
then A9:    x in dom g by RELAT_1:def 4;
then A10:    y = g.x by A8,Def4
.= f.x by A7,A9;
hence y in Y by A6,A9;
x in dom f by A6,A9;
hence [x,y] in f by A10,Def4;
end;
assume
A11:   y in Y;
assume
A12:  [x,y] in f;
then A13:  y = f.x by Th8;
x in dom f by A12,RELAT_1:def 4;
then A14:   x in dom g by A6,A11,A13;
then y = g.x by A7,A13;
hence [x,y] in g by A14,Def4;
end;
hence g = Y|f by RELAT_1:def 12;
end;

theorem
x in dom(Y|f) iff x in dom f & f.x in Y by Th85;

theorem
x in dom(Y|f) implies (Y|f).x = f.x by Th85;

canceled;

theorem
dom(Y|f) c= dom f & rng(Y|f) c= rng f
proof thus dom(Y|f) c= dom f proof let x; thus thesis by Th85; end;
thus thesis by RELAT_1:118;
end;

canceled 7;

theorem
X c= Y implies Y|(X|f) = X|f & X|(Y|f) = X|f by RELAT_1:129,130;

canceled;

theorem
f is one-to-one implies Y|f is one-to-one
proof assume A1: f is one-to-one;
let x1,x2 such that
A2:  x1 in dom(Y|f) & x2 in dom(Y|f) and
A3:  (Y|f).x1 = (Y|f).x2;
(Y|f).x1 = f.x1 & (Y|f).x2 = f.x2 & x1 in dom f & x2 in dom f
by A2,Th85;
hence thesis by A1,A3,Def8;
end;

definition let f,X;
redefine
canceled 2;

func f.:X means
:Def12: for y holds y in it iff ex x st x in dom f & x in X & y = f.x;
compatibility
proof let Y;
hereby assume
A1: Y = f.:X;
let y;
hereby assume y in Y;
then consider x such that
A2: [x,y] in f and
A3:  x in X by A1,RELAT_1:def 13;
take x;
thus
A4:   x in dom f by A2,RELAT_1:def 4;
thus x in X by A3;
thus y = f.x by A2,A4,Def4;
end;
given x such that
A5: x in dom f and
A6: x in X and
A7: y = f.x;
[x,y] in f by A5,A7,Def4;
hence y in Y by A1,A6,RELAT_1:def 13;
end;
assume
A8:  for y holds y in Y iff ex x st x in dom f & x in X & y = f.x;
now let y;
hereby assume y in Y;
then consider x such that
A9:     x in dom f and
A10:     x in X and
A11:     y = f.x by A8;
take x;
thus [x,y] in f by A9,A11,Def4;
thus x in X by A10;
end;
given x such that
A12:   [x,y] in f and
A13:   x in X;
A14:   x in dom f by A12,RELAT_1:def 4;
y = f.x by A12,Th8;
hence y in Y by A8,A13,A14;
end;
hence Y = f.:X by RELAT_1:def 13;
end;
end;

canceled 17;

theorem Th117:
x in dom f implies f.:{x} = {f.x}
proof assume
A1:   x in dom f;
y in f.:{x} iff y in {f.x}
proof
thus y in f.:{x} implies y in {f.x}
proof assume y in f.:{x};
then consider z such that
z in dom f and
A2:       z in {x} and
A3:       y = f.z by Def12;
z = x by A2,TARSKI:def 1;
hence thesis by A3,TARSKI:def 1;
end;
assume y in {f.x};
then y = f.x & x in {x} by TARSKI:def 1;
hence y in f.:{x} by A1,Def12;
end;
hence thesis by TARSKI:2;
end;

theorem
x1 in dom f & x2 in dom f implies f.:{x1,x2} = {f.x1,f.x2}
proof assume
A1:    x1 in dom f & x2 in dom f;
y in f.:{x1,x2} iff y = f.x1 or y = f.x2
proof
thus y in f.:{x1,x2} implies y = f.x1 or y = f.x2
proof assume y in f.:{x1,x2};
then ex x st
x in dom f & x in {x1,x2} & y = f.x by Def12;
hence y = f.x1 or y = f.x2 by TARSKI:def 2;
end;
assume
A2:      y = f.x1 or y = f.x2;
x1 in {x1,x2} & x2 in {x1,x2} by TARSKI:def 2;
hence thesis by A1,A2,Def12;
end;
hence thesis by TARSKI:def 2;
end;

canceled;

theorem
(Y|f).:X c= f.:X
proof let y;
assume y in (Y|f).:X;
then consider x such that
A1:   x in dom(Y|f) and
A2:   x in X and
A3:   y = (Y|f).x by Def12;
y = f.x & x in dom f by A1,A3,Th85;
hence y in f.:X by A2,Def12;
end;

theorem Th121:
f is one-to-one implies f.:(X1 /\ X2) = f.:X1 /\ f.:X2
proof assume
A1:    f is one-to-one;
A2: f.:(X1 /\ X2)c=f.:X1 /\ f.:X2 by RELAT_1:154;
f.:X1 /\ f.:X2 c= f.:(X1 /\ X2)
proof let y;
assume y in f.:X1 /\ f.:X2;
then A3:      y in f.:X1 & y in f.:X2 by XBOOLE_0:def 3;
then consider x1 such that
A4:      x1 in dom f and
A5:      x1 in X1 and
A6:      y = f.x1 by Def12;
consider x2 such that
A7:      x2 in dom f and
A8:      x2 in X2 and
A9:      y = f.x2 by A3,Def12;
x1 = x2 by A1,A4,A6,A7,A9,Def8;
then x1 in X1 /\ X2 by A5,A8,XBOOLE_0:def 3;
hence thesis by A4,A6,Def12;
end;
hence thesis by A2,XBOOLE_0:def 10;
end;

theorem
(for X1,X2 holds f.:(X1 /\ X2) = f.:X1 /\ f.:X2) implies f is one-to-one
proof assume
A1:   for X1,X2 holds f.:(X1 /\ X2) = f.:X1 /\ f.:X2;
given x1,x2 such that
A2:   x1 in dom f & x2 in dom f and
A3:   f.x1 = f.x2 and
A4:   x1 <> x2;
A5:  f.:{x1} = {f.x1} & f.:{x2} = {f.x2} & {x1} misses {x2}
by A2,A4,Th117,ZFMISC_1:17;
then {x1} /\ {x2} = {} by XBOOLE_0:def 7;
then f.:({x1}/\{x2}) = {} & f.x1 in f.:{x1} &
f.:({x1}/\{x2}) = f.:{x1}/\f.: {x2} & f.:{x1} /\ f.:{x2} = f.:{x1}
by A1,A3,A5,RELAT_1:149,TARSKI:def 1;
end;

theorem
f is one-to-one implies f.:(X1 \ X2) = f.:X1 \ f.:X2
proof assume
A1:    f is one-to-one;
A2:    f.:X1 \ f.: X2 c= f.:(X1 \ X2) by RELAT_1:155;
f.:(X1 \ X2) c= f.:X1 \ f.:X2
proof let y;
assume y in f.:(X1\X2);
then consider x such that
A3:     x in dom f and
A4:     x in X1\X2 and
A5:     y = f.x by Def12;
A6:     x in X1 & not x in X2 by A4,XBOOLE_0:def 4;
then A7:     y in f.:X1 by A3,A5,Def12;
now assume y in f.:X2;
then ex z st z in dom f & z in X2 & y = f.z by Def12;
end;
hence thesis by A7,XBOOLE_0:def 4;
end;
hence thesis by A2,XBOOLE_0:def 10;
end;

theorem
(for X1,X2 holds f.:(X1 \ X2) = f.:X1 \ f.:X2) implies f is one-to-one
proof assume
A1:   for X1,X2 holds f.:(X1 \ X2) = f.:X1 \ f.:X2;
given x1,x2 such that
A2:   x1 in dom f & x2 in dom f and
A3:   f.x1 = f.x2 and
A4:   x1 <> x2;
f.:{x1} = {f.x1} & f.:{x2} = {f.x2} & {x1} \ {x2} = {x1}
by A2,A4,Th117,ZFMISC_1:20;
then f.:({x1}\{x2}) = f.:{x1} & f.x1 in
f.:{x1} & f.:({x1}\{x2}) = f.:{x1}\f.:{x2} &
f.:{x1} \ f.:{x2} = {} by A1,A3,TARSKI:def 1,XBOOLE_1:37;
end;

theorem
X misses Y & f is one-to-one implies f.:X misses f.:Y
proof assume X /\ Y = {} & f is one-to-one;
then f.:(X /\ Y) = {} & f.:(X /\ Y) = f.:X /\ f.:Y by Th121,RELAT_1:149;
hence thesis by XBOOLE_0:def 7;
end;

theorem
(Y|f).:X = Y /\ f.:X
proof
y in (Y|f).:X iff y in Y /\ f.:X
proof
thus y in (Y|f).:X implies y in Y /\ f.:X
proof assume y in (Y|f).:X;
then consider x such that
A1:      x in dom(Y|f) and
A2:      x in X and
A3:      y = (Y|f).x by Def12;
y = f.x & x in dom f by A1,A3,Th85;
then y in f.:X & y in Y by A1,A2,Def12,Th85;
hence thesis by XBOOLE_0:def 3;
end;
assume
A4:     y in Y /\ f.:X;
then y in f.:X by XBOOLE_0:def 3;
then consider x such that
A5:    x in dom f and
A6:    x in X and
A7:    y = f.x by Def12;
y in Y by A4,XBOOLE_0:def 3;
then A8:    x in dom(Y|f) by A5,A7,Th85;
then (Y|f).x = f.x by Th85;
hence thesis by A6,A7,A8,Def12;
end;
hence thesis by TARSKI:2;
end;

definition let f,Y;
redefine func f"Y means
:Def13: for x holds x in it iff x in dom f & f.x in Y;
compatibility
proof let X;
hereby assume
A1:  X = f"Y;
let x;
hereby assume x in X;
then consider y such that
A2:   [x,y] in f and
A3:   y in Y by A1,RELAT_1:def 14;
thus x in dom f by A2,RELAT_1:def 4;
thus f.x in Y by A2,A3,Th8;
end;
assume that
A4:  x in dom f and
A5:  f.x in Y;
[x,f.x] in f by A4,Th8;
hence x in X by A1,A5,RELAT_1:def 14;
end;
assume
A6:  for x holds x in X iff x in dom f & f.x in Y;
now let x;
hereby assume
A7:    x in X;
take y = f.x;
x in dom f by A6,A7;
hence [x,y] in f by Def4;
thus y in Y by A6,A7;
end;
given y such that
A8:  [x,y] in f and
A9:  y in Y;
A10:   x in dom f by A8,RELAT_1:def 4;
y = f.x by A8,Th8;
hence x in X by A6,A9,A10;
end;
hence X = f"Y by RELAT_1:def 14;
end;
end;

canceled 10;

theorem
f"(Y1 /\ Y2) = f"Y1 /\ f"Y2
proof
x in f"(Y1 /\ Y2) iff x in f"Y1 /\ f"Y2
proof
(x in f"Y1 iff f.x in Y1 & x in dom f) &
(x in f"Y2 iff f.x in Y2 & x in dom f) &
(x in f"(Y1 /\ Y2) iff f.x in Y1 /\ Y2 & x in dom f) &
(x in f"Y1 /\ f"Y2 iff x in f"Y1 & x in f"Y2) &
(f.x in Y1 /\ Y2 iff f.x in Y1 & f.x in Y2) by Def13,XBOOLE_0:def 3;
hence thesis;
end;
hence thesis by TARSKI:2;
end;

theorem
f"(Y1 \ Y2) = f"Y1 \ f"Y2
proof
x in f"(Y1 \ Y2) iff x in f"Y1 \ f"Y2
proof
(x in f"Y1 iff f.x in Y1 & x in dom f) &
(x in f"Y2 iff f.x in Y2 & x in dom f) &
(x in f"(Y1 \ Y2) iff f.x in Y1 \ Y2 & x in dom f) &
(x in f"Y1 \ f"Y2 iff x in f"Y1 & not x in f"Y2) &
(f.x in Y1 \ Y2 iff f.x in Y1 & not f.x in Y2) by Def13,XBOOLE_0:def 4;
hence thesis;
end;
hence thesis by TARSKI:2;
end;

theorem
(R|X)"Y = X /\ (R"Y)
proof
hereby let x;
assume x in (R|X)"Y;
then consider y such that
A1:  [x,y] in R|X and
A2:  y in Y by RELAT_1:def 14;
R|X c= R by RELAT_1:88;
then A3:   x in R"Y by A1,A2,RELAT_1:def 14;
x in X by A1,RELAT_1:def 11;
hence x in X /\ (R"Y) by A3,XBOOLE_0:def 3;
end;
let x;
assume
A4: x in X /\ (R"Y);
then A5: x in X by XBOOLE_0:def 3;
x in R"Y by A4,XBOOLE_0:def 3;
then consider y such that
A6: [x,y] in R and
A7: y in Y by RELAT_1:def 14;
[x,y] in R|X by A5,A6,RELAT_1:def 11;
hence x in (R|X)"Y by A7,RELAT_1:def 14;
end;

canceled 2;

theorem Th142:
y in rng R iff R"{y} <> {}
proof
thus y in rng R implies R"{y} <> {}
proof assume y in rng R;
then consider x such that
A1:     [x,y] in R by RELAT_1:def 5;
y in {y} by TARSKI:def 1;
hence R"{y} <> {} by A1,RELAT_1:def 14;
end;
assume R"{y} <> {};
then consider x such that
A2:  x in R"{y} by XBOOLE_0:def 1;
consider z such that
A3:  [x,z] in R and
A4:  z in {y} by A2,RELAT_1:def 14;
z = y by A4,TARSKI:def 1;
hence y in rng R by A3,RELAT_1:def 5;
end;

theorem
(for y st y in Y holds R"{y} <> {}) implies Y c= rng R
proof assume
A1:  for y st y in Y holds R"{y} <> {};
let y;
assume y in Y;
then R"{y} <> {} by A1;
hence y in rng R by Th142;
end;

theorem Th144:
(for y st y in rng f ex x st f"{y} = {x}) iff f is one-to-one
proof
thus (for y st y in rng f ex x st f"{y} = {x}) implies f is one-to-one
proof assume
A1:  for y st y in rng f ex x st f"{y} = {x};
let x1,x2;
assume
A2:   x1 in dom f & x2 in dom f;
then A3:   f.x1 in rng f & f.x2 in rng f by Def5;
then consider y1 such that
A4:   f"{f.x1} = {y1} by A1;
consider y2 such that
A5:   f"{f.x2} = {y2} by A1,A3;
f.x1 in {f.x1} & f.x2 in {f.x2} by TARSKI:def 1;
then x1 in {y1} & x2 in {y2} by A2,A4,A5,Def13;
then y1 = x1 & y2 = x2 by TARSKI:def 1;
hence thesis by A4,A5,ZFMISC_1:6;
end;
assume
A6: f is one-to-one;
let y;
assume y in rng f;
then consider x such that
A7: x in dom f and
A8: y = f.x by Def5;
take x;
z in f"{y} iff z = x
proof
thus z in f"{y} implies z = x
proof assume z in f"{y};
then z in dom f & f.z in {y} by Def13;
then z in dom f & f.z = y by TARSKI:def 1;
hence thesis by A6,A7,A8,Def8;
end;
y in {y} by TARSKI:def 1;
hence thesis by A7,A8,Def13;
end;
hence thesis by TARSKI:def 1;
end;

theorem Th145:
f.:(f"Y) c= Y
proof let y;
assume y in f.:(f"Y);
then ex x st x in dom f & x in f"Y & y = f.x by Def12;
hence y in Y by Def13;
end;

theorem
X c= dom R implies X c= R"(R.:X)
proof
assume A1:X c= dom R;
let x;
assume
A2:  x in X;
then consider Rx being set such that
A3:   [x,Rx] in R by A1,RELAT_1:def 4;
Rx in R.:X by A2,A3,RELAT_1:def 13;
hence x in R"(R.:X) by A3,RELAT_1:def 14;
end;

theorem
Y c= rng f implies f.:(f"Y) = Y
proof assume
A1: Y c= rng f;
thus f.:(f"Y) c= Y by Th145;
let y;
assume
A2:    y in Y;
then consider x such that
A3:    x in dom f & y = f.x by A1,Def5;
x in f"Y by A2,A3,Def13;
hence y in f.:(f"Y) by A3,Def12;
end;

theorem
f.:(f"Y) = Y /\ f.:(dom f)
proof f.:(f"Y) c= Y & f.:(f"(Y)) c= f.:(dom f) by Th145,RELAT_1:147;
hence f.:(f"Y) c= Y /\ f.:(dom f) by XBOOLE_1:19;
let y;
assume
A1:      y in Y /\ f.:(dom f);
then y in f.:(dom f) by XBOOLE_0:def 3;
then consider x such that
A2:    x in dom f and x in dom f and
A3:    y = f.x by Def12;
y in Y by A1,XBOOLE_0:def 3;
then x in f"Y by A2,A3,Def13;
hence y in f.:(f"Y) by A2,A3,Def12;
end;

theorem Th149:
f.:(X /\ f"Y) c= (f.:X) /\ Y
proof let y;
assume y in f.:(X /\ f"Y);
then consider x such that
A1:     x in dom f and
A2:     x in X /\ f"Y and
A3:     y = f.x by Def12;
x in X & x in f"Y by A2,XBOOLE_0:def 3;
then y in f.:X & y in Y by A1,A3,Def12,Def13;
hence y in (f.:X) /\ Y by XBOOLE_0:def 3;
end;

theorem
f.:(X /\ f"Y) = (f.:X) /\ Y
proof
thus f.:(X /\ f"Y)c=(f.:X) /\ Y by Th149;
let y;
assume y in (f.:X) /\ Y;
then A1:     y in f.:X & y in Y by XBOOLE_0:def 3;
then consider x such that
A2:    x in dom f and
A3:    x in X and
A4:    y = f.x by Def12;
x in f"Y by A1,A2,A4,Def13;
then x in X /\ f"Y by A3,XBOOLE_0:def 3;
hence y in f.:(X /\ f"Y) by A2,A4,Def12;
end;

theorem
X /\ R"Y c= R"(R.:X /\ Y)
proof let x;
assume
A1: x in X /\ R"Y;
then A2:  x in X by XBOOLE_0:def 3;
x in R"Y by A1,XBOOLE_0:def 3;
then consider Rx being set such that
A3: [x,Rx] in R and
A4: Rx in Y by RELAT_1:def 14;
Rx in R.:X by A2,A3,RELAT_1:def 13;
then Rx in R.:X /\ Y by A4,XBOOLE_0:def 3;
hence thesis by A3,RELAT_1:def 14;
end;

theorem
f is one-to-one implies f"(f.:X) c= X
proof assume
A1:   f is one-to-one;
let x;
assume x in f"(f.:X);
then A2:    f.x in f.:X & x in dom f by Def13;
then ex z st z in dom f & z in X & f.x = f.z by Def12;
hence thesis by A1,A2,Def8;
end;

theorem
(for X holds f"(f.:X) c= X) implies f is one-to-one
proof assume
A1: for X holds f"(f.:X) c= X;
given x1,x2 such that
A2:   x1 in dom f & x2 in dom f and
A3:   f.x1 = f.x2 and
A4:   x1 <> x2;
A5:   f.:{x1} = {f.x1} & f.:{x2} = {f.x2} by A2,Th117;
then f.:{x1} <> {} & f.:{x2} <> {} & f.x1 in rng f & f.x2 in rng f
by A2,Def5;
then f"(f.:{x1}) <> {} & f"(f.:{x2}) <> {} &
f"(f.:{x1}) c= {x1} & f"(f.:{x2}) c= {x2} by A1,A5,Th142;
then f"(f.:{x1}) = {x1} & f"(f.:{x2}) = {x2} by ZFMISC_1:39;
end;

theorem
f is one-to-one implies f.:X = (f")"X
proof assume
A1: f is one-to-one;
y in f.:X iff y in (f")"X
proof
thus y in f.:X implies y in (f")"X
proof assume y in f.:X;
then consider x such that
A2:       x in dom f and
A3:       x in X and
A4:       y = f.x by Def12;
y in rng f by A2,A4,Def5;
then y in dom(f") & (f").(f.x) = x by A1,A2,Th54;
hence y in (f")"X by A3,A4,Def13;
end;
assume y in (f")"X;
then A5:      y in dom(f") & (f").y in X by Def13;
then y in rng(f) by A1,Th54;
then consider x such that
A6:    x in dom(f) and
A7:    y = f.x by Def5;
(f").y = x by A1,A6,A7,Th56;
hence y in f.:X by A5,A6,A7,Def12;
end;
hence thesis by TARSKI:2;
end;

theorem
f is one-to-one implies f"Y = (f").:Y
proof assume
A1: f is one-to-one;
x in f"Y iff x in (f").:Y
proof
thus x in f"Y implies x in (f").:Y
proof assume x in f"Y;
then x in dom f & f.x in Y by Def13;
then x in dom f & f.x in rng(f) & f.x in Y by Def5;
then (f").(f.x) = x & f.x in dom(f") & f.x in Y by A1,Th54;
hence x in (f").:Y by Def12;
end;
assume x in (f").:Y;
then consider y such that
A2:    y in dom(f") and
A3:    y in Y and
A4:    x = (f").y by Def12;
dom(f") = rng f by A1,Th54;
then y = f.x & x in dom f by A1,A2,A4,Th54;
hence x in f"Y by A3,Def13;
end;
hence thesis by TARSKI:2;
end;

:: SUPLEMENT

theorem
Y = rng f & dom g = Y & dom h = Y & g*f = h*f implies g = h
proof assume that
A1:  Y = rng f and
A2:  dom g = Y and
A3:  dom h = Y and
A4:  g*f = h*f;
y in Y implies g.y = h.y
proof assume
y in Y;
then consider x such that
A5:  x in dom f and
A6:  y = f.x by A1,Def5;
(g*f).x = g.y & (h*f).x = h.y by A5,A6,Th23;
hence thesis by A4;
end;
hence thesis by A2,A3,Th9;
end;

theorem
f.:X1 c= f.:X2 & X1 c= dom f & f is one-to-one implies X1 c= X2
proof assume that
A1:  f.:X1 c= f.:X2 and
A2:  X1 c= dom f and
A3:  f is one-to-one;
let x;
assume
A4:  x in X1;
then f.x in f.:X1 by A2,Def12;
then ex x2 st x2 in dom f & x2 in X2 & f.x = f.x2 by A1,Def12;
hence thesis by A2,A3,A4,Def8;
end;

theorem
f"Y1 c= f"Y2 & Y1 c= rng f implies Y1 c= Y2
proof assume that
A1:   f"Y1 c= f"Y2 and
A2:   Y1 c= rng f;
let y;
assume
A3:  y in Y1;
then consider x such that
A4:   x in dom f and
A5:   y = f.x by A2,Def5;
x in f"Y1 by A3,A4,A5,Def13;
hence thesis by A1,A5,Def13;
end;

theorem
f is one-to-one iff for y ex x st f"{y} c= {x}
proof
(for y ex x st f"{y} c= {x}) iff
(for y st y in rng f ex x st f"{y} = {x})
proof
thus (for y ex x st f"{y} c= {x}) implies
(for y st y in rng f ex x st f"{y} = {x})
proof assume
A1:       for y ex x st f"{y} c= {x};
let y;
assume
A2:       y in rng f;
consider x such that
A3:       f"{y} c= {x} by A1;
take x;
consider x1 such that
A4:        x1 in dom f and
A5:        y = f.x1 by A2,Def5;
f.x1 in {y} by A5,TARSKI:def 1;
then f"{y} <> {} by A4,Def13;
hence thesis by A3,ZFMISC_1:39;
end;
assume
A6:     for y st y in rng f ex x st f"{y} = {x};
let y;
A7:    now assume y in rng f;
then consider x such that
A8:       f"{y} = {x} by A6;
take x;
thus f"{y} c= {x} by A8;
end;
now assume
A9:       not y in rng f;
consider x;
take x;
rng f misses {y} by A9,ZFMISC_1:56;
then f"{y} = {} by RELAT_1:173;
hence f"{y} c= {x} by XBOOLE_1:2;
end;
hence thesis by A7;
end;
hence thesis by Th144;
end;

theorem
rng R c= dom S implies R"X c= (R*S)"(S.:X)
proof assume
A1:  rng R c= dom S;
let x;
assume
x in R"X;
then consider Rx being set such that
A2: [x,Rx] in R and
A3: Rx in X by RELAT_1:def 14;
Rx in rng R by A2,RELAT_1:def 5;
then consider SRx being set such that
A4: [Rx,SRx] in S by A1,RELAT_1:def 4;
A5: SRx in S.:X by A3,A4,RELAT_1:def 13;
[x,SRx] in R*S by A2,A4,RELAT_1:def 8;
hence thesis by A5,RELAT_1:def 14;
end;
```