:: CAT_3 semantic presentation

definition
let c1 be set ;
let c2 be non empty set ;
let c3 be Function of c1,c2;
let c4 be set ;
assume E1: c4 in c1 ;
redefine func c3 /. c4 -> Element of a2 equals :Def1: :: CAT_3:def 1
a3 . a4;
compatibility
for b1 being Element of c2 holds
( b1 = c3 /. c4 iff b1 = c3 . c4 )
proof end;
end;

:: deftheorem Def1 defines /. CAT_3:def 1 :
for b1 being set
for b2 being non empty set
for b3 being Function of b1,b2
for b4 being set st b4 in b1 holds
b3 /. b4 = b3 . b4;

scheme :: CAT_3:sch 1
s1{ F1() -> set , F2() -> non empty set , F3( set ) -> Element of F2() } :
ex b1 being Function of F1(),F2() st
for b2 being set st b2 in F1() holds
b1 /. b2 = F3(b2)
proof end;

theorem Th1: :: CAT_3:1
for b1 being set
for b2 being non empty set
for b3, b4 being Function of b1,b2 st ( for b5 being set st b5 in b1 holds
b3 /. b5 = b4 /. b5 ) holds
b3 = b4
proof end;

scheme :: CAT_3:sch 2
s2{ F1() -> set , F2() -> non empty set , F3( set ) -> Element of F2() } :
( ex b1 being Function of F1(),F2() st
for b2 being set st b2 in F1() holds
b1 /. b2 = F3(b2) & ( for b1, b2 being Function of F1(),F2() st ( for b3 being set st b3 in F1() holds
b1 /. b3 = F3(b3) ) & ( for b3 being set st b3 in F1() holds
b2 /. b3 = F3(b3) ) holds
b1 = b2 ) )
proof end;

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

definition
let c1 be non empty set ;
let c2 be set ;
let c3 be Element of c1;
redefine func .--> as c2 .--> c3 -> Function of {a2},a1;
coherence
c2 .--> c3 is Function of {c2},c1
by FUNCOP_1:58;
end;

theorem Th2: :: CAT_3:2
for b1, b2 being set
for b3 being non empty set
for b4 being Element of b3 st b2 in b1 holds
(b1 --> b4) /. b2 = b4
proof end;

theorem Th3: :: CAT_3:3
canceled;

theorem Th4: :: CAT_3:4
canceled;

theorem Th5: :: CAT_3:5
canceled;

theorem Th6: :: CAT_3:6
canceled;

theorem Th7: :: CAT_3:7
for b1, b2 being set
for b3 being non empty set st b1 <> b2 holds
for b4, b5 being Element of b3 holds
( (b1,b2 --> b4,b5) /. b1 = b4 & (b1,b2 --> b4,b5) /. b2 = b5 )
proof end;

definition
let c1 be Category;
let c2 be set ;
let c3 be Function of c2,the Morphisms of c1;
canceled;
func doms c3 -> Function of a2,the Objects of a1 means :Def3: :: CAT_3:def 3
for b1 being set st b1 in a2 holds
a4 /. b1 = dom (a3 /. b1);
correctness
existence
ex b1 being Function of c2,the Objects of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = dom (c3 /. b2)
;
uniqueness
for b1, b2 being Function of c2,the Objects of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = dom (c3 /. b3) ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = dom (c3 /. b3) ) holds
b1 = b2
;
proof end;
func cods c3 -> Function of a2,the Objects of a1 means :Def4: :: CAT_3:def 4
for b1 being set st b1 in a2 holds
a4 /. b1 = cod (a3 /. b1);
correctness
existence
ex b1 being Function of c2,the Objects of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = cod (c3 /. b2)
;
uniqueness
for b1, b2 being Function of c2,the Objects of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = cod (c3 /. b3) ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = cod (c3 /. b3) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def2 CAT_3:def 2 :
canceled;

:: deftheorem Def3 defines doms CAT_3:def 3 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of b1
for b4 being Function of b2,the Objects of b1 holds
( b4 = doms b3 iff for b5 being set st b5 in b2 holds
b4 /. b5 = dom (b3 /. b5) );

:: deftheorem Def4 defines cods CAT_3:def 4 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of b1
for b4 being Function of b2,the Objects of b1 holds
( b4 = cods b3 iff for b5 being set st b5 in b2 holds
b4 /. b5 = cod (b3 /. b5) );

theorem Th8: :: CAT_3:8
for b1 being set
for b2 being Category
for b3 being Morphism of b2 holds doms (b1 --> b3) = b1 --> (dom b3)
proof end;

theorem Th9: :: CAT_3:9
for b1 being set
for b2 being Category
for b3 being Morphism of b2 holds cods (b1 --> b3) = b1 --> (cod b3)
proof end;

theorem Th10: :: CAT_3:10
for b1, b2 being set
for b3 being Category
for b4, b5 being Morphism of b3 holds doms (b1,b2 --> b4,b5) = b1,b2 --> (dom b4),(dom b5)
proof end;

