:: ALTCAT_2 semantic presentation

theorem Th1: :: ALTCAT_2:1
for b1, b2, b3, b4 being set holds [:(b1 --> b3),(b2 --> b4):] = [:b1,b2:] --> [b3,b4]
proof end;

registration
let c1 be set ;
cluster [0] a1 -> Function-yielding ;
coherence
[0] c1 is Function-yielding
proof end;
end;

theorem Th2: :: ALTCAT_2:2
for b1, b2 being Function holds ~ (b2 * b1) = b2 * (~ b1)
proof end;

theorem Th3: :: ALTCAT_2:3
for b1, b2, b3 being Function holds ~ (b1 * [:b2,b3:]) = (~ b1) * [:b3,b2:]
proof end;

registration
let c1 be Function-yielding Function;
cluster ~ a1 -> Function-yielding ;
coherence
~ c1 is Function-yielding
proof end;
end;

theorem Th4: :: ALTCAT_2:4
for b1 being set
for b2, b3, b4 being ManySortedSet of b1 st b2 is_transformable_to b3 holds
for b5 being ManySortedFunction of b2,b3
for b6 being ManySortedFunction of b3,b4 holds b6 ** b5 is ManySortedFunction of b2,b4
proof end;

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

theorem Th5: :: ALTCAT_2:5
for b1 being set
for b2 being non empty set
for b3 being Function of b1,b2
for b4, b5 being ManySortedSet of b2
for b6 being ManySortedFunction of b4,b5 holds b6 * b3 is ManySortedFunction of b4 * b3,b5 * b3
proof end;

definition
let c1 be set ;
let c2, c3 be ManySortedSet of [:c1,c1:];
let c4 be ManySortedFunction of c2,c3;
redefine func ~ as ~ c4 -> ManySortedFunction of ~ a2, ~ a3;
coherence
~ c4 is ManySortedFunction of ~ c2, ~ c3
proof end;
end;

theorem Th6: :: ALTCAT_2:6
for b1, b2 being non empty set
for b3 being ManySortedSet of [:b1,b2:]
for b4 being Element of b1
for b5 being Element of b2 holds (~ b3) . b5,b4 = b3 . b4,b5
proof end;

definition
let c1 be set ;
let c2, c3 be ManySortedFunction of c1;
redefine func ** as c3 ** c2 -> ManySortedFunction of a1;
coherence
c3 ** c2 is ManySortedFunction of c1
proof end;
end;

definition
let c1, c2 be Function;
pred c1 cc= c2 means :Def1: :: ALTCAT_2:def 1
( dom a1 c= dom a2 & ( for b1 being set st b1 in dom a1 holds
a1 . b1 c= a2 . b1 ) );
reflexivity
for b1 being Function holds
( dom b1 c= dom b1 & ( for b2 being set st b2 in dom b1 holds
b1 . b2 c= b1 . b2 ) )
;
end;

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

definition
let c1, c2 be set ;
let c3 be ManySortedSet of c1;
let c4 be ManySortedSet of c2;
redefine pred cc= as c3 cc= c4 means :Def2: :: ALTCAT_2:def 2
( a1 c= a2 & ( for b1 being set st b1 in a1 holds
a3 . b1 c= a4 . b1 ) );
compatibility
( c3 cc= c4 iff ( c1 c= c2 & ( for b1 being set st b1 in c1 holds
c3 . b1 c= c4 . b1 ) ) )
proof end;
end;

:: deftheorem Def2 defines cc= ALTCAT_2:def 2 :
for b1, b2 being set
for b3 being ManySortedSet of b1
for b4 being ManySortedSet of b2 holds
( b3 cc= b4 iff ( b1 c= b2 & ( for b5 being set st b5 in b1 holds
b3 . b5 c= b4 . b5 ) ) );

theorem Th7: :: ALTCAT_2:7
canceled;

theorem Th8: :: ALTCAT_2:8
for b1, b2 being set
for b3 being ManySortedSet of b1
for b4 being ManySortedSet of b2 st b3 cc= b4 & b4 cc= b3 holds
b3 = b4
proof end;

theorem Th9: :: ALTCAT_2:9
for b1, b2, b3 being set
for b4 being ManySortedSet of b1
for b5 being ManySortedSet of b2
for b6 being ManySortedSet of b3 st b4 cc= b5 & b5 cc= b6 holds
b4 cc= b6
proof end;

theorem Th10: :: ALTCAT_2:10
for b1 being set
for b2, b3 being ManySortedSet of b1 holds
( b2 cc= b3 iff b2 c= b3 )
proof end;

