:: ISOCAT_1 semantic presentation

theorem Th1: :: ISOCAT_1:1
for b1, b2 being Function holds
( b1 is one-to-one & b2 is one-to-one implies [:b1,b2:] is one-to-one )
proof end;

theorem Th2: :: ISOCAT_1:2
for b1, b2 being Category holds
( rng (pr1 b1,b2) = the Morphisms of b1 & rng (pr2 b2,b1) = the Morphisms of b1 ) by FUNCT_3:60, FUNCT_3:62;

theorem Th3: :: ISOCAT_1:3
for b1, b2 being Category
for b3 being Functor of b2,b1
for b4 being Morphism of b2 holds
( b4 is invertible implies b3 . b4 is invertible )
proof end;

theorem Th4: :: ISOCAT_1:4
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Functor of b2,b1 holds
( b3 * (id b1) = b3 & (id b1) * b4 = b4 ) by FUNCT_2:23;

theorem Th5: :: ISOCAT_1:5
canceled;

theorem Th6: :: ISOCAT_1:6
canceled;

theorem Th7: :: ISOCAT_1:7
for b1, b2 being Category
for b3, b4 being Functor of b1,b2 holds
( b3 is_transformable_to b4 implies for b5 being transformation of b3,b4
for b6 being Object of b1 holds b5 . b6 in Hom (b3 . b6),(b4 . b6) )
proof end;

theorem Th8: :: ISOCAT_1:8
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b2,b3 holds
( b4 is_transformable_to b5 & b6 is_transformable_to b7 implies b6 * b4 is_transformable_to b7 * b5 )
proof end;

theorem Th9: :: ISOCAT_1:9
for b1, b2 being Category
for b3, b4 being Functor of b1,b2 holds
( b3 is_transformable_to b4 implies for b5 being transformation of b3,b4 holds
( b5 is invertible implies for b6 being Object of b1 holds b3 . b6,b4 . b6 are_isomorphic ) )
proof end;

definition
let c1, c2 be Category;
redefine mode Functor of c1,c2 -> Relation of the Morphisms of a1,the Morphisms of a2 means :: ISOCAT_1:def 1
( ( for b1 being Object of a1 holds
ex b2 being Object of a2 st a3 . (id b1) = id b2 ) & ( for b1 being Morphism of a1 holds
( a3 . (id (dom b1)) = id (dom (a3 . b1)) & a3 . (id (cod b1)) = id (cod (a3 . b1)) ) ) & ( for b1, b2 being Morphism of a1 holds
( dom b2 = cod b1 implies a3 . (b2 * b1) = (a3 . b2) * (a3 . b1) ) ) );
compatibility
for b1 being Relation of the Morphisms of c1,the Morphisms of c2 holds
( b1 is Functor of c1,c2 iff ( ( for b2 being Object of c1 holds
ex b3 being Object of c2 st b1 . (id b2) = id b3 ) & ( for b2 being Morphism of c1 holds
( b1 . (id (dom b2)) = id (dom (b1 . b2)) & b1 . (id (cod b2)) = id (cod (b1 . b2)) ) ) & ( for b2, b3 being Morphism of c1 holds
( dom b3 = cod b2 implies b1 . (b3 * b2) = (b1 . b3) * (b1 . b2) ) ) ) )
by CAT_1:96, CAT_1:97, CAT_1:98, CAT_1:99;
end;

:: deftheorem Def1 defines Functor ISOCAT_1:def 1 :
for b1, b2 being Category
for b3 being Relation of the Morphisms of b1,the Morphisms of b2 holds
( b3 is Functor of b1,b2 iff ( ( for b4 being Object of b1 holds
ex b5 being Object of b2 st b3 . (id b4) = id b5 ) & ( for b4 being Morphism of b1 holds
( b3 . (id (dom b4)) = id (dom (b3 . b4)) & b3 . (id (cod b4)) = id (cod (b3 . b4)) ) ) & ( for b4, b5 being Morphism of b1 holds
( dom b5 = cod b4 implies b3 . (b5 * b4) = (b3 . b5) * (b3 . b4) ) ) ) );

