The Mizar article:

Isomorphisms of Categories

by
Andrzej Trybulec

Received November 22, 1991

Copyright (c) 1991 Association of Mizar Users

MML identifier: ISOCAT_1
[ MML identifier index ]


environ

 vocabulary CAT_1, FUNCT_1, RELAT_1, FUNCT_3, NATTRA_1, BOOLE, WELLORD1,
      PARTFUN1, SEQ_1, ISOCAT_1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, RELAT_1, FUNCT_1, FUNCT_2, FUNCT_3,
      CAT_1, CAT_2, NATTRA_1;
 constructors NATTRA_1, MEMBERED, PARTFUN1, XBOOLE_0;
 clusters RELSET_1, MEMBERED, ZFMISC_1, XBOOLE_0;
 requirements SUBSET, BOOLE;
 definitions TARSKI, CAT_1, FUNCT_1, NATTRA_1, XBOOLE_0;
 theorems FUNCT_2, CAT_1, ZFMISC_1, FUNCT_1, CAT_2, FUNCT_3, NATTRA_1, RELAT_1,
      RELSET_1, XBOOLE_1;

begin

:: Auxiliary theorems

 reserve A,B,C,D for Category,
         F for Functor of A,B,
         G for Functor of B,C;

theorem Th1:
 for F,G being Function st F is one-to-one & G is one-to-one
  holds [:F,G:] is one-to-one
 proof let F,G be Function such that
A1: F is one-to-one and
A2: G is one-to-one;
  let z1,z2 be set such that
A3: z1 in dom [:F,G:] & z2 in dom [:F,G:] & [:F,G:].z1 = [:F,G:].z2;
A4: dom[:F,G:] = [:dom F, dom G:] by FUNCT_3:def 9;
   then consider x1,y1 being set such that
A5: x1 in dom F & y1 in dom G & z1 = [x1,y1] by A3,ZFMISC_1:103;
   consider x2,y2 being set such that
A6: x2 in dom F & y2 in dom G & z2 = [x2,y2] by A3,A4,ZFMISC_1:103;
     [:F,G:].z1 = [F.x1,G.y1] & [:F,G:].z2 = [F.x2,G.y2]
    by A5,A6,FUNCT_3:def 9;
   then F.x1 = F.x2 & G.y1 = G.y2 by A3,ZFMISC_1:33;
   then x1 = x2 & y1 = y2 by A1,A2,A5,A6,FUNCT_1:def 8;
  hence z1 = z2 by A5,A6;
 end;

theorem Th2:
 rng pr1(A,B) = the Morphisms of A & rng pr2(B,A) = the Morphisms of A
 proof
  thus rng pr1(A,B) = rng pr1(the Morphisms of A, the Morphisms of B)
   by CAT_2:def 10 .= the Morphisms of A by FUNCT_3:60;
  thus rng pr2(B,A) = rng pr2(the Morphisms of B, the Morphisms of A)
   by CAT_2:def 11 .= the Morphisms of A by FUNCT_3:62;
 end;

theorem Th3:
 for f being Morphism of A st f is invertible holds F.f is invertible
  proof let f be Morphism of A;
   given g being Morphism of A such that
A1:  dom g = cod f & cod g = dom f & f*g = id cod f & g*f = id dom f;
   take F.g;
   thus dom(F.g) = cod(F.f) & cod(F.g) = dom(F.f) by A1,CAT_1:99;
   thus F.f*F.g = F.(f*g) by A1,CAT_1:99
           .= id cod(F.f) by A1,CAT_1:98;
   thus F.g*F.f = F.(g*f) by A1,CAT_1:99
           .= id dom(F.f) by A1,CAT_1:98;
  end;

theorem Th4:
 for F being Functor of A,B, G being Functor of B,A holds
 F*id A = F & id A*G = G
 proof let F be Functor of A,B, G be Functor of B,A;
     id A = id the Morphisms of A by CAT_1:def 21;
  hence thesis by FUNCT_2:23;
 end;

canceled 2;

theorem Th7:
 for F1,F2 being Functor of A,B st F1 is_transformable_to F2
  for t being transformation of F1,F2, a being Object of A
   holds t.a in Hom(F1.a,F2.a)
proof let F1,F2 be Functor of A,B such that
A1: F1 is_transformable_to F2;
 let t be transformation of F1,F2, a be Object of A;
    Hom(F1.a,F2.a)<>{} & t.a is Morphism of F1.a,F2.a by A1,NATTRA_1:def 2;
 hence t.a in Hom(F1.a,F2.a) by CAT_1:def 7;
end;

theorem Th8:
 for F1,F2 being Functor of A,B, G1,G2 being Functor of B,C st
   F1 is_transformable_to F2 &
   G1 is_transformable_to G2
  holds G1*F1 is_transformable_to G2*F2
 proof let F1,F2 be Functor of A,B, G1,G2 be Functor of B,C such that
A1: F1 is_transformable_to F2 and
A2: G1 is_transformable_to G2;
  let a be Object of A;
A3: G1.(F1.a) = (G1*F1).a & G2.(F2.a) = (G2*F2).a by CAT_1:113;
     Hom(F1.a,F2.a) <> {} by A1,NATTRA_1:def 2;
   then A4:  Hom(G1.(F1.a),G1.(F2.a)) <> {} by CAT_1:126;
     Hom(G1.(F2.a),G2.(F2.a)) <> {} by A2,NATTRA_1:def 2;
  hence Hom((G1*F1).a,(G2*F2).a) <> {} by A3,A4,CAT_1:52;
 end;

theorem Th9:
 for F1,F2 being Functor of A,B st F1 is_transformable_to F2
 for t being transformation of F1,F2 st t is invertible
 for a being Object of A holds F1.a, F2.a are_isomorphic
 proof let F1,F2 be Functor of A,B such that
A1: F1 is_transformable_to F2;
  let t be transformation of F1,F2 such that
A2: t is invertible;
  let a be Object of A;
  thus Hom(F1.a,F2.a)<>{} by A1,NATTRA_1:def 2;
     t.a is invertible by A2,NATTRA_1:def 10;
  hence thesis;
 end;

definition let C,D;
 redefine mode Functor of C,D means
      (for c being Object of C ex d being Object of D st it.id c = id d) &
    (for f being Morphism of C holds
         it.id dom f = id dom(it.f) & it.id cod f = id cod(it.f)) &
    for f,g being Morphism of C st dom g = cod f
      holds it.(g*f) = it.g*it.f;
 compatibility by CAT_1:96,97,98,99;
end;

definition let A;
 redefine func id A -> Functor of A,A;
 coherence;
 let B,C;
 let F be Functor of A,B, G be Functor of B,C;
 func G*F -> Functor of A,C;
 coherence
  proof
   thus G*F is Functor of A,C;
  end;
end;

 reserve o,m for set;

theorem Th10:
 F is_an_isomorphism implies
  for g being Morphism of B ex f being Morphism of A st F.f = g
  proof assume F is_an_isomorphism;
then A1:  rng F = the Morphisms of B by CAT_1:def 22;
   let g be Morphism of B;
    consider f being set such that
A2:   f in dom F & F.f = g by A1,FUNCT_1:def 5;
    reconsider f as Morphism of A by A2,FUNCT_2:def 1;
   take f;
   thus F.f = g by A2;
  end;

theorem Th11:
 F is_an_isomorphism implies
  for b being Object of B ex a being Object of A st F.a = b
  proof assume F is_an_isomorphism;
then A1:  rng Obj F = the Objects of B by CAT_1:def 22;
   let b be Object of B;
    consider a being set such that
A2:   a in dom Obj F & (Obj F).a = b by A1,FUNCT_1:def 5;
    reconsider a as Object of A by A2,FUNCT_2:def 1;
   take a;
   thus F.a = b by A2,CAT_1:def 20;
  end;

theorem Th12:
 F is one-to-one implies Obj F is one-to-one
  proof assume
A1: F is one-to-one;
   let x1,x2 be set;
   assume x1 in dom Obj F & x2 in dom Obj F;
    then reconsider a1 = x1, a2 = x2 as Object of A by FUNCT_2:def 1;
    A2: dom F = the Morphisms of A by FUNCT_2:def 1;
   assume
    (Obj F).x1 = (Obj F).x2;
then F.a1 = (Obj F).a2 by CAT_1:def 20 .= F.a2 by CAT_1:def 20;
    then F.(id a1 qua Morphism of A) = id(F.a2) by CAT_1:108
     .= F.(id a2 qua Morphism of A)by CAT_1:108;
    then id a1 = id a2 by A1,A2,FUNCT_1:def 8;
   hence x1 = x2 by CAT_1:45;
  end;

definition let A,B,F;
 assume
 A1: F is_an_isomorphism;
  func F" -> Functor of B,A equals
:Def2: F";
 coherence
  proof
A2:  F is one-to-one by A1,CAT_1:def 22;
then A3:  Obj F is one-to-one by Th12;
A4:  rng F = the Morphisms of B by A1,CAT_1:def 22;
A5:  dom F = the Morphisms of A by FUNCT_2:def 1;
    reconsider G = F" as Function of the Morphisms of B, the Morphisms of A
     by A2,A4,FUNCT_2:31;
      G is Functor of B,A
    proof
     thus for c being Object of B ex d being Object of A st G.(id c) = id d
      proof let b be Object of B;
        consider a being Object of A such that
A6:       F.a = b by A1,Th11;
       take a;
       thus G.(id b) = G.(F.(id a qua Morphism of A)) by A6,CAT_1:108 .=id a