theorem Th11: :: CAT_3:11
for b1, b2 being set
for b3 being Category
for b4, b5 being Morphism of b3 holds cods (b1,b2 --> b4,b5) = b1,b2 --> (cod b4),(cod b5)
proof end;

definition
let c1 be Category;
let c2 be set ;
let c3 be Function of c2,the Morphisms of c1;
func c3 opp -> Function of a2,the Morphisms of (a1 opp ) means :Def5: :: CAT_3:def 5
for b1 being set st b1 in a2 holds
a4 /. b1 = (a3 /. b1) opp ;
correctness
existence
ex b1 being Function of c2,the Morphisms of (c1 opp ) st
for b2 being set st b2 in c2 holds
b1 /. b2 = (c3 /. b2) opp
;
uniqueness
for b1, b2 being Function of c2,the Morphisms of (c1 opp ) st ( for b3 being set st b3 in c2 holds
b1 /. b3 = (c3 /. b3) opp ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = (c3 /. b3) opp ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def5 defines opp CAT_3:def 5 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of b1
for b4 being Function of b2,the Morphisms of (b1 opp ) holds
( b4 = b3 opp iff for b5 being set st b5 in b2 holds
b4 /. b5 = (b3 /. b5) opp );

theorem Th12: :: CAT_3:12
for b1 being set
for b2 being Category
for b3 being Morphism of b2 holds (b1 --> b3) opp = b1 --> (b3 opp )
proof end;

theorem Th13: :: CAT_3:13
for b1, b2 being set
for b3 being Category
for b4, b5 being Morphism of b3 st b1 <> b2 holds
(b1,b2 --> b4,b5) opp = b1,b2 --> (b4 opp ),(b5 opp )
proof end;

theorem Th14: :: CAT_3:14
for b1 being set
for b2 being Category
for b3 being Function of b1,the Morphisms of b2 holds (b3 opp ) opp = b3
proof end;

definition
let c1 be Category;
let c2 be set ;
let c3 be Function of c2,the Morphisms of (c1 opp );
func opp c3 -> Function of a2,the Morphisms of a1 means :Def6: :: CAT_3:def 6
for b1 being set st b1 in a2 holds
a4 /. b1 = opp (a3 /. b1);
correctness
existence
ex b1 being Function of c2,the Morphisms of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = opp (c3 /. b2)
;
uniqueness
for b1, b2 being Function of c2,the Morphisms of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = opp (c3 /. b3) ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = opp (c3 /. b3) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def6 defines opp CAT_3:def 6 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of (b1 opp )
for b4 being Function of b2,the Morphisms of b1 holds
( b4 = opp b3 iff for b5 being set st b5 in b2 holds
b4 /. b5 = opp (b3 /. b5) );

theorem Th15: :: CAT_3:15
for b1 being set
for b2 being Category
for b3 being Morphism of (b2 opp ) holds opp (b1 --> b3) = b1 --> (opp b3)
proof end;

theorem Th16: :: CAT_3:16
for b1, b2 being set
for b3 being Category st b1 <> b2 holds
for b4, b5 being Morphism of (b3 opp ) holds opp (b1,b2 --> b4,b5) = b1,b2 --> (opp b4),(opp b5)
proof end;

theorem Th17: :: CAT_3:17
for b1 being set
for b2 being Category
for b3 being Function of b1,the Morphisms of b2 holds opp (b3 opp ) = b3
proof end;

definition
let c1 be Category;
let c2 be set ;
let c3 be Function of c2,the Morphisms of c1;
let c4 be Morphism of c1;
func c3 * c4 -> Function of a2,the Morphisms of a1 means :Def7: :: CAT_3:def 7
for b1 being set st b1 in a2 holds
a5 /. b1 = (a3 /. b1) * a4;
correctness
existence
ex b1 being Function of c2,the Morphisms of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = (c3 /. b2) * c4
;
uniqueness
for b1, b2 being Function of c2,the Morphisms of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = (c3 /. b3) * c4 ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = (c3 /. b3) * c4 ) holds
b1 = b2
;
proof end;
func c4 * c3 -> Function of a2,the Morphisms of a1 means :Def8: :: CAT_3:def 8
for b1 being set st b1 in a2 holds
a5 /. b1 = a4 * (a3 /. b1);
correctness
existence
ex b1 being Function of c2,the Morphisms of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = c4 * (c3 /. b2)
;
uniqueness
for b1, b2 being Function of c2,the Morphisms of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = c4 * (c3 /. b3) ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = c4 * (c3 /. b3) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def7 defines * CAT_3:def 7 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of b1
for b4 being Morphism of b1
for b5 being Function of b2,the Morphisms of b1 holds
( b5 = b3 * b4 iff for b6 being set st b6 in b2 holds
b5 /. b6 = (b3 /. b6) * b4 );

