:: ALTCAT_4 semantic presentation

registration
let c1 be non empty with_units AltCatStr ;
let c2 be object of c1;
cluster <^a2,a2^> -> non empty ;
coherence
not <^c2,c2^> is empty
by ALTCAT_1:23;
end;

theorem Th1: :: ALTCAT_4:1
for b1 being category
for b2, b3, b4 being object of b1
for b5 being Morphism of b2,b3
for b6 being Morphism of b2,b4
for b7 being Morphism of b3,b4 st b6 = b7 * b5 & (b7 " ) * b7 = idm b3 & <^b2,b3^> <> {} & <^b3,b4^> <> {} & <^b4,b3^> <> {} holds
b5 = (b7 " ) * b6
proof end;

theorem Th2: :: ALTCAT_4:2
for b1 being category
for b2, b3, b4 being object of b1
for b5 being Morphism of b2,b3
for b6 being Morphism of b4,b3
for b7 being Morphism of b4,b2 st b6 = b5 * b7 & b7 * (b7 " ) = idm b2 & <^b4,b2^> <> {} & <^b2,b4^> <> {} & <^b2,b3^> <> {} holds
b5 = b6 * (b7 " )
proof end;

theorem Th3: :: ALTCAT_4:3
for b1 being category
for b2, b3 being object of b1
for b4 being Morphism of b2,b3 st <^b2,b3^> <> {} & <^b3,b2^> <> {} & b4 is iso holds
b4 " is iso
proof end;

theorem Th4: :: ALTCAT_4:4
for b1 being non empty with_units AltCatStr
for b2 being object of b1 holds
( idm b2 is epi & idm b2 is mono )
proof end;

registration
let c1 be non empty with_units AltCatStr ;
let c2 be object of c1;
cluster idm a2 -> retraction coretraction mono epi ;
coherence
( idm c2 is epi & idm c2 is mono & idm c2 is retraction & idm c2 is coretraction )
by Th4, ALTCAT_3:1;
end;

registration
let c1 be category;
let c2 be object of c1;
cluster idm a2 -> retraction coretraction iso mono epi ;
coherence
idm c2 is iso
by ALTCAT_3:6;
end;

theorem Th5: :: ALTCAT_4:5
for b1 being category
for b2, b3 being object of b1
for b4 being Morphism of b2,b3
for b5, b6 being Morphism of b3,b2 st b6 * b4 = idm b2 & b4 * b5 = idm b3 & <^b2,b3^> <> {} & <^b3,b2^> <> {} holds
b5 = b6
proof end;

theorem Th6: :: ALTCAT_4:6
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds b4 is coretraction ) holds
for b2, b3 being object of b1
for b4 being Morphism of b2,b3 st <^b2,b3^> <> {} & <^b3,b2^> <> {} holds
b4 is iso
proof end;

theorem Th7: :: ALTCAT_4:7
for b1 being category
for b2, b3 being object of b1
for b4, b5 being Morphism of b2,b3 st b4 is _zero & b5 is _zero & ex b6 being object of b1 st b6 is _zero holds
b4 = b5
proof end;

theorem Th8: :: ALTCAT_4:8
for b1 being non empty AltCatStr
for b2, b3 being object of b1
for b4 being Morphism of b2,b3 st b2 is terminal holds
b4 is mono
proof end;

theorem Th9: :: ALTCAT_4:9
for b1 being non empty AltCatStr
for b2, b3 being object of b1
for b4 being Morphism of b3,b2 st b2 is initial holds
b4 is epi
proof end;

theorem Th10: :: ALTCAT_4:10
for b1 being category
for b2, b3 being object of b1 st b2 is terminal & b3,b2 are_iso holds
b3 is terminal
proof end;

theorem Th11: :: ALTCAT_4:11
for b1 being category
for b2, b3 being object of b1 st b2 is initial & b2,b3 are_iso holds
b3 is initial
proof end;

theorem Th12: :: ALTCAT_4:12
for b1 being category
for b2, b3 being object of b1 st b2 is initial & b3 is terminal & <^b3,b2^> <> {} holds
( b3 is initial & b2 is terminal )
proof end;

theorem Th13: :: ALTCAT_4:13
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being contravariant Functor of b1,b2
for b4 being object of b1 holds b3 . (idm b4) = idm (b3 . b4)
proof end;

theorem Th14: :: ALTCAT_4:14
for b1, b2 being non empty AltCatStr
for b3 being Contravariant FunctorStr of b1,b2 holds
( b3 is full iff for b4, b5 being object of b1 holds Morph-Map b3,b5,b4 is onto )
proof end;

theorem Th15: :: ALTCAT_4:15
for b1, b2 being non empty AltCatStr
for b3 being Contravariant FunctorStr of b1,b2 holds
( b3 is faithful iff for b4, b5 being object of b1 holds Morph-Map b3,b5,b4 is one-to-one )
proof end;

theorem Th16: :: ALTCAT_4:16
for b1, b2 being non empty AltCatStr
for b3 being Covariant FunctorStr of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of (b3 . b4),(b3 . b5) st <^b4,b5^> <> {} & b3 is full & b3 is feasible holds
ex b7 being Morphism of b4,b5 st b6 = b3 . b7
proof end;

theorem Th17: :: ALTCAT_4:17
for b1, b2 being non empty AltCatStr
for b3 being Contravariant FunctorStr of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of (b3 . b5),(b3 . b4) st <^b4,b5^> <> {} & b3 is full & b3 is feasible holds
ex b7 being Morphism of b4,b5 st b6 = b3 . b7
proof end;

theorem Th18: :: ALTCAT_4:18
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is retraction holds
b3 . b6 is retraction
proof end;

theorem Th19: :: ALTCAT_4:19
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is coretraction holds
b3 . b6 is coretraction
proof end;

theorem Th20: :: ALTCAT_4:20
for b1, b2 being category
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is iso holds
b3 . b6 is iso
proof end;

theorem Th21: :: ALTCAT_4:21
for b1, b2 being category
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1 st b4,b5 are_iso holds
b3 . b4,b3 . b5 are_iso
proof end;

theorem Th22: :: ALTCAT_4:22
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is retraction holds
b3 . b6 is coretraction
proof end;

theorem Th23: :: ALTCAT_4:23
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is coretraction holds
b3 . b6 is retraction
proof end;

theorem Th24: :: ALTCAT_4:24
for b1, b2 being category
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st <^b4,b5^> <> {} & <^b5,b4^> <> {} & b6 is iso holds
b3 . b6 is iso
proof end;

theorem Th25: :: ALTCAT_4:25
for b1, b2 being category
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1 st b4,b5 are_iso holds
b3 . b5,b3 . b4 are_iso
proof end;

theorem Th26: :: ALTCAT_4:26
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is retraction holds
b6 is retraction
proof end;

theorem Th27: :: ALTCAT_4:27
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is coretraction holds
b6 is coretraction
proof end;

theorem Th28: :: ALTCAT_4:28
for b1, b2 being category
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is iso holds
b6 is iso
proof end;

theorem Th29: :: ALTCAT_4:29
for b1, b2 being category
for b3 being covariant Functor of b1,b2
for b4, b5 being object of b1 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b4,b3 . b5 are_iso holds
b4,b5 are_iso
proof end;

theorem Th30: :: ALTCAT_4:30
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is retraction holds
b6 is coretraction
proof end;

theorem Th31: :: ALTCAT_4:31
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is coretraction holds
b6 is retraction
proof end;

theorem Th32: :: ALTCAT_4:32
for b1, b2 being category
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1
for b6 being Morphism of b4,b5 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b6 is iso holds
b6 is iso
proof end;

theorem Th33: :: ALTCAT_4:33
for b1, b2 being category
for b3 being contravariant Functor of b1,b2
for b4, b5 being object of b1 st b3 is full & b3 is faithful & <^b4,b5^> <> {} & <^b5,b4^> <> {} & b3 . b5,b3 . b4 are_iso holds
b4,b5 are_iso
proof end;

E22: now
let c1 be non empty transitive AltCatStr ;
let c2, c3, c4 be object of c1;
assume E23: the Arrows of c1 . c2,c4 = {} ;
thus [:(the Arrows of c1 . c3,c4),(the Arrows of c1 . c2,c3):] = {}
proof
assume [:(the Arrows of c1 . c3,c4),(the Arrows of c1 . c2,c3):] <> {} ;
then consider c5 being set such that
E24: c5 in [:(the Arrows of c1 . c3,c4),(the Arrows of c1 . c2,c3):] by XBOOLE_0:def 1;
consider c6, c7 being set such that
E25: ( c6 in the Arrows of c1 . c3,c4 & c7 in the Arrows of c1 . c2,c3 & c5 = [c6,c7] ) by E24, ZFMISC_1:def 2;
( c6 in <^c3,c4^> & c7 in <^c2,c3^> ) by E25;
then <^c2,c4^> <> {} by ALTCAT_1:def 4;
hence contradiction by E23;
end;
end;

theorem Th34: :: ALTCAT_4:34
for b1 being AltCatStr
for b2 being SubCatStr of b1 st the carrier of b1 = the carrier of b2 & the Arrows of b1 = the Arrows of b2 holds
b2 is full
proof end;

theorem Th35: :: ALTCAT_4:35
for b1 being non empty with_units AltCatStr
for b2 being SubCatStr of b1 st the carrier of b1 = the carrier of b2 & the Arrows of b1 = the Arrows of b2 holds
( b2 is full & b2 is id-inheriting )
proof end;

registration
let c1 be category;
cluster non empty strict full SubCatStr of a1;
existence
ex b1 being subcategory of c1 st
( b1 is full & not b1 is empty & b1 is strict )
proof end;
end;

theorem Th36: :: ALTCAT_4:36
for b1 being category
for b2 being non empty subcategory of b1
for b3 being non empty subcategory of b2 holds b3 is non empty subcategory of b1
proof end;

theorem Th37: :: ALTCAT_4:37
for b1 being non empty transitive AltCatStr
for b2 being non empty transitive SubCatStr of b1
for b3, b4 being object of b1
for b5, b6 being object of b2
for b7 being Morphism of b3,b4
for b8 being Morphism of b5,b6 st b5 = b3 & b6 = b4 & b7 = b8 & <^b5,b6^> <> {} holds
( ( b7 is mono implies b8 is mono ) & ( b7 is epi implies b8 is epi ) )
proof end;

theorem Th38: :: ALTCAT_4:38
for b1 being category
for b2 being non empty subcategory of b1
for b3, b4 being object of b1
for b5, b6 being object of b2
for b7 being Morphism of b3,b4
for b8 being Morphism of b4,b3
for b9 being Morphism of b5,b6
for b10 being Morphism of b6,b5 st b5 = b3 & b6 = b4 & b7 = b9 & b8 = b10 & <^b5,b6^> <> {} & <^b6,b5^> <> {} holds
( ( b7 is_left_inverse_of b8 implies b9 is_left_inverse_of b10 ) & ( b9 is_left_inverse_of b10 implies b7 is_left_inverse_of b8 ) & ( b7 is_right_inverse_of b8 implies b9 is_right_inverse_of b10 ) & ( b9 is_right_inverse_of b10 implies b7 is_right_inverse_of b8 ) )
proof end;

theorem Th39: :: ALTCAT_4:39
for b1 being category
for b2 being non empty full subcategory of b1
for b3, b4 being object of b1
for b5, b6 being object of b2
for b7 being Morphism of b3,b4
for b8 being Morphism of b5,b6 st b5 = b3 & b6 = b4 & b7 = b8 & <^b5,b6^> <> {} & <^b6,b5^> <> {} holds
( ( b7 is retraction implies b8 is retraction ) & ( b7 is coretraction implies b8 is coretraction ) & ( b7 is iso implies b8 is iso ) )
proof end;

theorem Th40: :: ALTCAT_4:40
for b1 being category
for b2 being non empty subcategory of b1
for b3, b4 being object of b1
for b5, b6 being object of b2
for b7 being Morphism of b3,b4
for b8 being Morphism of b5,b6 st b5 = b3 & b6 = b4 & b7 = b8 & <^b5,b6^> <> {} & <^b6,b5^> <> {} holds
( ( b8 is retraction implies b7 is retraction ) & ( b8 is coretraction implies b7 is coretraction ) & ( b8 is iso implies b7 is iso ) )
proof end;

definition
let c1 be category;
func AllMono c1 -> non empty transitive strict SubCatStr of a1 means :Def1: :: ALTCAT_4:def 1
( the carrier of a2 = the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & ( for b1, b2 being object of a1
for b3 being Morphism of b1,b2 holds
( b3 in the Arrows of a2 . b1,b2 iff ( <^b1,b2^> <> {} & b3 is mono ) ) ) );
existence
ex b1 being non empty transitive strict SubCatStr of c1 st
( the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b2, b3 being object of c1
for b4 being Morphism of b2,b3 holds
( b4 in the Arrows of b1 . b2,b3 iff ( <^b2,b3^> <> {} & b4 is mono ) ) ) )
proof end;
uniqueness
for b1, b2 being non empty transitive strict SubCatStr of c1 st the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b1 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is mono ) ) ) & the carrier of b2 = the carrier of c1 & the Arrows of b2 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is mono ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines AllMono ALTCAT_4:def 1 :
for b1 being category
for b2 being non empty transitive strict SubCatStr of b1 holds
( b2 = AllMono b1 iff ( the carrier of b2 = the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & ( for b3, b4 being object of b1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is mono ) ) ) ) );