scheme :: ALTCAT_2:sch 1
s1{ F1() -> non empty set , F2( set ) -> set , P1[ set ] } :
{ [b1,F2(b1)] where B is Element of F1() : P1[b1] } is Function
proof end;

scheme :: ALTCAT_2:sch 2
s2{ F1() -> non empty set , F2() -> Function, F3( set ) -> set , P1[ set ] } :
dom F2() = { b1 where B is Element of F1() : P1[b1] }
provided
E5: F2() = { [b1,F3(b1)] where B is Element of F1() : P1[b1] }
proof end;

scheme :: ALTCAT_2:sch 3
s3{ F1() -> non empty set , F2() -> Function, F3() -> Element of F1(), F4( set ) -> set , P1[ set ] } :
F2() . F3() = F4(F3())
provided
E5: F2() = { [b1,F4(b1)] where B is Element of F1() : P1[b1] } and
E6: P1[F3()]
proof end;

theorem Th11: :: ALTCAT_2:11
for b1 being Category
for b2, b3, b4 being Object of b1 holds [:(Hom b3,b4),(Hom b2,b3):] c= dom the Comp of b1
proof end;

theorem Th12: :: ALTCAT_2:12
for b1 being Category
for b2, b3, b4 being Object of b1 holds the Comp of b1 .: [:(Hom b3,b4),(Hom b2,b3):] c= Hom b2,b4
proof end;