:: deftheorem Def8 defines * CAT_3:def 8 :
for b1 being Category
for b2 being set
for b3 being Function of b2,the Morphisms of b1
for b4 being Morphism of b1
for b5 being Function of b2,the Morphisms of b1 holds
( b5 = b4 * b3 iff for b6 being set st b6 in b2 holds
b5 /. b6 = b4 * (b3 /. b6) );

theorem Th18: :: CAT_3:18
for b1, b2 being set
for b3 being Category
for b4, b5, b6 being Morphism of b3 st b1 <> b2 holds
(b1,b2 --> b4,b5) * b6 = b1,b2 --> (b4 * b6),(b5 * b6)
proof end;

theorem Th19: :: CAT_3:19
for b1, b2 being set
for b3 being Category
for b4, b5, b6 being Morphism of b3 st b1 <> b2 holds
b4 * (b1,b2 --> b5,b6) = b1,b2 --> (b4 * b5),(b4 * b6)
proof end;

theorem Th20: :: CAT_3:20
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Function of b1,the Morphisms of b2 st doms b4 = b1 --> (cod b3) holds
( doms (b4 * b3) = b1 --> (dom b3) & cods (b4 * b3) = cods b4 )
proof end;

theorem Th21: :: CAT_3:21
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Function of b1,the Morphisms of b2 st cods b4 = b1 --> (dom b3) holds
( doms (b3 * b4) = doms b4 & cods (b3 * b4) = b1 --> (cod b3) )
proof end;

definition
let c1 be Category;
let c2 be set ;
let c3, c4 be Function of c2,the Morphisms of c1;
func c3 "*" c4 -> Function of a2,the Morphisms of a1 means :Def9: :: CAT_3:def 9
for b1 being set st b1 in a2 holds
a5 /. b1 = (a3 /. b1) * (a4 /. b1);
correctness
existence
ex b1 being Function of c2,the Morphisms of c1 st
for b2 being set st b2 in c2 holds
b1 /. b2 = (c3 /. b2) * (c4 /. b2)
;
uniqueness
for b1, b2 being Function of c2,the Morphisms of c1 st ( for b3 being set st b3 in c2 holds
b1 /. b3 = (c3 /. b3) * (c4 /. b3) ) & ( for b3 being set st b3 in c2 holds
b2 /. b3 = (c3 /. b3) * (c4 /. b3) ) holds
b1 = b2
;
proof end;
end;

:: deftheorem Def9 defines "*" CAT_3:def 9 :
for b1 being Category
for b2 being set
for b3, b4, b5 being Function of b2,the Morphisms of b1 holds
( b5 = b3 "*" b4 iff for b6 being set st b6 in b2 holds
b5 /. b6 = (b3 /. b6) * (b4 /. b6) );

theorem Th22: :: CAT_3:22
for b1 being set
for b2 being Category
for b3, b4 being Function of b1,the Morphisms of b2 st doms b3 = cods b4 holds
( doms (b3 "*" b4) = doms b4 & cods (b3 "*" b4) = cods b3 )
proof end;

theorem Th23: :: CAT_3:23
for b1, b2 being set
for b3 being Category
for b4, b5, b6, b7 being Morphism of b3 st b1 <> b2 holds
(b1,b2 --> b4,b5) "*" (b1,b2 --> b6,b7) = b1,b2 --> (b4 * b6),(b5 * b7)
proof end;

theorem Th24: :: CAT_3:24
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Function of b1,the Morphisms of b2 holds b4 * b3 = b4 "*" (b1 --> b3)
proof end;

theorem Th25: :: CAT_3:25
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Function of b1,the Morphisms of b2 holds b3 * b4 = (b1 --> b3) "*" b4
proof end;

definition
let c1 be Category;
let c2 be Morphism of c1;
attr a2 is retraction means :Def10: :: CAT_3:def 10
ex b1 being Morphism of a1 st
( cod b1 = dom a2 & a2 * b1 = id (cod a2) );
attr a2 is coretraction means :Def11: :: CAT_3:def 11
ex b1 being Morphism of a1 st
( dom b1 = cod a2 & b1 * a2 = id (dom a2) );
end;

:: deftheorem Def10 defines retraction CAT_3:def 10 :
for b1 being Category
for b2 being Morphism of b1 holds
( b2 is retraction iff ex b3 being Morphism of b1 st
( cod b3 = dom b2 & b2 * b3 = id (cod b2) ) );

:: deftheorem Def11 defines coretraction CAT_3:def 11 :
for b1 being Category
for b2 being Morphism of b1 holds
( b2 is coretraction iff ex b3 being Morphism of b1 st
( dom b3 = cod b2 & b3 * b2 = id (dom b2) ) );

theorem Th26: :: CAT_3:26
for b1 being Category
for b2 being Morphism of b1 st b2 is retraction holds
b2 is epi
proof end;