registration
let c1 be category;
cluster AllMono a1 -> non empty transitive strict id-inheriting ;
coherence
AllMono c1 is id-inheriting
proof end;
end;

definition
let c1 be category;
func AllEpi c1 -> non empty transitive strict SubCatStr of a1 means :Def2: :: ALTCAT_4:def 2
( the carrier of a2 = the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & ( for b1, b2 being object of a1
for b3 being Morphism of b1,b2 holds
( b3 in the Arrows of a2 . b1,b2 iff ( <^b1,b2^> <> {} & b3 is epi ) ) ) );
existence
ex b1 being non empty transitive strict SubCatStr of c1 st
( the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b2, b3 being object of c1
for b4 being Morphism of b2,b3 holds
( b4 in the Arrows of b1 . b2,b3 iff ( <^b2,b3^> <> {} & b4 is epi ) ) ) )
proof end;
uniqueness
for b1, b2 being non empty transitive strict SubCatStr of c1 st the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b1 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is epi ) ) ) & the carrier of b2 = the carrier of c1 & the Arrows of b2 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is epi ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines AllEpi ALTCAT_4:def 2 :
for b1 being category
for b2 being non empty transitive strict SubCatStr of b1 holds
( b2 = AllEpi b1 iff ( the carrier of b2 = the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & ( for b3, b4 being object of b1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & b5 is epi ) ) ) ) );

