:: FUNCT_3 semantic presentation

theorem Th1: :: FUNCT_3:1
for b1, b2 being set st b1 c= b2 holds
id b1 = (id b2) | b1
proof end;

theorem Th2: :: FUNCT_3:2
for b1 being set
for b2, b3 being Function st b1 c= dom (b3 * b2) holds
b2 .: b1 c= dom b3
proof end;

theorem Th3: :: FUNCT_3:3
for b1 being set
for b2, b3 being Function st b1 c= dom b2 & b2 .: b1 c= dom b3 holds
b1 c= dom (b3 * b2)
proof end;

theorem Th4: :: FUNCT_3:4
for b1 being set
for b2, b3 being Function st b1 c= rng (b3 * b2) & b3 is one-to-one holds
b3 " b1 c= rng b2
proof end;

theorem Th5: :: FUNCT_3:5
for b1 being set
for b2, b3 being Function st b1 c= rng b3 & b3 " b1 c= rng b2 holds
b1 c= rng (b3 * b2)
proof end;

scheme :: FUNCT_3:sch 1
s1{ F1() -> set , F2() -> set , P1[ set , set , set ] } :
ex b1 being Function st
( dom b1 = [:F1(),F2():] & ( for b2, b3 being set st b2 in F1() & b3 in F2() holds
P1[b2,b3,b1 . [b2,b3]] ) )
provided
E6: for b1, b2, b3, b4 being set st b1 in F1() & b2 in F2() & P1[b1,b2,b3] & P1[b1,b2,b4] holds
b3 = b4 and
E7: for b1, b2 being set st b1 in F1() & b2 in F2() holds
ex b3 being set st P1[b1,b2,b3]
proof end;

scheme :: FUNCT_3:sch 2
s2{ F1() -> set , F2() -> set , F3( set , set ) -> set } :
ex b1 being Function st
( dom b1 = [:F1(),F2():] & ( for b2, b3 being set st b2 in F1() & b3 in F2() holds
b1 . [b2,b3] = F3(b2,b3) ) )
proof end;

theorem Th6: :: FUNCT_3:6
for b1, b2 being set
for b3, b4 being Function st dom b3 = [:b1,b2:] & dom b4 = [:b1,b2:] & ( for b5, b6 being set st b5 in b1 & b6 in b2 holds
b3 . [b5,b6] = b4 . [b5,b6] ) holds
b3 = b4
proof end;