theorem Th10: :: ISOCAT_1:10
for b1, b2 being Category
for b3 being Functor of b2,b1 holds
( b3 is_an_isomorphism implies for b4 being Morphism of b1 holds
ex b5 being Morphism of b2 st b3 . b5 = b4 )
proof end;

theorem Th11: :: ISOCAT_1:11
for b1, b2 being Category
for b3 being Functor of b2,b1 holds
( b3 is_an_isomorphism implies for b4 being Object of b1 holds
ex b5 being Object of b2 st b3 . b5 = b4 )
proof end;

theorem Th12: :: ISOCAT_1:12
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is one-to-one implies Obj b3 is one-to-one )
proof end;

definition
let c1, c2 be Category;
let c3 be Functor of c1,c2;
assume E11: c3 is_an_isomorphism ;
func c3 " -> Functor of a2,a1 equals :Def2: :: ISOCAT_1:def 2
a3 " ;
coherence
c3 " is Functor of c2,c1
proof end;
end;

:: deftheorem Def2 defines " ISOCAT_1:def 2 :
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is_an_isomorphism implies b3 " = b3 " );

notation
let c1, c2 be Category;
let c3 be Functor of c1,c2;
synonym c3 is_an_isomorphism for isomorphic c3;
end;

definition
let c1, c2 be Category;
let c3 be Functor of c1,c2;
redefine attr a3 is isomorphic means :Def3: :: ISOCAT_1:def 3
( a3 is one-to-one & rng a3 = the Morphisms of a2 );
compatibility
( c3 is_an_isomorphism iff ( c3 is one-to-one & rng c3 = the Morphisms of c2 ) )
proof end;
end;

:: deftheorem Def3 defines is_an_isomorphism ISOCAT_1:def 3 :
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is_an_isomorphism iff ( b3 is one-to-one & rng b3 = the Morphisms of b2 ) );

theorem Th13: :: ISOCAT_1:13
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is_an_isomorphism implies b3 " is_an_isomorphism )
proof end;

theorem Th14: :: ISOCAT_1:14
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is_an_isomorphism implies (Obj b3) " = Obj (b3 " ) )
proof end;

theorem Th15: :: ISOCAT_1:15
for b1, b2 being Category
for b3 being Functor of b1,b2 holds
( b3 is_an_isomorphism implies (b3 " ) " = b3 )
proof end;

theorem Th16: :: ISOCAT_1:16
for b1, b2 being Category
for b3 being Functor of b2,b1 holds
( b3 is_an_isomorphism implies ( b3 * (b3 " ) = id b1 & (b3 " ) * b3 = id b2 ) )
proof end;

theorem Th17: :: ISOCAT_1:17
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b2,b3 holds
( b4 is_an_isomorphism & b5 is_an_isomorphism implies b5 * b4 is_an_isomorphism )
proof end;

definition
let c1, c2 be Category;
pred c1,c2 are_isomorphic means :: ISOCAT_1:def 4
ex b1 being Functor of a1,a2 st b1 is_an_isomorphism ;
reflexivity
for b1 being Category holds
ex b2 being Functor of b1,b1 st b2 is_an_isomorphism
proof end;
symmetry
for b1, b2 being Category holds
not ( ex b3 being Functor of b1,b2 st b3 is_an_isomorphism & ( for b3 being Functor of b2,b1 holds
not b3 is_an_isomorphism ) )
proof end;
end;

:: deftheorem Def4 defines are_isomorphic ISOCAT_1:def 4 :
for b1, b2 being Category holds
( b1,b2 are_isomorphic iff ex b3 being Functor of b1,b2 st b3 is_an_isomorphism );

notation
let c1, c2 be Category;
synonym c1 ~= c2 for c1,c2 are_isomorphic ;
end;

theorem Th18: :: ISOCAT_1:18
canceled;

theorem Th19: :: ISOCAT_1:19
canceled;

theorem Th20: :: ISOCAT_1:20
for b1, b2, b3 being Category holds
( b1 ~= b2 & b2 ~= b3 implies b1 ~= b3 )
proof end;

theorem Th21: :: ISOCAT_1:21
for b1 being Category
for b2, b3 being set holds [:(1Cat b2,b3),b1:] ~= b1
proof end;

theorem Th22: :: ISOCAT_1:22
for b1, b2 being Category holds [:b1,b2:] ~= [:b2,b1:]
proof end;

theorem Th23: :: ISOCAT_1:23
for b1, b2, b3 being Category holds [:[:b1,b2:],b3:] ~= [:b1,[:b2,b3:]:]
proof end;

theorem Th24: :: ISOCAT_1:24
for b1, b2, b3, b4 being Category holds
( b1 ~= b2 & b3 ~= b4 implies [:b1,b3:] ~= [:b2,b4:] )
proof end;

definition
let c1, c2, c3 be Category;
let c4, c5 be Functor of c1,c2;
assume E16: c4 is_transformable_to c5 ;
let c6 be transformation of c4,c5;
let c7 be Functor of c2,c3;
func c7 * c6 -> transformation of a7 * a4,a7 * a5 equals :Def5: :: ISOCAT_1:def 5
a7 * a6;
coherence
c7 * c6 is transformation of c7 * c4,c7 * c5
proof end;
correctness
;
end;

:: deftheorem Def5 defines * ISOCAT_1:def 5 :
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_transformable_to b5 implies for b6 being transformation of b4,b5
for b7 being Functor of b2,b3 holds b7 * b6 = b7 * b6 );