definition
let c1 be CatStr ;
func the_hom_sets_of c1 -> ManySortedSet of [:the Objects of a1,the Objects of a1:] means :Def3: :: ALTCAT_2:def 3
for b1, b2 being Object of a1 holds a2 . b1,b2 = Hom b1,b2;
existence
ex b1 being ManySortedSet of [:the Objects of c1,the Objects of c1:] st
for b2, b3 being Object of c1 holds b1 . b2,b3 = Hom b2,b3
proof end;
uniqueness
for b1, b2 being ManySortedSet of [:the Objects of c1,the Objects of c1:] st ( for b3, b4 being Object of c1 holds b1 . b3,b4 = Hom b3,b4 ) & ( for b3, b4 being Object of c1 holds b2 . b3,b4 = Hom b3,b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines the_hom_sets_of ALTCAT_2:def 3 :
for b1 being CatStr
for b2 being ManySortedSet of [:the Objects of b1,the Objects of b1:] holds
( b2 = the_hom_sets_of b1 iff for b3, b4 being Object of b1 holds b2 . b3,b4 = Hom b3,b4 );

theorem Th13: :: ALTCAT_2:13
for b1 being Category
for b2 being Object of b1 holds id b2 in (the_hom_sets_of b1) . b2,b2
proof end;

definition
let c1 be Category;
func the_comps_of c1 -> BinComp of (the_hom_sets_of a1) means :Def4: :: ALTCAT_2:def 4
for b1, b2, b3 being Object of a1 holds a2 . b1,b2,b3 = the Comp of a1 | [:((the_hom_sets_of a1) . b2,b3),((the_hom_sets_of a1) . b1,b2):];
existence
ex b1 being BinComp of (the_hom_sets_of c1) st
for b2, b3, b4 being Object of c1 holds b1 . b2,b3,b4 = the Comp of c1 | [:((the_hom_sets_of c1) . b3,b4),((the_hom_sets_of c1) . b2,b3):]
proof end;
uniqueness
for b1, b2 being BinComp of (the_hom_sets_of c1) st ( for b3, b4, b5 being Object of c1 holds b1 . b3,b4,b5 = the Comp of c1 | [:((the_hom_sets_of c1) . b4,b5),((the_hom_sets_of c1) . b3,b4):] ) & ( for b3, b4, b5 being Object of c1 holds b2 . b3,b4,b5 = the Comp of c1 | [:((the_hom_sets_of c1) . b4,b5),((the_hom_sets_of c1) . b3,b4):] ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines the_comps_of ALTCAT_2:def 4 :
for b1 being Category
for b2 being BinComp of (the_hom_sets_of b1) holds
( b2 = the_comps_of b1 iff for b3, b4, b5 being Object of b1 holds b2 . b3,b4,b5 = the Comp of b1 | [:((the_hom_sets_of b1) . b4,b5),((the_hom_sets_of b1) . b3,b4):] );

theorem Th14: :: ALTCAT_2:14
for b1 being Category
for b2, b3, b4 being Object of b1 st Hom b2,b3 <> {} & Hom b3,b4 <> {} holds
for b5 being Morphism of b2,b3
for b6 being Morphism of b3,b4 holds ((the_comps_of b1) . b2,b3,b4) . b6,b5 = b6 * b5
proof end;

theorem Th15: :: ALTCAT_2:15
for b1 being Category holds the_comps_of b1 is associative
proof end;

theorem Th16: :: ALTCAT_2:16
for b1 being Category holds
( the_comps_of b1 is with_left_units & the_comps_of b1 is with_right_units )
proof end;

definition
let c1 be Category;
func Alter c1 -> non empty strict AltCatStr equals :: ALTCAT_2:def 5
AltCatStr(# the Objects of a1,(the_hom_sets_of a1),(the_comps_of a1) #);
correctness
coherence
AltCatStr(# the Objects of c1,(the_hom_sets_of c1),(the_comps_of c1) #) is non empty strict AltCatStr
;
;
end;

:: deftheorem Def5 defines Alter ALTCAT_2:def 5 :
for b1 being Category holds Alter b1 = AltCatStr(# the Objects of b1,(the_hom_sets_of b1),(the_comps_of b1) #);

theorem Th17: :: ALTCAT_2:17
for b1 being Category holds Alter b1 is associative
proof end;

theorem Th18: :: ALTCAT_2:18
for b1 being Category holds Alter b1 is with_units
proof end;

theorem Th19: :: ALTCAT_2:19
for b1 being Category holds Alter b1 is transitive
proof end;

registration
let c1 be Category;
cluster Alter a1 -> non empty transitive strict associative with_units ;
coherence
( Alter c1 is transitive & Alter c1 is associative & Alter c1 is with_units )
by Th17, Th18, Th19;
end;

registration
cluster non empty strict AltGraph ;
existence
ex b1 being AltGraph st
( not b1 is empty & b1 is strict )
proof end;
end;

definition
let c1 be AltGraph ;
attr a1 is reflexive means :Def6: :: ALTCAT_2:def 6
for b1 being set st b1 in the carrier of a1 holds
the Arrows of a1 . b1,b1 <> {} ;
end;

:: deftheorem Def6 defines reflexive ALTCAT_2:def 6 :
for b1 being AltGraph holds
( b1 is reflexive iff for b2 being set st b2 in the carrier of b1 holds
the Arrows of b1 . b2,b2 <> {} );

definition
let c1 be non empty AltGraph ;
redefine attr a1 is reflexive means :: ALTCAT_2:def 7
for b1 being object of a1 holds <^b1,b1^> <> {} ;
compatibility
( c1 is reflexive iff for b1 being object of c1 holds <^b1,b1^> <> {} )
proof end;
end;

:: deftheorem Def7 defines reflexive ALTCAT_2:def 7 :
for b1 being non empty AltGraph holds
( b1 is reflexive iff for b2 being object of b1 holds <^b2,b2^> <> {} );

definition
let c1 be non empty transitive AltCatStr ;
redefine attr a1 is associative means :Def8: :: ALTCAT_2:def 8
for b1, b2, b3, b4 being object of a1
for b5 being Morphism of b1,b2
for b6 being Morphism of b2,b3
for b7 being Morphism of b3,b4 st <^b1,b2^> <> {} & <^b2,b3^> <> {} & <^b3,b4^> <> {} holds
(b7 * b6) * b5 = b7 * (b6 * b5);
compatibility
( c1 is associative iff for b1, b2, b3, b4 being object of c1
for b5 being Morphism of b1,b2
for b6 being Morphism of b2,b3
for b7 being Morphism of b3,b4 st <^b1,b2^> <> {} & <^b2,b3^> <> {} & <^b3,b4^> <> {} holds
(b7 * b6) * b5 = b7 * (b6 * b5) )
proof end;
end;

:: deftheorem Def8 defines associative ALTCAT_2:def 8 :
for b1 being non empty transitive AltCatStr holds
( b1 is associative iff for b2, b3, b4, b5 being object of b1
for b6 being Morphism of b2,b3
for b7 being Morphism of b3,b4
for b8 being Morphism of b4,b5 st <^b2,b3^> <> {} & <^b3,b4^> <> {} & <^b4,b5^> <> {} holds
(b8 * b7) * b6 = b8 * (b7 * b6) );

definition
let c1 be non empty AltCatStr ;
redefine attr a1 is with_units means :: ALTCAT_2:def 9
for b1 being object of a1 holds
( <^b1,b1^> <> {} & ex b2 being Morphism of b1,b1 st
for b3 being object of a1
for b4 being Morphism of b3,b1
for b5 being Morphism of b1,b3 holds
( ( <^b3,b1^> <> {} implies b2 * b4 = b4 ) & ( <^b1,b3^> <> {} implies b5 * b2 = b5 ) ) );
compatibility
( c1 is with_units iff for b1 being object of c1 holds
( <^b1,b1^> <> {} & ex b2 being Morphism of b1,b1 st
for b3 being object of c1
for b4 being Morphism of b3,b1
for b5 being Morphism of b1,b3 holds
( ( <^b3,b1^> <> {} implies b2 * b4 = b4 ) & ( <^b1,b3^> <> {} implies b5 * b2 = b5 ) ) ) )
proof end;
end;

:: deftheorem Def9 defines with_units ALTCAT_2:def 9 :
for b1 being non empty AltCatStr holds
( b1 is with_units iff for b2 being object of b1 holds
( <^b2,b2^> <> {} & ex b3 being Morphism of b2,b2 st
for b4 being object of b1
for b5 being Morphism of b4,b2
for b6 being Morphism of b2,b4 holds
( ( <^b4,b2^> <> {} implies b3 * b5 = b5 ) & ( <^b2,b4^> <> {} implies b6 * b3 = b6 ) ) ) );

registration
cluster non empty with_units -> non empty reflexive AltCatStr ;
coherence
for b1 being non empty AltCatStr st b1 is with_units holds
b1 is reflexive
proof end;
end;

registration
cluster non empty reflexive AltGraph ;
existence
ex b1 being AltGraph st
( not b1 is empty & b1 is reflexive )
proof end;
end;

registration
cluster non empty reflexive AltCatStr ;
existence
ex b1 being AltCatStr st
( not b1 is empty & b1 is reflexive )
proof end;
end;

Lemma18: for b1, b2 being strict AltCatStr st the carrier of b1 is empty & the carrier of b2 is empty holds
b1 = b2
proof end;

definition
func the_empty_category -> strict AltCatStr means :Def10: :: ALTCAT_2:def 10
the carrier of a1 is empty;
existence
ex b1 being strict AltCatStr st the carrier of b1 is empty
proof end;
uniqueness
for b1, b2 being strict AltCatStr st the carrier of b1 is empty & the carrier of b2 is empty holds
b1 = b2
by Lemma18;
end;

:: deftheorem Def10 defines the_empty_category ALTCAT_2:def 10 :
for b1 being strict AltCatStr holds
( b1 = the_empty_category iff the carrier of b1 is empty );

registration
cluster the_empty_category -> empty strict ;
coherence
the_empty_category is empty
proof end;
end;

registration
cluster empty strict AltCatStr ;
existence
ex b1 being AltCatStr st
( b1 is empty & b1 is strict )
proof end;
end;

theorem Th20: :: ALTCAT_2:20
for b1 being empty strict AltCatStr holds b1 = the_empty_category
proof end;

definition
let c1 be AltCatStr ;
mode SubCatStr of c1 -> AltCatStr means :Def11: :: ALTCAT_2:def 11
( the carrier of a2 c= the carrier of a1 & the Arrows of a2 cc= the Arrows of a1 & the Comp of a2 cc= the Comp of a1 );
existence
ex b1 being AltCatStr st
( the carrier of b1 c= the carrier of c1 & the Arrows of b1 cc= the Arrows of c1 & the Comp of b1 cc= the Comp of c1 )
;
end;

:: deftheorem Def11 defines SubCatStr ALTCAT_2:def 11 :
for b1, b2 being AltCatStr holds
( b2 is SubCatStr of b1 iff ( the carrier of b2 c= the carrier of b1 & the Arrows of b2 cc= the Arrows of b1 & the Comp of b2 cc= the Comp of b1 ) );

theorem Th21: :: ALTCAT_2:21
for b1 being AltCatStr holds b1 is SubCatStr of b1
proof end;

theorem Th22: :: ALTCAT_2:22
for b1, b2, b3 being AltCatStr st b1 is SubCatStr of b2 & b2 is SubCatStr of b3 holds
b1 is SubCatStr of b3
proof end;

theorem Th23: :: ALTCAT_2:23
for b1, b2 being AltCatStr st b1 is SubCatStr of b2 & b2 is SubCatStr of b1 holds
AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #) = AltCatStr(# the carrier of b2,the Arrows of b2,the Comp of b2 #)
proof end;

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

definition
let c1 be non empty AltCatStr ;
let c2 be object of c1;
func ObCat c2 -> strict SubCatStr of a1 means :Def12: :: ALTCAT_2:def 12
( the carrier of a3 = {a2} & the Arrows of a3 = a2,a2 :-> <^a2,a2^> & the Comp of a3 = [a2,a2,a2] .--> (the Comp of a1 . a2,a2,a2) );
existence
ex b1 being strict SubCatStr of c1 st
( the carrier of b1 = {c2} & the Arrows of b1 = c2,c2 :-> <^c2,c2^> & the Comp of b1 = [c2,c2,c2] .--> (the Comp of c1 . c2,c2,c2) )
proof end;
uniqueness
for b1, b2 being strict SubCatStr of c1 st the carrier of b1 = {c2} & the Arrows of b1 = c2,c2 :-> <^c2,c2^> & the Comp of b1 = [c2,c2,c2] .--> (the Comp of c1 . c2,c2,c2) & the carrier of b2 = {c2} & the Arrows of b2 = c2,c2 :-> <^c2,c2^> & the Comp of b2 = [c2,c2,c2] .--> (the Comp of c1 . c2,c2,c2) holds
b1 = b2
;
end;

:: deftheorem Def12 defines ObCat ALTCAT_2:def 12 :
for b1 being non empty AltCatStr
for b2 being object of b1
for b3 being strict SubCatStr of b1 holds
( b3 = ObCat b2 iff ( the carrier of b3 = {b2} & the Arrows of b3 = b2,b2 :-> <^b2,b2^> & the Comp of b3 = [b2,b2,b2] .--> (the Comp of b1 . b2,b2,b2) ) );

theorem Th24: :: ALTCAT_2:24
for b1 being non empty AltCatStr
for b2 being object of b1
for b3 being object of (ObCat b2) holds b3 = b2
proof end;

registration
let c1 be non empty AltCatStr ;
let c2 be object of c1;
cluster ObCat a2 -> non empty transitive strict ;
coherence
( ObCat c2 is transitive & not ObCat c2 is empty )
proof end;
end;

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

theorem Th25: :: ALTCAT_2:25
for b1 being non empty transitive AltCatStr
for b2, b3 being non empty transitive SubCatStr of b1 st the carrier of b2 c= the carrier of b3 & the Arrows of b2 cc= the Arrows of b3 holds
b2 is SubCatStr of b3
proof end;

definition
let c1 be AltCatStr ;
let c2 be SubCatStr of c1;
attr a2 is full means :Def13: :: ALTCAT_2:def 13
the Arrows of a2 = the Arrows of a1 || the carrier of a2;
end;

:: deftheorem Def13 defines full ALTCAT_2:def 13 :
for b1 being AltCatStr
for b2 being SubCatStr of b1 holds
( b2 is full iff the Arrows of b2 = the Arrows of b1 || the carrier of b2 );

definition
let c1 be non empty with_units AltCatStr ;
let c2 be SubCatStr of c1;
attr a2 is id-inheriting means :Def14: :: ALTCAT_2:def 14
for b1 being object of a2
for b2 being object of a1 st b1 = b2 holds
idm b2 in <^b1,b1^> if not a2 is empty
otherwise verum;
consistency
verum
;
end;

:: deftheorem Def14 defines id-inheriting ALTCAT_2:def 14 :
for b1 being non empty with_units AltCatStr
for b2 being SubCatStr of b1 holds
( ( not b2 is empty implies ( b2 is id-inheriting iff for b3 being object of b2
for b4 being object of b1 st b3 = b4 holds
idm b4 in <^b3,b3^> ) ) & ( b2 is empty implies ( b2 is id-inheriting iff verum ) ) );

registration
let c1 be AltCatStr ;
cluster strict full SubCatStr of a1;
existence
ex b1 being SubCatStr of c1 st
( b1 is full & b1 is strict )
proof end;
end;

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

registration
let c1 be category;
let c2 be object of c1;
cluster ObCat a2 -> non empty transitive strict full id-inheriting ;
coherence
( ObCat c2 is full & ObCat c2 is id-inheriting )
proof end;
end;

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

theorem Th26: :: ALTCAT_2:26
for b1 being non empty transitive AltCatStr
for b2 being SubCatStr of b1 st the carrier of b2 = the carrier of b1 & the Arrows of b2 = the Arrows of b1 holds
AltCatStr(# the carrier of b2,the Arrows of b2,the Comp of b2 #) = AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #)
proof end;

theorem Th27: :: ALTCAT_2:27
for b1 being non empty transitive AltCatStr
for b2, b3 being non empty transitive SubCatStr of b1 st the carrier of b2 = the carrier of b3 & the Arrows of b2 = the Arrows of b3 holds
AltCatStr(# the carrier of b2,the Arrows of b2,the Comp of b2 #) = AltCatStr(# the carrier of b3,the Arrows of b3,the Comp of b3 #)
proof end;

theorem Th28: :: ALTCAT_2:28
for b1 being non empty transitive AltCatStr
for b2 being full SubCatStr of b1 st the carrier of b2 = the carrier of b1 holds
AltCatStr(# the carrier of b2,the Arrows of b2,the Comp of b2 #) = AltCatStr(# the carrier of b1,the Arrows of b1,the Comp of b1 #)
proof end;

theorem Th29: :: ALTCAT_2:29
for b1 being non empty AltCatStr
for b2 being non empty full SubCatStr of b1
for b3, b4 being object of b1
for b5, b6 being object of b2 st b3 = b5 & b4 = b6 holds
<^b3,b4^> = <^b5,b6^>
proof end;

theorem Th30: :: ALTCAT_2:30
for b1 being non empty AltCatStr
for b2 being non empty SubCatStr of b1
for b3 being object of b2 holds b3 is object of b1
proof end;

registration
let c1 be non empty transitive AltCatStr ;
cluster non empty full -> transitive SubCatStr of a1;
coherence
for b1 being SubCatStr of c1 st b1 is full & not b1 is empty holds
b1 is transitive
proof end;
end;

theorem Th31: :: ALTCAT_2:31
for b1 being non empty transitive AltCatStr
for b2, b3 being non empty full SubCatStr of b1 st the carrier of b2 = the carrier of b3 holds
AltCatStr(# the carrier of b2,the Arrows of b2,the Comp of b2 #) = AltCatStr(# the carrier of b3,the Arrows of b3,the Comp of b3 #)
proof end;

theorem Th32: :: ALTCAT_2:32
for b1 being non empty AltCatStr
for b2 being non empty SubCatStr of b1
for b3, b4 being object of b1
for b5, b6 being object of b2 st b3 = b5 & b4 = b6 holds
<^b5,b6^> c= <^b3,b4^>
proof end;

theorem Th33: :: ALTCAT_2:33
for b1 being non empty transitive AltCatStr
for b2 being non empty transitive SubCatStr of b1
for b3, b4, b5 being object of b2 st <^b3,b4^> <> {} & <^b4,b5^> <> {} holds
for b6, b7, b8 being object of b1 st b6 = b3 & b7 = b4 & b8 = b5 holds
for b9 being Morphism of b6,b7
for b10 being Morphism of b7,b8
for b11 being Morphism of b3,b4
for b12 being Morphism of b4,b5 st b9 = b11 & b10 = b12 holds
b10 * b9 = b12 * b11
proof end;

registration
let c1 be non empty transitive associative AltCatStr ;
cluster non empty transitive -> non empty associative SubCatStr of a1;
coherence
for b1 being non empty SubCatStr of c1 st b1 is transitive holds
b1 is associative
proof end;
end;

theorem Th34: :: ALTCAT_2:34
for b1 being non empty AltCatStr
for b2 being non empty SubCatStr of b1
for b3, b4 being object of b1
for b5, b6 being object of b2 st b3 = b5 & b4 = b6 & <^b5,b6^> <> {} holds
for b7 being Morphism of b5,b6 holds b7 is Morphism of b3,b4
proof end;

registration
let c1 be non empty transitive with_units AltCatStr ;
cluster non empty transitive id-inheriting -> non empty with_units reflexive SubCatStr of a1;
coherence
for b1 being non empty SubCatStr of c1 st b1 is id-inheriting & b1 is transitive holds
b1 is with_units
proof end;
end;

registration
let c1 be category;
cluster non empty transitive associative with_units reflexive id-inheriting SubCatStr of a1;
existence
ex b1 being non empty SubCatStr of c1 st
( b1 is id-inheriting & b1 is transitive )
proof end;
end;

definition
let c1 be category;
mode subcategory of a1 is transitive id-inheriting SubCatStr of a1;
end;

theorem Th35: :: ALTCAT_2:35
for b1 being category
for b2 being non empty subcategory of b1
for b3 being object of b2
for b4 being object of b1 st b3 = b4 holds
idm b3 = idm b4
proof end;