by A2,A5,FUNCT_1:56;
      end;
     thus for f being Morphism of B
            holds G.(id dom f) = id dom(G.f) & G.(id cod f) = id cod(G.f)
      proof let f be Morphism of B;
        consider g being Morphism of A such that
A7:       f = F.g by A1,Th10;
       thus G.(id dom f) = G.(id(F.dom g)) by A7,CAT_1:109
            .= G.(F.(id dom g qua Morphism of A)) by CAT_1:108
            .= id dom g by A2,A5,FUNCT_1:56
            .= id dom(G.f) by A2,A5,A7,FUNCT_1:56;
       thus G.(id cod f) = G.(id(F.cod g)) by A7,CAT_1:109
            .= G.(F.(id cod g qua Morphism of A)) by CAT_1:108
            .= id cod g by A2,A5,FUNCT_1:56
            .= id cod(G.f) by A2,A5,A7,FUNCT_1:56;
      end;
     let f,g be Morphism of B;
      consider f' being Morphism of A such that
A8:     f = F.f' by A1,Th10;
      consider g' being Morphism of A such that
A9:     g = F.g' by A1,Th10;
A10:      dom Obj F = the Objects of A by FUNCT_2:def 1;
     assume
A11:   dom g = cod f;
        (Obj F).dom g' = F.dom g' by CAT_1:def 20 .= cod f by A9,A11,CAT_1:109
       .= F.cod f' by A8,CAT_1:109 .= (Obj F).cod f' by CAT_1:def 20;
      then dom g' = cod f' by A3,A10,FUNCT_1:def 8;
     hence G.(g*f) = G.(F.(g'*f')) by A8,A9,CAT_1:99
         .= g'*f' by A2,A5,FUNCT_1:56
         .= g'*(G.f) by A2,A5,A8,FUNCT_1:56
         .= (G.g)*(G.f) by A2,A5,A9,FUNCT_1:56;
    end;
   hence thesis;
  end;
end;

definition let A,B,F;
 redefine attr F is isomorphic means
:Def3: F is one-to-one & rng F = the Morphisms of B;
 compatibility
  proof
   thus F is_an_isomorphism implies
     F is one-to-one & rng F = the Morphisms of B by CAT_1:def 22;
   assume
A1:  F is one-to-one & rng F = the Morphisms of B;
   hence F is one-to-one & rng F = the Morphisms of B;
   thus rng Obj F c= the Objects of B by RELSET_1:12;
   let x be set;
   assume x in the Objects of B;
    then reconsider d = x as Object of B;
    consider f being set such that
A2:    f in dom F & id d = F.f by A1,FUNCT_1:def 5;
    reconsider f as Morphism of A by A2,FUNCT_2:def 1;
A3:    dom Obj F = the Objects of A by FUNCT_2:def 1;
    reconsider c = id dom f as Morphism of A;
      F.c = id dom(id d) by A2,CAT_1:98 .= id d by CAT_1:44;
    then (Obj F).(dom f) = d by CAT_1:103;
   hence x in rng Obj F by A3,FUNCT_1:def 5;
  end;
  synonym F is_an_isomorphism;
end;

theorem Th13:
 F is_an_isomorphism implies F" is_an_isomorphism
 proof assume