definition
let c1, c2, c3 be Category;
let c4, c5 be Functor of c2,c3;
assume E17: c4 is_transformable_to c5 ;
let c6 be Functor of c1,c2;
let c7 be transformation of c4,c5;
func c7 * c6 -> transformation of a4 * a6,a5 * a6 equals :Def6: :: ISOCAT_1:def 6
a7 * (Obj a6);
coherence
c7 * (Obj c6) is transformation of c4 * c6,c5 * c6
proof end;
correctness
;
end;

:: deftheorem Def6 defines * ISOCAT_1:def 6 :
for b1, b2, b3 being Category
for b4, b5 being Functor of b2,b3 holds
( b4 is_transformable_to b5 implies for b6 being Functor of b1,b2
for b7 being transformation of b4,b5 holds b7 * b6 = b7 * (Obj b6) );

theorem Th25: :: ISOCAT_1:25
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_transformable_to b5 implies for b6 being Functor of b3,b1
for b7 being transformation of b4,b5
for b8 being Object of b3 holds (b7 * b6) . b8 = b7 . (b6 . b8) )
proof end;

theorem Th26: :: ISOCAT_1:26
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_transformable_to b5 implies for b6 being transformation of b4,b5
for b7 being Functor of b2,b3
for b8 being Object of b1 holds (b7 * b6) . b8 = b7 . (b6 . b8) )
proof end;

theorem Th27: :: ISOCAT_1:27
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b2,b3 holds
( b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7 implies b6 * b4 is_naturally_transformable_to b7 * b5 )
proof end;

definition
let c1, c2, c3 be Category;
let c4, c5 be Functor of c1,c2;
assume E21: c4 is_naturally_transformable_to c5 ;
let c6 be natural_transformation of c4,c5;
let c7 be Functor of c2,c3;
func c7 * c6 -> natural_transformation of a7 * a4,a7 * a5 equals :Def7: :: ISOCAT_1:def 7
a7 * a6;
coherence
c7 * c6 is natural_transformation of c7 * c4,c7 * c5
proof end;
correctness
;
end;

:: deftheorem Def7 defines * ISOCAT_1:def 7 :
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_naturally_transformable_to b5 implies for b6 being natural_transformation of b4,b5
for b7 being Functor of b2,b3 holds b7 * b6 = b7 * b6 );

theorem Th28: :: ISOCAT_1:28
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_naturally_transformable_to b5 implies for b6 being natural_transformation of b4,b5
for b7 being Functor of b2,b3
for b8 being Object of b1 holds (b7 * b6) . b8 = b7 . (b6 . b8) )
proof end;

definition
let c1, c2, c3 be Category;
let c4, c5 be Functor of c2,c3;
assume E23: c4 is_naturally_transformable_to c5 ;
let c6 be Functor of c1,c2;
let c7 be natural_transformation of c4,c5;
func c7 * c6 -> natural_transformation of a4 * a6,a5 * a6 equals :Def8: :: ISOCAT_1:def 8
a7 * a6;
coherence
c7 * c6 is natural_transformation of c4 * c6,c5 * c6
proof end;
correctness
;
end;

