:: The Modification of a Function by a Function and the Iteration of the Composition of a Function
:: by Czes{\l}aw Byli\'nski
::
:: Copyright (c) 1990-2012 Association of Mizar Users

begin

Lm1: for x, x9, y, y9, x1, x19, y1, y19 being set st [[x,x9],[y,y9]] = [[x1,x19],[y1,y19]] holds
( x = x1 & y = y1 & x9 = x19 & y9 = y19 )

proof end;

theorem Th1: :: FUNCT_4:1
for Z being set st ( for z being set st z in Z holds
ex x, y being set st z = [x,y] ) holds
ex X, Y being set st Z c= [:X,Y:]
proof end;

theorem :: FUNCT_4:2
for g, f being Function holds g * f = (g | (rng f)) * f
proof end;

theorem :: FUNCT_4:3
for X, Y being set holds
( id X c= id Y iff X c= Y )
proof end;

theorem :: FUNCT_4:4
for X, Y, a being set st X c= Y holds
X --> a c= Y --> a
proof end;

theorem Th5: :: FUNCT_4:5
for X, a, Y, b being set st X --> a c= Y --> b holds
X c= Y
proof end;

theorem :: FUNCT_4:6
for X, a, Y, b being set st X <> {} & X --> a c= Y --> b holds
a = b
proof end;

theorem :: FUNCT_4:7
for x being set
for f being Function st x in dom f holds
x .--> (f . x) c= f
proof end;

:: Natural order on functions
theorem :: FUNCT_4:8
for Y, X being set
for f being Function holds (Y | f) | X c= f
proof end;

