:: CAT_2 semantic presentation

definition
let c1 be non empty set ;
let c2 be set ;
let c3 be non empty set ;
let c4 be FUNCTION_DOMAIN of c2,c3;
let c5 be Function of c1,c4;
let c6 be Element of c1;
redefine func . as c5 . c6 -> Element of a4;
coherence
c5 . c6 is Element of c4
proof end;
end;

theorem Th1: :: CAT_2:1
for b1, b2, b3 being non empty set
for b4 being Function of [:b1,b2:],b3 holds curry b4 is Function of b1, Funcs b2,b3
proof end;

theorem Th2: :: CAT_2:2
for b1, b2, b3 being non empty set
for b4 being Function of [:b2,b1:],b3 holds curry' b4 is Function of b1, Funcs b2,b3
proof end;

definition
let c1, c2, c3 be non empty set ;
let c4 be Function of [:c1,c2:],c3;
redefine func curry as curry c4 -> Function of a1, Funcs a2,a3;
coherence
curry c4 is Function of c1, Funcs c2,c3
by Th1;
redefine func curry' as curry' c4 -> Function of a2, Funcs a1,a3;
coherence
curry' c4 is Function of c2, Funcs c1,c3
by Th2;
end;

theorem Th3: :: CAT_2:3
for b1, b2, b3 being non empty set
for b4 being Element of b1
for b5 being Element of b2
for b6 being Function of [:b1,b2:],b3 holds b6 . [b4,b5] = ((curry b6) . b4) . b5
proof end;