:: deftheorem Def8 defines * ISOCAT_1:def 8 :
for b1, b2, b3 being Category
for b4, b5 being Functor of b2,b3 holds
( b4 is_naturally_transformable_to b5 implies for b6 being Functor of b1,b2
for b7 being natural_transformation of b4,b5 holds b7 * b6 = b7 * b6 );

theorem Th29: :: ISOCAT_1:29
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2 holds
( b4 is_naturally_transformable_to b5 implies for b6 being Functor of b3,b1
for b7 being natural_transformation of b4,b5
for b8 being Object of b3 holds (b7 * b6) . b8 = b7 . (b6 . b8) )
proof end;

theorem Th30: :: ISOCAT_1:30
for b1, b2 being Category
for b3, b4 being Functor of b2,b1 holds
( b3 is_naturally_transformable_to b4 implies for b5 being Object of b2 holds
Hom (b3 . b5),(b4 . b5) <> {} )
proof end;

theorem Th31: :: ISOCAT_1:31
for b1, b2 being Category
for b3, b4 being Functor of b2,b1 holds
( b3 is_naturally_transformable_to b4 implies for b5, b6 being natural_transformation of b3,b4 holds
( ( for b7 being Object of b2 holds b5 . b7 = b6 . b7 ) implies b5 = b6 ) )
proof end;

theorem Th32: :: ISOCAT_1:32
for b1, b2, b3 being Category
for b4, b5, b6 being Functor of b2,b3
for b7 being Functor of b3,b1
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b5,b6 holds
( b4 is_naturally_transformable_to b5 & b5 is_naturally_transformable_to b6 implies b7 * (b9 `*` b8) = (b7 * b9) `*` (b7 * b8) )
proof end;

theorem Th33: :: ISOCAT_1:33
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5, b6, b7 being Functor of b2,b3
for b8 being natural_transformation of b5,b6
for b9 being natural_transformation of b6,b7 holds
( b5 is_naturally_transformable_to b6 & b6 is_naturally_transformable_to b7 implies (b9 `*` b8) * b4 = (b9 * b4) `*` (b8 * b4) )
proof end;

theorem Th34: :: ISOCAT_1:34
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b2
for b6 being Functor of b2,b3
for b7, b8 being Functor of b3,b4
for b9 being natural_transformation of b7,b8 holds
( b7 is_naturally_transformable_to b8 implies (b9 * b6) * b5 = b9 * (b6 * b5) )
proof end;

theorem Th35: :: ISOCAT_1:35
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b3
for b6, b7 being Functor of b3,b4
for b8 being Functor of b4,b2
for b9 being natural_transformation of b6,b7 holds
( b6 is_naturally_transformable_to b7 implies (b8 * b9) * b5 = b8 * (b9 * b5) )
proof end;

theorem Th36: :: ISOCAT_1:36
for b1, b2, b3, b4 being Category
for b5, b6 being Functor of b3,b4
for b7 being Functor of b4,b1
for b8 being Functor of b1,b2
for b9 being natural_transformation of b5,b6 holds
( b5 is_naturally_transformable_to b6 implies (b8 * b7) * b9 = b8 * (b7 * b9) )
proof end;

theorem Th37: :: ISOCAT_1:37
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b2,b3 holds (id b5) * b4 = id (b5 * b4)
proof end;

theorem Th38: :: ISOCAT_1:38
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5 being Functor of b2,b3 holds b5 * (id b4) = id (b5 * b4)
proof end;

theorem Th39: :: ISOCAT_1:39
for b1, b2 being Category
for b3, b4 being Functor of b2,b1
for b5 being natural_transformation of b3,b4 holds
( b3 is_naturally_transformable_to b4 implies b5 * (id b2) = b5 )
proof end;

theorem Th40: :: ISOCAT_1:40
for b1, b2 being Category
for b3, b4 being Functor of b1,b2
for b5 being natural_transformation of b3,b4 holds
( b3 is_naturally_transformable_to b4 implies (id b2) * b5 = b5 )
proof end;