theorem Th27: :: CAT_3:27
for b1 being Category
for b2 being Morphism of b1 st b2 is coretraction holds
b2 is monic
proof end;

theorem Th28: :: CAT_3:28
for b1 being Category
for b2, b3 being Morphism of b1 st b2 is retraction & b3 is retraction & dom b3 = cod b2 holds
b3 * b2 is retraction
proof end;

theorem Th29: :: CAT_3:29
for b1 being Category
for b2, b3 being Morphism of b1 st b2 is coretraction & b3 is coretraction & dom b3 = cod b2 holds
b3 * b2 is coretraction
proof end;

theorem Th30: :: CAT_3:30
for b1 being Category
for b2, b3 being Morphism of b1 st dom b2 = cod b3 & b2 * b3 is retraction holds
b2 is retraction
proof end;

theorem Th31: :: CAT_3:31
for b1 being Category
for b2, b3 being Morphism of b1 st dom b2 = cod b3 & b2 * b3 is coretraction holds
b3 is coretraction
proof end;

theorem Th32: :: CAT_3:32
for b1 being Category
for b2 being Morphism of b1 st b2 is retraction & b2 is monic holds
b2 is invertible
proof end;

theorem Th33: :: CAT_3:33
for b1 being Category
for b2 being Morphism of b1 st b2 is coretraction & b2 is epi holds
b2 is invertible
proof end;

theorem Th34: :: CAT_3:34
for b1 being Category
for b2 being Morphism of b1 holds
( b2 is invertible iff ( b2 is retraction & b2 is coretraction ) )
proof end;

theorem Th35: :: CAT_3:35
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Functor of b1,b2 st b3 is retraction holds
b4 . b3 is retraction
proof end;

theorem Th36: :: CAT_3:36
for b1, b2 being Category
for b3 being Morphism of b1
for b4 being Functor of b1,b2 st b3 is coretraction holds
b4 . b3 is coretraction
proof end;

theorem Th37: :: CAT_3:37
for b1 being Category
for b2 being Morphism of b1 holds
( b2 is retraction iff b2 opp is coretraction )
proof end;

theorem Th38: :: CAT_3:38
for b1 being Category
for b2 being Morphism of b1 holds
( b2 is coretraction iff b2 opp is retraction )
proof end;

definition
let c1 be Category;
let c2, c3 be Object of c1;
assume E25: c3 is terminal ;
func term c2,c3 -> Morphism of a2,a3 means :: CAT_3:def 12
verum;
existence
ex b1 being Morphism of c2,c3 st verum
;
uniqueness
for b1, b2 being Morphism of c2,c3 holds b1 = b2
proof end;
end;

:: deftheorem Def12 defines term CAT_3:def 12 :
for b1 being Category
for b2, b3 being Object of b1 st b3 is terminal holds
for b4 being Morphism of b2,b3 holds
( b4 = term b2,b3 iff verum );

theorem Th39: :: CAT_3:39
for b1 being Category
for b2, b3 being Object of b1 st b2 is terminal holds
( dom (term b3,b2) = b3 & cod (term b3,b2) = b2 )
proof end;

theorem Th40: :: CAT_3:40
for b1 being Category
for b2, b3 being Object of b1
for b4 being Morphism of b1 st b2 is terminal & dom b4 = b3 & cod b4 = b2 holds
term b3,b2 = b4
proof end;

theorem Th41: :: CAT_3:41
for b1 being Category
for b2, b3 being Object of b1
for b4 being Morphism of b2,b3 st b3 is terminal holds
term b2,b3 = b4
proof end;

definition
let c1 be Category;
let c2, c3 be Object of c1;
assume E27: c2 is initial ;
func init c2,c3 -> Morphism of a2,a3 means :: CAT_3:def 13
verum;
existence
ex b1 being Morphism of c2,c3 st verum
;
uniqueness
for b1, b2 being Morphism of c2,c3 holds b1 = b2
proof end;
end;

:: deftheorem Def13 defines init CAT_3:def 13 :
for b1 being Category
for b2, b3 being Object of b1 st b2 is initial holds
for b4 being Morphism of b2,b3 holds
( b4 = init b2,b3 iff verum );

theorem Th42: :: CAT_3:42
for b1 being Category
for b2, b3 being Object of b1 st b2 is initial holds
( dom (init b2,b3) = b2 & cod (init b2,b3) = b3 )
proof end;

theorem Th43: :: CAT_3:43
for b1 being Category
for b2, b3 being Object of b1
for b4 being Morphism of b1 st b2 is initial & dom b4 = b2 & cod b4 = b3 holds
init b2,b3 = b4
proof end;

theorem Th44: :: CAT_3:44
for b1 being Category
for b2, b3 being Object of b1
for b4 being Morphism of b2,b3 st b2 is initial holds
init b2,b3 = b4
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3 be set ;
mode Projections_family of c2,c3 -> Function of a3,the Morphisms of a1 means :Def14: :: CAT_3:def 14
doms a4 = a3 --> a2;
existence
ex b1 being Function of c3,the Morphisms of c1 st doms b1 = c3 --> c2
proof end;
end;