theorem Th4: :: CAT_2:4
for b1, b2, b3 being non empty set
for b4 being Element of b1
for b5 being Element of b2
for b6 being Function of [:b1,b2:],b3 holds b6 . [b4,b5] = ((curry' b6) . b5) . b4
proof end;

definition
let c1, c2 be Category;
let c3 be Object of c2;
func c1 --> c3 -> Functor of a1,a2 equals :: CAT_2:def 1
the Morphisms of a1 --> (id a3);
coherence
the Morphisms of c1 --> (id c3) is Functor of c1,c2
proof end;
end;

:: deftheorem Def1 defines --> CAT_2:def 1 :
for b1, b2 being Category
for b3 being Object of b2 holds b1 --> b3 = the Morphisms of b1 --> (id b3);

theorem Th5: :: CAT_2:5
canceled;

theorem Th6: :: CAT_2:6
for b1, b2 being Category
for b3 being Object of b1
for b4 being Morphism of b2 holds (b2 --> b3) . b4 = id b3 by FUNCOP_1:13;

theorem Th7: :: CAT_2:7
for b1, b2 being Category
for b3 being Object of b1
for b4 being Object of b2 holds (Obj (b2 --> b3)) . b4 = b3
proof end;

definition
let c1, c2 be Category;
func Funct c1,c2 -> set means :Def2: :: CAT_2:def 2
for b1 being set holds
( b1 in a3 iff b1 is Functor of a1,a2 );
existence
ex b1 being set st
for b2 being set holds
( b2 in b1 iff b2 is Functor of c1,c2 )
proof end;
uniqueness
for b1, b2 being set st ( for b3 being set holds
( b3 in b1 iff b3 is Functor of c1,c2 ) ) & ( for b3 being set holds
( b3 in b2 iff b3 is Functor of c1,c2 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines Funct CAT_2:def 2 :
for b1, b2 being Category
for b3 being set holds
( b3 = Funct b1,b2 iff for b4 being set holds
( b4 in b3 iff b4 is Functor of b1,b2 ) );

registration
let c1, c2 be Category;
cluster Funct a1,a2 -> non empty ;
coherence
not Funct c1,c2 is empty
proof end;
end;

definition
let c1, c2 be Category;
mode FUNCTOR-DOMAIN of c1,c2 -> non empty set means :Def3: :: CAT_2:def 3
for b1 being Element of a3 holds b1 is Functor of a1,a2;
existence
ex b1 being non empty set st
for b2 being Element of b1 holds b2 is Functor of c1,c2
proof end;
end;

:: deftheorem Def3 defines FUNCTOR-DOMAIN CAT_2:def 3 :
for b1, b2 being Category
for b3 being non empty set holds
( b3 is FUNCTOR-DOMAIN of b1,b2 iff for b4 being Element of b3 holds b4 is Functor of b1,b2 );

definition
let c1, c2 be Category;
let c3 be FUNCTOR-DOMAIN of c1,c2;
redefine mode Element as Element of c3 -> Functor of a1,a2;
coherence
for b1 being Element of c3 holds b1 is Functor of c1,c2
by Def3;
end;

definition
let c1 be non empty set ;
let c2, c3 be Category;
let c4 be FUNCTOR-DOMAIN of c2,c3;
let c5 be Function of c1,c4;
let c6 be Element of c1;
redefine func . as c5 . c6 -> Element of a4;
coherence
c5 . c6 is Element of c4
proof end;
end;

definition
let c1, c2 be Category;
redefine func Funct as Funct c1,c2 -> FUNCTOR-DOMAIN of a1,a2;
coherence
Funct c1,c2 is FUNCTOR-DOMAIN of c1,c2
proof end;
end;

definition
let c1 be Category;
mode Subcategory of c1 -> Category means :Def4: :: CAT_2:def 4
( the Objects of a2 c= the Objects of a1 & ( for b1, b2 being Object of a2
for b3, b4 being Object of a1 st b1 = b3 & b2 = b4 holds
Hom b1,b2 c= Hom b3,b4 ) & the Comp of a2 <= the Comp of a1 & ( for b1 being Object of a2
for b2 being Object of a1 st b1 = b2 holds
id b1 = id b2 ) );
existence
ex b1 being Category st
( the Objects of b1 c= the Objects of c1 & ( for b2, b3 being Object of b1
for b4, b5 being Object of c1 st b2 = b4 & b3 = b5 holds
Hom b2,b3 c= Hom b4,b5 ) & the Comp of b1 <= the Comp of c1 & ( for b2 being Object of b1
for b3 being Object of c1 st b2 = b3 holds
id b2 = id b3 ) )
proof end;
end;

:: deftheorem Def4 defines Subcategory CAT_2:def 4 :
for b1, b2 being Category holds
( b2 is Subcategory of b1 iff ( the Objects of b2 c= the Objects of b1 & ( for b3, b4 being Object of b2
for b5, b6 being Object of b1 st b3 = b5 & b4 = b6 holds
Hom b3,b4 c= Hom b5,b6 ) & the Comp of b2 <= the Comp of b1 & ( for b3 being Object of b2
for b4 being Object of b1 st b3 = b4 holds
id b3 = id b4 ) ) );

registration
let c1 be Category;
cluster strict Subcategory of a1;
existence
ex b1 being Subcategory of c1 st b1 is strict
proof end;
end;

theorem Th8: :: CAT_2:8
canceled;

theorem Th9: :: CAT_2:9
canceled;

theorem Th10: :: CAT_2:10
canceled;

theorem Th11: :: CAT_2:11
canceled;

theorem Th12: :: CAT_2:12
for b1 being Category
for b2 being Subcategory of b1
for b3 being Object of b2 holds b3 is Object of b1
proof end;

theorem Th13: :: CAT_2:13
for b1 being Category
for b2 being Subcategory of b1 holds the Morphisms of b2 c= the Morphisms of b1
proof end;

theorem Th14: :: CAT_2:14
for b1 being Category
for b2 being Subcategory of b1
for b3 being Morphism of b2 holds b3 is Morphism of b1
proof end;

theorem Th15: :: CAT_2:15
for b1 being Category
for b2 being Subcategory of b1
for b3 being Morphism of b2
for b4 being Morphism of b1 st b3 = b4 holds
( dom b3 = dom b4 & cod b3 = cod b4 )
proof end;

theorem Th16: :: CAT_2:16
for b1 being Category
for b2 being Subcategory of b1
for b3, b4 being Object of b2
for b5, b6 being Object of b1
for b7 being Morphism of b3,b4 st b3 = b5 & b4 = b6 & Hom b3,b4 <> {} holds
b7 is Morphism of b5,b6
proof end;

theorem Th17: :: CAT_2:17
for b1 being Category
for b2 being Subcategory of b1
for b3, b4 being Morphism of b2
for b5, b6 being Morphism of b1 st b3 = b5 & b4 = b6 & dom b4 = cod b3 holds
b4 * b3 = b6 * b5
proof end;

theorem Th18: :: CAT_2:18
for b1 being Category holds b1 is Subcategory of b1
proof end;

theorem Th19: :: CAT_2:19
for b1 being Category
for b2 being Subcategory of b1 holds id b2 is Functor of b2,b1
proof end;

definition
let c1 be Category;
let c2 be Subcategory of c1;
func incl c2 -> Functor of a2,a1 equals :: CAT_2:def 5
id a2;
coherence
id c2 is Functor of c2,c1
by Th19;
end;

:: deftheorem Def5 defines incl CAT_2:def 5 :
for b1 being Category
for b2 being Subcategory of b1 holds incl b2 = id b2;

theorem Th20: :: CAT_2:20
canceled;

theorem Th21: :: CAT_2:21
for b1 being Category
for b2 being Subcategory of b1
for b3 being Morphism of b2 holds (incl b2) . b3 = b3 by CAT_1:115;

theorem Th22: :: CAT_2:22
for b1 being Category
for b2 being Subcategory of b1
for b3 being Object of b2 holds (Obj (incl b2)) . b3 = b3
proof end;

theorem Th23: :: CAT_2:23
for b1 being Category
for b2 being Subcategory of b1
for b3 being Object of b2 holds (incl b2) . b3 = b3 by Th22;

theorem Th24: :: CAT_2:24
for b1 being Category
for b2 being Subcategory of b1 holds incl b2 is faithful
proof end;

theorem Th25: :: CAT_2:25
for b1 being Category
for b2 being Subcategory of b1 holds
( incl b2 is full iff for b3, b4 being Object of b2
for b5, b6 being Object of b1 st b3 = b5 & b4 = b6 holds
Hom b3,b4 = Hom b5,b6 )
proof end;

definition
let c1 be CatStr ;
let c2 be Category;
pred c1 is_full_subcategory_of c2 means :Def6: :: CAT_2:def 6
( a1 is Subcategory of a2 & ( for b1, b2 being Object of a1
for b3, b4 being Object of a2 st b1 = b3 & b2 = b4 holds
Hom b1,b2 = Hom b3,b4 ) );
end;

:: deftheorem Def6 defines is_full_subcategory_of CAT_2:def 6 :
for b1 being CatStr
for b2 being Category holds
( b1 is_full_subcategory_of b2 iff ( b1 is Subcategory of b2 & ( for b3, b4 being Object of b1
for b5, b6 being Object of b2 st b3 = b5 & b4 = b6 holds
Hom b3,b4 = Hom b5,b6 ) ) );

theorem Th26: :: CAT_2:26
canceled;

theorem Th27: :: CAT_2:27
for b1 being Category
for b2 being Subcategory of b1 holds
( b2 is_full_subcategory_of b1 iff incl b2 is full )
proof end;

theorem Th28: :: CAT_2:28
for b1 being Category
for b2 being non empty Subset of the Objects of b1 holds union { (Hom b3,b4) where B is Object of b1, B is Object of b1 : ( b3 in b2 & b4 in b2 ) } is non empty Subset of the Morphisms of b1
proof end;

theorem Th29: :: CAT_2:29
for b1 being Category
for b2 being non empty Subset of the Objects of b1
for b3 being non empty set st b3 = union { (Hom b4,b5) where B is Object of b1, B is Object of b1 : ( b4 in b2 & b5 in b2 ) } holds
( the Dom of b1 | b3 is Function of b3,b2 & the Cod of b1 | b3 is Function of b3,b2 & the Comp of b1 || b3 is PartFunc of [:b3,b3:],b3 & the Id of b1 | b2 is Function of b2,b3 )
proof end;

theorem Th30: :: CAT_2:30
for b1 being Category
for b2 being non empty Subset of the Objects of b1
for b3 being non empty set
for b4, b5 being Function of b3,b2
for b6 being PartFunc of [:b3,b3:],b3
for b7 being Function of b2,b3 st b3 = union { (Hom b8,b9) where B is Object of b1, B is Object of b1 : ( b8 in b2 & b9 in b2 ) } & b4 = the Dom of b1 | b3 & b5 = the Cod of b1 | b3 & b6 = the Comp of b1 || b3 & b7 = the Id of b1 | b2 holds
CatStr(# b2,b3,b4,b5,b6,b7 #) is_full_subcategory_of b1
proof end;

theorem Th31: :: CAT_2:31
for b1 being Category
for b2 being non empty Subset of the Objects of b1
for b3 being non empty set
for b4, b5 being Function of b3,b2
for b6 being PartFunc of [:b3,b3:],b3
for b7 being Function of b2,b3 st CatStr(# b2,b3,b4,b5,b6,b7 #) is_full_subcategory_of b1 holds
( b3 = union { (Hom b8,b9) where B is Object of b1, B is Object of b1 : ( b8 in b2 & b9 in b2 ) } & b4 = the Dom of b1 | b3 & b5 = the Cod of b1 | b3 & b6 = the Comp of b1 || b3 & b7 = the Id of b1 | b2 )
proof end;

definition
let c1, c2, c3, c4 be non empty 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:]
proof end;
end;

definition
let c1, c2 be non empty set ;
let c3 be PartFunc of [:c1,c1:],c1;
let c4 be PartFunc of [:c2,c2:],c2;
redefine func |: as |:c3,c4:| -> PartFunc of [:[:a1,a2:],[:a1,a2:]:],[:a1,a2:];
coherence
|:c3,c4:| is PartFunc of [:[:c1,c2:],[:c1,c2:]:],[:c1,c2:]
by FUNCT_4:62;
end;

definition
let c1, c2 be Category;
func [:c1,c2:] -> Category equals :: CAT_2:def 7
CatStr(# [:the Objects of a1,the Objects of a2:],[:the Morphisms of a1,the Morphisms of a2:],[:the Dom of a1,the Dom of a2:],[:the Cod of a1,the Cod of a2:],|:the Comp of a1,the Comp of a2:|,[:the Id of a1,the Id of a2:] #);
coherence
CatStr(# [:the Objects of c1,the Objects of c2:],[:the Morphisms of c1,the Morphisms of c2:],[:the Dom of c1,the Dom of c2:],[:the Cod of c1,the Cod of c2:],|:the Comp of c1,the Comp of c2:|,[:the Id of c1,the Id of c2:] #) is Category
proof end;
end;

:: deftheorem Def7 defines [: CAT_2:def 7 :
for b1, b2 being Category holds [:b1,b2:] = CatStr(# [:the Objects of b1,the Objects of b2:],[:the Morphisms of b1,the Morphisms of b2:],[:the Dom of b1,the Dom of b2:],[:the Cod of b1,the Cod of b2:],|:the Comp of b1,the Comp of b2:|,[:the Id of b1,the Id of b2:] #);

registration
let c1, c2 be Category;
cluster [:a1,a2:] -> strict ;
coherence
[:c1,c2:] is strict
;
end;

theorem Th32: :: CAT_2:32
canceled;

theorem Th33: :: CAT_2:33
for b1, b2 being Category holds
( the Objects of [:b1,b2:] = [:the Objects of b1,the Objects of b2:] & the Morphisms of [:b1,b2:] = [:the Morphisms of b1,the Morphisms of b2:] & the Dom of [:b1,b2:] = [:the Dom of b1,the Dom of b2:] & the Cod of [:b1,b2:] = [:the Cod of b1,the Cod of b2:] & the Comp of [:b1,b2:] = |:the Comp of b1,the Comp of b2:| & the Id of [:b1,b2:] = [:the Id of b1,the Id of b2:] ) ;

theorem Th34: :: CAT_2:34
for b1, b2 being Category
for b3 being Object of b1
for b4 being Object of b2 holds [b3,b4] is Object of [:b1,b2:] ;

definition
let c1, c2 be Category;
let c3 be Object of c1;
let c4 be Object of c2;
redefine func [ as [c3,c4] -> Object of [:a1,a2:];
coherence
[c3,c4] is Object of [:c1,c2:]
by Th34;
end;

theorem Th35: :: CAT_2:35
for b1, b2 being Category
for b3 being Object of [:b1,b2:] ex b4 being Object of b1ex b5 being Object of b2 st b3 = [b4,b5] by DOMAIN_1:9;

theorem Th36: :: CAT_2:36
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Morphism of b2 holds [b3,b4] is Morphism of [:b1,b2:] ;

definition
let c1, c2 be Category;
let c3 be Morphism of c1;
let c4 be Morphism of c2;
redefine func [ as [c3,c4] -> Morphism of [:a1,a2:];
coherence
[c3,c4] is Morphism of [:c1,c2:]
by Th36;
end;

theorem Th37: :: CAT_2:37
for b1, b2 being Category
for b3 being Morphism of [:b1,b2:] ex b4 being Morphism of b1ex b5 being Morphism of b2 st b3 = [b4,b5] by DOMAIN_1:9;

theorem Th38: :: CAT_2:38
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Morphism of b2 holds
( dom [b3,b4] = [(dom b3),(dom b4)] & cod [b3,b4] = [(cod b3),(cod b4)] ) by FUNCT_3:96;

theorem Th39: :: CAT_2:39
for b1, b2 being Category
for b3, b4 being Morphism of b1
for b5, b6 being Morphism of b2 st dom b4 = cod b3 & dom b6 = cod b5 holds
[b4,b6] * [b3,b5] = [(b4 * b3),(b6 * b5)]
proof end;

theorem Th40: :: CAT_2:40
for b1, b2 being Category
for b3, b4 being Morphism of b1
for b5, b6 being Morphism of b2 st dom [b4,b6] = cod [b3,b5] holds
[b4,b6] * [b3,b5] = [(b4 * b3),(b6 * b5)]
proof end;

theorem Th41: :: CAT_2:41
for b1, b2 being Category
for b3 being Object of b1
for b4 being Object of b2 holds id [b3,b4] = [(id b3),(id b4)] by FUNCT_3:96;

theorem Th42: :: CAT_2:42
for b1, b2 being Category
for b3, b4 being Object of b1
for b5, b6 being Object of b2 holds Hom [b3,b5],[b4,b6] = [:(Hom b3,b4),(Hom b5,b6):]
proof end;

theorem Th43: :: CAT_2:43
for b1, b2 being Category
for b3, b4 being Object of b1
for b5 being Morphism of b3,b4
for b6, b7 being Object of b2
for b8 being Morphism of b6,b7 st Hom b3,b4 <> {} & Hom b6,b7 <> {} holds
[b5,b8] is Morphism of [b3,b6],[b4,b7]
proof end;

theorem Th44: :: CAT_2:44
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b1 holds (curry b4) . (id b5) is Functor of b2,b3
proof end;

theorem Th45: :: CAT_2:45
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b2 holds (curry' b4) . (id b5) is Functor of b1,b3
proof end;

definition
let c1, c2, c3 be Category;
let c4 be Functor of [:c1,c2:],c3;
let c5 be Object of c1;
func c4 ?- c5 -> Functor of a2,a3 equals :: CAT_2:def 8
(curry a4) . (id a5);
coherence
(curry c4) . (id c5) is Functor of c2,c3
by Th44;
end;

:: deftheorem Def8 defines ?- CAT_2:def 8 :
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b1 holds b4 ?- b5 = (curry b4) . (id b5);

theorem Th46: :: CAT_2:46
canceled;

theorem Th47: :: CAT_2:47
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b1
for b6 being Morphism of b2 holds (b4 ?- b5) . b6 = b4 . [(id b5),b6] by Th3;

theorem Th48: :: CAT_2:48
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b1
for b6 being Object of b2 holds (Obj (b4 ?- b5)) . b6 = (Obj b4) . [b5,b6]
proof end;

definition
let c1, c2, c3 be Category;
let c4 be Functor of [:c1,c2:],c3;
let c5 be Object of c2;
func c4 -? c5 -> Functor of a1,a3 equals :: CAT_2:def 9
(curry' a4) . (id a5);
coherence
(curry' c4) . (id c5) is Functor of c1,c3
by Th45;
end;

:: deftheorem Def9 defines -? CAT_2:def 9 :
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b2 holds b4 -? b5 = (curry' b4) . (id b5);

theorem Th49: :: CAT_2:49
canceled;

theorem Th50: :: CAT_2:50
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b2
for b6 being Morphism of b1 holds (b4 -? b5) . b6 = b4 . [b6,(id b5)] by Th4;

theorem Th51: :: CAT_2:51
for b1, b2, b3 being Category
for b4 being Functor of [:b1,b2:],b3
for b5 being Object of b1
for b6 being Object of b2 holds (Obj (b4 -? b6)) . b5 = (Obj b4) . [b5,b6]
proof end;

theorem Th52: :: CAT_2:52
for b1, b2, b3 being Category
for b4 being Function of the Objects of b1, Funct b2,b3
for b5 being Function of the Objects of b2, Funct b1,b3 st ( for b6 being Object of b1
for b7 being Object of b2 holds (b5 . b7) . (id b6) = (b4 . b6) . (id b7) ) & ( for b6 being Morphism of b2
for b7 being Morphism of b1 holds ((b5 . (cod b6)) . b7) * ((b4 . (dom b7)) . b6) = ((b4 . (cod b7)) . b6) * ((b5 . (dom b6)) . b7) ) holds
ex b6 being Functor of [:b2,b1:],b3 st
for b7 being Morphism of b2
for b8 being Morphism of b1 holds b6 . [b7,b8] = ((b4 . (cod b8)) . b7) * ((b5 . (dom b7)) . b8)
proof end;

theorem Th53: :: CAT_2:53
for b1, b2, b3 being Category
for b4 being Function of the Objects of b1, Funct b2,b3
for b5 being Function of the Objects of b2, Funct b1,b3 st ex b6 being Functor of [:b2,b1:],b3 st
for b7 being Object of b1
for b8 being Object of b2 holds
( b6 -? b7 = b4 . b7 & b6 ?- b8 = b5 . b8 ) holds
for b6 being Morphism of b2
for b7 being Morphism of b1 holds ((b5 . (cod b6)) . b7) * ((b4 . (dom b7)) . b6) = ((b4 . (cod b7)) . b6) * ((b5 . (dom b6)) . b7)
proof end;

theorem Th54: :: CAT_2:54
for b1, b2 being Category holds pr1 the Morphisms of b1,the Morphisms of b2 is Functor of [:b1,b2:],b1
proof end;

theorem Th55: :: CAT_2:55
for b1, b2 being Category holds pr2 the Morphisms of b1,the Morphisms of b2 is Functor of [:b1,b2:],b2
proof end;

definition
let c1, c2 be Category;
func pr1 c1,c2 -> Functor of [:a1,a2:],a1 equals :: CAT_2:def 10
pr1 the Morphisms of a1,the Morphisms of a2;
coherence
pr1 the Morphisms of c1,the Morphisms of c2 is Functor of [:c1,c2:],c1
by Th54;
func pr2 c1,c2 -> Functor of [:a1,a2:],a2 equals :: CAT_2:def 11
pr2 the Morphisms of a1,the Morphisms of a2;
coherence
pr2 the Morphisms of c1,the Morphisms of c2 is Functor of [:c1,c2:],c2
by Th55;
end;

:: deftheorem Def10 defines pr1 CAT_2:def 10 :
for b1, b2 being Category holds pr1 b1,b2 = pr1 the Morphisms of b1,the Morphisms of b2;

:: deftheorem Def11 defines pr2 CAT_2:def 11 :
for b1, b2 being Category holds pr2 b1,b2 = pr2 the Morphisms of b1,the Morphisms of b2;

theorem Th56: :: CAT_2:56
canceled;

theorem Th57: :: CAT_2:57
canceled;

theorem Th58: :: CAT_2:58
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Morphism of b2 holds (pr1 b1,b2) . [b3,b4] = b3 by FUNCT_3:def 5;

theorem Th59: :: CAT_2:59
for b1, b2 being Category
for b3 being Object of b1
for b4 being Object of b2 holds (Obj (pr1 b1,b2)) . [b3,b4] = b3
proof end;

theorem Th60: :: CAT_2:60
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Morphism of b2 holds (pr2 b1,b2) . [b3,b4] = b4 by FUNCT_3:def 6;

theorem Th61: :: CAT_2:61
for b1, b2 being Category
for b3 being Object of b1
for b4 being Object of b2 holds (Obj (pr2 b1,b2)) . [b3,b4] = b4
proof end;

theorem Th62: :: CAT_2:62
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3 holds <:b4,b5:> is Functor of b1,[:b2,b3:]
proof end;

definition
let c1, c2, c3 be Category;
let c4 be Functor of c1,c2;
let c5 be Functor of c1,c3;
redefine func <: as <:c4,c5:> -> Functor of a1,[:a2,a3:];
coherence
<:c4,c5:> is Functor of c1,[:c2,c3:]
by Th62;
end;

theorem Th63: :: CAT_2:63
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3
for b6 being Object of b1 holds (Obj <:b4,b5:>) . b6 = [((Obj b4) . b6),((Obj b5) . b6)]
proof end;

theorem Th64: :: CAT_2:64
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4 holds [:b5,b6:] = <:(b5 * (pr1 b1,b3)),(b6 * (pr2 b1,b3)):>
proof end;

theorem Th65: :: CAT_2:65
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4 holds [:b5,b6:] is Functor of [:b1,b3:],[:b2,b4:]
proof end;

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

theorem Th66: :: CAT_2:66
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4
for b7 being Object of b1
for b8 being Object of b3 holds (Obj [:b5,b6:]) . [b7,b8] = [((Obj b5) . b7),((Obj b6) . b8)]
proof end;