theorem :: FUNCT_4:9
for Y, X being set
for f, g being Function st f c= g holds
(Y | f) | X c= (Y |` g) | X
proof end;

definition
let f, g be Function;
func f +* g -> Function means :Def1: :: FUNCT_4:def 1
( dom it = (dom f) \/ (dom g) & ( for x being set st x in (dom f) \/ (dom g) holds
( ( x in dom g implies it . x = g . x ) & ( not x in dom g implies it . x = f . x ) ) ) );
existence
ex b1 being Function st
( dom b1 = (dom f) \/ (dom g) & ( for x being set st x in (dom f) \/ (dom g) holds
( ( x in dom g implies b1 . x = g . x ) & ( not x in dom g implies b1 . x = f . x ) ) ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = (dom f) \/ (dom g) & ( for x being set st x in (dom f) \/ (dom g) holds
( ( x in dom g implies b1 . x = g . x ) & ( not x in dom g implies b1 . x = f . x ) ) ) & dom b2 = (dom f) \/ (dom g) & ( for x being set st x in (dom f) \/ (dom g) holds
( ( x in dom g implies b2 . x = g . x ) & ( not x in dom g implies b2 . x = f . x ) ) ) holds
b1 = b2
proof end;
idempotence
for f being Function holds
( dom f = (dom f) \/ (dom f) & ( for x being set st x in (dom f) \/ (dom f) holds
( ( x in dom f implies f . x = f . x ) & ( not x in dom f implies f . x = f . x ) ) ) )
;
end;

:: deftheorem Def1 defines +* FUNCT_4:def 1 :
for f, g, b3 being Function holds
( b3 = f +* g iff ( dom b3 = (dom f) \/ (dom g) & ( for x being set st x in (dom f) \/ (dom g) holds
( ( x in dom g implies b3 . x = g . x ) & ( not x in dom g implies b3 . x = f . x ) ) ) ) );

theorem Th10: :: FUNCT_4:10
for f, g being Function holds
( dom f c= dom (f +* g) & dom g c= dom (f +* g) )
proof end;

theorem Th11: :: FUNCT_4:11
for x being set
for g, f being Function st not x in dom g holds
(f +* g) . x = f . x
proof end;

theorem Th12: :: FUNCT_4:12
for x being set
for f, g being Function holds
( x in dom (f +* g) iff ( x in dom f or x in dom g ) )
proof end;

theorem Th13: :: FUNCT_4:13
for x being set
for g, f being Function st x in dom g holds
(f +* g) . x = g . x
proof end;

theorem Th14: :: FUNCT_4:14
for f, g, h being Function holds (f +* g) +* h = f +* (g +* h)
proof end;

theorem Th15: :: FUNCT_4:15
for x being set
for f, g being Function st f tolerates g & x in dom f holds
(f +* g) . x = f . x
proof end;

theorem :: FUNCT_4:16
for x being set
for f, g being Function st dom f misses dom g & x in dom f holds
(f +* g) . x = f . x
proof end;

theorem Th17: :: FUNCT_4:17
for f, g being Function holds rng (f +* g) c= (rng f) \/ (rng g)
proof end;

theorem :: FUNCT_4:18
for g, f being Function holds rng g c= rng (f +* g)
proof end;

theorem Th19: :: FUNCT_4:19
for f, g being Function st dom f c= dom g holds
f +* g = g
proof end;

registration
let f be Function;
let g be empty Function;
reduce g +* f to f;
reducibility
g +* f = f
proof end;
reduce f +* g to f;
reducibility
f +* g = f
proof end;
end;

theorem Th20: :: FUNCT_4:20
for f being Function holds {} +* f = f ;

theorem Th21: :: FUNCT_4:21
for f being Function holds f +* {} = f ;

theorem :: FUNCT_4:22
for X, Y being set holds (id X) +* (id Y) = id (X \/ Y)
proof end;

theorem :: FUNCT_4:23
for f, g being Function holds (f +* g) | (dom g) = g
proof end;

theorem Th24: :: FUNCT_4:24
for f, g being Function holds (f +* g) | ((dom f) \ (dom g)) c= f
proof end;

theorem Th25: :: FUNCT_4:25
for g, f being Function holds g c= f +* g
proof end;

theorem :: FUNCT_4:26
for f, g, h being Function st f tolerates g +* h holds
f | ((dom f) \ (dom h)) tolerates g
proof end;

theorem Th27: :: FUNCT_4:27
for f, g, h being Function st f tolerates g +* h holds
f tolerates h
proof end;

theorem Th28: :: FUNCT_4:28
for f, g being Function holds
( f tolerates g iff f c= f +* g )
proof end;

theorem Th29: :: FUNCT_4:29
for f, g being Function holds f +* g c= f \/ g
proof end;

theorem Th30: :: FUNCT_4:30
for f, g being Function holds
( f tolerates g iff f \/ g = f +* g )
proof end;

theorem Th31: :: FUNCT_4:31
for f, g being Function st dom f misses dom g holds
f \/ g = f +* g
proof end;

theorem Th32: :: FUNCT_4:32
for f, g being Function st dom f misses dom g holds
f c= f +* g
proof end;

theorem :: FUNCT_4:33
for f, g being Function st dom f misses dom g holds
(f +* g) | (dom f) = f
proof end;

theorem Th34: :: FUNCT_4:34
for f, g being Function holds
( f tolerates g iff f +* g = g +* f )
proof end;

theorem Th35: :: FUNCT_4:35
for f, g being Function st dom f misses dom g holds
f +* g = g +* f
proof end;

theorem :: FUNCT_4:36
for X, Y being set
for f, g being PartFunc of X,Y st g is total holds
f +* g = g
proof end;

theorem Th37: :: FUNCT_4:37
for X, Y being set
for f, g being Function of X,Y st ( Y = {} implies X = {} ) holds
f +* g = g
proof end;

theorem :: FUNCT_4:38
for X being set
for f, g being Function of X,X holds f +* g = g by Th37;

theorem :: FUNCT_4:39
for X being set
for D being non empty set
for f, g being Function of X,D holds f +* g = g by Th37;

theorem :: FUNCT_4:40
for X, Y being set
for f, g being PartFunc of X,Y holds f +* g is PartFunc of X,Y
proof end;

:: The converse function whenever domain
definition
let f be Function;
func ~ f -> Function means :Def2: :: FUNCT_4:def 2
( ( for x being set holds
( x in dom it iff ex y, z being set st
( x = [z,y] & [y,z] in dom f ) ) ) & ( for y, z being set st [y,z] in dom f holds
it . (z,y) = f . (y,z) ) );
existence
ex b1 being Function st
( ( for x being set holds
( x in dom b1 iff ex y, z being set st
( x = [z,y] & [y,z] in dom f ) ) ) & ( for y, z being set st [y,z] in dom f holds
b1 . (z,y) = f . (y,z) ) )
proof end;
uniqueness
for b1, b2 being Function st ( for x being set holds
( x in dom b1 iff ex y, z being set st
( x = [z,y] & [y,z] in dom f ) ) ) & ( for y, z being set st [y,z] in dom f holds
b1 . (z,y) = f . (y,z) ) & ( for x being set holds
( x in dom b2 iff ex y, z being set st
( x = [z,y] & [y,z] in dom f ) ) ) & ( for y, z being set st [y,z] in dom f holds
b2 . (z,y) = f . (y,z) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines ~ FUNCT_4:def 2 :
for f, b2 being Function holds
( b2 = ~ f iff ( ( for x being set holds
( x in dom b2 iff ex y, z being set st
( x = [z,y] & [y,z] in dom f ) ) ) & ( for y, z being set st [y,z] in dom f holds
b2 . (z,y) = f . (y,z) ) ) );

theorem Th41: :: FUNCT_4:41
for f being Function holds rng (~ f) c= rng f
proof end;

theorem Th42: :: FUNCT_4:42
for x, y being set
for f being Function holds
( [x,y] in dom f iff [y,x] in dom (~ f) )
proof end;

theorem :: FUNCT_4:43
for y, x being set
for f being Function st [y,x] in dom (~ f) holds
(~ f) . (y,x) = f . (x,y)
proof end;

theorem :: FUNCT_4:44
for f being Function ex X, Y being set st dom (~ f) c= [:X,Y:]
proof end;

theorem Th45: :: FUNCT_4:45
for X, Y being set
for f being Function st dom f c= [:X,Y:] holds
dom (~ f) c= [:Y,X:]
proof end;

theorem Th46: :: FUNCT_4:46
for X, Y being set
for f being Function st dom f = [:X,Y:] holds
dom (~ f) = [:Y,X:]
proof end;

theorem Th47: :: FUNCT_4:47
for X, Y being set
for f being Function st dom f c= [:X,Y:] holds
rng (~ f) = rng f
proof end;

theorem :: FUNCT_4:48
for X, Y, Z being set
for f being PartFunc of [:X,Y:],Z holds ~ f is PartFunc of [:Y,X:],Z
proof end;

theorem Th49: :: FUNCT_4:49
for X, Y, Z being set
for f being Function of [:X,Y:],Z st Z <> {} holds
~ f is Function of [:Y,X:],Z
proof end;

theorem :: FUNCT_4:50
for X, Y being set
for D being non empty set
for f being Function of [:X,Y:],D holds ~ f is Function of [:Y,X:],D by Th49;

theorem Th51: :: FUNCT_4:51
for f being Function holds ~ (~ f) c= f
proof end;

theorem Th52: :: FUNCT_4:52
for X, Y being set
for f being Function st dom f c= [:X,Y:] holds
~ (~ f) = f
proof end;

theorem :: FUNCT_4:53
for X, Y, Z being set
for f being PartFunc of [:X,Y:],Z holds ~ (~ f) = f
proof end;

:: Product of 2'ary functions
definition
let f, g be Function;
func |:f,g:| -> Function means :Def3: :: FUNCT_4:def 3
( ( for z being set holds
( z in dom it iff ex x, y, x9, y9 being set st
( z = [[x,x9],[y,y9]] & [x,y] in dom f & [x9,y9] in dom g ) ) ) & ( for x, y, x9, y9 being set st [x,y] in dom f & [x9,y9] in dom g holds
it . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))] ) );
existence
ex b1 being Function st
( ( for z being set holds
( z in dom b1 iff ex x, y, x9, y9 being set st
( z = [[x,x9],[y,y9]] & [x,y] in dom f & [x9,y9] in dom g ) ) ) & ( for x, y, x9, y9 being set st [x,y] in dom f & [x9,y9] in dom g holds
b1 . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))] ) )
proof end;
uniqueness
for b1, b2 being Function st ( for z being set holds
( z in dom b1 iff ex x, y, x9, y9 being set st
( z = [[x,x9],[y,y9]] & [x,y] in dom f & [x9,y9] in dom g ) ) ) & ( for x, y, x9, y9 being set st [x,y] in dom f & [x9,y9] in dom g holds
b1 . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))] ) & ( for z being set holds
( z in dom b2 iff ex x, y, x9, y9 being set st
( z = [[x,x9],[y,y9]] & [x,y] in dom f & [x9,y9] in dom g ) ) ) & ( for x, y, x9, y9 being set st [x,y] in dom f & [x9,y9] in dom g holds
b2 . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines |: FUNCT_4:def 3 :
for f, g, b3 being Function holds
( b3 = |:f,g:| iff ( ( for z being set holds
( z in dom b3 iff ex x, y, x9, y9 being set st
( z = [[x,x9],[y,y9]] & [x,y] in dom f & [x9,y9] in dom g ) ) ) & ( for x, y, x9, y9 being set st [x,y] in dom f & [x9,y9] in dom g holds
b3 . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))] ) ) );

theorem Th54: :: FUNCT_4:54
for x, x9, y, y9 being set
for f, g being Function holds
( [[x,x9],[y,y9]] in dom |:f,g:| iff ( [x,y] in dom f & [x9,y9] in dom g ) )
proof end;

theorem :: FUNCT_4:55
for x, x9, y, y9 being set
for f, g being Function st [[x,x9],[y,y9]] in dom |:f,g:| holds
|:f,g:| . ([x,x9],[y,y9]) = [(f . (x,y)),(g . (x9,y9))]
proof end;

theorem Th56: :: FUNCT_4:56
for f, g being Function holds rng |:f,g:| c= [:(rng f),(rng g):]
proof end;

theorem Th57: :: FUNCT_4:57
for X, Y, X9, Y9 being set
for f, g being Function st dom f c= [:X,Y:] & dom g c= [:X9,Y9:] holds
dom |:f,g:| c= [:[:X,X9:],[:Y,Y9:]:]
proof end;

theorem Th58: :: FUNCT_4:58
for X, Y, X9, Y9 being set
for f, g being Function st dom f = [:X,Y:] & dom g = [:X9,Y9:] holds
dom |:f,g:| = [:[:X,X9:],[:Y,Y9:]:]
proof end;

theorem :: FUNCT_4:59
for X, Y, Z, X9, Y9, Z9 being set
for f being PartFunc of [:X,Y:],Z
for g being PartFunc of [:X9,Y9:],Z9 holds |:f,g:| is PartFunc of [:[:X,X9:],[:Y,Y9:]:],[:Z,Z9:]
proof end;

theorem Th60: :: FUNCT_4:60
for X, Y, Z, X9, Y9, Z9 being set
for f being Function of [:X,Y:],Z
for g being Function of [:X9,Y9:],Z9 st Z <> {} & Z9 <> {} holds
|:f,g:| is Function of [:[:X,X9:],[:Y,Y9:]:],[:Z,Z9:]
proof end;

theorem :: FUNCT_4:61
for X, Y, X9, Y9 being set
for D, D9 being non empty set
for f being Function of [:X,Y:],D
for g being Function of [:X9,Y9:],D9 holds |:f,g:| is Function of [:[:X,X9:],[:Y,Y9:]:],[:D,D9:] by Th60;

definition
let x, y, a, b be set ;
func (x,y) --> (a,b) -> set equals :: FUNCT_4:def 4
(x .--> a) +* (y .--> b);
correctness
coherence
(x .--> a) +* (y .--> b) is set
;
;
end;

:: deftheorem defines --> FUNCT_4:def 4 :
for x, y, a, b being set holds (x,y) --> (a,b) = (x .--> a) +* (y .--> b);

registration
let x, y, a, b be set ;
cluster (x,y) --> (a,b) -> Relation-like Function-like ;
coherence
( (x,y) --> (a,b) is Function-like & (x,y) --> (a,b) is Relation-like )
;
end;

theorem Th62: :: FUNCT_4:62
for x1, x2, y1, y2 being set holds
( dom ((x1,x2) --> (y1,y2)) = {x1,x2} & rng ((x1,x2) --> (y1,y2)) c= {y1,y2} )
proof end;

theorem Th63: :: FUNCT_4:63
for x1, x2, y1, y2 being set holds
( ( x1 <> x2 implies ((x1,x2) --> (y1,y2)) . x1 = y1 ) & ((x1,x2) --> (y1,y2)) . x2 = y2 )
proof end;

theorem :: FUNCT_4:64
for x1, x2, y1, y2 being set st x1 <> x2 holds
rng ((x1,x2) --> (y1,y2)) = {y1,y2}
proof end;

theorem :: FUNCT_4:65
for x1, x2, y being set holds (x1,x2) --> (y,y) = {x1,x2} --> y
proof end;

definition
let A be non empty set ;
let x1, x2 be set ;
let y1, y2 be Element of A;
:: original: -->
redefine func (x1,x2) --> (y1,y2) -> Function of {x1,x2},A;
coherence
(x1,x2) --> (y1,y2) is Function of {x1,x2},A
proof end;
end;

theorem :: FUNCT_4:66
for a, b, c, d being set
for g being Function st dom g = {a,b} & g . a = c & g . b = d holds
g = (a,b) --> (c,d)
proof end;

theorem Th67: :: FUNCT_4:67
for a, b, c, d being set st a <> c holds
(a,c) --> (b,d) = {[a,b],[c,d]}
proof end;

theorem :: FUNCT_4:68
for a, b, x, y, x9, y9 being set st a <> b & (a,b) --> (x,y) = (a,b) --> (x9,y9) holds
( x = x9 & y = y9 )
proof end;

begin

:: from CIRCCOMB
theorem :: FUNCT_4:69
for f1, f2, g1, g2 being Function st rng g1 c= dom f1 & rng g2 c= dom f2 & f1 tolerates f2 holds
(f1 +* f2) * (g1 +* g2) = (f1 * g1) +* (f2 * g2)
proof end;

theorem Th70: :: FUNCT_4:70
for f being Function
for A, B being set st dom f c= A \/ B holds
(f | A) +* (f | B) = f
proof end;

:: from AMI_5
theorem Th71: :: FUNCT_4:71
for p, q being Function
for A being set holds (p +* q) | A = (p | A) +* (q | A)
proof end;

theorem Th72: :: FUNCT_4:72
for f, g being Function
for A being set st A misses dom g holds
(f +* g) | A = f | A
proof end;

theorem :: FUNCT_4:73
for f, g being Function
for A being set st dom f misses A holds
(f +* g) | A = g | A
proof end;

theorem :: FUNCT_4:74
for f, g, h being Function st dom g = dom h holds
(f +* g) +* h = f +* h
proof end;

Lm2: for f, g being Function st f c= g holds
g +* f = g

proof end;

theorem :: FUNCT_4:75
for f being Function
for A being set holds f +* (f | A) = f by ;

theorem :: FUNCT_4:76
for f, g being Function
for B, C being set st dom f c= B & dom g c= C & B misses C holds
( (f +* g) | B = f & (f +* g) | C = g )
proof end;

theorem :: FUNCT_4:77
for p, q being Function
for A being set st dom p c= A & dom q misses A holds
(p +* q) | A = p
proof end;

theorem :: FUNCT_4:78
for f being Function
for A, B being set holds f | (A \/ B) = (f | A) +* (f | B)
proof end;

theorem :: FUNCT_4:79
for i, j, k being set holds (i,j) :-> k = [i,j] .--> k ;

theorem :: FUNCT_4:80
for i, j, k being set holds ((i,j) :-> k) . (i,j) = k by FUNCOP_1:71;

:: from AMI_1, 2006.03.14, A.T.
theorem :: FUNCT_4:81
for a, b, c being set holds (a,a) --> (b,c) = a .--> c
proof end;

theorem :: FUNCT_4:82
for x, y being set holds x .--> y = {[x,y]} by ZFMISC_1:29;

:: from SCMPDS_9, 2006.03.26, A.T.
theorem :: FUNCT_4:83
for f being Function
for a, b, c being set st a <> c holds
(f +* (a .--> b)) . c = f . c
proof end;

theorem :: FUNCT_4:84
for f being Function
for a, b, c, d being set st a <> b holds
( (f +* ((a,b) --> (c,d))) . a = c & (f +* ((a,b) --> (c,d))) . b = d )
proof end;

:: from AMI_3, 2007.06.14, A.T.
theorem Th85: :: FUNCT_4:85
for a, b being set
for f being Function st a in dom f & f . a = b holds
a .--> b c= f
proof end;

theorem :: FUNCT_4:86
for a, b, c, d being set
for f being Function st a in dom f & c in dom f & f . a = b & f . c = d holds
(a,c) --> (b,d) c= f
proof end;

:: from SCMFSA6A, 2007.07.23, A.T.
theorem Th87: :: FUNCT_4:87
for f, g, h being Function st f c= h & g c= h holds
f +* g c= h
proof end;

:: from SCMFSA6B, 2007.07.25, A.T.
theorem :: FUNCT_4:88
for f, g being Function
for A being set st A /\ (dom f) c= A /\ (dom g) holds
(f +* (g | A)) | A = g | A
proof end;

:: from SCMBSORT, 2007.07.26, A.T.
theorem :: FUNCT_4:89
for f being Function
for a, b, n, m being set holds ((f +* (a .--> b)) +* (m .--> n)) . m = n
proof end;

theorem :: FUNCT_4:90
for f being Function
for n, m being set holds ((f +* (n .--> m)) +* (m .--> n)) . n = m
proof end;

theorem :: FUNCT_4:91
for f being Function
for a, b, n, m, x being set st x <> m & x <> a holds
((f +* (a .--> b)) +* (m .--> n)) . x = f . x
proof end;

:: from KNASTER, 2007.010.28, A.T.
theorem :: FUNCT_4:92
for f, g being Function st f is one-to-one & g is one-to-one & rng f misses rng g holds
f +* g is one-to-one
proof end;

registration
let f, g be Function;
reduce (f +* g) +* g to f +* g;
reducibility
(f +* g) +* g = f +* g
proof end;
end;

:: from SCMFSA_9, 2008.03.04, A.T.
theorem :: FUNCT_4:93
for f, g being Function holds (f +* g) +* g = f +* g ;

theorem :: FUNCT_4:94
for f, g, h being Function
for D being set st (f +* g) | D = h | D holds
(h +* g) | D = (f +* g) | D
proof end;

theorem :: FUNCT_4:95
for f, g, h being Function
for D being set st f | D = h | D holds
(h +* g) | D = (f +* g) | D
proof end;

:: missing, 2008.03.20, A.T.
theorem Th96: :: FUNCT_4:96
for x being set holds x .--> x = id {x}
proof end;

theorem Th97: :: FUNCT_4:97
for f, g being Function st f c= g holds
f +* g = g
proof end;

theorem Th98: :: FUNCT_4:98
for f, g being Function st f c= g holds
g +* f = g
proof end;

begin

definition
let f be Function;
let x, y be set ;
func f +~ (x,y) -> set equals :: FUNCT_4:def 5
f +* ((x .--> y) * f);
coherence
f +* ((x .--> y) * f) is set
;
end;

:: deftheorem defines +~ FUNCT_4:def 5 :
for f being Function
for x, y being set holds f +~ (x,y) = f +* ((x .--> y) * f);

registration
let f be Function;
let x, y be set ;
cluster f +~ (x,y) -> Relation-like Function-like ;
coherence
( f +~ (x,y) is Relation-like & f +~ (x,y) is Function-like )
;
end;

theorem Th99: :: FUNCT_4:99
for f being Function
for x, y being set holds dom (f +~ (x,y)) = dom f
proof end;

theorem Th100: :: FUNCT_4:100
for f being Function
for x, y being set st x <> y holds
not x in rng (f +~ (x,y))
proof end;

theorem :: FUNCT_4:101
for f being Function
for x, y being set st x in rng f holds
y in rng (f +~ (x,y))
proof end;

theorem Th102: :: FUNCT_4:102
for f being Function
for x being set holds f +~ (x,x) = f
proof end;

theorem Th103: :: FUNCT_4:103
for f being Function
for x, y being set st not x in rng f holds
f +~ (x,y) = f
proof end;

theorem :: FUNCT_4:104
for f being Function
for x, y being set holds rng (f +~ (x,y)) c= ((rng f) \ {x}) \/ {y}
proof end;

theorem :: FUNCT_4:105
for z being set
for f being Function
for x, y being set st f . z <> x holds
(f +~ (x,y)) . z = f . z
proof end;

theorem :: FUNCT_4:106
for z being set
for f being Function
for x, y being set st z in dom f & f . z = x holds
(f +~ (x,y)) . z = y
proof end;

:: missing, 2008.04.06, A.T.
theorem :: FUNCT_4:107
for f being Function
for x, y being set st not x in dom f holds
f c= f +* (x .--> y)
proof end;

theorem :: FUNCT_4:108
for X, Y being set
for f being PartFunc of X,Y
for x, y being set st x in X & y in Y holds
f +* (x .--> y) is PartFunc of X,Y
proof end;

:: from FINSEQ_1, 2008.05.06, A.T.
registration
let f be Function;
let g be non empty Function;
cluster f +* g -> non empty ;
coherence
not f +* g is empty
proof end;
cluster g +* f -> non empty ;
coherence
not g +* f is empty
proof end;
end;

:: from CIRCCOMB, 2009.01.26, A.T.
registration
let f, g be non-empty Function;
cluster f +* g -> non-empty ;
coherence
f +* g is non-empty
proof end;
end;

definition
let X, Y be set ;
let f, g be PartFunc of X,Y;
:: original: +*
redefine func f +* g -> PartFunc of X,Y;
coherence
f +* g is PartFunc of X,Y
proof end;
end;

:: 2009.08.31, A.T.
theorem :: FUNCT_4:109
for z, x, y being set holds dom ((x --> y) +* (x .--> z)) = succ x
proof end;

theorem :: FUNCT_4:110
for z, x, y being set holds dom (((x --> y) +* (x .--> z)) +* ((succ x) .--> z)) = succ (succ x)
proof end;

:: 2009.09.08, A.T.
registration
let f, g be Function-yielding Function;
coherence
proof end;
end;

:: 2009.10.03, A.T.
registration
let I be set ;
let f, g be I -defined Function;
cluster f +* g -> I -defined ;
coherence
f +* g is I -defined
proof end;
end;

registration
let I be set ;
let f be I -defined total Function;
let g be I -defined Function;
cluster f +* g -> I -defined total for I -defined Function;
coherence
for b1 being I -defined Function st b1 = f +* g holds
b1 is total
proof end;
cluster g +* f -> I -defined total for I -defined Function;
coherence
for b1 being I -defined Function st b1 = g +* f holds
b1 is total
proof end;
end;

registration
let I be set ;
let g, h be I -valued Function;
cluster g +* h -> I -valued ;
coherence
g +* h is I -valued
proof end;
end;

registration
let f be Function;
let g, h be f -compatible Function;
cluster g +* h -> f -compatible ;
coherence
g +* h is f -compatible
proof end;
end;

:: missing, 2010.01.6, A.T
theorem :: FUNCT_4:111
for f being Function
for A being set holds (f | A) +* f = f by ;

:: from AMISTD_3, 2010.01.10, A.T
theorem :: FUNCT_4:112
for x, y being set
for R being Relation st dom R = {x} & rng R = {y} holds
R = x .--> y
proof end;

theorem :: FUNCT_4:113
for f being Function
for x, y being set holds (f +* (x .--> y)) . x = y
proof end;

theorem :: FUNCT_4:114
for z1, z2 being set
for f being Function
for x being set holds (f +* (x .--> z1)) +* (x .--> z2) = f +* (x .--> z2)
proof end;

registration
let A be non empty set ;
let a, b be Element of A;
let x, y be set ;
cluster (a,b) --> (x,y) -> A -defined ;
coherence
(a,b) --> (x,y) is A -defined
;
end;

theorem :: FUNCT_4:115
for g, h, f being Function st dom g misses dom h holds
((f +* g) +* h) +* g = (f +* g) +* h
proof end;

theorem :: FUNCT_4:116
for f, h, g being Function st dom f misses dom h & f c= g +* h holds
f c= g
proof end;

theorem Th117: :: FUNCT_4:117
for f, h, g being Function st dom f misses dom h & f c= g holds
f c= g +* h
proof end;

theorem :: FUNCT_4:118
for g, h, f being Function st dom g misses dom h holds
(f +* g) +* h = (f +* h) +* g
proof end;

theorem :: FUNCT_4:119
for f, g being Function st dom f misses dom g holds
(f +* g) \ g = f
proof end;

theorem :: FUNCT_4:120
for f, g being Function st dom f misses dom g holds
f \ g = f
proof end;

theorem :: FUNCT_4:121
for g, h, f being Function st dom g misses dom h holds
(f \ g) +* h = (f +* h) \ g
proof end;

theorem :: FUNCT_4:122
for f1, f2, g1, g2 being Function st f1 c= g1 & f2 c= g2 & dom f1 misses dom g2 holds
f1 +* f2 c= g1 +* g2
proof end;

theorem Th123: :: FUNCT_4:123
for f, g, h being Function st f c= g holds
f +* h c= g +* h
proof end;

theorem :: FUNCT_4:124
for f, g, h being Function st f c= g & dom f misses dom h holds
f c= g +* h
proof end;

registration
let x, y be set ;
cluster x .--> y -> trivial ;
coherence
x .--> y is trivial
proof end;
end;

:: from CIRCCOMB, 2011.04.19, A.T
theorem :: FUNCT_4:125
for f, g, h being Function st f tolerates g & g tolerates h & h tolerates f holds
f +* g tolerates h
proof end;