:: deftheorem Def14 defines Projections_family CAT_3:def 14 :
for b1 being Category
for b2 being Object of b1
for b3 being set
for b4 being Function of b3,the Morphisms of b1 holds
( b4 is Projections_family of b2,b3 iff doms b4 = b3 --> b2 );

theorem Th45: :: CAT_3:45
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5 being Projections_family of b4,b1 st b2 in b1 holds
dom (b5 /. b2) = b4
proof end;

theorem Th46: :: CAT_3:46
for b1 being Category
for b2 being Object of b1
for b3 being Function of {} ,the Morphisms of b1 holds b3 is Projections_family of b2, {}
proof end;

theorem Th47: :: CAT_3:47
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Morphism of b2 st dom b4 = b3 holds
b1 .--> b4 is Projections_family of b3,{b1}
proof end;

theorem Th48: :: CAT_3:48
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5, b6 being Morphism of b3 st dom b5 = b4 & dom b6 = b4 holds
b1,b2 --> b5,b6 is Projections_family of b4,{b1,b2}
proof end;

theorem Th49: :: CAT_3:49
canceled;

theorem Th50: :: CAT_3:50
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Morphism of b2
for b5 being Projections_family of b3,b1 st cod b4 = b3 holds
b5 * b4 is Projections_family of dom b4,b1
proof end;

theorem Th51: :: CAT_3:51
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Function of b1,the Morphisms of b2
for b5 being Projections_family of b3,b1 st doms b4 = cods b5 holds
b4 "*" b5 is Projections_family of b3,b1
proof end;

theorem Th52: :: CAT_3:52
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Projections_family of cod b3,b1 holds (b3 opp ) * (b4 opp ) = (b4 * b3) opp
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3 be set ;
let c4 be Function of c3,the Morphisms of c1;
pred c2 is_a_product_wrt c4 means :Def15: :: CAT_3:def 15
( a4 is Projections_family of a2,a3 & ( for b1 being Object of a1
for b2 being Projections_family of b1,a3 st cods a4 = cods b2 holds
ex b3 being Morphism of a1 st
( b3 in Hom b1,a2 & ( for b4 being Morphism of a1 st b4 in Hom b1,a2 holds
( ( for b5 being set st b5 in a3 holds
(a4 /. b5) * b4 = b2 /. b5 ) iff b3 = b4 ) ) ) ) );
end;

:: deftheorem Def15 defines is_a_product_wrt CAT_3:def 15 :
for b1 being Category
for b2 being Object of b1
for b3 being set
for b4 being Function of b3,the Morphisms of b1 holds
( b2 is_a_product_wrt b4 iff ( b4 is Projections_family of b2,b3 & ( for b5 being Object of b1
for b6 being Projections_family of b5,b3 st cods b4 = cods b6 holds
ex b7 being Morphism of b1 st
( b7 in Hom b5,b2 & ( for b8 being Morphism of b1 st b8 in Hom b5,b2 holds
( ( for b9 being set st b9 in b3 holds
(b4 /. b9) * b8 = b6 /. b9 ) iff b7 = b8 ) ) ) ) ) );

theorem Th53: :: CAT_3:53
for b1 being set
for b2 being Category
for b3, b4 being Object of b2
for b5 being Projections_family of b3,b1
for b6 being Projections_family of b4,b1 st b3 is_a_product_wrt b5 & b4 is_a_product_wrt b6 & cods b5 = cods b6 holds
b3,b4 are_isomorphic
proof end;

theorem Th54: :: CAT_3:54
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Projections_family of b3,b1 st b3 is_a_product_wrt b4 & ( for b5, b6 being set st b5 in b1 & b6 in b1 holds
Hom (cod (b4 /. b5)),(cod (b4 /. b6)) <> {} ) holds
for b5 being set st b5 in b1 holds
b4 /. b5 is retraction
proof end;

theorem Th55: :: CAT_3:55
for b1 being Category
for b2 being Object of b1
for b3 being Function of {} ,the Morphisms of b1 holds
( b2 is_a_product_wrt b3 iff b2 is terminal )
proof end;

theorem Th56: :: CAT_3:56
for b1 being set
for b2 being Category
for b3, b4 being Object of b2
for b5 being Morphism of b2
for b6 being Projections_family of b3,b1 st b3 is_a_product_wrt b6 & dom b5 = b4 & cod b5 = b3 & b5 is invertible holds
b4 is_a_product_wrt b6 * b5
proof end;

theorem Th57: :: CAT_3:57
for b1 being set
for b2 being Category
for b3 being Object of b2 holds b3 is_a_product_wrt b1 .--> (id b3)
proof end;