registration
let c1 be category;
cluster AllEpi a1 -> non empty transitive strict id-inheriting ;
coherence
AllEpi c1 is id-inheriting
proof end;
end;

definition
let c1 be category;
func AllRetr c1 -> non empty transitive strict SubCatStr of a1 means :Def3: :: ALTCAT_4:def 3
( the carrier of a2 = the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & ( for b1, b2 being object of a1
for b3 being Morphism of b1,b2 holds
( b3 in the Arrows of a2 . b1,b2 iff ( <^b1,b2^> <> {} & <^b2,b1^> <> {} & b3 is retraction ) ) ) );
existence
ex b1 being non empty transitive strict SubCatStr of c1 st
( the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b2, b3 being object of c1
for b4 being Morphism of b2,b3 holds
( b4 in the Arrows of b1 . b2,b3 iff ( <^b2,b3^> <> {} & <^b3,b2^> <> {} & b4 is retraction ) ) ) )
proof end;
uniqueness
for b1, b2 being non empty transitive strict SubCatStr of c1 st the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b1 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is retraction ) ) ) & the carrier of b2 = the carrier of c1 & the Arrows of b2 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is retraction ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines AllRetr ALTCAT_4:def 3 :
for b1 being category
for b2 being non empty transitive strict SubCatStr of b1 holds
( b2 = AllRetr b1 iff ( the carrier of b2 = the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & ( for b3, b4 being object of b1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is retraction ) ) ) ) );