A1: F is_an_isomorphism;
then A2: F is one-to-one by CAT_1:def 22;
A3: F" = (F qua Function of the Morphisms of A, the Morphisms of B)" by A1,Def2
;
  hence F" is one-to-one by A2,FUNCT_1:62;
  thus rng(F") = dom F by A2,A3,FUNCT_1:55
              .= the Morphisms of A by FUNCT_2:def 1;
 end;

theorem
   F is_an_isomorphism implies (Obj F)" = Obj F"
 proof assume
A1: F is_an_isomorphism;
then A2: F is one-to-one by Def3;
A3: rng Obj F = the Objects of B by A1,CAT_1:def 22;
A4: Obj F is one-to-one by A2,Th12;
   then reconsider G = (Obj F)" as Function of the Objects of B, the Objects of
A
    by A3,FUNCT_2:31;
     now let b be Object of B;
       F.(id(G.b) qua Morphism of A)
        = id((Obj F).(G.b)) by CAT_1:104
       .= id b by A3,A4,FUNCT_1:57;
     then id(G.b)
        = (F qua Function of the Morphisms of A, the Morphisms of B)".id b
            by A2,FUNCT_2:32
       .= F".(id b qua Morphism of B) by A1,Def2;
    hence G.b = (Obj F").b by CAT_1:103;
   end;
  hence (Obj F)" = Obj F" by FUNCT_2:113;
 end;

theorem
   F is_an_isomorphism implies F"" = F
  proof assume
A1: F is_an_isomorphism;
then A2:  F is one-to-one by CAT_1:def 22;
A3:  F" is_an_isomorphism by A1,Th13;
    reconsider f = F as Function of the Morphisms of A, the Morphisms of B;
    reconsider g = F" as Function of the Morphisms of B, the Morphisms of A;
   thus F"" = g" by A3,Def2 .= f"" by A1,Def2 .= F by A2,FUNCT_1:65;
  end;

theorem Th16:
 F is_an_isomorphism implies F*F" = id B & F"*F = id A
 proof assume
A1: F is_an_isomorphism;
then A2:  F is one-to-one by Def3;
   reconsider f = F as Function of the Morphisms of A, the Morphisms of B;
A3: dom f = the Morphisms of A by FUNCT_2:def 1;
A4: rng f = the Morphisms of B by A1,Def3;
  thus F*F" = f*f" by A1,Def2 .= id the Morphisms of B by A2,A4,FUNCT_1:61
     .= id B by CAT_1:def 21;
  thus F"*F = f"*f by A1,Def2 .= id the Morphisms of A by A2,A3,FUNCT_1:61
     .= id A by CAT_1:def 21;
 end;

theorem Th17:
 F is_an_isomorphism & G is_an_isomorphism implies
  G*F is_an_isomorphism
proof assume that
A1: F is one-to-one and
A2: rng F = the Morphisms of B and
A3: G is one-to-one and
A4: rng G = the Morphisms of C;
 thus G*F is one-to-one by A1,A3,FUNCT_1:46;
    dom G = the Morphisms of B by FUNCT_2:def 1;
 hence rng(G*F) = the Morphisms of C by A2,A4,RELAT_1:47;
end;



:: Isomorphism of categories

definition let A,B;
 pred A,B are_isomorphic means
   ex F being Functor of A,B st F is_an_isomorphism;
 reflexivity
  proof let A;
     id A is_an_isomorphism by CAT_1:122; hence thesis;
  end;
 symmetry
 proof let A,B;
  given F being Functor of A,B such that
A1: F is_an_isomorphism;
  take F";
  thus thesis by A1,Th13;
 end;
 synonym A ~= B;
end;

canceled 2;

theorem
   A ~= B & B ~= C implies A ~= C
 proof
  given F1 being Functor of A,B such that
A1: F1 is_an_isomorphism;
  given F2 being Functor of B,C such that
A2: F2 is_an_isomorphism;
  take F2*F1;
  thus thesis by A1,A2,Th17;
 end;

theorem
   [:1Cat(o,m),A:] ~= A
 proof
  take F = pr2(1Cat(o,m),A);
A1:   the Morphisms of [:1Cat(o,m),A:] =
    [:the Morphisms of 1Cat(o,m), the Morphisms of A:] by CAT_2:33;
  set X = [:the Morphisms of 1Cat(o,m), the Morphisms of A:];
     now let x1,x2 be set;
    assume x1 in X; then consider x11,x12 being set such that
A2:   x11 in the Morphisms of 1Cat(o,m) & x12 in the Morphisms of A and
A3:   x1 = [x11,x12] by ZFMISC_1:def 2;
    assume x2 in X; then consider x21,x22 being set such that
A4:   x21 in the Morphisms of 1Cat(o,m) & x22 in the Morphisms of A and
A5:   x2 = [x21,x22] by ZFMISC_1:def 2;
     reconsider f11 = x11, f21 = x21 as Morphism of 1Cat(o,m) by A2,A4;
     reconsider f12 = x12, f22 = x22 as Morphism of A by A2,A4;
    assume
A6:   F.x1 = F.x2;
A7:   f12 = F.[f11,f12] by CAT_2:60 .= F.[f21,f22] by A3,A5,A6
       .= f22 by CAT_2:60;
       f11 = m by CAT_1:35 .= f21 by CAT_1:35;
    hence x1 = x2 by A3,A5,A7;
   end;
  hence F is one-to-one by A1,FUNCT_2:25;
  thus rng F = the Morphisms of A by Th2;
 end;

theorem
   [:A,B:] ~= [:B,A:]
 proof
  take F = <:pr2(A,B),pr1(A,B):>;
A1: rng pr2(A,B) = the Morphisms of B & rng pr1(A,B) = the Morphisms of A
    by Th2;
A2: the Morphisms of [:B,A:] = [: the Morphisms of B, the Morphisms of A:] &
   the Morphisms of [:A,B:] = [: the Morphisms of A, the Morphisms of B:]
    by CAT_2:33;
A3: dom pr1(A,B) = the Morphisms of [:A,B:] &
   dom pr2(A,B) = the Morphisms of [:A,B:] by FUNCT_2:def 1;
     now let x1,x2 be set;
    assume x1 in [:the Morphisms of A,the Morphisms of B:];
     then consider x11,x12 being set such that
A4:   x11 in the Morphisms of A & x12 in the Morphisms of B and
A5:   x1 = [x11,x12] by ZFMISC_1:def 2;

    assume x2 in [:the Morphisms of A,the Morphisms of B:];
     then consider x21,x22 being set such that
A6:   x21 in the Morphisms of A & x22 in the Morphisms of B and
A7:   x2 = [x21,x22] by ZFMISC_1:def 2;
     reconsider f11 = x11, f21 = x21 as Morphism of A by A4,A6;
     reconsider f12 = x12, f22 = x22 as Morphism of B by A4,A6;
    assume
A8:   F.x1 = F.x2;
       [f12,f11] = [f12,pr1(A,B).[f11,f12]] by CAT_2:58
      .= [pr2(A,B).[f11,f12],pr1(A,B).[f11,f12]] by CAT_2:60
      .= F.[f21,f22] by A3,A5,A7,A8,FUNCT_3:69
      .= [pr2(A,B).[f21,f22],pr1(A,B).[f21,f22]]by A3,FUNCT_3:69
      .= [f22,pr1(A,B).[f21,f22]]by CAT_2:60
      .= [f22,f21] by CAT_2:58;
     then x12 = x22 & x11 = x21 by ZFMISC_1:33;
    hence x1 = x2 by A5,A7;
   end;
  hence F is one-to-one by A2,FUNCT_2:25;
  thus rng F c= the Morphisms of [:B,A:] by A1,A2,FUNCT_3:71;
  let x be set;
  assume x in the Morphisms of [:B,A:];
   then consider x1,x2 being set such that
A9:   x1 in the Morphisms of B & x2 in the Morphisms of A and
A10:   x = [x1,x2] by A2,ZFMISC_1:def 2;
   reconsider x1 as Morphism of B by A9;
   reconsider x2 as Morphism of A by A9;
     F.[x2,x1] = [pr2(A,B).[x2,x1],pr1(A,B).[x2,x1]] by A3,FUNCT_3:69
     .= [x1,pr1(A,B).[x2,x1]] by CAT_2:60 .= [x1,x2] by CAT_2:58;
  hence x in rng F by A10,FUNCT_2:6;
 end;

theorem
   [:[:A,B:],C:] ~= [:A,[:B,C:]:]
 proof
  set X = pr1(A,B)*pr1([:A,B:],C);
  set Y = <:pr2(A,B)*pr1([:A,B:],C),pr2([:A,B:],C):>;
A1:the Morphisms of [:A,[:B,C:]:] =
      [:the Morphisms of A,the Morphisms of [:B,C:]:] by CAT_2:33;
A2:the Morphisms of [:B,C:] = [:the Morphisms of B, the Morphisms of C:]
    by CAT_2:33;
A3:the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
    by CAT_2:33;
A4:the Morphisms of [:[:A,B:],C:] =
      [:the Morphisms of [:A,B:],the Morphisms of C:] by CAT_2:33;
  take F = <:X, Y:>;
A5: dom X = the Morphisms of [:[:A,B:],C:] by FUNCT_2:def 1;
A6: dom Y = the Morphisms of [:[:A,B:],C:] by FUNCT_2:def 1;
A7: dom pr2([:A,B:],C) = the Morphisms of [:[:A,B:],C:] by FUNCT_2:def 1;
A8: dom(pr2(A,B)*pr1([:A,B:],C)) = the Morphisms of [:[:A,B:],C:]
       by FUNCT_2:def 1;
     now let x,y be set;
    assume
       x in [:[:the Morphisms of A,the Morphisms of B:],the Morphisms of C:];
     then consider x1,x2 being set such that
A9:    x1 in [:the Morphisms of A,the Morphisms of B:]
    & x2 in the Morphisms of C and
A10:    x = [x1,x2] by ZFMISC_1:def 2;
     consider x11,x12 being set such that
A11:   x11 in the Morphisms of A & x12 in the Morphisms of B and
A12:   x1 = [x11,x12] by A9,ZFMISC_1:def 2;
    assume
       y in [:[:the Morphisms of A,the Morphisms of B:],the Morphisms of C:];
     then consider y1,y2 being set such that
A13:    y1 in [:the Morphisms of A,the Morphisms of B:]
    & y2 in the Morphisms of C and
A14:    y = [y1,y2] by ZFMISC_1:def 2;
     consider y11,y12 being set such that
A15:   y11 in the Morphisms of A & y12 in the Morphisms of B and
A16:   y1 = [y11,y12] by A13,ZFMISC_1:def 2;
     reconsider f11 = x11, g11 = y11 as Morphism of A by A11,A15;
     reconsider f12 = x12, g12 = y12 as Morphism of B by A11,A15;
     reconsider f2 = x2, g2 = y2 as Morphism of C by A9,A13;
    assume
A17:   F.x = F.y;
A18:     [f11,[f12,f2]] = [pr1(A,B).[f11,f12],[f12,f2]] by CAT_2:58
      .= [pr1(A,B).(pr1([:A,B:],C).[[f11,f12],f2]),[f12,f2]] by CAT_2:58
      .= [X.[[f11,f12],f2],[f12,f2]] by FUNCT_2:21
      .= [X.[[f11,f12],f2],[pr2(A,B).[f11,f12],f2]] by CAT_2:60
      .= [X.[[f11,f12],f2],[pr2(A,B).(pr1([:A,B:],C).[[f11,f12],f2]),f2]]
          by CAT_2:58
      .= [X.[[f11,f12],f2],[(pr2(A,B)*pr1([:A,B:],C)).[[f11,f12],f2],f2]]
          by FUNCT_2:21
      .= [X.[[f11,f12],f2],[(pr2(A,B)*pr1([:A,B:],C)).[[f11,f12],f2],
          pr2([:A,B:],C).[[f11,f12],f2]]] by CAT_2:60
      .= [X.[[f11,f12],f2],Y.[[f11,f12],f2]] by A7,A8,FUNCT_3:69
      .= F.[[g11,g12],g2] by A5,A6,A10,A12,A14,A16,A17,FUNCT_3:69
      .= [X.[[g11,g12],g2],Y.[[g11,g12],g2]] by A5,A6,FUNCT_3:69
      .= [X.[[g11,g12],g2],[(pr2(A,B)*pr1([:A,B:],C)).[[g11,g12],g2],
          pr2([:A,B:],C).[[g11,g12],g2]]] by A7,A8,FUNCT_3:69
      .= [X.[[g11,g12],g2],[(pr2(A,B)*pr1([:A,B:],C)).[[g11,g12],g2],g2]]
          by CAT_2:60
      .= [X.[[g11,g12],g2],[pr2(A,B).(pr1([:A,B:],C).[[g11,g12],g2]),g2]]
          by FUNCT_2:21
      .= [X.[[g11,g12],g2],[pr2(A,B).[g11,g12],g2]]by CAT_2:58
      .= [X.[[g11,g12],g2],[g12,g2]]by CAT_2:60
      .= [pr1(A,B).(pr1([:A,B:],C).[[g11,g12],g2]),[g12,g2]]by FUNCT_2:21
      .= [pr1(A,B).[g11,g12],[g12,g2]]by CAT_2:58
      .= [g11,[g12,g2]] by CAT_2:58;
     then x11 = y11 & [x12,x2] = [y12,y2] by ZFMISC_1:33;
     then x12 = y12 & x2 = y2 by ZFMISC_1:33;
    hence x = y by A10,A12,A14,A16,A18,ZFMISC_1:33;
   end;
  hence F is one-to-one by A3,A4,FUNCT_2:25;
A19: rng F c= [:rng X, rng Y:] by FUNCT_3:71;
A20: rng X c= the Morphisms of A by RELSET_1:12;
A21: rng Y c= [:rng(pr2(A,B)*pr1([:A,B:],C)),rng pr2([:A,B:],C):]
     by FUNCT_3:71;
A22: rng(pr2(A,B)*pr1([:A,B:],C)) c= the Morphisms of B by RELSET_1:12;
     rng pr2([:A,B:],C) c= the Morphisms of C by RELSET_1:12;
   then [:rng(pr2(A,B)*pr1([:A,B:],C)),rng pr2([:A,B:],C):]
           c= the Morphisms of [:B,C:] by A2,A22,ZFMISC_1:119;
   then rng Y c= the Morphisms of [:B,C:] by A21,XBOOLE_1:1;
   then [:rng X, rng Y:] c= [:the Morphisms of A, the Morphisms of [:B,C:]:]
    by A20,ZFMISC_1:119;
  hence rng F c= the Morphisms of [:A,[:B,C:]:] by A1,A19,XBOOLE_1:1;
  let x be set;
  assume x in the Morphisms of [:A,[:B,C:]:];
   then consider x1,x2 being set such that
A23:   x1 in the Morphisms of A & x2 in the Morphisms of [:B,C:] and
A24:   x = [x1,x2] by A1,ZFMISC_1:def 2;
   consider x21,x22 being set such that
A25:   x21 in the Morphisms of B & x22 in the Morphisms of C and
A26:   x2 = [x21,x22] by A2,A23,ZFMISC_1:def 2;
   reconsider x1 as Morphism of A by A23;
   reconsider x21 as Morphism of B by A25;
   reconsider x22 as Morphism of C by A25;
     F.[[x1,x21],x22] = [X.[[x1,x21],x22],Y.[[x1,x21],x22]] by A5,A6,FUNCT_3:69
    .= [pr1(A,B).(pr1([:A,B:],C).[[x1,x21],x22]),Y.[[x1,x21],x22]]
       by FUNCT_2:21
    .= [pr1(A,B).[x1,x21],Y.[[x1,x21],x22]] by CAT_2:58
    .= [x1,Y.[[x1,x21],x22]] by CAT_2:58
    .= [x1,[(pr2(A,B)*pr1([:A,B:],C)).[[x1,x21],x22],
            pr2([:A,B:],C).[[x1,x21],x22]]] by A7,A8,FUNCT_3:69
    .= [x1,[pr2(A,B).(pr1([:A,B:],C).[[x1,x21],x22]),
            pr2([:A,B:],C).[[x1,x21],x22]]] by FUNCT_2:21
    .= [x1,[pr2(A,B).[x1,x21],pr2([:A,B:],C).[[x1,x21],x22]]] by CAT_2:58
    .= [x1,[x21,pr2([:A,B:],C).[[x1,x21],x22]]] by CAT_2:60
    .= [x1,[x21,x22]] by CAT_2:60;
  hence x in rng F by A24,A26,FUNCT_2:6;
 end;

theorem
   A ~= B & C ~= D implies [:A,C:] ~= [:B,D:]
 proof
  given F being Functor of A,B such that
A1: F is_an_isomorphism;
  given G being Functor of C,D such that
A2: G is_an_isomorphism;
  take [:F,G:];
     F is one-to-one & G is one-to-one by A1,A2,Def3;
  hence [:F,G:] is one-to-one by Th1;
  thus rng [:F,G:] = [:rng F, rng G:] by FUNCT_3:88
         .= [: the Morphisms of B, rng G:] by A1,Def3
         .= [: the Morphisms of B, the Morphisms of D:] by A2,Def3
         .= the Morphisms of [:B,D:] by CAT_2:33;
 end;

definition let A,B,C; let F1,F2 be Functor of A,B such that
A1: F1 is_transformable_to F2;
 let t be transformation of F1,F2;
 let G be Functor of B,C;
  func G*t -> transformation of G*F1,G*F2 equals
:Def5:  G*t;
 coherence
  proof
    reconsider Gt = G*t as Function of the Objects of A, the Morphisms of C;
      Gt is transformation of G*F1, G*F2
     proof
      thus G*F1 is_transformable_to G*F2 by A1,Th8;
      let a be Object of A;
A2:     G.(F1.a) = (G*F1).a & G.(F2.a) = (G*F2).a by CAT_1:113;
A3:     Gt.a = G.((t qua Function of the Objects of A, the Morphisms of B).a)
               by FUNCT_2:21
           .= G.(t.a qua Morphism of B) by A1,NATTRA_1:def 5;
         t.a in Hom(F1.a,F2.a) by A1,Th7;
       then G.(t.a qua Morphism of B) in
 Hom((G*F1).a,(G*F2).a) by A2,CAT_1:123;
      hence Gt.a is Morphism of (G*F1).a,(G*F2).a by A3,CAT_1:def 7;
     end;
   hence thesis;
  end;
 correctness;
end;

definition let A,B,C; let G1,G2 be Functor of B,C such that
A1: G1 is_transformable_to G2;
 let F be Functor of A,B;
 let t be transformation of G1,G2;
  func t*F -> transformation of G1*F,G2*F equals
:Def6:  t*Obj F;
 coherence
  proof
    reconsider tF = t*Obj F as
     Function of the Objects of A, the Morphisms of C;
      tF is transformation of G1*F, G2*F
     proof
      thus G1*F is_transformable_to G2*F by A1,Th8;
      let a be Object of A;
A2:     tF.a = t.((Obj F).a qua set) by FUNCT_2:21
           .= t.((Obj F).a) by A1,NATTRA_1:def 5
           .= t.(F.a) by CAT_1:def 20;
         G1.(F.a) = (G1*F).a & G2.(F.a) = (G2*F).a by CAT_1:113;
      hence tF.a is Morphism of (G1*F).a,(G2*F).a by A2;
     end;
   hence thesis;
  end;
 correctness;
end;

theorem Th25:
 for G1,G2 be Functor of B,C st G1 is_transformable_to G2
 for F be Functor of A,B, t be transformation of G1,G2, a be Object of A
  holds (t*F).a = t.(F.a)
 proof let G1,G2 be Functor of B,C such that
A1: G1 is_transformable_to G2;
  let F be Functor of A,B, t be transformation of G1,G2, a be Object of A;
   G1*F is_transformable_to G2*F by A1,Th8;
  hence (t*F).a
         = (t*F).(a qua set) by NATTRA_1:def 5
        .= ((t qua Function of the Objects of B, the Morphisms of C)*Obj F).a
           by A1,Def6
        .= t.((Obj F).a qua set) by FUNCT_2:21
        .= t.((Obj F).a) by A1,NATTRA_1:def 5
        .= t.(F.a) by CAT_1:def 20;
 end;

theorem Th26:
 for F1,F2 be Functor of A,B st F1 is_transformable_to F2
 for t be transformation of F1,F2, G be Functor of B,C, a being Object of A
  holds (G*t).a = G.(t.a)
 proof let F1,F2 be Functor of A,B such that
A1: F1 is_transformable_to F2;
  let t be transformation of F1,F2, G be Functor of B,C, a be Object of A;
A2: G*F1 is_transformable_to G*F2 by A1,Th8;
A3: Hom(F1.a,F2.a) <> {} by A1,NATTRA_1:def 2;
  thus (G*t).a
         = (G*t).(a qua set) by A2,NATTRA_1:def 5
        .= ((G qua Function of the Morphisms of B, the Morphisms of C)*
            (t qua Function of the Objects of A, the Morphisms of B)).a
           by A1,Def5
        .= G.(t.(a qua set)) by FUNCT_2:21
        .= G.(t.a qua Morphism of B) by A1,NATTRA_1:def 5
        .= G.(t.a) by A3,NATTRA_1:def 1;
 end;

theorem Th27:
 for F1,F2 being Functor of A,B, G1,G2 being Functor of B,C st
   F1 is_naturally_transformable_to F2 &
   G1 is_naturally_transformable_to G2
  holds G1*F1 is_naturally_transformable_to G2*F2
 proof let F1,F2 be Functor of A,B, G1,G2 be Functor of B,C such that
A1: F1 is_naturally_transformable_to F2 and
A2: G1 is_naturally_transformable_to G2;
A3: F1 is_transformable_to F2 & G1 is_transformable_to G2
    by A1,A2,NATTRA_1:def 7;
  hence
A4: G1*F1 is_transformable_to G2*F2 by Th8;
   consider t1 being natural_transformation of F1,F2,
            t2 being natural_transformation of G1,G2;
  take t = (t2*F2)`*`(G1*t1);
A5: G1*F1 is_transformable_to G1*F2 by A3,Th8;
A6: G1*F2 is_transformable_to G2*F2 by A3,Th8;
  let a,b be Object of A; assume
A7:  Hom(a,b) <> {};
then A8: Hom(F2.a,F2.b) <> {} by CAT_1:126;
A9: Hom(G1.(F2.b),G2.(F2.b)) <> {} by A3,NATTRA_1:def 2;
A10: Hom(F1.b,F2.b) <> {} by A3,NATTRA_1:def 2;
then A11: Hom(G1.(F1.b),G1.(F2.b)) <> {} by CAT_1:126;
A12: Hom(F1.a,F1.b) <> {} by A7,CAT_1:126;
then A13: Hom(G1.(F1.a),G1.(F1.b)) <> {} by CAT_1:126;
A14: Hom(G1.(F2.a),G1.(F2.b)) <> {} by A8,CAT_1:126;
A15: Hom(F1.a,F2.a) <> {} by A3,NATTRA_1:def 2;
then A16: Hom(G1.(F1.a),G1.(F2.a)) <> {} by CAT_1:126;
A17: Hom(G2.(F2.a),G2.(F2.b)) <> {} by A8,CAT_1:126;
A18: Hom(G1.(F2.a),G2.(F2.a)) <> {} by A3,NATTRA_1:def 2;
A19: Hom((G1*F1).b,(G2*F2).b) <> {} by A4,NATTRA_1:def 2;
A20: Hom((G1*F1).a,(G2*F2).a) <> {} by A4,NATTRA_1:def 2;
A21: Hom((G1*F1).a,(G1*F1).b) <> {} by A7,CAT_1:126;
A22: Hom((G2*F2).a,(G2*F2).b) <> {} by A7,CAT_1:126;
A23: Hom(G1.(F1.a),G2.(F2.a)) <> {} by A16,A18,CAT_1:52;
A24: Hom(G1.(F1.b),G2.(F2.b)) <> {} by A9,A11,CAT_1:52;
A25: Hom((G1*F2).b,(G2*F2).b) <> {} by A6,NATTRA_1:def 2;
A26: Hom((G1*F1).b,(G1*F2).b) <> {} by A5,NATTRA_1:def 2;
A27: Hom((G1*F2).a,(G2*F2).a) <> {} by A6,NATTRA_1:def 2;
A28: Hom((G1*F1).a,(G1*F2).a) <> {} by A5,NATTRA_1:def 2;
  let f be Morphism of a,b;
  thus t.b*(G1*F1).f
      = t.b*((G1*F1).f qua Morphism of C) by A19,A21,CAT_1:def 13
     .= t.b*(G1.(F1.f) qua Morphism of C) by A7,NATTRA_1:11
     .= (t2*F2).b*(G1*t1).b*G1.(F1.f) by A5,A6,NATTRA_1:def 6
     .= ((t2*F2).b qua Morphism of C)*(G1*t1).b*G1.(F1.f) by A25,A26,CAT_1:def
13
     .= (t2*F2).b*G1.(t1.b)*G1.(F1.f) by A3,Th26
     .= (t2.(F2.b) qua Morphism of C)*G1.(t1.b)*G1.(F1.f) by A3,Th25
     .= (t2.(F2.b)*G1.(t1.b) qua Morphism of C)*G1.(F1.f) by A9,A11,CAT_1:def
13
     .= t2.(F2.b)*G1.(t1.b)*G1.(F1.f) by A13,A24,CAT_1:def 13
     .= t2.(F2.b)*(G1.(t1.b)*G1.(F1.f)) by A9,A11,A13,CAT_1:54
     .= t2.(F2.b)*(G1.(t1.b*F1.f)) by A10,A12,NATTRA_1:13
     .= t2.(F2.b)*(G1.(F2.f*t1.a)) by A1,A7,NATTRA_1:def 8
     .= t2.(F2.b)*(G1.(F2.f)*G1.(t1.a)) by A8,A15,NATTRA_1:13
     .= t2.(F2.b)*G1.(F2.f)*G1.(t1.a) by A9,A14,A16,CAT_1:54
     .= G2.(F2.f)*t2.(F2.a)*G1.(t1.a) by A2,A8,NATTRA_1:def 8
     .= G2.(F2.f)*(t2.(F2.a)*G1.(t1.a)) by A16,A17,A18,CAT_1:54
     .= G2.(F2.f)*(t2.(F2.a)*G1.(t1.a) qua Morphism of C) by A17,A23,CAT_1:def
13
     .= G2.(F2.f)*((t2.(F2.a) qua Morphism of C)*G1.(t1.a))
          by A16,A18,CAT_1:def 13
     .= G2.(F2.f)*((t2*F2).a*G1.(t1.a)) by A3,Th25
     .= G2.(F2.f)*(((t2*F2).a qua Morphism of C)*(G1*t1).a) by A3,Th26
     .= G2.(F2.f)*((t2*F2).a*(G1*t1).a) by A27,A28,CAT_1:def 13
     .= G2.(F2.f)*t.a by A5,A6,NATTRA_1:def 6
     .= ((G2*F2).f qua Morphism of C)*t.a by A7,NATTRA_1:11
     .= (G2*F2).f*t.a by A20,A22,CAT_1:def 13;
 end;

definition let A,B,C; let F1,F2 be Functor of A,B such that
A1: F1 is_naturally_transformable_to F2;
 let t be natural_transformation of F1,F2;
 let G be Functor of B,C;
  func G*t -> natural_transformation of G*F1,G*F2 equals
:Def7:  G*t;
 coherence
  proof
A2: F1 is_transformable_to F2 by A1,NATTRA_1:def 7;
      G*t is natural_transformation of G*F1, G*F2
     proof
      thus G*F1 is_naturally_transformable_to G*F2 by A1,Th27;
then A3:     G*F1 is_transformable_to G*F2 by NATTRA_1:def 7;
      let a,b be Object of A such that
A4:    Hom(a,b) <> {};
      let f be Morphism of a,b;
A5:    Hom(F1.b,F2.b) <> {} by A2,NATTRA_1:def 2;
A6:    Hom(F1.a,F1.b) <> {} by A4,CAT_1:126;
A7:    Hom(F1.a,F2.a) <> {} by A2,NATTRA_1:def 2;
A8:    Hom(F2.a,F2.b) <> {} by A4,CAT_1:126;
A9:    Hom((G*F1).b,(G*F2).b) <> {} by A3,NATTRA_1:def 2;
A10:    Hom((G*F1).a,(G*F1).b) <> {} by A4,CAT_1:126;
A11:    Hom(G.(F1.b),G.(F2.b)) <> {} by A5,CAT_1:126;
A12:    Hom(G.(F1.a),G.(F1.b)) <> {} by A6,CAT_1:126;
A13:    Hom(G.(F2.a),G.(F2.b)) <> {} by A8,CAT_1:126;
A14:   Hom(G.(F1.a),G.(F2.a)) <> {} by A7,CAT_1:126;
A15:   Hom((G*F1).a,(G*F2).a) <> {} by A3,NATTRA_1:def 2;
A16:   Hom((G*F2).a,(G*F2).b) <> {} by A4,CAT_1:126;
      thus (G*t).b*(G*F1).f
          = (G*t).b*((G*F1).f qua Morphism of C) by A9,A10,CAT_1:def 13
         .= (G*t).b*G.(F1.f) by A4,NATTRA_1:11
         .= (G.(t.b) qua Morphism of C)*G.(F1.f) by A2,Th26
         .= G.(t.b)*G.(F1.f) by A11,A12,CAT_1:def 13
         .= G.(t.b*F1.f) by A5,A6,NATTRA_1:13
         .= G.(F2.f*t.a) by A1,A4,NATTRA_1:def 8
         .= G.(F2.f)*G.(t.a)by A7,A8,NATTRA_1:13
         .= G.(F2.f)*(G.(t.a) qua Morphism of C)by A13,A14,CAT_1:def 13
         .= G.(F2.f)*(G*t).a by A2,Th26
         .= ((G*F2).f qua Morphism of C)*(G*t).a by A4,NATTRA_1:11
         .= (G*F2).f*(G*t).a by A15,A16,CAT_1:def 13;
     end;
   hence thesis;
  end;
 correctness;
end;

theorem Th28:
 for F1,F2 be Functor of A,B st F1 is_naturally_transformable_to F2
 for t be natural_transformation of F1,F2, G be Functor of B,C,
     a being Object of A
  holds (G*t).a = G.(t.a)
 proof let F1,F2 be Functor of A,B; assume
A1: F1 is_naturally_transformable_to F2;
then A2: F1 is_transformable_to F2 by NATTRA_1:def 7;
  let t be natural_transformation of F1,F2, G be Functor of B,C,
     a be Object of A;
  thus (G*t).a = (G*(t qua transformation of F1,F2)).a by A1,Def7
              .= G.(t.a) by A2,Th26;
 end;

definition let A,B,C; let G1,G2 be Functor of B,C such that
A1: G1 is_naturally_transformable_to G2;
 let F be Functor of A,B;
 let t be natural_transformation of G1,G2;
  func t*F -> natural_transformation of G1*F,G2*F equals
:Def8:  t*F;
 coherence
  proof
A2:  G1 is_transformable_to G2 by A1,NATTRA_1:def 7;
      t*F is natural_transformation of G1*F, G2*F
     proof
      thus G1*F is_naturally_transformable_to G2*F by A1,Th27;
then A3:      G1*F is_transformable_to G2*F by NATTRA_1:def 7;
      let a,b be Object of A; assume
A4:    Hom(a,b) <> {};
then A5:    Hom(F.a,F.b) <> {} by CAT_1:126;
A6:    Hom((G1*F).a,(G1*F).b) <> {} by A4,CAT_1:126;
A7:    Hom((G1*F).b,(G2*F).b) <> {} by A3,NATTRA_1:def 2;
A8:    Hom(G1.(F.b),G2.(F.b)) <> {} by A2,NATTRA_1:def 2;
A9:    Hom(G1.(F.a),G1.(F.b)) <> {} by A5,CAT_1:126;
A10:    Hom(G2.(F.a),G2.(F.b)) <> {} by A5,CAT_1:126;
A11:    Hom(G1.(F.a),G2.(F.a)) <> {} by A2,NATTRA_1:def 2;
A12:    Hom((G2*F).a,(G2*F).b) <> {} by A4,CAT_1:126;
A13:    Hom((G1*F).a,(G2*F).a) <> {} by A3,NATTRA_1:def 2;
      let f be Morphism of a,b;
      thus (t*F).b*(G1*F).f
          = (t*F).b*((G1*F).f qua Morphism of C) by A6,A7,CAT_1:def 13
         .= (t*F).b*G1.(F.f) by A4,NATTRA_1:11
         .= (t.(F.b) qua Morphism of C)*G1.(F.f) by A2,Th25
         .= t.(F.b)*G1.(F.f) by A8,A9,CAT_1:def 13
         .= G2.(F.f)*t.(F.a) by A1,A5,NATTRA_1:def 8
         .= G2.(F.f)*(t.(F.a) qua Morphism of C) by A10,A11,CAT_1:def 13
         .= G2.(F.f)*(t*F).a by A2,Th25
         .= ((G2*F).f qua Morphism of C)*(t*F).a by A4,NATTRA_1:11
         .= (G2*F).f*(t*F).a by A12,A13,CAT_1:def 13;
     end;
   hence thesis;
  end;
 correctness;
end;

theorem Th29:
 for G1,G2 be Functor of B,C st G1 is_naturally_transformable_to G2
 for F be Functor of A,B, t be natural_transformation of G1,G2,
     a be Object of A
  holds (t*F).a = t.(F.a)
 proof let G1,G2 be Functor of B,C;
  assume
A1: G1 is_naturally_transformable_to G2;
then A2: G1 is_transformable_to G2 by NATTRA_1:def 7;
  let F be Functor of A,B, t be natural_transformation of G1,G2,
     a be Object of A;
  thus (t*F).a = ((t qua transformation of G1,G2)*F).a by A1,Def8
              .= t.(F.a) by A2,Th25;
 end;

reserve F,F1,F2,F3 for Functor of A,B,
        G,G1,G2,G3 for Functor of B,C,
        H,H1,H2 for Functor of C,D,
        s for natural_transformation of F1,F2,
        s' for natural_transformation of F2,F3,
        t for natural_transformation of G1,G2,
        t' for natural_transformation of G2,G3,
        u for natural_transformation of H1,H2;

theorem Th30:
 F1 is_naturally_transformable_to F2 implies
 for a being Object of A holds Hom(F1.a,F2.a) <> {}
 proof assume F1 is_naturally_transformable_to F2;
then A1: F1 is_transformable_to F2 by NATTRA_1:def 7;
  let a be Object of A;
  thus Hom(F1.a,F2.a) <> {} by A1,NATTRA_1:def 2;
 end;

theorem Th31:
 F1 is_naturally_transformable_to F2 implies
 for t1,t2 being natural_transformation of F1,F2 st
   for a being Object of A holds t1.a = t2.a
  holds t1 = t2
proof assume F1 is_naturally_transformable_to F2;
  then F1 is_transformable_to F2 by NATTRA_1:def 7;
 hence thesis by NATTRA_1:20;
end;

theorem Th32:
 F1 is_naturally_transformable_to F2 &
 F2 is_naturally_transformable_to F3
  implies G*(s'`*`s) = (G*s')`*`(G*s)
 proof assume
A1: F1 is_naturally_transformable_to F2 &
   F2 is_naturally_transformable_to F3;
then A2: F1 is_naturally_transformable_to F3 by NATTRA_1:25;
A3: G*F1 is_naturally_transformable_to G*F2 &
   G*F2 is_naturally_transformable_to G*F3 by A1,Th27;
then A4: G*F1 is_naturally_transformable_to G*F3 by NATTRA_1:25;
     now let a be Object of A;
A5:   G.(s'.a) = (G*s').a & G.(s.a) = (G*s).a by A1,Th28;
A6:   G.(F1.a) = (G*F1).a & G.(F2.a) = (G*F2).a & G.(F3.a) = (G*F3).a
      by CAT_1:113;
A7:   Hom(F1.a,F2.a) <> {} & Hom(F2.a,F3.a) <> {} by A1,Th30;
    thus (G*(s'`*`s)).a = G.((s'`*`s).a) by A2,Th28
       .= G.((s'.a)*(s.a)) by A1,NATTRA_1:27
       .= G.(s'.a)*G.(s.a) by A7,NATTRA_1:13
       .= ((G*s')`*`(G*s)).a by A3,A5,A6,NATTRA_1:27;
   end;
  hence thesis by A4,Th31;
 end;

theorem Th33:
  G1 is_naturally_transformable_to G2 &
  G2 is_naturally_transformable_to G3
   implies (t'`*`t)*F = (t'*F)`*`(t*F)
 proof assume
A1: G1 is_naturally_transformable_to G2 &
   G2 is_naturally_transformable_to G3;
then A2: G1 is_naturally_transformable_to G3 by NATTRA_1:25;
A3: G1*F is_naturally_transformable_to G2*F &
   G2*F is_naturally_transformable_to G3*F by A1,Th27;
then A4: G1*F is_naturally_transformable_to G3*F by NATTRA_1:25;
     now let a be Object of A;
A5:   t'.(F.a) = (t'*F).a & t.(F.a) = (t*F).a by A1,Th29;
A6:   G1.(F.a) = (G1*F).a & G2.(F.a) = (G2*F).a & G3.(F.a) = (G3*F).a
      by CAT_1:113;
    thus ((t'`*`t)*F).a = (t'`*`t).(F.a) by A2,Th29
       .= (t'.(F.a))*(t.(F.a)) by A1,NATTRA_1:27
       .= ((t'*F)`*`(t*F)).a by A3,A5,A6,NATTRA_1:27;
   end;
  hence thesis by A4,Th31;
 end;

theorem Th34:
 H1 is_naturally_transformable_to H2 implies u*G*F = u*(G*F)
 proof assume
A1: H1 is_naturally_transformable_to H2;
then A2: H1*G is_naturally_transformable_to H2*G by Th27;
then A3: H1*G*F is_naturally_transformable_to H2*G*F by Th27;
A4: H1*(G*F) = H1*G*F & H2*(G*F) = H2*G*F by RELAT_1:55;
   then reconsider v = u*(G*F) as natural_transformation of H1*G*F, H2*G*F;
     now let a be Object of A;
    thus (u*G*F).a = (u*G).(F.a) by A2,Th29
       .= u.(G.(F.a)) by A1,Th29
       .= u.((G*F).a) by CAT_1:113
       .= v.a by A1,A4,Th29;
   end;
  hence thesis by A3,Th31;
 end;

theorem Th35:
 G1 is_naturally_transformable_to G2 implies H*t*F = H*(t*F)
 proof assume
A1: G1 is_naturally_transformable_to G2;
then A2: H*G1 is_naturally_transformable_to H*G2 by Th27;
then A3: G1*F is_naturally_transformable_to G2*F &
   H*G1*F is_naturally_transformable_to H*G2*F by A1,Th27;
A4: H*(G1*F) = H*G1*F & H*(G2*F) = H*G2*F by RELAT_1:55;
   then reconsider v = H*(t*F) as natural_transformation of H*G1*F, H*G2*F;
     now let a be Object of A;
A5:   G1.(F.a) = (G1*F).a & G2.(F.a) = (G2*F).a by CAT_1:113;
    thus (H*t*F).a = (H*t).(F.a) by A2,Th29
       .= H.(t.(F.a)) by A1,Th28
       .= H.((t*F).a) by A1,A5,Th29
       .= v.a by A3,A4,Th28;
   end;
  hence thesis by A3,Th31;
 end;

theorem Th36:
 F1 is_naturally_transformable_to F2 implies H*G*s = H*(G*s)
 proof assume
A1: F1 is_naturally_transformable_to F2;
then A2: G*F1 is_naturally_transformable_to G*F2 &
   H*G*F1 is_naturally_transformable_to H*G*F2 by Th27;
A3: H*(G*F1) = H*G*F1 & H*(G*F2) = H*G*F2 by RELAT_1:55;
   then reconsider v = H*(G*s) as natural_transformation of H*G*F1, H*G*F2;
     now let a be Object of A;
A4:   Hom(F1.a,F2.a) <> {} by A1,Th30;
A5:   G.(F1.a) = (G*F1).a & G.(F2.a) = (G*F2).a by CAT_1:113;
    thus (H*G*s).a = (H*G).(s.a) by A1,Th28
       .= H.(G.(s.a)) by A4,NATTRA_1:11
       .= H.((G*s).a) by A1,A5,Th28
       .= v.a by A2,A3,Th28;
   end;
  hence thesis by A2,Th31;
 end;

theorem Th37:
 (id G)*F = id(G*F)
 proof
     now let a be Object of A;
    thus ((id G)*F).a = id G.(F.a) by Th29
       .= id(G.(F.a)) by NATTRA_1:21
       .= id((G*F).a) by CAT_1:113
       .= id(G*F).a by NATTRA_1:21;
   end;
  hence thesis by Th31;
 end;

theorem Th38:
 G*id F = id(G*F)
 proof
     now let a be Object of A;
    thus (G*id F).a = G.(id F.a) by Th28
       .= G.id(F.a) by NATTRA_1:21
       .= id(G.(F.a)) by NATTRA_1:15
       .= id((G*F).a) by CAT_1:113
       .= (id(G*F)).a by NATTRA_1:21;
   end;
  hence thesis by Th31;
 end;

theorem Th39:
 G1 is_naturally_transformable_to G2 implies t*id B = t
 proof assume
A1: G1 is_naturally_transformable_to G2;
A2: G1*id B = G1 & G2*id B = G2 by Th4;
   then reconsider s = t*id B as natural_transformation of G1,G2;
     now let b be Object of B;
    thus s.b = t.((id B).b) by A1,A2,Th29 .= t.b by CAT_1:118;
   end;
  hence thesis by A1,Th31;
 end;

theorem Th40:
 F1 is_naturally_transformable_to F2 implies (id B)*s = s
 proof assume
A1: F1 is_naturally_transformable_to F2;
A2: (id B)*F1 = F1 & (id B)*F2 = F2 by Th4;
   then reconsider t = (id B)*s as natural_transformation of F1,F2;
     now let a be Object of A;
A3: Hom(F1.a,F2.a) <> {} by A1,Th30;
    thus t.a = (id B).(s.a) by A1,A2,Th28
      .= (id B).(s.a qua Morphism of B) by A3,NATTRA_1:def 1
      .= s.a by CAT_1:115;
   end;
  hence thesis by A1,Th31;
 end;

definition let A,B,C,F1,F2,G1,G2;
 let s,t;
 func t(#)s -> natural_transformation of G1*F1,G2*F2 equals
:Def9:  (t*F2)`*`(G1*s);
 correctness;
end;

theorem Th41:
 F1 is_naturally_transformable_to F2 &
 G1 is_naturally_transformable_to G2 implies
 t(#)s = (G2*s)`*`(t*F1)
  proof assume that
A1: F1 is_naturally_transformable_to F2 and
A2: G1 is_naturally_transformable_to G2;
A3: G2*F1 is_naturally_transformable_to G2*F2 by A1,Th27;
A4: G1*F1 is_naturally_transformable_to G2*F1 by A2,Th27;
A5: G1*F1 is_naturally_transformable_to G1*F2 by A1,Th27;
A6: G1*F2 is_naturally_transformable_to G2*F2 by A2,Th27;
then A7: G1*F1 is_naturally_transformable_to G2*F2 by A5,NATTRA_1:25;
     now let a be Object of A;
A8: Hom(F1.a,F2.a) <> {} by A1,Th30;
A9:  (t*F2).a = t.(F2.a) & (G1*s).a = G1.(s.a)
     & (G1*F1).a = G1.(F1.a) & (G1*F2).a = G1.(F2.a) & (G2*F2).a = G2.(F2.a)
      by A1,A2,Th28,Th29,CAT_1:113;
A10:  (t*F1).a = t.(F1.a) & (G2*s).a = G2.(s.a)
     & (G1*F1).a = G1.(F1.a) & (G2*F1).a = G2.(F1.a) & (G2*F2).a = G2.(F2.a)
      by A1,A2,Th28,Th29,CAT_1:113;
    thus ((t*F2)`*`(G1*s)).a
            = t.(F2.a)*G1.(s.a) by A5,A6,A9,NATTRA_1:27
           .= (G2*s).a*(t*F1).a by A2,A8,A10,NATTRA_1:def 8
           .= ((G2*s)`*`(t*F1)).a by A3,A4,NATTRA_1:27;
   end;
   then (t*F2)`*`(G1*s) = (G2*s)`*`(t*F1) by A7,Th31;
  hence thesis by Def9;
 end;

theorem
   F1 is_naturally_transformable_to F2 implies (id id B)(#)s = s
 proof assume
A1:F1 is_naturally_transformable_to F2;
then A2:(id B)*F1 is_naturally_transformable_to (id B)*F2 by Th27;
  thus (id id B)(#)s
      = ((id id B)*F2)`*`((id B)*s) by Def9
     .= (id((id B)*F2))`*`((id B)*s) by Th37
     .= (id B)*s by A2,NATTRA_1:26
     .= s by A1,Th40;
 end;

theorem
   G1 is_naturally_transformable_to G2 implies t(#)(id id B) = t
 proof assume
A1: G1 is_naturally_transformable_to G2;
then A2: G1*id B is_naturally_transformable_to G2*id B by Th27;
  thus t(#)(id id B)
      = (t*id B)`*`(G1*id id B) by Def9
     .= (t*id B)`*`id(G1*id B) by Th38
     .= t*id B by A2,NATTRA_1:26
     .= t by A1,Th39;
 end;

theorem
   F1 is_naturally_transformable_to F2 &
 G1 is_naturally_transformable_to G2 &
 H1 is_naturally_transformable_to H2 implies
  u(#)(t(#)s) = (u(#)t)(#)s
 proof assume that
A1: F1 is_naturally_transformable_to F2 and
A2: G1 is_naturally_transformable_to G2 and
A3: H1 is_naturally_transformable_to H2;
A4:  H1*G1*F1 = H1*(G1*F1) & H1*G1*F2 = H1*(G1*F2) &
    H1*G2*F2 = H1*(G2*F2) & H2*G2*F2 = H2*(G2*F2) by RELAT_1:55;
A5: u*(G2*F2) = u*G2*F2 & H1*(t*F2) = H1*t*F2 & H1*(G1*s) = H1*G1*s
    by A1,A2,A3,Th34,Th35,Th36;
A6: H1*G1*F1 is_naturally_transformable_to H1*G1*F2 by A1,Th27;
A7: H1*G1 is_naturally_transformable_to H1*G2 by A2,Th27;
then A8: G1*F2 is_naturally_transformable_to G2*F2 &
    H1*G1*F2 is_naturally_transformable_to H1*G2*F2 by A2,Th27;
A9:  H1*G2 is_naturally_transformable_to H2*G2 by A3,Th27;
then A10: H1*G2*F2 is_naturally_transformable_to H2*G2*F2 by Th27;
A11: G1*F1 is_naturally_transformable_to G1*F2 by A1,Th27;
  thus u(#)(t(#)s)
     = u(#)((t*F2)`*`(G1*s)) by Def9
    .= (u*(G2*F2))`*`(H1*((t*F2)`*`(G1*s))) by Def9
    .= (u*(G2*F2))`*`((H1*(t*F2))`*`(H1*(G1*s))) by A8,A11,Th32
    .= (u*G2*F2)`*`(H1*t*F2)`*`((H1*G1)*s) by A4,A5,A6,A8,A10,NATTRA_1:28
    .= (((u*G2)`*`(H1*t))*F2)`*`((H1*G1)*s) by A7,A9,Th33
    .= ((u*G2)`*`(H1*t))(#)s by Def9
    .= u(#)t(#)s by Def9;
 end;

theorem
   G1 is_naturally_transformable_to G2 implies t*F = t(#)id F
 proof assume
    G1 is_naturally_transformable_to G2;
  then G1*F is_naturally_transformable_to G2*F by Th27;
  hence t*F = (t*F)`*`id(G1*F) by NATTRA_1:26
     .= (t*F)`*`(G1*id F) by Th38
     .= t(#)id F by Def9;
 end;

theorem
   F1 is_naturally_transformable_to F2 implies G*s = (id G)(#)s
 proof assume
    F1 is_naturally_transformable_to F2;
   then G*F1 is_naturally_transformable_to G*F2 by Th27;
  hence G*s = id(G*F2)`*`(G*s) by NATTRA_1:26
     .= ((id G)*F2)`*`(G*s) by Th37
     .= (id G)(#)s by Def9;
 end;

theorem
   F1 is_naturally_transformable_to F2 &
 F2 is_naturally_transformable_to F3 &
 G1 is_naturally_transformable_to G2 &
 G2 is_naturally_transformable_to G3 implies
 (t'`*`t)(#)(s'`*`s) = (t'(#)s')`*`(t(#)s)
 proof assume that
A1: F1 is_naturally_transformable_to F2 and
A2: F2 is_naturally_transformable_to F3 and
A3: G1 is_naturally_transformable_to G2 and
A4: G2 is_naturally_transformable_to G3;
A5: G3*F2 is_naturally_transformable_to G3*F3 &
    G3*F1 is_naturally_transformable_to G3*F2 by A1,A2,Th27;
A6: G1 is_naturally_transformable_to G3 by A3,A4,NATTRA_1:25;
A7: F1 is_naturally_transformable_to F3 by A1,A2,NATTRA_1:25;
A8: G1*F1 is_naturally_transformable_to G3*F1 &
    G1*F1 is_naturally_transformable_to G2*F1 &
    G2*F1 is_naturally_transformable_to G3*F1 by A3,A4,A6,Th27;
A9: G2*F2 is_naturally_transformable_to G3*F2 by A4,Th27;
A10: G2*F1 is_naturally_transformable_to G2*F2 by A1,Th27;
then A11: G1*F1 is_naturally_transformable_to G2*F2 by A8,NATTRA_1:25;
A12: t'(#)s' = (G3*s')`*`(t'*F2) & t(#)s = (G2*s)`*`(t*F1) by A1,A2,A3,A4,Th41;
  thus (t'`*`t)(#)(s'`*`s)
          = (G3*(s'`*`s))`*`((t'`*`t)*F1) by A6,A7,Th41
         .= (G3*s')`*`(G3*s)`*`((t'`*`t)*F1) by A1,A2,Th32
         .= (G3*s')`*`(G3*s)`*`((t'*F1)`*`(t*F1)) by A3,A4,Th33
         .= (G3*s')`*`((G3*s)`*`((t'*F1)`*`(t*F1))) by A5,A8,NATTRA_1:28
         .= (G3*s')`*`((G3*s)`*`(t'*F1)`*`(t*F1)) by A5,A8,NATTRA_1:28
         .= (G3*s')`*`((t'(#)s)`*`(t*F1)) by A1,A4,Th41
         .= (G3*s')`*`((t'*F2)`*`(G2*s)`*`(t*F1)) by Def9
         .= (G3*s')`*`((t'*F2)`*`((G2*s)`*`(t*F1))) by A8,A9,A10,NATTRA_1:28
         .= (t'(#)s')`*`(t(#)s) by A5,A9,A11,A12,NATTRA_1:28;
 end;

theorem Th48:
 for F being Functor of A,B, G being Functor of C,D
 for I,J being Functor of B,C st I ~= J holds G*I ~= G*J & I*F ~= J*F
 proof let F be Functor of A,B, G be Functor of C,D;
  let I,J be Functor of B,C;
  assume
A1:I is_naturally_transformable_to J;
  given t being natural_transformation of I,J such that
A2: t is invertible;
  thus G*I ~= G*J
   proof
    thus G*I is_naturally_transformable_to G*J by A1,Th27;
    take G*t;
    let b be Object of B;
       I is_transformable_to J by A1,NATTRA_1:def 7;
then A3:   Hom(I.b,J.b) <> {} by NATTRA_1:def 2;
A4:   (G*t).b = G.(t.b) by A1,Th28
            .= G.(t.b qua Morphism of C) by A3,NATTRA_1:def 1;
       t.b is invertible by A2,NATTRA_1:def 10;
    hence (G*t).b is invertible by A4,Th3;
   end;
  thus I*F is_naturally_transformable_to J*F by A1,Th27;
  take t*F;
  let a be Object of A;
     (t*F).a = t.(F.a) by A1,Th29;
  hence (t*F).a is invertible by A2,NATTRA_1:def 10;
 end;

theorem Th49:
 for F being Functor of A,B, G being Functor of B,A
 for I being Functor of A,A st I ~= id A holds F*I ~= F & I*G ~= G
 proof let F be Functor of A,B, G be Functor of B,A;
  let I be Functor of A,A;
     F*id A = F & id A*G = G by Th4;
  hence thesis by Th48;
 end;

definition
 let A,B be Category;
 pred A is_equivalent_with B means
:Def10: ex F being Functor of A,B, G being Functor of B,A st
   G*F ~= id A & F*G ~= id B;
 reflexivity
  proof let A;
   take id A, id A;
   thus thesis by Th4;
  end;
 symmetry;
 synonym A,B are_equivalent;
end;

theorem
   A ~= B implies A is_equivalent_with B
 proof given F being Functor of A,B such that
A1: F is_an_isomorphism;
  take F,F";
  thus F"*F ~= id A & F*F" ~= id B by A1,Th16;
 end;

canceled 2;

theorem Th53:
 A,B are_equivalent & B,C are_equivalent implies A,C are_equivalent
 proof
  given F1 being Functor of A,B, G1 being Functor of B,A such that
A1: G1*F1 ~= id A & F1*G1 ~= id B;
  given F2 being Functor of B,C, G2 being Functor of C,B such that
A2: G2*F2 ~= id B & F2*G2 ~= id C;
  take F2*F1,G1*G2;
     (G1*G2)*F2 = G1*(G2*F2) & G1*id B = G1 by Th4,RELAT_1:55;
then A3: (G1*G2)*F2 ~= G1 by A2,Th49;
     (G1*G2)*(F2*F1) = ((G1*G2)*F2)*F1 by RELAT_1:55;
   then (G1*G2)*(F2*F1) ~= G1*F1 by A3,Th48;
  hence (G1*G2)*(F2*F1) ~= id A by A1,NATTRA_1:32;
     (F2*F1)*G1 = F2*(F1*G1) & F2*id B = F2 by Th4,RELAT_1:55;
then A4: (F2*F1)*G1 ~= F2 by A1,Th49;
     (F2*F1)*(G1*G2) = ((F2*F1)*G1)*G2 by RELAT_1:55;
   then (F2*F1)*(G1*G2) ~= F2*G2 by A4,Th48;
  hence (F2*F1)*(G1*G2) ~= id C by A2,NATTRA_1:32;
 end;

definition let A,B;
 assume
A1: A,B are_equivalent;
 mode Equivalence of A,B -> Functor of A,B means
:Def11: ex G being Functor of B,A st G*it ~= id A & it*G ~= id B;
 existence by A1,Def10;
end;

theorem
   id A is Equivalence of A,A
 proof
  thus A is_equivalent_with A;
  take id A;
  thus thesis by Th4;
 end;

theorem
   A,B are_equivalent & B,C are_equivalent implies
  for F being Equivalence of A,B, G being Equivalence of B,C holds
    G*F is Equivalence of A,C
 proof assume
A1: A,B are_equivalent & B,C are_equivalent;
  let F be Equivalence of A,B, G be Equivalence of B,C;
   consider F' being Functor of B,A such that
A2: F'*F ~= id A & F*F' ~= id B by A1,Def11;
   consider G' being Functor of C,B such that
A3: G'*G ~= id B & G*G' ~= id C by A1,Def11;
  thus A,C are_equivalent by A1,Th53;
  take F'*G';
     (F'*G')*G = F'*(G'*G) & F'*id B = F' by Th4,RELAT_1:55;
then A4: (F'*G')*G ~= F' by A3,Th49;
     (F'*G')*(G*F) = ((F'*G')*G)*F by RELAT_1:55;
   then (F'*G')*(G*F) ~= F'*F by A4,Th48;
  hence (F'*G')*(G*F) ~= id A by A2,NATTRA_1:32;
     (G*F)*F' = G*(F*F') & G*id B = G by Th4,RELAT_1:55;
then A5: (G*F)*F' ~= G by A2,Th49;
     (G*F)*(F'*G') = ((G*F)*F')*G' by RELAT_1:55;
   then (G*F)*(F'*G') ~= G*G' by A5,Th48;
  hence (G*F)*(F'*G') ~= id C by A3,NATTRA_1:32;
 end;

theorem Th56:
 A,B are_equivalent implies
  for F being Equivalence of A,B ex G being Equivalence of B,A
   st G*F ~= id A & F*G ~= id B
 proof assume
A1: A,B are_equivalent;
  let F be Equivalence of A,B;
   consider G be Functor of B,A such that
A2:  G*F ~= id A & F*G ~= id B by A1,Def11;
     G is Equivalence of B,A
    proof thus B,A are_equivalent by A1;
     take F; thus thesis by A2;
    end;
  hence thesis by A2;
 end;

theorem Th57:
 for F being Functor of A,B, G being Functor of B,A st G*F ~= id A
  holds F is faithful
 proof
  let F be Functor of A,B, G be Functor of B,A; assume
   G*F ~= id A;
then A1:  id A ~= G*F by NATTRA_1:31;
then A2: id A is_naturally_transformable_to G*F by NATTRA_1:def 11;
   consider s being natural_transformation of id A, G*F such that
A3:  s is invertible by A1,NATTRA_1:def 11;
  thus F is faithful
   proof let a,a' be Object of A; assume
A4:  Hom(a,a') <> {};
then A5:  Hom((id A).a,(id A).a') <> {} by CAT_1:126;
A6:  Hom((id A).a',(G*F).a') <> {} by A2,Th30;
    let f1,f2 be Morphism of a,a';
    assume
A7:  F.(f1 qua Morphism of A) = F.(f2 qua Morphism of A);
A8:   (G*F).f1 = (G*F).(f1 qua Morphism of A) by A4,NATTRA_1:def 1
       .= G.(F.(f2 qua Morphism of A)) by A7,FUNCT_2:21
       .= (G*F).(f2 qua Morphism of A) by FUNCT_2:21
       .= (G*F).f2 by A4,NATTRA_1:def 1;
       s.a' is invertible by A3,NATTRA_1:def 10;
then A9:   s.a' is monic by A6,CAT_1:73;
A10:   s.a'*(id A).f1 = (G*F).f1*s.a by A2,A4,NATTRA_1:def 8
       .= s.a'*(id A).f2 by A2,A4,A8,NATTRA_1:def 8;
    thus f1 = (id A).f1 by A4,NATTRA_1:16
           .= (id A).f2 by A5,A6,A9,A10,CAT_1:60
           .= f2 by A4,NATTRA_1:16;
   end;
 end;

theorem
   A,B are_equivalent implies
 for F being Equivalence of A,B
  holds F is full & F is faithful &
   for b being Object of B ex a being Object of A st b, F.a are_isomorphic
 proof assume
A1: A,B are_equivalent;
  let F be Equivalence of A,B;
   consider G being Equivalence of B,A such that
A2: G*F ~= id A and
A3: F*G ~= id B by A1,Th56;
A4:  id A ~= G*F by A2,NATTRA_1:31;
then A5: id A is_naturally_transformable_to G*F by NATTRA_1:def 11;
   consider s being natural_transformation of id A, G*F such that
A6:  s is invertible by A4,NATTRA_1:def 11;
A7:  id B ~= F*G by A3,NATTRA_1:31;
then A8: id B is_naturally_transformable_to F*G by NATTRA_1:def 11;
A9:   ex t being natural_transformation of id B, F*G st
  t is invertible by A7,NATTRA_1:def 11;
A10: G is faithful by A3,Th57;
  thus F is full
   proof let a,a' be Object of A such that
A11:  Hom(F.a,F.a') <> {};
    let g be Morphism of F.a,F.a';
A12:   (id A).a = a & (id A).a' = a' by CAT_1:118;
A13:   (G*F).a = G.(F.a) & (G*F).a' = G.(F.a') by CAT_1:113;
     then reconsider h = G.g as Morphism of (G*F).a, (G*F).a';
A14:  Hom((id A).a,(G*F).a) <> {} by A5,Th30;
A15:  Hom((G*F).a,(G*F).a') <> {} by A11,A13,CAT_1:126;
       (G*F) is_naturally_transformable_to id A by A2,NATTRA_1:def 11;
then A16:  Hom((G*F).a',(id A).a') <> {} by Th30;
A17:  Hom((id A).a,(G*F).a') <> {} by A14,A15,CAT_1:52;
    hence
A18:   Hom(a,a') <> {} by A12,A16,CAT_1:52;
     reconsider f1 = s.a as Morphism of a, (G*F).a by CAT_1:118;
     reconsider f2 = s.a' as Morphism of a', (G*F).a' by CAT_1:118;
    take f = f2"*(h*f1);
A19:  Hom((id A).a',(G*F).a') <> {} by A5,Th30;
       s.a is invertible by A6,NATTRA_1:def 10;
then A20:   s.a is epi by A14,CAT_1:73;
A21:   s.a' is invertible by A6,NATTRA_1:def 10;
A22:   (id A).f = ((s.a')"*(h*(s.a))) by A12,A18,NATTRA_1:16;
       h*s.a = id((G*F).a')*(h*(s.a)) by A17,CAT_1:57
           .= s.a'*(s.a')"*(h*(s.a)) by A19,A21,CAT_1:def 14
           .= s.a'*(id A).f by A16,A17,A19,A22,CAT_1:54
           .= (G*F).f*s.a by A5,A18,NATTRA_1:def 8;
     then A23:   h = (G*F).f by A14,A15,A20,CAT_1:65;
       G.(g qua Morphism of B) = G.g by A11,NATTRA_1:def 1
           .= (G*F).(f qua Morphism of A) by A18,A23,NATTRA_1:def 1
           .= G.(F.(f qua Morphism of A)) by FUNCT_2:21
           .= G.(F.f qua Morphism of B) by A18,NATTRA_1:def 1;
    hence g = F.f by A10,A11,CAT_1:def 24
           .= F.(f qua Morphism of A) by A18,NATTRA_1:def 1;
   end;
  thus F is faithful by A2,Th57;
  let b be Object of B;
  take G.b;
A24: F.(G.b) = (F*G).b & (id B).b = b by CAT_1:113,118;
     id B is_transformable_to F*G by A8,NATTRA_1:def 7;
  hence b, F.(G.b) are_isomorphic by A9,A24,Th9;
 end;

Back to top