theorem Th58: :: CAT_3:58
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Projections_family of b3,b1 st b3 is_a_product_wrt b4 & ( for b5 being set st b5 in b1 holds
cod (b4 /. b5) is terminal ) holds
b3 is terminal
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3, c4 be Morphism of c1;
pred c2 is_a_product_wrt c3,c4 means :Def16: :: CAT_3:def 16
( dom a3 = a2 & dom a4 = a2 & ( for b1 being Object of a1
for b2, b3 being Morphism of a1 st b2 in Hom b1,(cod a3) & b3 in Hom b1,(cod a4) holds
ex b4 being Morphism of a1 st
( b4 in Hom b1,a2 & ( for b5 being Morphism of a1 st b5 in Hom b1,a2 holds
( ( a3 * b5 = b2 & a4 * b5 = b3 ) iff b4 = b5 ) ) ) ) );
end;

:: deftheorem Def16 defines is_a_product_wrt CAT_3:def 16 :
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 holds
( b2 is_a_product_wrt b3,b4 iff ( dom b3 = b2 & dom b4 = b2 & ( for b5 being Object of b1
for b6, b7 being Morphism of b1 st b6 in Hom b5,(cod b3) & b7 in Hom b5,(cod b4) holds
ex b8 being Morphism of b1 st
( b8 in Hom b5,b2 & ( for b9 being Morphism of b1 st b9 in Hom b5,b2 holds
( ( b3 * b9 = b6 & b4 * b9 = b7 ) iff b8 = b9 ) ) ) ) ) );

theorem Th59: :: CAT_3:59
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5, b6 being Morphism of b3 st b1 <> b2 holds
( b4 is_a_product_wrt b5,b6 iff b4 is_a_product_wrt b1,b2 --> b5,b6 )
proof end;

theorem Th60: :: CAT_3:60
for b1 being Category
for b2, b3, b4 being Object of b1 st Hom b2,b3 <> {} & Hom b2,b4 <> {} holds
for b5 being Morphism of b2,b3
for b6 being Morphism of b2,b4 holds
( b2 is_a_product_wrt b5,b6 iff for b7 being Object of b1 st Hom b7,b3 <> {} & Hom b7,b4 <> {} holds
( Hom b7,b2 <> {} & ( for b8 being Morphism of b7,b3
for b9 being Morphism of b7,b4 ex b10 being Morphism of b7,b2 st
for b11 being Morphism of b7,b2 holds
( ( b5 * b11 = b8 & b6 * b11 = b9 ) iff b10 = b11 ) ) ) )
proof end;

theorem Th61: :: CAT_3:61
for b1 being Category
for b2, b3 being Object of b1
for b4, b5, b6, b7 being Morphism of b1 st b2 is_a_product_wrt b4,b5 & b3 is_a_product_wrt b6,b7 & cod b4 = cod b6 & cod b5 = cod b7 holds
b2,b3 are_isomorphic
proof end;

theorem Th62: :: CAT_3:62
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_product_wrt b3,b4 & Hom (cod b3),(cod b4) <> {} & Hom (cod b4),(cod b3) <> {} holds
( b3 is retraction & b4 is retraction )
proof end;

theorem Th63: :: CAT_3:63
for b1 being Category
for b2 being Object of b1
for b3, b4, b5 being Morphism of b1 st b2 is_a_product_wrt b3,b4 & b5 in Hom b2,b2 & b3 * b5 = b3 & b4 * b5 = b4 holds
b5 = id b2
proof end;

theorem Th64: :: CAT_3:64
for b1 being Category
for b2, b3 being Object of b1
for b4, b5, b6 being Morphism of b1 st b2 is_a_product_wrt b4,b5 & dom b6 = b3 & cod b6 = b2 & b6 is invertible holds
b3 is_a_product_wrt b4 * b6,b5 * b6
proof end;

theorem Th65: :: CAT_3:65
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_product_wrt b3,b4 & cod b4 is terminal holds
b2, cod b3 are_isomorphic
proof end;

theorem Th66: :: CAT_3:66
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_product_wrt b3,b4 & cod b3 is terminal holds
b2, cod b4 are_isomorphic
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3 be set ;
mode Injections_family of c2,c3 -> Function of a3,the Morphisms of a1 means :Def17: :: CAT_3:def 17
cods a4 = a3 --> a2;
existence
ex b1 being Function of c3,the Morphisms of c1 st cods b1 = c3 --> c2
proof end;
end;

:: deftheorem Def17 defines Injections_family CAT_3:def 17 :
for b1 being Category
for b2 being Object of b1
for b3 being set
for b4 being Function of b3,the Morphisms of b1 holds
( b4 is Injections_family of b2,b3 iff cods b4 = b3 --> b2 );

theorem Th67: :: CAT_3:67
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5 being Injections_family of b4,b1 st b2 in b1 holds
cod (b5 /. b2) = b4
proof end;