registration
let c1 be category;
cluster AllRetr a1 -> non empty transitive strict id-inheriting ;
coherence
AllRetr c1 is id-inheriting
proof end;
end;

definition
let c1 be category;
func AllCoretr c1 -> non empty transitive strict SubCatStr of a1 means :Def4: :: ALTCAT_4:def 4
( the carrier of a2 = the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & ( for b1, b2 being object of a1
for b3 being Morphism of b1,b2 holds
( b3 in the Arrows of a2 . b1,b2 iff ( <^b1,b2^> <> {} & <^b2,b1^> <> {} & b3 is coretraction ) ) ) );
existence
ex b1 being non empty transitive strict SubCatStr of c1 st
( the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b2, b3 being object of c1
for b4 being Morphism of b2,b3 holds
( b4 in the Arrows of b1 . b2,b3 iff ( <^b2,b3^> <> {} & <^b3,b2^> <> {} & b4 is coretraction ) ) ) )
proof end;
uniqueness
for b1, b2 being non empty transitive strict SubCatStr of c1 st the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b1 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is coretraction ) ) ) & the carrier of b2 = the carrier of c1 & the Arrows of b2 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is coretraction ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines AllCoretr ALTCAT_4:def 4 :
for b1 being category
for b2 being non empty transitive strict SubCatStr of b1 holds
( b2 = AllCoretr b1 iff ( the carrier of b2 = the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & ( for b3, b4 being object of b1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is coretraction ) ) ) ) );

registration
let c1 be category;
cluster AllCoretr a1 -> non empty transitive strict id-inheriting ;
coherence
AllCoretr c1 is id-inheriting
proof end;
end;