definition
let c1, c2, c3 be Category;
let c4, c5 be Functor of c1,c2;
let c6, c7 be Functor of c2,c3;
let c8 be natural_transformation of c4,c5;
let c9 be natural_transformation of c6,c7;
func c9 (#) c8 -> natural_transformation of a6 * a4,a7 * a5 equals :: ISOCAT_1:def 9
(a9 * a5) `*` (a6 * a8);
correctness
coherence
(c9 * c5) `*` (c6 * c8) is natural_transformation of c6 * c4,c7 * c5
;
;
end;

:: deftheorem Def9 defines (#) ISOCAT_1:def 9 :
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b2,b3
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7 holds b9 (#) b8 = (b9 * b5) `*` (b6 * b8);

theorem Th41: :: ISOCAT_1:41
for b1, b2, b3 being Category
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b2,b3
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7 holds
( b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7 implies b9 (#) b8 = (b7 * b8) `*` (b9 * b4) )
proof end;

theorem Th42: :: ISOCAT_1:42
for b1, b2 being Category
for b3, b4 being Functor of b1,b2
for b5 being natural_transformation of b3,b4 holds
( b3 is_naturally_transformable_to b4 implies (id (id b2)) (#) b5 = b5 )
proof end;

theorem Th43: :: ISOCAT_1:43
for b1, b2 being Category
for b3, b4 being Functor of b2,b1
for b5 being natural_transformation of b3,b4 holds
( b3 is_naturally_transformable_to b4 implies b5 (#) (id (id b2)) = b5 )
proof end;

theorem Th44: :: ISOCAT_1:44
for b1, b2, b3, b4 being Category
for b5, b6 being Functor of b1,b2
for b7, b8 being Functor of b2,b3
for b9, b10 being Functor of b3,b4
for b11 being natural_transformation of b5,b6
for b12 being natural_transformation of b7,b8
for b13 being natural_transformation of b9,b10 holds
( b5 is_naturally_transformable_to b6 & b7 is_naturally_transformable_to b8 & b9 is_naturally_transformable_to b10 implies b13 (#) (b12 (#) b11) = (b13 (#) b12) (#) b11 )
proof end;

theorem Th45: :: ISOCAT_1:45
for b1, b2, b3 being Category
for b4 being Functor of b1,b2
for b5, b6 being Functor of b2,b3
for b7 being natural_transformation of b5,b6 holds
( b5 is_naturally_transformable_to b6 implies b7 * b4 = b7 (#) (id b4) )
proof end;

theorem Th46: :: ISOCAT_1:46
for b1, b2, b3 being Category
for b4, b5 being Functor of b2,b3
for b6 being Functor of b3,b1
for b7 being natural_transformation of b4,b5 holds
( b4 is_naturally_transformable_to b5 implies b6 * b7 = (id b6) (#) b7 )
proof end;

theorem Th47: :: ISOCAT_1:47
for b1, b2, b3 being Category
for b4, b5, b6 being Functor of b1,b2
for b7, b8, b9 being Functor of b2,b3
for b10 being natural_transformation of b4,b5
for b11 being natural_transformation of b5,b6
for b12 being natural_transformation of b7,b8
for b13 being natural_transformation of b8,b9 holds
( b4 is_naturally_transformable_to b5 & b5 is_naturally_transformable_to b6 & b7 is_naturally_transformable_to b8 & b8 is_naturally_transformable_to b9 implies (b13 `*` b12) (#) (b11 `*` b10) = (b13 (#) b11) `*` (b12 (#) b10) )
proof end;

theorem Th48: :: ISOCAT_1:48
for b1, b2, b3, b4 being Category
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4
for b7, b8 being Functor of b2,b3 holds
( b7 ~= b8 implies ( b6 * b7 ~= b6 * b8 & b7 * b5 ~= b8 * b5 ) )
proof end;

theorem Th49: :: ISOCAT_1:49
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Functor of b2,b1
for b5 being Functor of b1,b1 holds
( b5 ~= id b1 implies ( b3 * b5 ~= b3 & b5 * b4 ~= b4 ) )
proof end;

definition
let c1, c2 be Category;
pred c1 is_equivalent_with c2 means :Def10: :: ISOCAT_1:def 10
ex b1 being Functor of a1,a2ex b2 being Functor of a2,a1 st
( b2 * b1 ~= id a1 & b1 * b2 ~= id a2 );
reflexivity
for b1 being Category holds
ex b2, b3 being Functor of b1,b1 st
( b3 * b2 ~= id b1 & b2 * b3 ~= id b1 )
proof end;
symmetry
for b1, b2 being Category holds
not ( ex b3 being Functor of b1,b2ex b4 being Functor of b2,b1 st
( b4 * b3 ~= id b1 & b3 * b4 ~= id b2 ) & ( for b3 being Functor of b2,b1
for b4 being Functor of b1,b2 holds
not ( b4 * b3 ~= id b2 & b3 * b4 ~= id b1 ) ) )
;
end;

:: deftheorem Def10 defines is_equivalent_with ISOCAT_1:def 10 :
for b1, b2 being Category holds
( b1 is_equivalent_with b2 iff ex b3 being Functor of b1,b2ex b4 being Functor of b2,b1 st
( b4 * b3 ~= id b1 & b3 * b4 ~= id b2 ) );

notation
let c1, c2 be Category;
synonym c1,c2 are_equivalent for c1 is_equivalent_with c2;
end;

theorem Th50: :: ISOCAT_1:50
for b1, b2 being Category holds
( b1 ~= b2 implies b1 is_equivalent_with b2 )
proof end;

theorem Th51: :: ISOCAT_1:51
canceled;

theorem Th52: :: ISOCAT_1:52
canceled;

theorem Th53: :: ISOCAT_1:53
for b1, b2, b3 being Category holds
( b1,b2 are_equivalent & b2,b3 are_equivalent implies b1,b3 are_equivalent )
proof end;

definition
let c1, c2 be Category;
assume E41: c1,c2 are_equivalent ;
mode Equivalence of c1,c2 -> Functor of a1,a2 means :Def11: :: ISOCAT_1:def 11
ex b1 being Functor of a2,a1 st
( b1 * a3 ~= id a1 & a3 * b1 ~= id a2 );
existence
ex b1 being Functor of c1,c2ex b2 being Functor of c2,c1 st
( b2 * b1 ~= id c1 & b1 * b2 ~= id c2 )
by E41, Def10;
end;

:: deftheorem Def11 defines Equivalence ISOCAT_1:def 11 :
for b1, b2 being Category holds
( b1,b2 are_equivalent implies for b3 being Functor of b1,b2 holds
( b3 is Equivalence of b1,b2 iff ex b4 being Functor of b2,b1 st
( b4 * b3 ~= id b1 & b3 * b4 ~= id b2 ) ) );

theorem Th54: :: ISOCAT_1:54
for b1 being Category holds
id b1 is Equivalence of b1,b1
proof end;

theorem Th55: :: ISOCAT_1:55
for b1, b2, b3 being Category holds
( b1,b2 are_equivalent & b2,b3 are_equivalent implies for b4 being Equivalence of b1,b2
for b5 being Equivalence of b2,b3 holds
b5 * b4 is Equivalence of b1,b3 )
proof end;

theorem Th56: :: ISOCAT_1:56
for b1, b2 being Category holds
( b1,b2 are_equivalent implies for b3 being Equivalence of b1,b2 holds
ex b4 being Equivalence of b2,b1 st
( b4 * b3 ~= id b1 & b3 * b4 ~= id b2 ) )
proof end;

theorem Th57: :: ISOCAT_1:57
for b1, b2 being Category
for b3 being Functor of b1,b2
for b4 being Functor of b2,b1 holds
( b4 * b3 ~= id b1 implies b3 is faithful )
proof end;

theorem Th58: :: ISOCAT_1:58
for b1, b2 being Category holds
( b1,b2 are_equivalent implies for b3 being Equivalence of b1,b2 holds
( b3 is full & b3 is faithful & ( for b4 being Object of b2 holds
ex b5 being Object of b1 st b4,b3 . b5 are_isomorphic ) ) )
proof end;