theorem Th68: :: CAT_3:68
for b1 being Category
for b2 being Object of b1
for b3 being Function of {} ,the Morphisms of b1 holds b3 is Injections_family of b2, {}
proof end;

theorem Th69: :: CAT_3:69
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Morphism of b2 st cod b4 = b3 holds
b1 .--> b4 is Injections_family of b3,{b1}
proof end;

theorem Th70: :: CAT_3:70
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5, b6 being Morphism of b3 st cod b5 = b4 & cod b6 = b4 holds
b1,b2 --> b5,b6 is Injections_family of b4,{b1,b2}
proof end;

theorem Th71: :: CAT_3:71
canceled;

theorem Th72: :: CAT_3:72
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Morphism of b2
for b5 being Injections_family of b3,b1 st dom b4 = b3 holds
b4 * b5 is Injections_family of cod b4,b1
proof end;

theorem Th73: :: CAT_3:73
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Injections_family of b3,b1
for b5 being Function of b1,the Morphisms of b2 st doms b4 = cods b5 holds
b4 "*" b5 is Injections_family of b3,b1
proof end;

theorem Th74: :: CAT_3:74
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Function of b1,the Morphisms of b2 holds
( b4 is Projections_family of b3,b1 iff b4 opp is Injections_family of b3 opp ,b1 )
proof end;

theorem Th75: :: CAT_3:75
for b1 being set
for b2 being Category
for b3 being Function of b1,the Morphisms of (b2 opp )
for b4 being Object of (b2 opp ) holds
( b3 is Injections_family of b4,b1 iff opp b3 is Projections_family of opp b4,b1 )
proof end;

theorem Th76: :: CAT_3:76
for b1 being set
for b2 being Category
for b3 being Morphism of b2
for b4 being Injections_family of dom b3,b1 holds (b4 opp ) * (b3 opp ) = (b3 * b4) opp
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3 be set ;
let c4 be Function of c3,the Morphisms of c1;
pred c2 is_a_coproduct_wrt c4 means :Def18: :: CAT_3:def 18
( a4 is Injections_family of a2,a3 & ( for b1 being Object of a1
for b2 being Injections_family of b1,a3 st doms a4 = doms b2 holds
ex b3 being Morphism of a1 st
( b3 in Hom a2,b1 & ( for b4 being Morphism of a1 st b4 in Hom a2,b1 holds
( ( for b5 being set st b5 in a3 holds
b4 * (a4 /. b5) = b2 /. b5 ) iff b3 = b4 ) ) ) ) );
end;

:: deftheorem Def18 defines is_a_coproduct_wrt CAT_3:def 18 :
for b1 being Category
for b2 being Object of b1
for b3 being set
for b4 being Function of b3,the Morphisms of b1 holds
( b2 is_a_coproduct_wrt b4 iff ( b4 is Injections_family of b2,b3 & ( for b5 being Object of b1
for b6 being Injections_family of b5,b3 st doms b4 = doms b6 holds
ex b7 being Morphism of b1 st
( b7 in Hom b2,b5 & ( for b8 being Morphism of b1 st b8 in Hom b2,b5 holds
( ( for b9 being set st b9 in b3 holds
b8 * (b4 /. b9) = b6 /. b9 ) iff b7 = b8 ) ) ) ) ) );

theorem Th77: :: CAT_3:77
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Function of b1,the Morphisms of b2 holds
( b3 is_a_product_wrt b4 iff b3 opp is_a_coproduct_wrt b4 opp )
proof end;

theorem Th78: :: CAT_3:78
for b1 being set
for b2 being Category
for b3, b4 being Object of b2
for b5 being Injections_family of b3,b1
for b6 being Injections_family of b4,b1 st b3 is_a_coproduct_wrt b5 & b4 is_a_coproduct_wrt b6 & doms b5 = doms b6 holds
b3,b4 are_isomorphic
proof end;

theorem Th79: :: CAT_3:79
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Injections_family of b3,b1 st b3 is_a_coproduct_wrt b4 & ( for b5, b6 being set st b5 in b1 & b6 in b1 holds
Hom (dom (b4 /. b5)),(dom (b4 /. b6)) <> {} ) holds
for b5 being set st b5 in b1 holds
b4 /. b5 is coretraction
proof end;

theorem Th80: :: CAT_3:80
for b1 being set
for b2 being Category
for b3, b4 being Object of b2
for b5 being Morphism of b2
for b6 being Injections_family of b3,b1 st b3 is_a_coproduct_wrt b6 & dom b5 = b3 & cod b5 = b4 & b5 is invertible holds
b4 is_a_coproduct_wrt b5 * b6
proof end;

theorem Th81: :: CAT_3:81
for b1 being Category
for b2 being Object of b1
for b3 being Injections_family of b2, {} holds
( b2 is_a_coproduct_wrt b3 iff b2 is initial )
proof end;

