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


begin

Lm1: for x, y, Z being set st [x,y] in Z holds
( x in union (union Z) & y in union (union Z) )
proof end;

Lm2: 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
canceled;

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

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

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

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

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

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

theorem :: FUNCT_4:10
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 Th11: :: FUNCT_4:11
for f, g being Function holds
( dom f c= dom (f +* g) & dom g c= dom (f +* g) )
proof end;

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

theorem Th13: :: FUNCT_4:13
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 Th14: :: FUNCT_4:14
for x being set
for g, f being Function st x in dom g holds
(f +* g) . x = g . x
proof end;

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

theorem Th16: :: FUNCT_4:16
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:17
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 Th18: :: FUNCT_4:18
for f, g being Function holds rng (f +* g) c= (rng f) \/ (rng g)
proof end;

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

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

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

theorem Th22: :: FUNCT_4:22
for f being Function holds f +* {} = f
proof end;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

theorem Th38: :: FUNCT_4:38
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:39
for X being set
for f, g being Function of X,X holds f +* g = g by Th38;

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

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

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 Th42: :: FUNCT_4:42
for f being Function holds rng (~ f) c= rng f
proof end;

theorem Th43: :: FUNCT_4:43
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:44
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:45
for f being Function ex X, Y being set st dom (~ f) c= [:X,Y:]
proof end;

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

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

theorem Th48: :: FUNCT_4:48
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:49
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 Th50: :: FUNCT_4:50
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:51
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 Th50;

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

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

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

theorem :: FUNCT_4:55
canceled;

theorem :: FUNCT_4:56
canceled;

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 Th57: :: FUNCT_4:57
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:58
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 Th59: :: FUNCT_4:59
for f, g being Function holds rng |:f,g:| c= [:(rng f),(rng g):]
proof end;

theorem Th60: :: FUNCT_4:60
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 Th61: :: FUNCT_4:61
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:62
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 Th63: :: FUNCT_4:63
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:64
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 Th63;

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 Th65: :: FUNCT_4:65
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 Th66: :: FUNCT_4:66
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:67
for x1, x2, y1, y2 being set st x1 <> x2 holds
rng ((x1,x2) --> (y1,y2)) = {y1,y2}
proof end;

theorem :: FUNCT_4:68
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:69
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 :: FUNCT_4:70
canceled;

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

theorem :: FUNCT_4:72
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

theorem :: FUNCT_4:73
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 Th74: :: FUNCT_4:74
for f being Function
for A, B being set st dom f c= A \/ B holds
(f | A) +* (f | B) = f
proof end;

theorem Th75: :: FUNCT_4:75
for p, q being Function
for A being set holds (p +* q) | A = (p | A) +* (q | A)
proof end;

theorem Th76: :: FUNCT_4:76
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:77
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:78
for f, g, h being Function st dom g = dom h holds
(f +* g) +* h = f +* h
proof end;

theorem Th79: :: FUNCT_4:79
for f, g being Function st f c= g holds
( f +* g = g & g +* f = g )
proof end;

theorem :: FUNCT_4:80
for f being Function
for A being set holds f +* (f | A) = f
proof end;

theorem :: FUNCT_4:81
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:82
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:83
for f being Function
for A, B being set holds f | (A \/ B) = (f | A) +* (f | B)
proof end;

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

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

theorem :: FUNCT_4:86
for a, b, c being set holds (a,a) --> (b,c) = a .--> c
proof end;

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

theorem :: FUNCT_4:88
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:89
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;

theorem Th90: :: FUNCT_4:90
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:91
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;

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

theorem :: FUNCT_4:93
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;

theorem :: FUNCT_4:94
canceled;

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

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

theorem :: FUNCT_4:97
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;

theorem :: FUNCT_4:98
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;

theorem Th99: :: FUNCT_4:99
for f, g being Function holds (f +* g) +* g = f +* g
proof end;

theorem :: FUNCT_4:100
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:101
for f, g, h being Function
for D being set st f | D = h | D holds
(h +* g) | D = (f +* g) | D
proof end;

theorem Th102: :: FUNCT_4:102
for x being set holds x .--> x = id {x}
proof end;

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

theorem Th104: :: FUNCT_4:104
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 Th105: :: FUNCT_4:105
for f being Function
for x, y being set holds dom (f +~ (x,y)) = dom f
proof end;

theorem Th106: :: FUNCT_4:106
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:107
for f being Function
for x, y being set st x in rng f holds
y in rng (f +~ (x,y))
proof end;

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

theorem Th109: :: FUNCT_4:109
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:110
for f being Function
for x, y being set holds rng (f +~ (x,y)) c= ((rng f) \ {x}) \/ {y}
proof end;

theorem :: FUNCT_4:111
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:112
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;

theorem :: FUNCT_4:113
canceled;

theorem :: FUNCT_4:114
canceled;

theorem :: FUNCT_4:115
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:116
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;

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;

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;

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

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

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

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 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 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;

theorem :: FUNCT_4:119
for f being Function
for A being set holds (f | A) +* f = f
proof end;

theorem :: FUNCT_4:120
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:121
for f being Function
for x, y being set holds (f +* (x .--> y)) . x = y
proof end;

theorem :: FUNCT_4:122
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:123
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:124
for f, h, g being Function st dom f misses dom h & f c= g +* h holds
f c= g
proof end;

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