definition
let c1 be Function;
func .: c1 -> Function means :Def1: :: FUNCT_3:def 1
( dom a2 = bool (dom a1) & ( for b1 being set st b1 c= dom a1 holds
a2 . b1 = a1 .: b1 ) );
existence
ex b1 being Function st
( dom b1 = bool (dom c1) & ( for b2 being set st b2 c= dom c1 holds
b1 . b2 = c1 .: b2 ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = bool (dom c1) & ( for b3 being set st b3 c= dom c1 holds
b1 . b3 = c1 .: b3 ) & dom b2 = bool (dom c1) & ( for b3 being set st b3 c= dom c1 holds
b2 . b3 = c1 .: b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines .: FUNCT_3:def 1 :
for b1, b2 being Function holds
( b2 = .: b1 iff ( dom b2 = bool (dom b1) & ( for b3 being set st b3 c= dom b1 holds
b2 . b3 = b1 .: b3 ) ) );

theorem Th7: :: FUNCT_3:7
canceled;

theorem Th8: :: FUNCT_3:8
for b1 being set
for b2 being Function st b1 in dom (.: b2) holds
(.: b2) . b1 = b2 .: b1
proof end;

theorem Th9: :: FUNCT_3:9
for b1 being Function holds (.: b1) . {} = {}
proof end;

theorem Th10: :: FUNCT_3:10
for b1 being Function holds rng (.: b1) c= bool (rng b1)
proof end;

theorem Th11: :: FUNCT_3:11
canceled;

theorem Th12: :: FUNCT_3:12
for b1 being set
for b2 being Function holds (.: b2) .: b1 c= bool (rng b2)
proof end;

theorem Th13: :: FUNCT_3:13
for b1 being set
for b2 being Function holds (.: b2) " b1 c= bool (dom b2)
proof end;

theorem Th14: :: FUNCT_3:14
for b1, b2 being set
for b3 being non empty set
for b4 being Function of b1,b3 holds (.: b4) " b2 c= bool b1
proof end;

theorem Th15: :: FUNCT_3:15
for b1 being set
for b2 being Function holds union ((.: b2) .: b1) c= b2 .: (union b1)
proof end;

theorem Th16: :: FUNCT_3:16
for b1 being set
for b2 being Function st b1 c= bool (dom b2) holds
b2 .: (union b1) = union ((.: b2) .: b1)
proof end;

theorem Th17: :: FUNCT_3:17
for b1, b2 being set
for b3 being non empty set
for b4 being Function of b1,b3 st b2 c= bool b1 holds
b4 .: (union b2) = union ((.: b4) .: b2)
proof end;

theorem Th18: :: FUNCT_3:18
for b1 being set
for b2 being Function holds union ((.: b2) " b1) c= b2 " (union b1)
proof end;

theorem Th19: :: FUNCT_3:19
for b1 being set
for b2 being Function st b1 c= bool (rng b2) holds
b2 " (union b1) = union ((.: b2) " b1)
proof end;

theorem Th20: :: FUNCT_3:20
for b1, b2 being Function holds .: (b2 * b1) = (.: b2) * (.: b1)
proof end;

theorem Th21: :: FUNCT_3:21
for b1 being Function holds .: b1 is Function of bool (dom b1), bool (rng b1)
proof end;

theorem Th22: :: FUNCT_3:22
for b1, b2 being set
for b3 being Function of b1,b2 st ( b2 = {} implies b1 = {} ) holds
.: b3 is Function of bool b1, bool b2
proof end;

definition
let c1 be set ;
let c2 be non empty set ;
let c3 be Function of c1,c2;
redefine func .: as .: c3 -> Function of bool a1, bool a2;
coherence
.: c3 is Function of bool c1, bool c2
by Th22;
end;

definition
let c1 be Function;
func " c1 -> Function means :Def2: :: FUNCT_3:def 2
( dom a2 = bool (rng a1) & ( for b1 being set st b1 c= rng a1 holds
a2 . b1 = a1 " b1 ) );
existence
ex b1 being Function st
( dom b1 = bool (rng c1) & ( for b2 being set st b2 c= rng c1 holds
b1 . b2 = c1 " b2 ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = bool (rng c1) & ( for b3 being set st b3 c= rng c1 holds
b1 . b3 = c1 " b3 ) & dom b2 = bool (rng c1) & ( for b3 being set st b3 c= rng c1 holds
b2 . b3 = c1 " b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines " FUNCT_3:def 2 :
for b1, b2 being Function holds
( b2 = " b1 iff ( dom b2 = bool (rng b1) & ( for b3 being set st b3 c= rng b1 holds
b2 . b3 = b1 " b3 ) ) );

theorem Th23: :: FUNCT_3:23
canceled;

theorem Th24: :: FUNCT_3:24
for b1 being set
for b2 being Function st b1 in dom (" b2) holds
(" b2) . b1 = b2 " b1
proof end;

theorem Th25: :: FUNCT_3:25
for b1 being Function holds rng (" b1) c= bool (dom b1)
proof end;

theorem Th26: :: FUNCT_3:26
canceled;

theorem Th27: :: FUNCT_3:27
for b1 being set
for b2 being Function holds (" b2) .: b1 c= bool (dom b2)
proof end;

theorem Th28: :: FUNCT_3:28
for b1 being set
for b2 being Function holds (" b2) " b1 c= bool (rng b2)
proof end;

theorem Th29: :: FUNCT_3:29
for b1 being set
for b2 being Function holds union ((" b2) .: b1) c= b2 " (union b1)
proof end;

theorem Th30: :: FUNCT_3:30
for b1 being set
for b2 being Function st b1 c= bool (rng b2) holds
union ((" b2) .: b1) = b2 " (union b1)
proof end;

theorem Th31: :: FUNCT_3:31
for b1 being set
for b2 being Function holds union ((" b2) " b1) c= b2 .: (union b1)
proof end;

theorem Th32: :: FUNCT_3:32
for b1 being set
for b2 being Function st b1 c= bool (dom b2) & b2 is one-to-one holds
union ((" b2) " b1) = b2 .: (union b1)
proof end;

theorem Th33: :: FUNCT_3:33
for b1 being set
for b2 being Function holds (" b2) .: b1 c= (.: b2) " b1
proof end;

theorem Th34: :: FUNCT_3:34
for b1 being set
for b2 being Function st b2 is one-to-one holds
(" b2) .: b1 = (.: b2) " b1
proof end;

theorem Th35: :: FUNCT_3:35
for b1 being Function
for b2 being set st b2 c= bool (dom b1) holds
(" b1) " b2 c= (.: b1) .: b2
proof end;

theorem Th36: :: FUNCT_3:36
for b1 being Function
for b2 being set st b1 is one-to-one holds
(.: b1) .: b2 c= (" b1) " b2
proof end;

theorem Th37: :: FUNCT_3:37
for b1 being Function
for b2 being set st b1 is one-to-one & b2 c= bool (dom b1) holds
(" b1) " b2 = (.: b1) .: b2
proof end;

theorem Th38: :: FUNCT_3:38
for b1, b2 being Function st b2 is one-to-one holds
" (b2 * b1) = (" b1) * (" b2)
proof end;

theorem Th39: :: FUNCT_3:39
for b1 being Function holds " b1 is Function of bool (rng b1), bool (dom b1)
proof end;

definition
let c1, c2 be set ;
func chi c1,c2 -> Function means :Def3: :: FUNCT_3:def 3
( dom a3 = a2 & ( for b1 being set st b1 in a2 holds
( ( b1 in a1 implies a3 . b1 = 1 ) & ( not b1 in a1 implies a3 . b1 = 0 ) ) ) );
existence
ex b1 being Function st
( dom b1 = c2 & ( for b2 being set st b2 in c2 holds
( ( b2 in c1 implies b1 . b2 = 1 ) & ( not b2 in c1 implies b1 . b2 = 0 ) ) ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = c2 & ( for b3 being set st b3 in c2 holds
( ( b3 in c1 implies b1 . b3 = 1 ) & ( not b3 in c1 implies b1 . b3 = 0 ) ) ) & dom b2 = c2 & ( for b3 being set st b3 in c2 holds
( ( b3 in c1 implies b2 . b3 = 1 ) & ( not b3 in c1 implies b2 . b3 = 0 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines chi FUNCT_3:def 3 :
for b1, b2 being set
for b3 being Function holds
( b3 = chi b1,b2 iff ( dom b3 = b2 & ( for b4 being set st b4 in b2 holds
( ( b4 in b1 implies b3 . b4 = 1 ) & ( not b4 in b1 implies b3 . b4 = 0 ) ) ) ) );

theorem Th40: :: FUNCT_3:40
canceled;

theorem Th41: :: FUNCT_3:41
canceled;

theorem Th42: :: FUNCT_3:42
for b1, b2, b3 being set st (chi b2,b3) . b1 = 1 holds
b1 in b2
proof end;

theorem Th43: :: FUNCT_3:43
for b1, b2, b3 being set st b1 in b2 \ b3 holds
(chi b3,b2) . b1 = 0
proof end;

theorem Th44: :: FUNCT_3:44
canceled;

theorem Th45: :: FUNCT_3:45
canceled;

theorem Th46: :: FUNCT_3:46
canceled;

theorem Th47: :: FUNCT_3:47
for b1, b2, b3 being set st b1 c= b2 & b3 c= b2 & chi b1,b2 = chi b3,b2 holds
b1 = b3
proof end;

theorem Th48: :: FUNCT_3:48
for b1, b2 being set holds rng (chi b1,b2) c= {0,1}
proof end;

theorem Th49: :: FUNCT_3:49
for b1 being set
for b2 being Function of b1,{0,1} holds b2 = chi (b2 " {1}),b1
proof end;

definition
let c1, c2 be set ;
redefine func chi as chi c1,c2 -> Function of a2,{0,1};
coherence
chi c1,c2 is Function of c2,{0,1}
proof end;
end;

notation
let c1 be set ;
let c2 be Subset of c1;
synonym incl c2 for id c1;
end;

definition
let c1 be set ;
let c2 be Subset of c1;
redefine func incl as incl c2 -> Function of a2,a1;
coherence
incl is Function of c2,c1
proof end;
end;

theorem Th50: :: FUNCT_3:50
canceled;

theorem Th51: :: FUNCT_3:51
canceled;

theorem Th52: :: FUNCT_3:52
canceled;

theorem Th53: :: FUNCT_3:53
for b1 being set
for b2 being Subset of b1 holds incl b2 = (id b1) | b2 by Th1;

theorem Th54: :: FUNCT_3:54
canceled;

theorem Th55: :: FUNCT_3:55
canceled;

theorem Th56: :: FUNCT_3:56
for b1, b2 being set
for b3 being Subset of b2 st b1 in b3 holds
(incl b3) . b1 in b2
proof end;

definition
let c1, c2 be set ;
canceled;
func pr1 c1,c2 -> Function means :Def5: :: FUNCT_3:def 5
( dom a3 = [:a1,a2:] & ( for b1, b2 being set st b1 in a1 & b2 in a2 holds
a3 . [b1,b2] = b1 ) );
existence
ex b1 being Function st
( dom b1 = [:c1,c2:] & ( for b2, b3 being set st b2 in c1 & b3 in c2 holds
b1 . [b2,b3] = b2 ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = [:c1,c2:] & ( for b3, b4 being set st b3 in c1 & b4 in c2 holds
b1 . [b3,b4] = b3 ) & dom b2 = [:c1,c2:] & ( for b3, b4 being set st b3 in c1 & b4 in c2 holds
b2 . [b3,b4] = b3 ) holds
b1 = b2
proof end;
func pr2 c1,c2 -> Function means :Def6: :: FUNCT_3:def 6
( dom a3 = [:a1,a2:] & ( for b1, b2 being set st b1 in a1 & b2 in a2 holds
a3 . [b1,b2] = b2 ) );
existence
ex b1 being Function st
( dom b1 = [:c1,c2:] & ( for b2, b3 being set st b2 in c1 & b3 in c2 holds
b1 . [b2,b3] = b3 ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = [:c1,c2:] & ( for b3, b4 being set st b3 in c1 & b4 in c2 holds
b1 . [b3,b4] = b4 ) & dom b2 = [:c1,c2:] & ( for b3, b4 being set st b3 in c1 & b4 in c2 holds
b2 . [b3,b4] = b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 FUNCT_3:def 4 :
canceled;

:: deftheorem Def5 defines pr1 FUNCT_3:def 5 :
for b1, b2 being set
for b3 being Function holds
( b3 = pr1 b1,b2 iff ( dom b3 = [:b1,b2:] & ( for b4, b5 being set st b4 in b1 & b5 in b2 holds
b3 . [b4,b5] = b4 ) ) );

:: deftheorem Def6 defines pr2 FUNCT_3:def 6 :
for b1, b2 being set
for b3 being Function holds
( b3 = pr2 b1,b2 iff ( dom b3 = [:b1,b2:] & ( for b4, b5 being set st b4 in b1 & b5 in b2 holds
b3 . [b4,b5] = b5 ) ) );

theorem Th57: :: FUNCT_3:57
canceled;

theorem Th58: :: FUNCT_3:58
canceled;

theorem Th59: :: FUNCT_3:59
for b1, b2 being set holds rng (pr1 b1,b2) c= b1
proof end;

theorem Th60: :: FUNCT_3:60
for b1, b2 being set st b1 <> {} holds
rng (pr1 b2,b1) = b2
proof end;

theorem Th61: :: FUNCT_3:61
for b1, b2 being set holds rng (pr2 b1,b2) c= b2
proof end;

theorem Th62: :: FUNCT_3:62
for b1, b2 being set st b1 <> {} holds
rng (pr2 b1,b2) = b2
proof end;

definition
let c1, c2 be set ;
redefine func pr1 as pr1 c1,c2 -> Function of [:a1,a2:],a1;
coherence
pr1 c1,c2 is Function of [:c1,c2:],c1
proof end;
redefine func pr2 as pr2 c1,c2 -> Function of [:a1,a2:],a2;
coherence
pr2 c1,c2 is Function of [:c1,c2:],c2
proof end;
end;

definition
let c1 be set ;
func delta c1 -> Function means :Def7: :: FUNCT_3:def 7
( dom a2 = a1 & ( for b1 being set st b1 in a1 holds
a2 . b1 = [b1,b1] ) );
existence
ex b1 being Function st
( dom b1 = c1 & ( for b2 being set st b2 in c1 holds
b1 . b2 = [b2,b2] ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = c1 & ( for b3 being set st b3 in c1 holds
b1 . b3 = [b3,b3] ) & dom b2 = c1 & ( for b3 being set st b3 in c1 holds
b2 . b3 = [b3,b3] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def7 defines delta FUNCT_3:def 7 :
for b1 being set
for b2 being Function holds
( b2 = delta b1 iff ( dom b2 = b1 & ( for b3 being set st b3 in b1 holds
b2 . b3 = [b3,b3] ) ) );

theorem Th63: :: FUNCT_3:63
canceled;

theorem Th64: :: FUNCT_3:64
canceled;

theorem Th65: :: FUNCT_3:65
canceled;

theorem Th66: :: FUNCT_3:66
for b1 being set holds rng (delta b1) c= [:b1,b1:]
proof end;

definition
let c1 be set ;
redefine func delta as delta c1 -> Function of a1,[:a1,a1:];
coherence
delta c1 is Function of c1,[:c1,c1:]
proof end;
end;

definition
let c1, c2 be Function;
func <:c1,c2:> -> Function means :Def8: :: FUNCT_3:def 8
( dom a3 = (dom a1) /\ (dom a2) & ( for b1 being set st b1 in dom a3 holds
a3 . b1 = [(a1 . b1),(a2 . b1)] ) );
existence
ex b1 being Function st
( dom b1 = (dom c1) /\ (dom c2) & ( for b2 being set st b2 in dom b1 holds
b1 . b2 = [(c1 . b2),(c2 . b2)] ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = (dom c1) /\ (dom c2) & ( for b3 being set st b3 in dom b1 holds
b1 . b3 = [(c1 . b3),(c2 . b3)] ) & dom b2 = (dom c1) /\ (dom c2) & ( for b3 being set st b3 in dom b2 holds
b2 . b3 = [(c1 . b3),(c2 . b3)] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines <: FUNCT_3:def 8 :
for b1, b2, b3 being Function holds
( b3 = <:b1,b2:> iff ( dom b3 = (dom b1) /\ (dom b2) & ( for b4 being set st b4 in dom b3 holds
b3 . b4 = [(b1 . b4),(b2 . b4)] ) ) );

theorem Th67: :: FUNCT_3:67
canceled;

theorem Th68: :: FUNCT_3:68
for b1 being set
for b2, b3 being Function st b1 in (dom b2) /\ (dom b3) holds
<:b2,b3:> . b1 = [(b2 . b1),(b3 . b1)]
proof end;

theorem Th69: :: FUNCT_3:69
for b1, b2 being set
for b3, b4 being Function st dom b3 = b2 & dom b4 = b2 & b1 in b2 holds
<:b3,b4:> . b1 = [(b3 . b1),(b4 . b1)]
proof end;

theorem Th70: :: FUNCT_3:70
for b1 being set
for b2, b3 being Function st dom b2 = b1 & dom b3 = b1 holds
dom <:b2,b3:> = b1
proof end;

theorem Th71: :: FUNCT_3:71
for b1, b2 being Function holds rng <:b1,b2:> c= [:(rng b1),(rng b2):]
proof end;

theorem Th72: :: FUNCT_3:72
for b1, b2 being set
for b3, b4 being Function st dom b3 = dom b4 & rng b3 c= b1 & rng b4 c= b2 holds
( (pr1 b1,b2) * <:b3,b4:> = b3 & (pr2 b1,b2) * <:b3,b4:> = b4 )
proof end;

theorem Th73: :: FUNCT_3:73
for b1, b2 being set holds <:(pr1 b1,b2),(pr2 b1,b2):> = id [:b1,b2:]
proof end;

theorem Th74: :: FUNCT_3:74
for b1, b2, b3, b4 being Function st dom b1 = dom b2 & dom b4 = dom b3 & <:b1,b2:> = <:b4,b3:> holds
( b1 = b4 & b2 = b3 )
proof end;

theorem Th75: :: FUNCT_3:75
for b1, b2, b3 being Function holds <:(b1 * b3),(b2 * b3):> = <:b1,b2:> * b3
proof end;

theorem Th76: :: FUNCT_3:76
for b1 being set
for b2, b3 being Function holds <:b2,b3:> .: b1 c= [:(b2 .: b1),(b3 .: b1):]
proof end;

theorem Th77: :: FUNCT_3:77
for b1 being set
for b2 being non empty set
for b3, b4 being Function holds <:b3,b4:> " [:b1,b2:] = (b3 " b1) /\ (b4 " b2)
proof end;

theorem Th78: :: FUNCT_3:78
for b1, b2, b3 being set
for b4 being Function of b1,b2
for b5 being Function of b1,b3 st ( b2 = {} implies b1 = {} ) & ( b3 = {} implies b1 = {} ) holds
<:b4,b5:> is Function of b1,[:b2,b3:]
proof end;

definition
let c1 be set ;
let c2, c3 be non empty set ;
let c4 be Function of c1,c2;
let c5 be Function of c1,c3;
redefine func <: as <:c4,c5:> -> Function of a1,[:a2,a3:];
coherence
<:c4,c5:> is Function of c1,[:c2,c3:]
by Th78;
end;

theorem Th79: :: FUNCT_3:79
for b1, b2, b3 being non empty set
for b4 being Function of b1,b2
for b5 being Function of b1,b3
for b6 being Element of b1 holds <:b4,b5:> . b6 = [(b4 . b6),(b5 . b6)]
proof end;

theorem Th80: :: FUNCT_3:80
for b1, b2, b3 being set
for b4 being Function of b1,b2
for b5 being Function of b1,b3 holds rng <:b4,b5:> c= [:b2,b3:]
proof end;

theorem Th81: :: FUNCT_3:81
for b1, b2, b3 being set
for b4 being Function of b1,b2
for b5 being Function of b1,b3 st ( b2 = {} implies b1 = {} ) & ( b3 = {} implies b1 = {} ) holds
( (pr1 b2,b3) * <:b4,b5:> = b4 & (pr2 b2,b3) * <:b4,b5:> = b5 )
proof end;

theorem Th82: :: FUNCT_3:82
for b1 being set
for b2, b3 being non empty set
for b4 being Function of b1,b2
for b5 being Function of b1,b3 holds
( (pr1 b2,b3) * <:b4,b5:> = b4 & (pr2 b2,b3) * <:b4,b5:> = b5 ) by Th81;

theorem Th83: :: FUNCT_3:83
for b1, b2, b3 being set
for b4, b5 being Function of b1,b2
for b6, b7 being Function of b1,b3 st ( b2 = {} implies b1 = {} ) & ( b3 = {} implies b1 = {} ) & <:b4,b6:> = <:b5,b7:> holds
( b4 = b5 & b6 = b7 )
proof end;

theorem Th84: :: FUNCT_3:84
for b1 being set
for b2, b3 being non empty set
for b4, b5 being Function of b1,b2
for b6, b7 being Function of b1,b3 st <:b4,b6:> = <:b5,b7:> holds
( b4 = b5 & b6 = b7 )
proof end;

definition
let c1, c2 be Function;
func [:c1,c2:] -> Function means :Def9: :: FUNCT_3:def 9
( dom a3 = [:(dom a1),(dom a2):] & ( for b1, b2 being set st b1 in dom a1 & b2 in dom a2 holds
a3 . [b1,b2] = [(a1 . b1),(a2 . b2)] ) );
existence
ex b1 being Function st
( dom b1 = [:(dom c1),(dom c2):] & ( for b2, b3 being set st b2 in dom c1 & b3 in dom c2 holds
b1 . [b2,b3] = [(c1 . b2),(c2 . b3)] ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = [:(dom c1),(dom c2):] & ( for b3, b4 being set st b3 in dom c1 & b4 in dom c2 holds
b1 . [b3,b4] = [(c1 . b3),(c2 . b4)] ) & dom b2 = [:(dom c1),(dom c2):] & ( for b3, b4 being set st b3 in dom c1 & b4 in dom c2 holds
b2 . [b3,b4] = [(c1 . b3),(c2 . b4)] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def9 defines [: FUNCT_3:def 9 :
for b1, b2, b3 being Function holds
( b3 = [:b1,b2:] iff ( dom b3 = [:(dom b1),(dom b2):] & ( for b4, b5 being set st b4 in dom b1 & b5 in dom b2 holds
b3 . [b4,b5] = [(b1 . b4),(b2 . b5)] ) ) );

theorem Th85: :: FUNCT_3:85
canceled;

theorem Th86: :: FUNCT_3:86
for b1, b2 being Function
for b3, b4 being set st [b3,b4] in [:(dom b1),(dom b2):] holds
[:b1,b2:] . [b3,b4] = [(b1 . b3),(b2 . b4)]
proof end;

theorem Th87: :: FUNCT_3:87
for b1, b2 being Function holds [:b1,b2:] = <:(b1 * (pr1 (dom b1),(dom b2))),(b2 * (pr2 (dom b1),(dom b2))):>
proof end;

theorem Th88: :: FUNCT_3:88
for b1, b2 being Function holds rng [:b1,b2:] = [:(rng b1),(rng b2):]
proof end;

theorem Th89: :: FUNCT_3:89
for b1 being set
for b2, b3 being Function st dom b2 = b1 & dom b3 = b1 holds
<:b2,b3:> = [:b2,b3:] * (delta b1)
proof end;

theorem Th90: :: FUNCT_3:90
for b1, b2 being set holds [:(id b1),(id b2):] = id [:b1,b2:]
proof end;

theorem Th91: :: FUNCT_3:91
for b1, b2, b3, b4 being Function holds [:b1,b3:] * <:b2,b4:> = <:(b1 * b2),(b3 * b4):>
proof end;

theorem Th92: :: FUNCT_3:92
for b1, b2, b3, b4 being Function holds [:b1,b3:] * [:b2,b4:] = [:(b1 * b2),(b3 * b4):]
proof end;

theorem Th93: :: FUNCT_3:93
for b1, b2 being set
for b3, b4 being Function holds [:b3,b4:] .: [:b1,b2:] = [:(b3 .: b1),(b4 .: b2):]
proof end;

theorem Th94: :: FUNCT_3:94
for b1, b2 being set
for b3, b4 being Function holds [:b3,b4:] " [:b1,b2:] = [:(b3 " b1),(b4 " b2):]
proof end;

theorem Th95: :: FUNCT_3:95
for b1, b2, b3, b4 being set
for b5 being Function of b1,b2
for b6 being Function of b3,b4 holds [:b5,b6:] is Function of [:b1,b3:],[:b2,b4:]
proof end;

definition
let c1, c2, c3, c4 be set ;
let c5 be Function of c1,c3;
let c6 be Function of c2,c4;
redefine func [: as [:c5,c6:] -> Function of [:a1,a2:],[:a3,a4:];
coherence
[:c5,c6:] is Function of [:c1,c2:],[:c3,c4:]
by Th95;
end;

theorem Th96: :: FUNCT_3:96
for b1, b2, b3, b4 being non empty set
for b5 being Function of b1,b2
for b6 being Function of b3,b4
for b7 being Element of b1
for b8 being Element of b3 holds [:b5,b6:] . [b7,b8] = [(b5 . b7),(b6 . b8)]
proof end;

theorem Th97: :: FUNCT_3:97
for b1, b2, b3, b4 being set
for b5 being Function of b1,b2
for b6 being Function of b3,b4 st ( b2 = {} implies b1 = {} ) & ( b4 = {} implies b3 = {} ) holds
[:b5,b6:] = <:(b5 * (pr1 b1,b3)),(b6 * (pr2 b1,b3)):>
proof end;

theorem Th98: :: FUNCT_3:98
for b1, b2 being set
for b3, b4 being non empty set
for b5 being Function of b1,b3
for b6 being Function of b2,b4 holds [:b5,b6:] = <:(b5 * (pr1 b1,b2)),(b6 * (pr2 b1,b2)):>
proof end;

theorem Th99: :: FUNCT_3:99
for b1, b2, b3 being set
for b4 being Function of b1,b2
for b5 being Function of b1,b3 holds <:b4,b5:> = [:b4,b5:] * (delta b1)
proof end;

theorem Th100: :: FUNCT_3:100
for b1 being Function holds (pr1 (dom b1),(rng b1)) .: b1 = dom b1
proof end;