theorem Th82: :: CAT_3:82
for b1 being set
for b2 being Category
for b3 being Object of b2 holds b3 is_a_coproduct_wrt b1 .--> (id b3)
proof end;

theorem Th83: :: CAT_3:83
for b1 being set
for b2 being Category
for b3 being Object of b2
for b4 being Injections_family of b3,b1 st b3 is_a_coproduct_wrt b4 & ( for b5 being set st b5 in b1 holds
dom (b4 /. b5) is initial ) holds
b3 is initial
proof end;

definition
let c1 be Category;
let c2 be Object of c1;
let c3, c4 be Morphism of c1;
pred c2 is_a_coproduct_wrt c3,c4 means :Def19: :: CAT_3:def 19
( cod a3 = a2 & cod a4 = a2 & ( for b1 being Object of a1
for b2, b3 being Morphism of a1 st b2 in Hom (dom a3),b1 & b3 in Hom (dom a4),b1 holds
ex b4 being Morphism of a1 st
( b4 in Hom a2,b1 & ( for b5 being Morphism of a1 st b5 in Hom a2,b1 holds
( ( b5 * a3 = b2 & b5 * a4 = b3 ) iff b4 = b5 ) ) ) ) );
end;

:: deftheorem Def19 defines is_a_coproduct_wrt CAT_3:def 19 :
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 holds
( b2 is_a_coproduct_wrt b3,b4 iff ( cod b3 = b2 & cod b4 = b2 & ( for b5 being Object of b1
for b6, b7 being Morphism of b1 st b6 in Hom (dom b3),b5 & b7 in Hom (dom b4),b5 holds
ex b8 being Morphism of b1 st
( b8 in Hom b2,b5 & ( for b9 being Morphism of b1 st b9 in Hom b2,b5 holds
( ( b9 * b3 = b6 & b9 * b4 = b7 ) iff b8 = b9 ) ) ) ) ) );

theorem Th84: :: CAT_3:84
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 holds
( b2 is_a_product_wrt b3,b4 iff b2 opp is_a_coproduct_wrt b3 opp ,b4 opp )
proof end;

theorem Th85: :: CAT_3:85
for b1, b2 being set
for b3 being Category
for b4 being Object of b3
for b5, b6 being Morphism of b3 st b1 <> b2 holds
( b4 is_a_coproduct_wrt b5,b6 iff b4 is_a_coproduct_wrt b1,b2 --> b5,b6 )
proof end;

theorem Th86: :: CAT_3:86
for b1 being Category
for b2, b3 being Object of b1
for b4, b5, b6, b7 being Morphism of b1 st b2 is_a_coproduct_wrt b4,b5 & b3 is_a_coproduct_wrt b6,b7 & dom b4 = dom b6 & dom b5 = dom b7 holds
b2,b3 are_isomorphic
proof end;

theorem Th87: :: CAT_3:87
for b1 being Category
for b2, b3, b4 being Object of b1 st Hom b2,b3 <> {} & Hom b4,b3 <> {} holds
for b5 being Morphism of b2,b3
for b6 being Morphism of b4,b3 holds
( b3 is_a_coproduct_wrt b5,b6 iff for b7 being Object of b1 st Hom b2,b7 <> {} & Hom b4,b7 <> {} holds
( Hom b3,b7 <> {} & ( for b8 being Morphism of b2,b7
for b9 being Morphism of b4,b7 ex b10 being Morphism of b3,b7 st
for b11 being Morphism of b3,b7 holds
( ( b11 * b5 = b8 & b11 * b6 = b9 ) iff b10 = b11 ) ) ) )
proof end;

theorem Th88: :: CAT_3:88
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_coproduct_wrt b3,b4 & Hom (dom b3),(dom b4) <> {} & Hom (dom b4),(dom b3) <> {} holds
( b3 is coretraction & b4 is coretraction )
proof end;

theorem Th89: :: CAT_3:89
for b1 being Category
for b2 being Object of b1
for b3, b4, b5 being Morphism of b1 st b2 is_a_coproduct_wrt b3,b4 & b5 in Hom b2,b2 & b5 * b3 = b3 & b5 * b4 = b4 holds
b5 = id b2
proof end;

theorem Th90: :: CAT_3:90
for b1 being Category
for b2, b3 being Object of b1
for b4, b5, b6 being Morphism of b1 st b2 is_a_coproduct_wrt b4,b5 & dom b6 = b2 & cod b6 = b3 & b6 is invertible holds
b3 is_a_coproduct_wrt b6 * b4,b6 * b5
proof end;

theorem Th91: :: CAT_3:91
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_coproduct_wrt b3,b4 & dom b4 is initial holds
dom b3,b2 are_isomorphic
proof end;

theorem Th92: :: CAT_3:92
for b1 being Category
for b2 being Object of b1
for b3, b4 being Morphism of b1 st b2 is_a_coproduct_wrt b3,b4 & dom b3 is initial holds
dom b4,b2 are_isomorphic
proof end;