definition
let c1 be category;
func AllIso c1 -> non empty transitive strict SubCatStr of a1 means :Def5: :: ALTCAT_4:def 5
( the carrier of a2 = the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & ( for b1, b2 being object of a1
for b3 being Morphism of b1,b2 holds
( b3 in the Arrows of a2 . b1,b2 iff ( <^b1,b2^> <> {} & <^b2,b1^> <> {} & b3 is iso ) ) ) );
existence
ex b1 being non empty transitive strict SubCatStr of c1 st
( the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b2, b3 being object of c1
for b4 being Morphism of b2,b3 holds
( b4 in the Arrows of b1 . b2,b3 iff ( <^b2,b3^> <> {} & <^b3,b2^> <> {} & b4 is iso ) ) ) )
proof end;
uniqueness
for b1, b2 being non empty transitive strict SubCatStr of c1 st the carrier of b1 = the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b1 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is iso ) ) ) & the carrier of b2 = the carrier of c1 & the Arrows of b2 cc= the Arrows of c1 & ( for b3, b4 being object of c1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is iso ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines AllIso ALTCAT_4:def 5 :
for b1 being category
for b2 being non empty transitive strict SubCatStr of b1 holds
( b2 = AllIso b1 iff ( the carrier of b2 = the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & ( for b3, b4 being object of b1
for b5 being Morphism of b3,b4 holds
( b5 in the Arrows of b2 . b3,b4 iff ( <^b3,b4^> <> {} & <^b4,b3^> <> {} & b5 is iso ) ) ) ) );

registration
let c1 be category;
cluster AllIso a1 -> non empty transitive strict id-inheriting ;
coherence
AllIso c1 is id-inheriting
proof end;
end;

theorem Th41: :: ALTCAT_4:41
for b1 being category holds AllIso b1 is non empty subcategory of AllRetr b1
proof end;

theorem Th42: :: ALTCAT_4:42
for b1 being category holds AllIso b1 is non empty subcategory of AllCoretr b1
proof end;

theorem Th43: :: ALTCAT_4:43
for b1 being category holds AllCoretr b1 is non empty subcategory of AllMono b1
proof end;

theorem Th44: :: ALTCAT_4:44
for b1 being category holds AllRetr b1 is non empty subcategory of AllEpi b1
proof end;

theorem Th45: :: ALTCAT_4:45
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds b4 is mono ) holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AllMono b1
proof end;

theorem Th46: :: ALTCAT_4:46
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds b4 is epi ) holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AllEpi b1
proof end;

theorem Th47: :: ALTCAT_4:47
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds
( b4 is retraction & <^b3,b2^> <> {} ) ) holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AllRetr b1
proof end;

theorem Th48: :: ALTCAT_4:48
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds
( b4 is coretraction & <^b3,b2^> <> {} ) ) holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AllCoretr b1
proof end;

theorem Th49: :: ALTCAT_4:49
for b1 being category st ( for b2, b3 being object of b1
for b4 being Morphism of b2,b3 holds
( b4 is iso & <^b3,b2^> <> {} ) ) holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AllIso b1
proof end;

theorem Th50: :: ALTCAT_4:50
for b1 being category
for b2, b3 being object of (AllMono b1)
for b4 being Morphism of b2,b3 st <^b2,b3^> <> {} holds
b4 is mono
proof end;

theorem Th51: :: ALTCAT_4:51
for b1 being category
for b2, b3 being object of (AllEpi b1)
for b4 being Morphism of b2,b3 st <^b2,b3^> <> {} holds
b4 is epi
proof end;

theorem Th52: :: ALTCAT_4:52
for b1 being category
for b2, b3 being object of (AllIso b1)
for b4 being Morphism of b2,b3 st <^b2,b3^> <> {} holds
( b4 is iso & b4 " in <^b3,b2^> )
proof end;

theorem Th53: :: ALTCAT_4:53
for b1 being category holds AllMono (AllMono b1) = AllMono b1
proof end;

theorem Th54: :: ALTCAT_4:54
for b1 being category holds AllEpi (AllEpi b1) = AllEpi b1
proof end;

theorem Th55: :: ALTCAT_4:55
for b1 being category holds AllIso (AllIso b1) = AllIso b1
proof end;

theorem Th56: :: ALTCAT_4:56
for b1 being category holds AllIso (AllMono b1) = AllIso b1
proof end;

theorem Th57: :: ALTCAT_4:57
for b1 being category holds AllIso (AllEpi b1) = AllIso b1
proof end;

theorem Th58: :: ALTCAT_4:58
for b1 being category holds AllIso (AllRetr b1) = AllIso b1
proof end;

theorem Th59: :: ALTCAT_4:59
for b1 being category holds AllIso (AllCoretr b1) = AllIso b1
proof end;