The Mizar article:

Some Isomorphisms Between Functor Categories

by
Andrzej Trybulec

Received June 5, 1992

Copyright (c) 1992 Association of Mizar Users

MML identifier: ISOCAT_2
[ MML identifier index ]


environ

 vocabulary FUNCT_1, FUNCT_2, FUNCT_5, RELAT_1, BOOLE, FUNCT_3, CAT_1,
      NATTRA_1, CAT_2, FINSEQ_2, FUNCOP_1, PARTFUN1, BORSUK_1, ISOCAT_2;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, RELSET_1, FUNCT_1,
      FUNCT_2, FUNCT_3, FUNCT_5, FRAENKEL, CAT_1, CAT_2, NATTRA_1, ISOCAT_1;
 constructors DOMAIN_1, ISOCAT_1, MEMBERED, XBOOLE_0;
 clusters RELSET_1, SUBSET_1, MEMBERED, ZFMISC_1, XBOOLE_0;
 requirements SUBSET, BOOLE;
 definitions TARSKI, FUNCT_1, NATTRA_1, ISOCAT_1, XBOOLE_0;
 theorems FUNCT_2, CAT_1, TARSKI, ZFMISC_1, FUNCT_1, DOMAIN_1, CAT_2, FUNCT_3,
      FUNCOP_1, NATTRA_1, ISOCAT_1, FUNCT_5, RELSET_1, XBOOLE_1;
 schemes FUNCT_2;

begin :: Preliminaries

definition let A,B,C be non empty set;
 let f be Function of A, Funcs(B,C);
 redefine func uncurry f -> Function of [:A,B:],C;
 coherence
  proof
A1:  rng f c= Funcs(B,C) by RELSET_1:12;
then A2:  dom uncurry f = [:dom f,B:] by FUNCT_5:33 .= [:A,B:] by FUNCT_2:def 1
;
    rng uncurry f c= C by A1,FUNCT_5:48;
    hence thesis by A2,FUNCT_2:def 1,RELSET_1:11;
  end;
end;

theorem Th1:
 for A,B,C being non empty set, f being Function of A,Funcs(B,C)
  holds curry uncurry f = f
 proof let A,B,C be non empty set, f be Function of A,Funcs(B,C);
     rng f c= Funcs(B,C) & B <> {} by RELSET_1:12;
  hence curry uncurry f = f by FUNCT_5:55;
 end;

theorem Th2:
 for A,B,C being non empty set, f being Function of A, Funcs(B,C)
 for a being Element of A, b being Element of B
  holds (uncurry f).[a,b] = f.a.b
  proof let A,B,C be non empty set, f be Function of A, Funcs(B,C);
   let a be Element of A, b be Element of B;
      dom f = A & dom(f.a) = B by FUNCT_2:def 1;
   hence (uncurry f).[a,b] = f.a.b by FUNCT_5:45;
  end;

theorem Th3:
 for x being set, A being non empty set
 for f,g being Function of {x}, A st f.x = g.x holds f = g
 proof let x be set, A be non empty set;
  let f,g be Function of {x}, A such that
A1: f.x = g.x;
     now let y be set;
    assume y in {x};
     then y = x by TARSKI:def 1;
    hence f.y = g.y by A1;
   end;
  hence f = g by FUNCT_2:18;
 end;

theorem Th4:
for A,B being non empty set, x being Element of A,
    f being Function of A,B holds f.x in rng f
proof let A,B be non empty set, x be Element of A,
          f be Function of A,B;
    dom f = A by FUNCT_2:def 1;
 hence f.x in rng f by FUNCT_1:def 5;
end;

theorem Th5:
for A,B,C being non empty set, f,g being Function of A,[:B,C:]
  st pr1(B,C)*f = pr1(B,C)*g & pr2(B,C)*f = pr2(B,C)*g
holds f = g
proof let A,B,C be non empty set, f,g be Function of A,[:B,C:] such that
A1: pr1(B,C)*f = pr1(B,C)*g & pr2(B,C)*f = pr2(B,C)*g;
    now let a be Element of A;
    consider b1 being Element of B, c1 being Element of C such that
A2:  f.a = [b1,c1] by DOMAIN_1:9;
    consider b2 being Element of B, c2 being Element of C such that
A3:  g.a = [b2,c2] by DOMAIN_1:9;
A4:  pr1(B,C).[b1,c1] = b1 & pr1(B,C).[b2,c2] = b2 &
    pr2(B,C).[b1,c1] = c1 & pr2(B,C).[b2,c2] = c2 by FUNCT_3:def 5,def 6;
      pr1(B,C).(f.a) = (pr1(B,C)*f).a & pr2(B,C).(f.a) = (pr2(B,C)*f).a &
    pr1(B,C).(g.a) = (pr1(B,C)*g).a & pr2(B,C).(g.a) = (pr2(B,C)*g).a
     by FUNCT_2:21;
   hence f.a = g.a by A1,A2,A3,A4;
  end;
 hence f = g by FUNCT_2:113;
end;

:: Auxiliary category theory facts

 reserve A,B,C for Category,
         F,F1 for Functor of A,B;

theorem Th6:
 for f being Morphism of A holds (id cod f)*f = f
  proof let f be Morphism of A;
    reconsider f' = f as Morphism of dom f, cod f by CAT_1:22;
A1:  Hom(dom f, cod f) <> {} & Hom(cod f,cod f) <> {} by CAT_1:19,56;
   hence (id cod f)*f = (id cod f)*f' by CAT_1:def 13 .= f by A1,CAT_1:57;
  end;

theorem Th7:
 for f being Morphism of A holds f*(id dom f) = f
  proof let f be Morphism of A;
    reconsider f' = f as Morphism of dom f, cod f by CAT_1:22;
A1:  Hom(dom f, cod f) <> {} & Hom(dom f,dom f) <> {} by CAT_1:19,56;
   hence f*(id dom f) = f'*(id dom f) by CAT_1:def 13 .= f by A1,CAT_1:58;
  end;

reserve o,m for set;

reserve t for natural_transformation of F,F1;

theorem Th8:
 o is Object of Functors(A,B) iff o is Functor of A,B
 proof
   the Objects of Functors(A,B) = Funct(A,B) by NATTRA_1:def 18;
  hence thesis by CAT_2:def 2;
 end;

theorem Th9:
 for f being Morphism of Functors(A,B)
  ex F1,F2 being Functor of A,B,
     t being natural_transformation of F1,F2 st
    F1 is_naturally_transformable_to F2 &
    dom f = F1 & cod f = F2 & f = [[F1,F2],t]
proof let m be Morphism of Functors(A,B);
    Hom(dom m,cod m) <> {} & m is Morphism of dom m, cod m by CAT_1:19,22;
  then consider F,F1,t such that
A1: dom m = F & cod m = F1 and
A2: m = [[F,F1],t] by NATTRA_1:40;
 take F,F1,t;
    the Morphisms of Functors(A,B) = NatTrans(A,B) by NATTRA_1:def 18;
 hence F is_naturally_transformable_to F1 by A2,NATTRA_1:35;
 thus thesis by A1,A2;
end;

begin :: The isomorphism between A^1 and A

definition let A,B;
  let a be Object of A;
 func a |-> B -> Functor of Functors(A,B), B means
:Def1: for F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
     st F1 is_naturally_transformable_to F2
    holds it.[[F1,F2],t] = t.a;
 existence
  proof
    defpred P[set,set] means
    for F1,F2 being Functor of A,B, t be natural_transformation of F1,F2
       st $1 = [[F1,F2],t]
      holds $2 = t.a;
A1: now let x be Element of NatTrans(A,B);
    consider F1,F2 being Functor of A,B,
             t being natural_transformation of F1,F2 such that
A2:  x = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by NATTRA_1:def 16;
    reconsider b = t.a as Morphism of B;
    take b;
    thus P[x,b]
    proof
    let F1',F2' be Functor of A,B, t' be natural_transformation of F1',F2'
  ; assume
A3:    x = [[F1',F2'],t'];
then [F1,F2] = [F1',F2'] & t = t' by A2,ZFMISC_1:33;
     then F1 = F1' & F2 = F2' by ZFMISC_1:33;
    hence b = t'.a by A2,A3,ZFMISC_1:33;
   end;
   end;
    consider f being Function of NatTrans(A,B), the Morphisms of B such that
A4:   for x being Element of NatTrans(A,B) holds
     P[x,f.x] from FuncExD(A1);
A5:  the Morphisms of Functors(A,B) = NatTrans(A,B) by NATTRA_1:def 18;
A6: now let c be Object of Functors(A,B);
      reconsider F = c as Functor of A,B by Th8;
     take d = F.a;
A7:  [[F,F],id F] is Morphism of Functors(A,B) by A5,NATTRA_1:def 16;
     thus f.((the Id of Functors(A,B)).c) = f.id c by CAT_1:def 5
        .= f.[[F,F],id F] by NATTRA_1:def 18
        .= (id F).a by A4,A5,A7
        .= id d by NATTRA_1:21
        .= (the Id of B).d by CAT_1:def 5;
    end;
A8: now let m be Morphism of Functors(A,B);
      reconsider m' = m as Element of NatTrans(A,B) by NATTRA_1:def 18;
      consider F,F1,t such that
A9:   F is_naturally_transformable_to F1 and
A10:    dom m = F & cod m = F1 and
A11:    m = [[F,F1],t] by Th9;
A12:  [[F,F],id F] is Morphism of Functors(A,B) by A5,NATTRA_1:def 16;
A13:  [[F1,F1],id F1] is Morphism of Functors(A,B) by A5,NATTRA_1:def 16;
A14:   Hom(F.a,F1.a) <> {} by A9,ISOCAT_1:30;
     thus f.((the Id of Functors(A,B)).((the Dom of Functors(A,B)).m)) =
          f.((the Id of Functors(A,B)).(dom m)) by CAT_1:def 2
          .= f.(id dom m) by CAT_1:def 5
          .= f.[[F,F],id F] by A10,NATTRA_1:def 18
          .= (id F).a by A4,A5,A12
          .= id(F.a) by NATTRA_1:21
          .= id dom(t.a) by A14,CAT_1:23
          .= id dom(f.m') by A4,A11
          .= (the Id of B).(dom(f.m')) by CAT_1:def 5
          .= (the Id of B).((the Dom of B).(f.m)) by CAT_1:def 2;
     thus f.((the Id of Functors(A,B)).((the Cod of Functors(A,B)).m)) =
          f.((the Id of Functors(A,B)).(cod m)) by CAT_1:def 3
          .= f.(id cod m) by CAT_1:def 5
          .= f.[[F1,F1],id F1] by A10,NATTRA_1:def 18
          .= (id F1).a by A4,A5,A13
          .= id(F1.a) by NATTRA_1:21
          .= id cod(t.a) by A14,CAT_1:23
          .= id cod(f.m') by A4,A11
          .= (the Id of B).(cod(f.m')) by CAT_1:def 5
          .= (the Id of B).((the Cod of B).(f.m)) by CAT_1:def 3;
    end;
      now let m1,m2 be Morphism of Functors(A,B);
      consider F,F1,t such that
A15:   F is_naturally_transformable_to F1 and
         dom m1 = F & cod m1 = F1 and
A16:    m1 = [[F,F1],t] by Th9;
      consider F1',F2 being Functor of A,B,
       t' being natural_transformation of F1',F2 such that
A17:   F1' is_naturally_transformable_to F2 and
         dom m2 = F1' & cod m2 = F2 and
A18:    m2 = [[F1',F2],t'] by Th9;
     assume
A19:    [m2,m1] in dom(the Comp of Functors(A,B));
A20:   F1' = dom m2 by A18,NATTRA_1:39 .= cod m1 by A19,CAT_1:40
         .= F1 by A16,NATTRA_1:39;
      then reconsider t' as natural_transformation of F1,F2;
A21:    Hom(F.a,F1.a) <> {} & Hom(F1.a,F2.a) <> {} by A15,A17,A20,ISOCAT_1:30;
      reconsider m1'=m1, m2'=m2 as Element of NatTrans(A,B) by NATTRA_1:def 18;
A22:   f.m1' = t.a & f.m2' = t'.a by A4,A16,A18,A20;
      then cod(f.m1') = F1.a & dom(f.m2') = F1.a by A21,CAT_1:23;
then A23:    [f.m2,f.m1] in dom the Comp of B by CAT_1:40;
A24:   m2*m1= [[F,F2],t'`*`t] by A16,A18,A20,NATTRA_1:42;
     thus f.((the Comp of Functors(A,B)).[m2,m1]) = f.(m2*m1) by A19,CAT_1:def
4
         .= (t'`*`t).a by A4,A5,A24
         .= (t'.a)*(t.a) by A15,A17,A20,NATTRA_1:27
         .= (t'.a)*(t.a qua Morphism of B) by A21,CAT_1:def 13
         .= (the Comp of B).[f.m2,f.m1] by A22,A23,CAT_1:def 4;
    end;
    then reconsider f as Functor of Functors(A,B),B by A5,A6,A8,CAT_1:def 18;
   take f;
   let F1,F2 be Functor of A,B, t be natural_transformation of F1,F2;
A25:  the Morphisms of Functors(A,B) = NatTrans(A,B) by NATTRA_1:def 18;
   assume F1 is_naturally_transformable_to F2;
    then [[F1,F2],t] is Morphism of Functors(A,B) by A25,NATTRA_1:35;
   hence thesis by A4,A25;
  end;
 uniqueness
  proof let f1,f2 be Functor of Functors(A,B), B such that
A26: for F1,F2 being Functor of A,B, t be natural_transformation of F1,F2
     st F1 is_naturally_transformable_to F2
    holds f1.[[F1,F2],t] = t.a and
A27: for F1,F2 being Functor of A,B, t be natural_transformation of F1,F2
     st F1 is_naturally_transformable_to F2
    holds f2.[[F1,F2],t] = t.a;
     now let c be Morphism of Functors(A,B);
      the Morphisms of Functors(A,B) = NatTrans(A,B) by NATTRA_1:def 18;
    then consider F1,F2 being Functor of A,B,
        t being natural_transformation of F1,F2 such that
A28:   c = [[F1,F2],t] and
A29:   F1 is_naturally_transformable_to F2 by NATTRA_1:def 15;
    thus f1.c = t.a by A26,A28,A29 .= f2.c by A27,A28,A29;
   end;
   hence f1 = f2 by FUNCT_2:113;
  end;
end;

 Lm1:
 the Objects of 1Cat(o,m) = {o} & the Morphisms of 1Cat(o,m) = {m}
 proof
     now let a be set;
    thus a in the Objects of 1Cat(o,m) implies a=o by CAT_1:34;
      o is Object of 1Cat(o,m) by CAT_1:32;
    hence a=o implies a in the Objects of 1Cat(o,m);
   end;
  hence the Objects of 1Cat(o,m) = {o} by TARSKI:def 1;
     now let f be set;
    thus f in the Morphisms of 1Cat(o,m) implies f=m by CAT_1:35;
       m is Morphism of 1Cat(o,m) by CAT_1:33;
    hence f=m implies f in the Morphisms of 1Cat(o,m);
   end;
  hence thesis by TARSKI:def 1;
 end;

canceled;

theorem
   Functors(1Cat(o,m),A) ~= A
 proof
    reconsider a = o as Object of 1Cat(o,m) by CAT_1:32;
   take F = a |-> A;
     now let x,y be set;
A1:   the Morphisms of Functors(1Cat(o,m),A) = NatTrans(1Cat(o,m),A)
      by NATTRA_1:def 18;
    assume x in the Morphisms of Functors(1Cat(o,m),A);
     then consider F1,F2 being Functor of 1Cat(o,m),A,
                   t being natural_transformation of F1,F2 such that
A2:   x = [[F1,F2],t] & F1 is_naturally_transformable_to F2
        by A1,NATTRA_1:def 16;
    assume y in the Morphisms of Functors(1Cat(o,m),A);
     then consider F1',F2' being Functor of 1Cat(o,m),A,
                   t' being natural_transformation of F1',F2' such that
A3:   y = [[F1',F2'],t'] & F1' is_naturally_transformable_to F2'
       by A1,NATTRA_1:def 16;
A4:   the Objects of 1Cat(o,m) = {o} & the Morphisms of 1Cat(o,m) = {m} by Lm1;
     then reconsider s=t,s'=t' as Function of {a}, the Morphisms of A;
     reconsider G1=F1, G1'=F1', G2=F2, G2'=F2' as
                                  Function of {m}, the Morphisms of A by A4;
A5:  F1 is_transformable_to F2 & F1' is_transformable_to F2'
       by A2,A3,NATTRA_1:def 7;
    assume F.x = F.y;
then A6:  t.a = F.y by A2,Def1 .= t'.a by A3,Def1;
     then A7:
 s.a = t'.a by A5,NATTRA_1:def 5 .= s'.a by A5,NATTRA_1:def 5;
A8:  id a = m by CAT_1:35;
       Hom(F1.a,F2.a) <> {} & Hom(F1'.a,F2'.a) <> {} by A5,NATTRA_1:def 2;
then A9:    F1.a = F1'.a & F2.a = F2'.a by A6,CAT_1:24;
then A10:   G1.id a = id(F1'.a) by CAT_1:108 .= G1'.id a by CAT_1:108;
        G2.id a = id(F2'.a) by A9,CAT_1:108 .= G2'.id a by CAT_1:108;
     then F1 = F1' & F2 = F2' by A8,A10,Th3;
    hence x = y by A2,A3,A7,Th3;
   end;
  hence F is one-to-one by FUNCT_2:25;
  thus rng F c= the Morphisms of A by RELSET_1:12;
  let x be set;
  assume x in the Morphisms of A;
   then reconsider f = x as Morphism of A;
A11: dom({m} --> id dom f) = {m} by FUNCOP_1:19
      .= the Morphisms of 1Cat(o,m) by Lm1;
A12: dom({m} --> id cod f) = {m} by FUNCOP_1:19
      .= the Morphisms of 1Cat(o,m) by Lm1;
A13:rng({m} --> id dom f) c= {id dom f} by FUNCOP_1:19;
     {id dom f} c= the Morphisms of A by ZFMISC_1:37;
then A14: rng({m} --> id dom f) c= the Morphisms of A by A13,XBOOLE_1:1;
A15: rng({m} --> id cod f) c= {id cod f} by FUNCOP_1:19;
     {id cod f} c= the Morphisms of A by ZFMISC_1:37;
   then rng({m} --> id cod f) c= the Morphisms of A by A15,XBOOLE_1:1;
   then reconsider F1 = {m} --> id dom f, F2 = {m} --> id cod f
       as Function of the Morphisms of 1Cat(o,m),the Morphisms of A
   by A11,A12,A14,FUNCT_2:def 1,RELSET_1:11;
A16:  for g being Morphism of 1Cat(o,m) holds F1.g = id dom f & F2.g = id cod f
     proof let g be Morphism of 1Cat(o,m);
         g = m by CAT_1:35;
       then g in {m} by TARSKI:def 1;
      hence F1.g = id dom f & F2.g = id cod f by FUNCOP_1:13;
     end;
A17: now let c be Object of 1Cat(o,m);
     take d = dom f; thus F1.(id c) = id d by A16;
    end;
A18: now let g be Morphism of 1Cat(o,m);
     thus F1.(id dom g) = id dom f by A16 .= id dom id dom f by CAT_1:44
       .= id dom (F1.g) by A16;
     thus F1.(id cod g) = id dom f by A16 .= id cod id dom f by CAT_1:44
       .= id cod (F1.g) by A16;
    end;
A19: now let h,g be Morphism of 1Cat(o,m) such that dom g = cod h;
A20:   Hom(dom f,dom f) <> {} by CAT_1:56;
     thus F1.(g*h) = id dom f by A16 .= (id dom f)*(id dom f) by CAT_1:59
       .= (id dom f)*(id dom f qua Morphism of A)by A20,CAT_1:def 13
       .= (id dom f)*(F1.h)by A16.= (F1.g)*(F1.h)by A16;
    end;
A21: now let c be Object of 1Cat(o,m);
     take d = cod f; thus F2.(id c) = id d by A16;
    end;
A22: now let g be Morphism of 1Cat(o,m);
     thus F2.(id dom g) = id cod f by A16 .= id dom id cod f by CAT_1:44
       .= id dom (F2.g) by A16;
     thus F2.(id cod g) = id cod f by A16 .= id cod id cod f by CAT_1:44
       .= id cod (F2.g) by A16;
    end;
   now let h,g be Morphism of 1Cat(o,m) such that dom g = cod h;
A23:   Hom(cod f,cod f) <> {} by CAT_1:56;
     thus F2.(g*h) = id cod f by A16 .= (id cod f)*(id cod f) by CAT_1:59
       .= (id cod f)*(id cod f qua Morphism of A)by A23,CAT_1:def 13
       .= (id cod f)*(F2.h)by A16.= (F2.g)*(F2.h)by A16;
    end;
   then reconsider F1, F2 as Functor of 1Cat(o,m),A by A17,A18,A19,A21,A22,
CAT_1:96;
A24: for b being Object of 1Cat(o,m) holds
     F1.b = dom f & F2.b = cod f
    proof let b be Object of 1Cat(o,m);
        id b = m by CAT_1:35;
      then id b in {m} by TARSKI:def 1;
      then F1.(id b qua Morphism of 1Cat(o,m)) = id dom f &
           F2.(id b qua Morphism of 1Cat(o,m)) = id cod f by FUNCOP_1:13;
      then id(F1.b) = id dom f & id(F2.b) = id cod f by CAT_1:108;
     hence F1.b = dom f & F2.b = cod f by CAT_1:45;
    end;
A25:now let b be Object of 1Cat(o,m);
       F1.b = dom f & F2.b = cod f by A24;
    hence Hom(F1.b,F2.b) <> {} by CAT_1:19;
   end;
then A26:F1 is_transformable_to F2 by NATTRA_1:def 2;
A27:dom({a} --> f) = {a} by FUNCOP_1:19 .= the Objects of 1Cat(o,m) by Lm1;
A28:rng({a} --> f) c= {f} by FUNCOP_1:19;
     {f} c= the Morphisms of A by ZFMISC_1:37;
   then rng({a} --> f) c= the Morphisms of A by A28,XBOOLE_1:1;
   then reconsider t = {a} --> f as
     Function of the Objects of 1Cat(o,m), the Morphisms of A
    by A27,FUNCT_2:def 1,RELSET_1:11;
     now let b be Object of 1Cat(o,m);
       b = a by CAT_1:34;
     then b in {a} by TARSKI:def 1;
then A29:  t.b = f by FUNCOP_1:13;
       F1.b = dom f & F2.b = cod f by A24;
     then t.b in Hom(F1.b,F2.b) by A29,CAT_1:18;
    hence t.b is Morphism of F1.b,F2.b by CAT_1:def 7;
   end;
   then reconsider t as transformation of F1,F2 by A26,NATTRA_1:def 3;
A30: for b being Object of 1Cat(o,m) holds t.b = f
    proof let b be Object of 1Cat(o,m);
        b = a by CAT_1:34;
      then b in {a} by TARSKI:def 1;
     hence f = ({a} --> f).b by FUNCOP_1:13 .= t.b by A26,NATTRA_1:def 5;
    end;
A31:now let b1,b2 be Object of 1Cat(o,m) such that
A32:  Hom(b1,b2) <> {};
    let g be Morphism of b1,b2;
A33:  t.b1 = f by A30;
A34:  t.b2 = f by A30;
A35:  g = m by CAT_1:35;
A36:  m in {m} by TARSKI:def 1;
A37:  Hom(F1.b1,F2.b1) <> {} & Hom(F2.b1,F2.b2) <> {} by A25,A32,CAT_1:124;
A38: Hom(F1.b2,F2.b2) <> {} & Hom(F1.b1,F1.b2) <> {} by A25,A32,CAT_1:124;
A39:  F2.g = F2.m by A32,A35,NATTRA_1:def 1 .= id cod f by A36,FUNCOP_1:13;
A40:  F1.g = F1.m by A32,A35,NATTRA_1:def 1 .= id dom f by A36,FUNCOP_1:13;
    thus t.b2*F1.g = f*F1.g by A34,A38,CAT_1:def 13
       .= f by A40,CAT_1:47
       .= F2.g*f by A39,CAT_1:46
       .= F2.g*t.b1 by A33,A37,CAT_1:def 13;
   end;
A41: F1 is_naturally_transformable_to F2
    proof thus F1 is_transformable_to F2 by A25,NATTRA_1:def 2
; thus thesis by A31; end;
   then reconsider t as natural_transformation of F1,F2 by A31,NATTRA_1:def 8;
     [[F1,F2],t] in NatTrans(1Cat(o,m),A) by A41,NATTRA_1:def 16;
then A42:[[F1,F2],t] in the Morphisms of Functors(1Cat(o,m),A) by NATTRA_1:def
18;
     F.[[F1,F2],t] = t.a by A41,Def1 .= f by A30;
  hence x in rng F by A42,FUNCT_2:6;
 end;

begin :: The isomorphism between C^(A x B) and C^(A^B)

theorem Th12:
 for F being Functor of [:A,B:],C, a being Object of A, b being Object of B
   holds (F?-a).b = F.[a,b]
 proof let F be Functor of [:A,B:],C, a be Object of A, b be Object of B;
  thus (F?-a).b = (Obj F?-a).b by CAT_1:def 20 .= (Obj F).[a,b] by CAT_2:48
      .= F.[a,b] by CAT_1:def 20;
 end;

theorem Th13:
 for a1,a2 being Object of A, b1,b2 being Object of B
  holds Hom(a1,a2) <> {} & Hom(b1,b2) <> {} iff Hom([a1,b1],[a2,b2]) <> {}
proof let a1,a2 be Object of A, b1,b2 be Object of B;
    Hom([a1,b1],[a2,b2]) = [:Hom(a1,a2),Hom(b1,b2):] by CAT_2:42;
 hence thesis by ZFMISC_1:113;
end;

theorem Th14:
 for a1,a2 being Object of A, b1,b2 being Object of B
  st Hom([a1,b1],[a2,b2]) <> {}
 for f being (Morphism of A), g being Morphism of B
  holds [f,g] is Morphism of [a1,b1],[a2,b2] iff
   f is Morphism of a1,a2 & g is Morphism of b1,b2
proof let a1,a2 be Object of A, b1,b2 be Object of B; assume
A1: Hom([a1,b1],[a2,b2]) <> {};
then A2: Hom(a1,a2) <> {} & Hom(b1,b2) <> {} by Th13;
 let f be Morphism of A; let g be Morphism of B;
 thus [f,g] is Morphism of [a1,b1],[a2,b2] implies
   f is Morphism of a1,a2 & g is Morphism of b1,b2
  proof assume [f,g] is Morphism of [a1,b1],[a2,b2];
    then [f,g] in Hom([a1,b1],[a2,b2]) &
    Hom([a1,b1],[a2,b2]) = [:Hom(a1,a2),Hom(b1,b2):]
      by A1,CAT_1:def 7,CAT_2:42;
    then f in Hom(a1,a2) & g in Hom(b1,b2) by ZFMISC_1:106;
   hence f is Morphism of a1,a2 & g is Morphism of b1,b2 by CAT_1:def 7;
  end;
 thus thesis by A2,CAT_2:43;
end;

theorem Th15:
for F1,F2 being Functor of [:A,B:],C st F1 is_naturally_transformable_to F2
for t being natural_transformation of F1,F2, a being Object of A holds
  F1?-a is_naturally_transformable_to F2?-a &
  (curry t).a is natural_transformation of F1?-a,F2?-a
 proof let F1,F2 be Functor of [:A,B:],C; assume
A1: F1 is_naturally_transformable_to F2;
then A2: F1 is_transformable_to F2 by NATTRA_1:def 7;
  let u be natural_transformation of F1,F2, a be Object of A;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
   then reconsider t=u as
    Function of [:the Objects of A, the Objects of B:], the Morphisms of C;
A3: F1?-a is_transformable_to F2?-a
    proof let b be Object of B;
       (F1?-a).b = F1.[a,b] & (F2?-a).b = F2.[a,b] by Th12;
     hence Hom((F1?-a).b,(F2?-a).b) <> {} by A2,NATTRA_1:def 2;
    end;
A4: now let b be Object of B;
A5:  (curry t).a.b = t.[a,b] by CAT_2:3 .= u.[a,b] by A2,NATTRA_1:def 5;
A6:     (F1?-a).b = F1.[a,b] & (F2?-a).b = F2.[a,b] by Th12;
       Hom((F1?-a).b,(F2?-a).b) <> {} by A3,NATTRA_1:def 2;
    hence (curry t).a.b in Hom((F1?-a).b,(F2?-a).b) by A5,A6,CAT_1:def 7;
   end;
     now let b be Object of B;
     (curry t).a.b in Hom((F1?-a).b,(F2?-a).b) by A4;
    hence (curry t).a.b is Morphism of (F1?-a).b,(F2?-a).b by CAT_1:def 7;
   end;
   then reconsider s = (curry t).a as transformation of F1?-a,F2?-a
    by A3,NATTRA_1:def 3;
A7: now let b1,b2 be Object of B such that
A8:  Hom(b1,b2) <> {};
    let f be Morphism of b1,b2;
A9:   Hom(a,a) <> {} by CAT_1:56;
     then reconsider g = [id a,f] as Morphism of [a,b1],[a,b2] by A8,CAT_2:43;
A10:   Hom([a,b1],[a,b2]) <> {} by A8,A9,Th13;
then A11:   Hom(F1.[a,b1],F1.[a,b2]) <> {} by CAT_1:126;
A12:   Hom(F1.[a,b2],F2.[a,b2]) <> {} by A2,NATTRA_1:def 2;
A13:   Hom((F1?-a).b1,(F1?-a).b2) <> {} by A8,CAT_1:126;
A14:   (F1?-a).b2 = F1.[a,b2] & (F2?-a).b2 = F2.[a,b2] by Th12;
A15:   Hom(F1.[a,b1],F2.[a,b1]) <> {} by A2,NATTRA_1:def 2;
A16:   Hom(F2.[a,b1],F2.[a,b2]) <> {} by A10,CAT_1:126;
A17:   Hom((F2?-a).b1,(F2?-a).b2) <> {} by A8,CAT_1:126;
A18:   (F1?-a).b1 = F1.[a,b1] & (F2?-a).b1 = F2.[a,b1] by Th12;
A19:   s.b1 = (curry t).a.b1 by A3,NATTRA_1:def 5 .= t.[a,b1] by CAT_2:3
      .= u.[a,b1] by A2,NATTRA_1:def 5;
     s.b2 = (curry t).a.b2 by A3,NATTRA_1:def 5 .= t.[a,b2] by CAT_2:3
      .= u.[a,b2] by A2,NATTRA_1:def 5;
    hence s.b2*(F1?-a).f
      = u.[a,b2]*(F1?-a).f by A12,A13,A14,CAT_1:def 13
     .= u.[a,b2]*(F1?-a).(f qua Morphism of B) by A8,NATTRA_1:def 1
     .= u.[a,b2]*F1.[id a,f] by CAT_2:47
     .= u.[a,b2]*(F1.g qua Morphism of C) by A10,NATTRA_1:def 1
     .= u.[a,b2]*F1.g by A11,A12,CAT_1:def 13
     .= F2.g*u.[a,b1] by A1,A10,NATTRA_1:def 8
     .= (F2.g qua Morphism of C)*u.[a,b1] by A15,A16,CAT_1:def 13
     .= F2.[id a,f]*u.[a,b1] by A10,NATTRA_1:def 1
     .= (F2?-a).(f qua Morphism of B)*u.[a,b1] by CAT_2:47
     .= ((F2?-a).f qua Morphism of C)*s.b1 by A8,A19,NATTRA_1:def 1
     .= (F2?-a).f*s.b1 by A15,A17,A18,CAT_1:def 13;
   end;
  hence F1?-a is_naturally_transformable_to F2?-a by A3,NATTRA_1:def 7;
  hence thesis by A7,NATTRA_1:def 8;
 end;

definition let A,B,C; let F be Functor of [:A,B:],C;
 let f be Morphism of A;
 func curry(F,f) -> Function of the Morphisms of B,the Morphisms of C equals
:Def2:  (curry F).f;
 coherence
  proof
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
    then reconsider F as
     Function of [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
      (curry F).f is Function of the Morphisms of B,the Morphisms of C;
   hence thesis;
  end;
end;

theorem Th16:
 for a1,a2 being Object of A, b1,b2 being Object of B,
  f being (Morphism of A), g being Morphism of B
  st f in Hom(a1,a2) & g in Hom(b1,b2)
 holds [f,g] in Hom([a1,b1],[a2,b2])
 proof let a1,a2 be Object of A, b1,b2 be Object of B,
  f be (Morphism of A), g be Morphism of B;
  assume f in Hom(a1,a2) & g in Hom(b1,b2);
   then [f,g] in [:Hom(a1,a2),Hom(b1,b2):] by ZFMISC_1:106;
  hence [f,g] in Hom([a1,b1],[a2,b2]) by CAT_2:42;
 end;

theorem Th17:
for F being Functor of [:A,B:], C
for a,b being Object of A st Hom(a,b) <> {}
for f being Morphism of a,b holds
 F?-a is_naturally_transformable_to F?-b &
  curry(F,f)*the Id of B is natural_transformation of F?-a,F?-b
proof let F be Functor of [:A,B:], C;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
  then reconsider G = F as
   Function of [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
 let a1,a2 be Object of A such that
A1: Hom(a1,a2) <> {};
 let f be Morphism of a1,a2;
  reconsider Ff = (curry G).(f qua Morphism of A)
   as Function of the Morphisms of B,the Morphisms of C;
  reconsider FfI = curry(F,f)*the Id of B
   as Function of the Objects of B, the Morphisms of C;
A2:now let b be Object of B;
A3:  (F?-a1).b = F.[a1,b] & (F?-a2).b = F.[a2,b] by Th12;
       f in Hom(a1,a2) & id b in Hom(b,b) by A1,CAT_1:55,def 7;
     then [f,id b] in Hom([a1,b],[a2,b]) by Th16;
     then F.[f,id b] in Hom(F.[a1,b],F.[a2,b]) by CAT_1:123;
     then Ff.(id b qua Morphism of B) in Hom((F?-a1).b,(F?-a2).b)
      by A3,CAT_2:3;
     then curry(F,f).id b in Hom((F?-a1).b,(F?-a2).b) by Def2;
     then curry(F,f).((the Id of B).b) in Hom((F?-a1).b,(F?-a2).b)
      by CAT_1:def 5;
    hence (curry(F,f)*the Id of B).b in Hom((F?-a1).b,(F?-a2).b) by FUNCT_2:21
;
   end;
A4: F?-a1 is_transformable_to F?-a2
  proof let b be Object of B;
   thus Hom((F?-a1).b,(F?-a2).b) <> {} by A2;
  end;
    now let b be Object of B;
    (curry(F,f)*the Id of B).b in Hom((F?-a1).b,(F?-a2).b) by A2;
   hence FfI.b is Morphism of (F?-a1).b,(F?-a2).b by CAT_1:def 7;
  end;
  then reconsider t = curry(F,f)*the Id of B as transformation of F?-a1,F?-a2
   by A4,NATTRA_1:def 3;
A5:now let b1,b2 be Object of B such that
A6: Hom(b1,b2) <> {};
A7: Hom(a1,a1) <> {} & Hom(a2,a2) <> {} & Hom(b1,b1) <> {} & Hom(b2,b2) <> {}
     by CAT_1:56;
A8: Hom((F?-a1).b1,(F?-a2).b1) <> {} by A4,NATTRA_1:def 2;
A9: Hom((F?-a1).b2,(F?-a2).b2) <> {} by A4,NATTRA_1:def 2;
A10: Hom((F?-a1).b1,(F?-a1).b2) <> {} by A6,CAT_1:126;
A11: Hom((F?-a2).b1,(F?-a2).b2) <> {} by A6,CAT_1:126;
   let g be Morphism of b1,b2;
A12: t.b2 = FfI.b2 & t.b1 = FfI.b1 by A4,NATTRA_1:def 5;
    reconsider ida1 = id a1, ida2 = id a2 as Morphism of A;
    reconsider idb1 = id b1, idb2 = id b2 as Morphism of B;
A13: dom id a2 = a2 by CAT_1:44 .= cod f by A1,CAT_1:23;
A14: dom g = b1 by A6,CAT_1:23 .= cod id b1 by CAT_1:44;
A15: cod id a1 = a1 by CAT_1:44 .= dom f by A1,CAT_1:23;
A16: dom id b2 = b2 by CAT_1:44 .= cod g by A6,CAT_1:23;
A17: dom[id a2,g] = [cod f,dom g] by A13,CAT_2:38 .= cod[f,id b1] by A14,CAT_2:
38;
A18: cod[id a1,g] = [dom f,cod g] by A15,CAT_2:38 .= dom[f,id b2] by A16,CAT_2:
38;
A19: [f*ida1,idb2*g]
      = [f*ida1,id b2*g] by A6,A7,CAT_1:def 13
     .= [f*ida1,g] by A6,CAT_1:57
     .= [f*id a1,g] by A1,A7,CAT_1:def 13
     .= [f,g] by A1,CAT_1:58
     .= [id a2*f,g] by A1,CAT_1:57
     .= [ida2*f,g] by A1,A7,CAT_1:def 13
     .= [ida2*f,g*id b1] by A6,CAT_1:58
     .= [ida2*f,g*idb1] by A6,A7,CAT_1:def 13;
   thus t.b2*(F?-a1).g = FfI.b2*(F?-a1).g by A9,A10,A12,CAT_1:def 13
     .= (curry(F,f).((the Id of B).b2))*(F?-a1).g by FUNCT_2:21
     .= curry(F,f).(id b2)*(F?-a1).g by CAT_1:def 5
     .= (Ff.(id b2 qua Morphism of B))*(F?-a1).g by Def2
     .= (F.[f,id b2])*(F?-a1).g by CAT_2:3
     .= (F.[f,id b2])*(F?-a1).(g qua Morphism of B) by A6,NATTRA_1:def 1
     .= (F.[f,id b2])*(F.[id a1,g]) by CAT_2:47
     .= F.([f,id b2]*[id a1,g]) by A18,CAT_1:99
     .= F.[f*ida1,idb2*g] by A15,A16,CAT_2:39
     .= F.([ida2,g]*[f,idb1]) by A13,A14,A19,CAT_2:39
     .= F.[id a2,g]*(F.[f,id b1]) by A17,CAT_1:99
     .= (F?-a2).(g qua Morphism of B)*(F.[f,id b1]) by CAT_2:47
     .= (F?-a2).g*(F.[f,id b1]) by A6,NATTRA_1:def 1
     .= (F?-a2).g*(Ff.(id b1 qua Morphism of B)) by CAT_2:3
     .= (F?-a2).g*(curry(F,f).(id b1)) by Def2
     .= (F?-a2).g*(curry(F,f).((the Id of B).b1)) by CAT_1:def 5
     .= (F?-a2).g*(FfI.b1) by FUNCT_2:21
     .= (F?-a2).g*t.b1 by A8,A11,A12,CAT_1:def 13;
  end;
 hence F?-a1 is_naturally_transformable_to F?-a2 by A4,NATTRA_1:def 7;
 hence thesis by A5,NATTRA_1:def 8;
end;

definition let A,B,C; let F be Functor of [:A,B:],C;
 let f be Morphism of A;
 func F?-f -> natural_transformation of F?-dom f, F?-cod f equals
:Def3:  curry(F,f)*the Id of B;
 coherence
  proof Hom(dom f, cod f) <> {} & f is Morphism of dom f, cod f by CAT_1:19,22
;
   hence thesis by Th17;
  end;
 correctness;
end;

theorem Th18:
 for F being Functor of [:A,B:],C, g being Morphism of A
  holds F?-dom(g) is_naturally_transformable_to F?-cod(g)
proof let F be Functor of [:A,B:],C, g be Morphism of A;
    g is Morphism of dom g, cod g & Hom(dom g,cod g) <> {} by CAT_1:19,22;
 hence F?-dom(g) is_naturally_transformable_to F?-cod(g) by Th17;
end;

theorem Th19:
 for F being Functor of [:A,B:],C, f being (Morphism of A), b being Object of B
  holds (F?-f).b = F.[f, id b]
proof
 let F be Functor of [:A,B:],C, f be (Morphism of A), b be Object of B;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
  then reconsider G = F as
   Function of [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
  reconsider Ff = (curry G).f as
   Function of the Morphisms of B,the Morphisms of C;
      F?-dom f is_naturally_transformable_to F?-cod f by Th18;
 then F?-dom f is_transformable_to F?-cod f by NATTRA_1:def 7;
 hence (F?-f).b
      = (F?-f qua Function of the Objects of B, the Morphisms of C).b
          by NATTRA_1:def 5
     .= (curry(F,f)*the Id of B).b by Def3
     .= curry(F,f).((the Id of B).b) by FUNCT_2:21
     .= curry(F,f).id b by CAT_1:def 5
     .= Ff.(id b qua Morphism of B) by Def2
     .= F.[f,id b] by CAT_2:3;
end;

theorem Th20:
 for F being Functor of [:A,B:],C, a being Object of A
  holds id(F?-a) = F?-id a
 proof let F be Functor of [:A,B:],C, a be Object of A;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
   then reconsider G = F as
    Function of [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
   reconsider Ff = (curry G).(id a qua Morphism of A)
    as Function of the Morphisms of B,the Morphisms of C;
     dom id a = a & cod id a = a by CAT_1:44;
   then reconsider I = F?-id a as transformation of F?-a,F?-a;
     now let b be Object of B;
    thus (I qua Function of the Objects of B, the Morphisms of C).b
       = (curry(F,id a)*the Id of B).b by Def3
      .= curry(F,id a).((the Id of B).b) by FUNCT_2:21
      .= curry(F,id a).id b by CAT_1:def 5
      .= Ff.(id b qua Morphism of B) by Def2
      .= F.[id a,id b] by CAT_2:3
      .= F.(id [a,b] qua Morphism of [:A,B:]) by CAT_2:41
      .= id(F.[a,b]) by CAT_1:108
      .= id ((F?-a).b) by Th12;
   end;
  hence thesis by NATTRA_1:def 4;
 end;

theorem Th21:
 for F being Functor of [:A,B:],C, g,f being Morphism of A st dom g = cod f
  for t being natural_transformation of F?-dom f, F?-dom g st t = F?-f
  holds F?-(g*f) = (F?-g)`*`t
proof let F be Functor of [:A,B:],C, g,f be Morphism of A such that
A1: dom g = cod f;
 let t be natural_transformation of F?-dom f, F?-dom g such that
A2: t = F?-f;
A3: F?-dom f is_naturally_transformable_to F?-dom g &
    F?-dom g is_naturally_transformable_to F?-cod g by A1,Th18;
then A4: F?-dom f is_transformable_to F?-dom g &
    F?-dom g is_transformable_to F?-cod g by NATTRA_1:def 7;
then A5: F?-dom f is_transformable_to F?-cod g by NATTRA_1:19;
      F?-dom(g*f) is_naturally_transformable_to F?-cod(g*f) by Th18;
then A6: F?-dom(g*f) is_transformable_to F?-cod(g*f) by NATTRA_1:def 7;
A7:     cod(g*f) = cod g & dom(g*f) = dom f by A1,CAT_1:42;
  reconsider s = t as transformation of F?-dom f, F?-dom g;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
  then reconsider G = F as
   Function of [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
  reconsider Fgf = (curry G).(g*f), Ff = (curry G).f, Fg = (curry G).g
    as Function of the Morphisms of B,the Morphisms of C;
    now let b be Object of B;
A8:  (F?-g).b
      = (F?-(g) qua Function of the Objects of B, the Morphisms of C).b
          by A4,NATTRA_1:def 5
     .= (curry(F,g)*the Id of B).b by Def3
     .= curry(F,g).((the Id of B).b) by FUNCT_2:21
     .= curry(F,g).id b by CAT_1:def 5
     .= Fg.(id b qua Morphism of B) by Def2
     .= F.[g,id b] by CAT_2:3;
A9:  (F?-f).b
      = (F?-(f) qua Function of the Objects of B, the Morphisms of C).b
          by A1,A4,NATTRA_1:def 5
     .= (curry(F,f)*the Id of B).b by Def3
     .= curry(F,f).((the Id of B).b) by FUNCT_2:21
     .= curry(F,f).id b by CAT_1:def 5
     .= Ff.(id b qua Morphism of B) by Def2
     .= F.[f,id b] by CAT_2:3;
      dom id b = b by CAT_1:44 .= cod id b by CAT_1:44;
then A10:  dom[g, id b] = [cod f, cod id b] by A1,CAT_2:38
       .= cod[f, id b] by CAT_2:38;
A11: Hom(b,b) <> {} by CAT_1:56;
A12: Hom((F?-dom g).b,(F?-cod g).b) <> {} &
    Hom((F?-dom f).b,(F?-dom g).b) <> {} by A4,NATTRA_1:def 2;
   thus F?-(g*f).b
      = (F?-(g*f) qua Function of the Objects of B, the Morphisms of C).b
          by A6,NATTRA_1:def 5
     .= (curry(F,g*f)*the Id of B).b by Def3
     .= curry(F,g*f).((the Id of B).b) by FUNCT_2:21
     .= curry(F,g*f).id b by CAT_1:def 5
     .= Fgf.(id b qua Morphism of B) by Def2
     .= F.[g*f,id b] by CAT_2:3
     .= F.[g*f,id b*id b] by CAT_1:59
     .= F.[g*f,id b*(id b qua Morphism of B)] by A11,CAT_1:def 13
     .= F.([g, id b]*[f,id b]) by A10,CAT_2:40
     .= (F?-g).b*(s.b qua Morphism of C) by A1,A2,A8,A9,A10,CAT_1:99
     .= (F?-g).b*s.b by A12,CAT_1:def 13
     .= ((F?-g)`*`s).b by A4,NATTRA_1:def 6;
  end;
  then F?-(g*f) = (F?-g)`*`s by A5,A7,NATTRA_1:20;
 hence thesis by A3,NATTRA_1:def 9;
end;

definition let A,B,C;
 let F be Functor of [:A,B:],C;
 func export F -> Functor of A, Functors(B,C) means
:Def4: for f being Morphism of A holds it.f =[[F?-dom f,F?-cod f],F?-f];
 existence
  proof
    defpred P[set,set] means
      for f being Morphism of A
        st $1 = f holds $2 = [[F?-dom f,F?-cod f],F?-f];
A1:  now let m; assume m in the Morphisms of A;
      then reconsider g = m as Morphism of A;
     take o = [[F?-dom(g),F?-cod(g)],F?-g];
        F?-dom(g) is_naturally_transformable_to F?-cod(g) by Th18;
      then o in NatTrans(B,C) by NATTRA_1:35;
     hence o in the Morphisms of Functors(B,C) by NATTRA_1:def 18;
     thus P[m,o];
    end;
    consider G being
     Function of the Morphisms of A, the Morphisms of Functors(B,C) such that
A2:   for m st m in the Morphisms of A holds P[m,G.m] from FuncEx1(A1);

      G is Functor of A, Functors(B,C)
     proof
      thus for c being Object of A
       ex d being Object of Functors(B,C)
        st G.id c = id d
       proof let c be Object of A;
         reconsider d = F?-c as Object of Functors(B,C) by Th8;
        take d;
         dom id c = c & cod id c = c by CAT_1:44;
        hence G.id c
           = [[F?-c,F?-c],F?-id c] by A2
          .= [[F?-c,F?-c],id(F?-c)] by Th20
          .= id d by NATTRA_1:def 18;
       end;
      thus for f being Morphism of A holds
         G.id dom f = id dom(G.f) & G.id cod f = id cod(G.f)
       proof let f be Element of the Morphisms of A;
         reconsider d = F?-dom f, c = F?-cod f as Object of Functors(B,C)
          by Th8;
A3:       dom id dom f = dom f & cod id dom f = dom f &
         dom id cod f = cod f & cod id cod f = cod f by CAT_1:44;
A4:       G.f = [[F?-dom f,F?-cod f],F?-f] by A2;
        thus G.id dom f
          = [[F?-dom f,F?-dom f],F?-id dom f] by A2,A3
         .= [[F?-dom f,F?-dom f],id(F?-dom f)] by Th20
         .= id d by NATTRA_1:def 18
         .= id dom(G.f) by A4,NATTRA_1:39;
        thus G.id cod f
          = [[F?-cod f,F?-cod f],F?-id cod f] by A2,A3
         .= [[F?-cod f,F?-cod f],id(F?-cod f)] by Th20
         .= id c by NATTRA_1:def 18
         .= id cod(G.f) by A4,NATTRA_1:39;
       end;
      let f,g be Morphism of A;
      assume
A5:     dom g = cod f;
       then reconsider t = F?-f as natural_transformation of F?-dom f,F?-dom g;
         the Morphisms of Functors(B,C) = NatTrans(B,C) &
       F?-dom f is_naturally_transformable_to F?-cod f &
       F?-dom g is_naturally_transformable_to F?-cod g by Th18,NATTRA_1:def 18;
       then reconsider gg = [[F?-dom g,F?-cod g],F?-g],
                  ff = [[F?-dom f,F?-cod f],F?-f]
        as Morphism of Functors(B,C) by NATTRA_1:35;
A6:     cod(g*f) = cod g & dom(g*f) = dom f by A5,CAT_1:42;
A7:     G.f = ff by A2;
      thus G.(g*f)
          = [[F?-dom(g*f),F?-cod(g*f)],F?-(g*f)] by A2
         .= [[F?-dom(g*f),F?-cod(g*f)],(F?-g)`*`t] by A5,Th21
         .= gg*ff by A5,A6,NATTRA_1:42
         .= G.g*G.f by A2,A7;
     end;
    then reconsider G as Functor of A, Functors(B,C);
   take G;
   thus thesis by A2;
  end;
 uniqueness
  proof let G1,G2 be Functor of A, Functors(B,C) such that
A8: for f being Morphism of A holds G1.f =[[F?-dom f,F?-cod f],F?-f] and
A9: for f being Morphism of A holds G2.f =[[F?-dom f,F?-cod f],F?-f];
      now let f be Morphism of A;
     thus G1.f =[[F?-dom f,F?-cod f],F?-f] by A8 .= G2.f by A9;
    end;
   hence thesis by FUNCT_2:113;
  end;
end;

 Lm2:
 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;

canceled 2;

theorem Th24:
 for F being Functor of [:A,B:],C, a being Object of A
  holds (export F).a = F?-a
proof let F be Functor of [:A,B:],C, a be Object of A;
A1: dom id a = a & cod id a = a by CAT_1:44;
  reconsider o = F?-a as Object of Functors(B,C) by Th8;
  reconsider i = id a as Morphism of A;
A2:(export F).i = [[F?-a,F?-a],F?-id a] by A1,Def4
     .= [[F?-a,F?-a],id(F?-a)] by Th20
     .= id o by NATTRA_1:def 18;
 thus (export F).a = (Obj export F).a by CAT_1:def 20
     .= F?-a by A2,CAT_1:103;
end;

theorem Th25:
 for F being Functor of [:A,B:],C, a being Object of A
  holds (export F).a is Functor of B,C
proof let F be Functor of [:A,B:],C, a be Object of A;
     (export F).a = (F?-a) by Th24;
  hence (export F).a is Functor of B,C;
end;

theorem Th26:
 for F1,F2 being Functor of [:A,B:],C holds
  export F1 = export F2 implies F1 = F2
 proof let F1,F2 be Functor of [:A,B:],C such that
A1: export F1 = export F2;
     now let fg be Morphism of [:A,B:];
     consider f being (Morphism of A), g being Morphism of B such that
A2:    fg = [f,g] by CAT_2:37;
A3:   dom id cod f = cod f & dom g = cod id dom g by CAT_1:44;
A4:   fg = [(id cod f)*f,g] by A2,Th6
       .= [(id cod f)*f,g*(id dom g)] by Th7
       .= [id cod f,g]*[f, id dom g] by A3,CAT_2:39;
A5:     [[F1?-dom f,F1?-cod f],F1?-f] = (export F2).f by A1,Def4
      .= [[F2?-dom f,F2?-cod f],F2?-f] by Def4;
     then F1?-f = F2?-f & [F1?-dom f,F1?-cod f] = [F2?-dom f,F2?-cod f]
       by ZFMISC_1:33;
then A6:   F1?-dom f = F2?-dom f & F1?-cod f = F2?-cod f by ZFMISC_1:33;
A7:   F1.[f, id dom g] = (F1?-f).dom g by Th19
       .= (F2?-f).dom g by A5,A6,ZFMISC_1:33
       .= F2.[f,id dom g] by Th19;
A8:   F1.[id cod f, g] = (F2?-cod f).g by A6,CAT_2:47
       .= F2.[id cod f, g] by CAT_2:47;
A9:   cod[f,id dom g] = [cod f, cod id dom g] by CAT_2:38
       .= [cod f, dom g] by CAT_1:44
       .= [dom id cod f, dom g] by CAT_1:44
       .= dom[id cod f,g] by CAT_2:38;
    hence F1.fg = F2.[id cod f,g]*F2.[f, id dom g] by A4,A7,A8,CAT_1:99
       .= F2.fg by A4,A9,CAT_1:99;
   end;
  hence F1 = F2 by FUNCT_2:113;
 end;

theorem Th27:
for F1,F2 being Functor of [:A,B:], C st
  F1 is_naturally_transformable_to F2
for t being natural_transformation of F1,F2
  holds export F1 is_naturally_transformable_to export F2 &
 ex G being natural_transformation of export F1, export F2 st
  for s being Function of
    [:the Objects of A, the Objects of B:], the Morphisms of C st t = s
   for a being Object of A
    holds G.a = [[(export F1).a,(export F2).a],(curry s).a]
proof let F1,F2 be Functor of [:A,B:], C; 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;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
  then reconsider s = t as Function of
       [:the Objects of A, the Objects of B:], the Morphisms of C;
A3: now let a be Object of A;
     let S1,S2 be Functor of B,C such that
A4:   S1 = (export F1).a & S2 = (export F2).a;
     let b be Object of B;
A5:   S1.b = (F1?-a).b by A4,Th24 .= F1.[a,b] by Th12;
A6:   S2.b = (F2?-a).b by A4,Th24 .= F2.[a,b] by Th12;
     (curry s).a.b = s.[a,b] by CAT_2:3 .= t.[a,b] by A2,NATTRA_1:def 5;
     hence (curry s).a.b in Hom(S1.b,S2.b) by A2,A5,A6,Lm2;
    end;
A7:  now let a be Object of A;
     let S1,S2 be Functor of B,C; assume
     S1 = (export F1).a & S2 = (export F2).a;
      then for b be Object of B holds Hom(S1.b,S2.b) <> {} by A3;
     hence S1 is_transformable_to S2 by NATTRA_1:def 2;
    end;
A8: now let a be Object of A;
     let S1,S2 be Functor of B,C such that
A9:   S1 = (export F1).a & S2 = (export F2).a;
     thus (curry s).a is transformation of S1,S2
       proof thus S1 is_transformable_to S2 by A7,A9;
        let b be Object of B;
           (curry s).a.b in Hom(S1.b,S2.b) by A3,A9;
        hence (curry s).a.b is Morphism of S1.b,S2.b by CAT_1:def 7;
       end;
    end;
A10:  now let a be Object of A;
     let S1,S2 be Functor of B,C, T be transformation of S1,S2; assume
A11:   S1 = (export F1).a & S2 = (export F2).a & T = (curry s).a;
then A12:   S1 is_transformable_to S2 by A7;
     let b1,b2 be Object of B such that
A13:   Hom(b1,b2) <> {};
     let f be Morphism of b1,b2;
A14:    Hom(a,a) <> {} by CAT_1:56;
      then reconsider g = [id a,f] as Morphism of [a,b1],[a,b2]
       by A13,CAT_2:43;
A15:   Hom([a,b1],[a,b2]) <> {} by A13,A14,Th13;
then A16:   Hom(F1.[a,b1],F1.[a,b2]) <> {} by CAT_1:126;
A17:   Hom(F2.[a,b1],F2.[a,b2]) <> {} by A15,CAT_1:126;
A18:   Hom(F1.[a,b1],F2.[a,b1]) <> {} by A2,NATTRA_1:def 2;
A19:   Hom(F1.[a,b2],F2.[a,b2]) <> {} by A2,NATTRA_1:def 2;
A20:   Hom(S1.b1,S1.b2) <> {} by A13,CAT_1:126;
A21:   Hom(S2.b1,S2.b2) <> {} by A13,CAT_1:126;
A22:   Hom(S1.b1,S2.b1) <> {} by A12,NATTRA_1:def 2;
A23:  Hom(S1.b2,S2.b2) <> {} by A12,NATTRA_1:def 2;
A24:    T.b1 = (T qua Function of the Objects of B, the Morphisms of C).b1
         by A12,NATTRA_1:def 5
          .= s.[a,b1] by A11,CAT_2:3 .= t.[a,b1] by A2,NATTRA_1:def 5;
A25:    T.b2 = (T qua Function of the Objects of B, the Morphisms of C).b2
            by A12,NATTRA_1:def 5
          .= s.[a,b2] by A11,CAT_2:3 .= t.[a,b2] by A2,NATTRA_1:def 5;
A26:    S1.f = (F1?-a).f by A11,Th24
          .= (F1?-a).(f qua Morphism of B) by A13,NATTRA_1:def 1
          .= F1.[id a, f] by CAT_2:47
          .= F1.g by A15,NATTRA_1:def 1;
A27:    S2.f = (F2?-a).f by A11,Th24
          .= (F2?-a).(f qua Morphism of B) by A13,NATTRA_1:def 1
          .= F2.[id a, f] by CAT_2:47
          .= F2.g by A15,NATTRA_1:def 1;
     thus T.b2*S1.f
         = t.[a,b2]*(F1.g qua Morphism of C) by A20,A23,A25,A26,CAT_1:def 13
        .= t.[a,b2]*F1.g by A16,A19,CAT_1:def 13
        .= F2.g*t.[a,b1] by A1,A15,NATTRA_1:def 8
        .= (S2.f qua Morphism of C)*T.b1 by A17,A18,A24,A27,CAT_1:def 13
        .= S2.f*T.b1 by A21,A22,CAT_1:def 13;
    end;
    defpred P[set,set] means
      for f being Object of A, s being Function of
       [:the Objects of A, the Objects of B:], the Morphisms of C
         st t = s & $1 = f
          holds $2 = [[(export F1).f,(export F2).f],(curry s).f];
A28:  now let m; assume m in the Objects of A;
      then reconsider a = m as Object of A;
     take o = [[(export F1).a,(export F2).a],(curry s).a];
      reconsider S1 = (export F1).a, S2 = (export F2).a as Functor of B,C
       by Th25;
      reconsider T = (curry s).a as transformation of S1,S2 by A8;
A29:    S1 is_naturally_transformable_to S2
       proof thus S1 is_transformable_to S2 by A7;
        take T; thus thesis by A10;
       end;
        T is natural_transformation of S1,S2
       proof thus S1 is_naturally_transformable_to S2 by A29;
        thus thesis by A10;
       end;
      then o in NatTrans(B,C) by A29,NATTRA_1:35;
     hence o in the Morphisms of Functors(B,C) by NATTRA_1:def 18;
     thus P[m,o];
    end;
    consider G being
     Function of the Objects of A, the Morphisms of Functors(B,C) such that
A30:   for m st m in the Objects of A holds P[m,G.m]
           from FuncEx1(A28);
A31:  now let a be Object of A;
      reconsider S1 = (export F1).a, S2 = (export F2).a as Functor of B,C
       by Th25;
      reconsider T = (curry s).a as transformation of S1,S2 by A8;
A32:    S1 is_naturally_transformable_to S2
       proof thus S1 is_transformable_to S2 by A7;
        take T; thus thesis by A10;
       end;
A33:    T is natural_transformation of S1,S2
       proof thus S1 is_naturally_transformable_to S2 by A32;
        thus thesis by A10;
       end;
        G.a = [[S1,S2],T] by A30;
      then dom(G.a) = S1 & cod(G.a) = S2 by A33,NATTRA_1:39;
     hence G.a in Hom((export F1).a,(export F2).a) by CAT_1:18;
    end;
then A34:
    for a be Object of A holds Hom((export F1).a,(export F2).a) <> {};
then A35:  export F1 is_transformable_to export F2 by NATTRA_1:def 2;
      G is transformation of export F1, export F2
     proof thus export F1 is_transformable_to export F2 by A34,NATTRA_1:def 2
;
      let a be Object of A; G.a in Hom((export F1).a,(export F2).a) by A31;
      hence G.a is Morphism of (export F1).a,(export F2).a by CAT_1:def 7;
     end;
    then reconsider G as transformation of export F1, export F2;
A36:  now let a,b be Object of A such that
A37:    Hom(a,b) <> {};
     let f be Morphism of a,b;
       reconsider g = f as Morphism of A;
A38:  F1?-b = (export F1).b by Th24;
then A39:   F1?-cod f = (export F1).b by A37,CAT_1:23;
A40:  F2?-a = (export F2).a by Th24;
then A41:   F2?-dom f = (export F2).a by A37,CAT_1:23;
A42:  F1?-a = (export F1).a by Th24;
then A43:   F1?-dom f = (export F1).a by A37,CAT_1:23;
A44:  F2?-b = (export F2).b by Th24;
then A45:   F2?-cod f = (export F2).b by A37,CAT_1:23;
      reconsider S1 = (export F1).a, S2 = (export F2).a,
                 S3 = (export F1).b, S4 = (export F2).b
       as Functor of B,C by Th25;
A46:  S1 is_naturally_transformable_to S2 by A1,A40,A42,Th15;
then A47:  S1 is_transformable_to S2 by NATTRA_1:def 7;
A48:  S2 is_naturally_transformable_to S4 by A37,A40,A44,Th17;
then A49:  S2 is_transformable_to S4 by NATTRA_1:def 7;
A50:  S1 is_naturally_transformable_to S3 by A37,A38,A42,Th17;
then A51:  S1 is_transformable_to S3 by NATTRA_1:def 7;
A52:  S3 is_naturally_transformable_to S4 by A1,A38,A44,Th15;
then A53:  S3 is_transformable_to S4 by NATTRA_1:def 7;
A54:  S1 is_transformable_to S4 by A47,A49,NATTRA_1:19;
      reconsider T13 = F1?-f as natural_transformation of S1,S3 by A37,A39,A42,
CAT_1:23;
      reconsider T12 = (curry s).a as natural_transformation of S1,S2
        by A1,A40,A42,Th15;
      reconsider T24 = F2?-f as natural_transformation of S2,S4 by A37,A40,A45,
CAT_1:23;
      reconsider T34 = (curry s).b as natural_transformation of S3,S4
        by A1,A38,A44,Th15;
A55:   (export F1).g = [[S1,S3],T13] by A39,A43,Def4;
A56:   (export F2).g = [[S2,S4],T24] by A41,A45,Def4;
A57:   G.b = G.(b qua set) by A35,NATTRA_1:def 5
         .= [[S3,S4],T34] by A30;
A58:   G.a = G.(a qua set) by A35,NATTRA_1:def 5
         .= [[S1,S2],T12] by A30;
A59:   Hom((export F1).a,(export F2).a) <> {} by A31;
A60:   Hom((export F2).a,(export F2).b) <> {} by A37,CAT_1:126;
A61:   Hom((export F1).b,(export F2).b) <> {} by A31;
A62:   Hom((export F1).a,(export F1).b) <> {} by A37,CAT_1:126;
        now let c be Object of B;
A63:     Hom(S2.c,S4.c) <> {} by A49,NATTRA_1:def 2;
A64:     Hom(S1.c,S2.c) <> {} by A47,NATTRA_1:def 2;
A65:     Hom(S3.c,S4.c) <> {} by A53,NATTRA_1:def 2;
A66:     Hom(S1.c,S3.c) <> {} by A51,NATTRA_1:def 2;
A67:     Hom(c,c) <> {} by CAT_1:56;
then A68:     Hom([a,c],[b,c]) <> {} by A37,Th13;
A69:    Hom(F1.[a,c],F2.[a,c]) <> {} by A2,NATTRA_1:def 2;
A70:    Hom(F2.[a,c],F2.[b,c]) <> {} by A68,CAT_1:126;
A71:    Hom(F1.[b,c],F2.[b,c]) <> {} by A2,NATTRA_1:def 2;
A72:    Hom(F1.[a,c],F1.[b,c]) <> {} by A68,CAT_1:126;
        reconsider fi = [f, id c] as Morphism of [a,c], [b,c] by A37,A67,CAT_2:
43;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
        then reconsider FF1 = F1, FF2 = F2 as Function of
          [:the Morphisms of A,the Morphisms of B:], the Morphisms of C;
A73:      F2.fi = FF2.[f,id c] by A68,NATTRA_1:def 1
         .= (curry FF2).f.id c by CAT_2:3
         .= curry(F2,f).id c by Def2
         .= curry(F2,f).((the Id of B).c) by CAT_1:def 5
         .= (curry(F2,f)*the Id of B).c by FUNCT_2:21
         .= (F2?-f qua Function of the Objects of B, the Morphisms of C).c
            by Def3
         .= T24.c by A49,NATTRA_1:def 5;
A74:      t.[a,c]
          = s.[a,c] by A2,NATTRA_1:def 5
         .= ((curry s).a).c by CAT_2:3
         .= T12.c by A47,NATTRA_1:def 5;
A75:      F1.fi = FF1.[f,id c] by A68,NATTRA_1:def 1
         .= (curry FF1).f.id c by CAT_2:3
         .= curry(F1,f).id c by Def2
         .= curry(F1,f).((the Id of B).c) by CAT_1:def 5
         .= (curry(F1,f)*the Id of B).c by FUNCT_2:21
         .= (F1?-f qua Function of the Objects of B, the Morphisms of C).c
            by Def3
         .= T13.c by A51,NATTRA_1:def 5;
A76:      t.[b,c]
          = s.[b,c] by A2,NATTRA_1:def 5
         .= ((curry s).b).c by CAT_2:3
         .= T34.c by A53,NATTRA_1:def 5;
       thus (T34`*`T13).c
          = T34.c*T13.c by A50,A52,NATTRA_1:27
         .= (t.[b,c] qua Morphism of C)*F1.fi by A65,A66,A75,A76,CAT_1:def 13
         .= t.[b,c]*F1.fi by A71,A72,CAT_1:def 13
         .= F2.fi*t.[a,c] by A1,A68,NATTRA_1:def 8
         .= F2.fi*(t.[a,c] qua Morphism of C) by A69,A70,CAT_1:def 13
         .= T24.c*T12.c by A63,A64,A73,A74,CAT_1:def 13
         .= (T24`*`T12).c by A46,A48,NATTRA_1:27;
      end;
then A77:   T34`*`T13 = T24`*`T12 by A54,NATTRA_1:20;
     thus G.b*(export F1).f
          = G.b*((export F1).f qua Morphism of Functors(B,C))
           by A61,A62,CAT_1:def 13
         .= G.b*(export F1).g by A37,NATTRA_1:def 1
         .= [[S1,S4],T34`*`T13] by A55,A57,NATTRA_1:42
         .= (export F2).g*G.a by A56,A58,A77,NATTRA_1:42
         .= ((export F2).f qua Morphism of Functors(B,C))*G.a
               by A37,NATTRA_1:def 1
         .= (export F2).f*G.a by A59,A60,CAT_1:def 13;
    end;
    thus
A78:  export F1 is_naturally_transformable_to export F2
   proof thus export F1 is_transformable_to export F2 by A34,NATTRA_1:def 2;
      thus thesis by A36;
     end;
    G is natural_transformation of export F1, export F2
  proof
   thus export F1 is_naturally_transformable_to export F2 by A78;
   thus thesis by A36;
  end;
  then reconsider G as natural_transformation of export F1, export F2;
 take G;
 let s be Function of
    [:the Objects of A, the Objects of B:], the Morphisms of C;
 assume
A79:    t = s;
 let a be Object of A;
 thus G.a = G.(a qua set) by A35,NATTRA_1:def 5
    .= [[(export F1).a,(export F2).a],(curry s).a] by A30,A79;
end;

definition let A,B,C; let F1,F2 be Functor of [:A,B:],C such that
A1: F1 is_naturally_transformable_to F2;
 let t be natural_transformation of F1,F2;
 func export t -> natural_transformation of export F1, export F2 means
:Def5: for s being Function of
    [:the Objects of A, the Objects of B:], the Morphisms of C st t = s
   for a being Object of A
    holds it.a = [[(export F1).a,(export F2).a],(curry s).a];
 existence by A1,Th27;
 uniqueness
  proof let T1,T2 be natural_transformation of export F1, export F2 such that
A2: for s being Function of
    [:the Objects of A, the Objects of B:], the Morphisms of C st t = s
   for a being Object of A
    holds T1.a = [[(export F1).a,(export F2).a],(curry s).a] and
A3: for s being Function of
    [:the Objects of A, the Objects of B:], the Morphisms of C st t = s
   for a being Object of A
    holds T2.a = [[(export F1).a,(export F2).a],(curry s).a];
      export F1 is_naturally_transformable_to export F2 by A1,Th27;
then A4:  export F1 is_transformable_to export F2 by NATTRA_1:def 7;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
    then reconsider s = t as Function of
     [:the Objects of A, the Objects of B:], the Morphisms of C;
      now let a be Object of A;
        T1.a = [[(export F1).a,(export F2).a],(curry s).a] by A2;
     hence T1.a = T2.a by A3;
    end;
   hence T1 = T2 by A4,NATTRA_1:20;
  end;
end;

theorem Th28:
 for F being Functor of [:A,B:],C holds id export F = export id F
proof let F be Functor of [:A,B:],C;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
  then reconsider s = id F as Function of
   [:the Objects of A, the Objects of B:], the Morphisms of C;
    now let a be Object of A;
    reconsider ff = (export F).a as Functor of B,C by Th8;
A1:    now let b be Object of B;
A2:  Hom(b,b) <> {} by CAT_1:56;
     thus (id ff qua Function of the Objects of B, the Morphisms of C).b
         = (id ff).b by NATTRA_1:def 5
        .= id(ff.b) by NATTRA_1:21
        .= (ff qua Function of the Morphisms of B, the Morphisms of C)
             .id b by CAT_1:108
        .= ff.id b by A2,NATTRA_1:def 1
        .= (F?-a).id b by Th24
        .= (F?-a).(id b qua Morphism of B) by A2,NATTRA_1:def 1
        .= F.[id a, id b] by CAT_2:47
        .= F.(id[a,b] qua Morphism of [:A,B:]) by CAT_2:41
        .= id(F.[a,b]) by CAT_1:108
        .= (id F).[a,b] by NATTRA_1:21
        .= (id F qua Function of the Objects of [:A,B:], the Morphisms of C)
            .[a,b] by NATTRA_1:def 5
        .= (curry s).a.b by CAT_2:3;
    end;
   thus (id export F).a
     = id((export F).a) by NATTRA_1:21
    .= [[ff,ff],id ff] by NATTRA_1:def 18
    .= [[(export F).a, (export F).a],(curry s).a] by A1,FUNCT_2:113
    .= (export id F).a by Def5;
  end;
 hence thesis by NATTRA_1:20;
end;

theorem Th29:
 for F1,F2,F3 being Functor of [:A,B:],C st
  F1 is_naturally_transformable_to F2 &
  F2 is_naturally_transformable_to F3
 for t1 being natural_transformation of F1,F2,
  t2 being natural_transformation of F2,F3
  holds export(t2`*`t1) = (export t2)`*`(export t1)
proof let F1,F2,F3 be Functor of [:A,B:],C such that
A1: F1 is_naturally_transformable_to F2 and
A2: F2 is_naturally_transformable_to F3;
A3: F1 is_naturally_transformable_to F3 by A1,A2,NATTRA_1:25;
A4: F1 is_transformable_to F2 by A1,NATTRA_1:def 7;
A5: F2 is_transformable_to F3 by A2,NATTRA_1:def 7;
A6: F1 is_transformable_to F3 by A3,NATTRA_1:def 7;
 let t1 be natural_transformation of F1,F2,
     t2 be natural_transformation of F2,F3;
A7: export F1 is_naturally_transformable_to export F2 by A1,Th27;
then A8: export F1 is_transformable_to export F2 by NATTRA_1:def 7;
A9: export F2 is_naturally_transformable_to export F3 by A2,Th27;
then A10: export F2 is_transformable_to export F3 by NATTRA_1:def 7;
then A11: export F1 is_transformable_to export F3 by A8,NATTRA_1:19;
    now let a be Object of A;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
    then reconsider s1 = t1, s2 = t2, s3 = t2`*`t1 as Function of
     [:the Objects of A, the Objects of B:], the Morphisms of C;
    reconsider S1 = (export F1).a, S2 = (export F2).a, S3 = (export F3).a
     as Functor of B,C by Th8;
A12:  S1 = F1?-a & S2 = F2?-a & S3 = F3?-a by Th24;
then A13: S1 is_naturally_transformable_to S2 by A1,Th15;
A14: S2 is_naturally_transformable_to S3 by A2,A12,Th15;
    then S1 is_naturally_transformable_to S3 by A13,NATTRA_1:25;
then A15: S1 is_transformable_to S3 by NATTRA_1:def 7;
A16: S1 is_transformable_to S2 by A13,NATTRA_1:def 7;
A17: S2 is_transformable_to S3 by A14,NATTRA_1:def 7;
    reconsider T1 = (curry s1).a as natural_transformation of S1,S2
     by A1,A12,Th15;
    reconsider T2 = (curry s2).a as natural_transformation of S2,S3
     by A2,A12,Th15;
    reconsider T3 = (curry s3).a as natural_transformation of S1,S3
     by A3,A12,Th15;
A18:  (export t2).a = [[S2,S3],T2] by A2,Def5;
A19:  (export t1).a = [[S1,S2],T1] by A1,Def5;
      now let b be Object of B;
A20:  Hom(F1.[a,b],F2.[a,b]) <> {} by A4,NATTRA_1:def 2;
A21:  Hom(F2.[a,b],F3.[a,b]) <> {} by A5,NATTRA_1:def 2;
A22:  Hom(S1.b,S2.b) <> {} by A16,NATTRA_1:def 2;
A23:  Hom(S2.b,S3.b) <> {} by A17,NATTRA_1:def 2;
A24:    T2.b
        = (T2 qua Function of the Objects of B, the Morphisms of C).b
           by A17,NATTRA_1:def 5
       .= s2.[a,b] by CAT_2:3
       .= t2.[a,b] by A5,NATTRA_1:def 5;
A25:    T1.b
        = (T1 qua Function of the Objects of B, the Morphisms of C).b
           by A16,NATTRA_1:def 5
       .= s1.[a,b] by CAT_2:3
       .= t1.[a,b] by A4,NATTRA_1:def 5;
     thus T3.b
        = (T3 qua Function of the Objects of B, the Morphisms of C).b
           by A15,NATTRA_1:def 5
       .= s3.[a,b] by CAT_2:3
       .= (t2`*`t1).[a,b] by A6,NATTRA_1:def 5
       .= t2.[a,b]*t1.[a,b] by A1,A2,NATTRA_1:27
       .= T2.b*(T1.b qua Morphism of C) by A20,A21,A24,A25,CAT_1:def 13
       .= T2.b*T1.b by A22,A23,CAT_1:def 13
       .= (T2`*`T1).b by A13,A14,NATTRA_1:27;
    end;
then A26:  T3 = T2`*`T1 by A15,NATTRA_1:20;
A27: Hom((export F1).a,(export F2).a) <> {} by A8,NATTRA_1:def 2;
A28: Hom((export F2).a,(export F3).a) <> {} by A10,NATTRA_1:def 2;
   thus (export(t2`*`t1)).a
         = [[S1,S3],T3] by A3,Def5
        .= (export t2).a*((export t1).a qua Morphism of Functors(B,C))
            by A18,A19,A26,NATTRA_1:42
        .= (export t2).a*(export t1).a by A27,A28,CAT_1:def 13
        .= ((export t2)`*`(export t1)).a by A7,A9,NATTRA_1:27;
  end;
 hence export(t2`*`t1) = (export t2)`*`(export t1) by A11,NATTRA_1:20;
end;

theorem Th30:
 for F1,F2 being Functor of [:A,B:],C
  st F1 is_naturally_transformable_to F2
 for t1,t2 being natural_transformation of F1,F2 holds
  export t1 = export t2 implies t1 = t2
 proof let F1,F2 be Functor of [:A,B:],C; assume
A1: F1 is_naturally_transformable_to F2;
then A2: F1 is_transformable_to F2 by NATTRA_1:def 7;
  let t1,t2 be natural_transformation of F1,F2 such that
A3: export t1 = export t2;
     now let ab be Object of [:A,B:];
     consider a being Object of A, b being Object of B such that
A4:    ab = [a,b] by CAT_2:35;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
     then reconsider s1 = t1, s2 = t2 as
      Function of [:the Objects of A, the Objects of B:], the Morphisms of C;
       [[(export F1).a,(export F2).a],(curry s1).a] = (export t1).a by A1,Def5
      .= [[(export F1).a,(export F2).a],(curry s2).a] by A1,A3,Def5;
     then A5:    (curry s1).a = (curry s2.a) by ZFMISC_1:33;
    thus t1.ab = s1.[a,b] by A2,A4,NATTRA_1:def 5
        .= ((curry s2).a).b by A5,CAT_2:3
        .= s2.[a,b] by CAT_2:3
        .= t2.ab by A2,A4,NATTRA_1:def 5;
   end;
  hence t1 = t2 by A1,ISOCAT_1:31;
 end;

theorem Th31:
 for G being Functor of A, Functors(B,C)
  ex F being Functor of [:A,B:],C st G = export F
proof let G be Functor of A, Functors(B,C);
defpred P[set,set] means
    for f being (Morphism of A), g being Morphism of B st $1 = [f,g]
     for f1,f2 being Functor of B,C,
         t being natural_transformation of f1,f2 st G.f = [[f1,f2],t]
      holds $2 = t.(cod g)*f1.g;
A1:now let m; assume m in the Morphisms of [:A,B:];
    then consider m1 being (Morphism of A), m2 being Morphism of B such that
A2:   m = [m1, m2] by CAT_2:37;
    consider F1,F2 being Functor of B,C,
      t1 being natural_transformation of F1,F2 such that
       F1 is_naturally_transformable_to F2 and
A3:   dom(G.m1) = F1 & cod(G.m1) = F2 & G.m1 = [[F1,F2],t1] by Th9;
    reconsider o = t1.(cod m2)*F1.m2 as set;
   take o;
   thus o in the Morphisms of C;
   thus P[m,o]
   proof
   let f be (Morphism of A), g be Morphism of B;
   assume m = [f,g];
then A4:  f = m1 & g = m2 by A2,ZFMISC_1:33;
   let f1,f2 be Functor of B,C, t be natural_transformation of f1,f2;
   assume A5: G.f = [[f1,f2],t];
  then [F1,F2] = [f1,f2] & t1 = t by A3,A4,ZFMISC_1:33;
    then F1 =f1 & F2 = f2 by ZFMISC_1:33;
   hence o = t.cod g*f1.g by A3,A4,A5,ZFMISC_1:33;
  end;
  end;
  consider F being Function of the Morphisms of [:A,B:], the Morphisms of C
  such that
A6: for m st m in the Morphisms of [:A,B:] holds P[m,F.m] from FuncEx1(A1);

     F is Functor of [:A,B:],C
    proof
     thus for ab being Object of [:A,B:]
      ex c being Object of C st F.id ab = id c
      proof let ab be Object of [:A,B:];
        consider a being Object of A, b being Object of B such that
A7:       ab = [a,b] by CAT_2:35;
A8:     id ab = [id a, id b] by A7,CAT_2:41;
        reconsider H = G.a as Functor of B,C by Th8;
       take H.b;
A9:      Hom(H.b,H.b) <> {} by CAT_1:56;
          G.(id a qua Morphism of A) = id(G.a) by CAT_1:108
         .= [[H,H],id H] by NATTRA_1:def 18;
       hence F.id ab
           = (id H).(cod id b)*H.(id b qua Morphism of B) by A6,A8
          .= (id H).(cod id b)*id(H.b) by CAT_1:108
          .= (id H).b*(id(H.b) qua Morphism of C) by CAT_1:44
          .= id(H.b)*(id(H.b) qua Morphism of C) by NATTRA_1:21
          .= id(H.b)*id(H.b) by A9,CAT_1:def 13
          .= id(H.b) by CAT_1:59;
      end;
     thus for f being Morphism of [:A,B:] holds
      F.id dom f = id dom(F.f) & F.id cod f = id cod(F.f)
      proof let f be Morphism of [:A,B:];
        consider f1 being (Morphism of A), f2 being Morphism of B such that
A10:      f = [f1,f2] by CAT_2:37;
       consider F1,F2 being Functor of B,C,
                t being natural_transformation of F1,F2 such that
A11:      F1 is_naturally_transformable_to F2 and
A12:     dom(G.f1) = F1 & cod(G.f1) = F2 & G.f1 = [[F1,F2],t] by Th9;
A13:     id dom f = id[dom f1, dom f2] by A10,CAT_2:38
          .= [id dom f1, id dom f2] by CAT_2:41;
        reconsider H = G.dom f1 as Functor of B,C by Th8;
A14:      id(G.dom f1) = [[H,H],id H] by NATTRA_1:def 18;
A15:      F1 = H by A12,CAT_1:109;
A16:      Hom(F1.cod f2,F2.cod f2) <> {} by A11,ISOCAT_1:30;
          F1.cod f2 = cod(F1.f2) by CAT_1:109;
then A17:      dom(t.cod f2) = cod(F1.f2) by A16,CAT_1:23;
A18:      Hom(dom(H.f2),dom(H.f2)) <> {} by CAT_1:56;
          G.(id dom f1 qua Morphism of A) = id(G.dom f1) by CAT_1:108;
       hence F.id dom f
           = (id H).(cod id dom f2)*H.(id dom f2 qua Morphism of B)
             by A6,A13,A14
          .= (id H).(cod id dom f2)*id(H.dom f2) by CAT_1:108
          .= (id H).(cod id dom f2)*id dom(H.f2) by CAT_1:109
          .= (id H).dom f2*id dom(H.f2) by CAT_1:44
          .= id(H.dom f2)*id dom(H.f2) by NATTRA_1:21
          .= (id dom(H.f2) qua Morphism of C)*id dom(H.f2) by CAT_1:109
          .= id dom(H.f2)*id dom(H.f2) by A18,CAT_1:def 13
          .= id dom(F1.f2) by A15,CAT_1:59
          .= id dom(t.(cod f2)*F1.f2) by A17,CAT_1:42
          .= id dom(F.f) by A6,A10,A12;
A19:     id cod f = id[cod f1, cod f2] by A10,CAT_2:38
          .= [id cod f1, id cod f2] by CAT_2:41;
        reconsider H = G.cod f1 as Functor of B,C by Th8;
A20:      id(G.cod f1) = [[H,H],id H] by NATTRA_1:def 18;
A21:      F2 = H by A12,CAT_1:109;
A22:      Hom(F1.cod f2,F2.cod f2) <> {} by A11,ISOCAT_1:30;
          F1.cod f2 = cod(F1.f2) by CAT_1:109;
then A23:      dom(t.cod f2) = cod(F1.f2) by A22,CAT_1:23;
A24:      Hom(cod(H.f2),cod(H.f2)) <> {} by CAT_1:56;
          G.(id cod f1 qua Morphism of A) = id(G.cod f1) by CAT_1:108;
       hence F.id cod f
           = (id H).(cod id cod f2)*H.(id cod f2 qua Morphism of B)
             by A6,A19,A20
          .= (id H).(cod id cod f2)*id(H.cod f2) by CAT_1:108
          .= (id H).(cod id cod f2)*id cod(H.f2) by CAT_1:109
          .= (id H).cod f2*id cod(H.f2) by CAT_1:44
          .= id(H.cod f2)*id cod(H.f2) by NATTRA_1:21
          .= (id cod(H.f2) qua Morphism of C)*id cod(H.f2) by CAT_1:109
          .= id cod(H.f2)*id cod(H.f2) by A24,CAT_1:def 13
          .= id cod(H.f2) by CAT_1:59
          .= id(F2.cod f2) by A21,CAT_1:109
          .= id cod(t.cod f2) by A22,CAT_1:23
          .= id cod(t.(cod f2)*F1.f2) by A23,CAT_1:42
          .= id cod(F.f) by A6,A10,A12;
      end;
     let f,g be Morphism of [:A,B:] such that
A25:    dom g = cod f;
      consider f1 being (Morphism of A), f2 being Morphism of B such that
A26:    f = [f1,f2] by CAT_2:37;
      consider F1,F2 being Functor of B,C,
               t being natural_transformation of F1,F2 such that
A27:   F1 is_naturally_transformable_to F2 and
A28:    dom(G.f1) = F1 & cod(G.f1) = F2 & G.f1 = [[F1,F2],t] by Th9;
      consider g1 being (Morphism of A), g2 being Morphism of B such that
A29:    g = [g1,g2] by CAT_2:37;
      consider G1,G2 being Functor of B,C,
               s being natural_transformation of G1,G2 such that
A30:   G1 is_naturally_transformable_to G2 and
A31:    dom(G.g1) = G1 & cod(G.g1) = G2 & G.g1 = [[G1,G2],s] by Th9;
        [cod f1, cod f2] = cod f & [dom g1, dom g2] = dom g by A26,A29,CAT_2:38
;
      then A32:    cod f1 = dom g1 & cod f2 = dom g2 by A25,ZFMISC_1:33;
then A33:   g*f = [g1*f1,g2*f2] by A26,A29,CAT_2:39;
A34:    F2 = G1 by A28,A31,A32,CAT_1:99;
      reconsider s as natural_transformation of F2,G2 by A28,A31,A32,CAT_1:99;
A35:    G.(g1*f1) = G.g1*G.f1 by A32,CAT_1:99
            .= [[F1,G2],s`*`t] by A28,A31,A34,NATTRA_1:42;
A36:    F.f = t.(cod f2)*F1.f2 by A6,A26,A28;
A37:   cod(g2*f2) = cod g2 by A32,CAT_1:42;
A38:   Hom(F2.cod g2,G2.cod g2) <> {} by A30,A34,ISOCAT_1:30;
A39:   Hom(F1.cod g2,F2.cod g2) <> {} by A27,ISOCAT_1:30;
A40:  Hom(dom f2, dom g2) <> {} by A32,CAT_1:19;
then A41:   Hom(F1.dom f2,F1.dom g2) <> {} by CAT_1:126;
A42:   Hom(dom g2, cod g2) <> {} by CAT_1:19;
then A43:   Hom(F1.dom g2,F1.cod g2) <> {} by CAT_1:126;
then A44:   Hom(F1.dom f2,F1.cod g2) <> {} by A41,CAT_1:52;
A45:   Hom(F2.dom g2,F2.cod g2) <> {} by A42,CAT_1:126;
A46:   Hom(F1.dom g2,F2.dom g2) <> {} by A27,ISOCAT_1:30;
then A47:   Hom(F1.dom f2,F2.dom g2) <> {} by A41,CAT_1:52;
A48:  Hom(F2.dom g2,G2.cod g2) <> {} by A38,A45,CAT_1:52;
A49:  Hom(F1.cod g2,G2.cod g2) <> {} by A38,A39,CAT_1:52;
      reconsider f2' = f2 as Morphism of dom f2, dom g2 by A32,CAT_1:22;
      reconsider g2' = g2 as Morphism of dom g2, cod g2 by CAT_1:22;
A50:   F1.g2 = F1.g2' & F1.f2 = F1.f2' & G1.g2 = F2.g2'
       by A34,A40,A42,NATTRA_1:def 1;
     thus F.(g*f)
          = (s`*`t).(cod(g2*f2))*F1.(g2*f2) by A6,A33,A35
         .= s.(cod g2)*t.(cod g2)*F1.(g2*f2) by A27,A30,A34,A37,NATTRA_1:27
         .= s.(cod g2)*t.(cod g2)*(F1.g2*F1.f2) by A32,CAT_1:99
         .= s.(cod g2)*t.(cod g2)*(F1.g2'*F1.f2' qua Morphism of C)
            by A41,A43,A50,CAT_1:def 13
         .= s.(cod g2)*t.(cod g2)*(F1.g2'*F1.f2') by A44,A49,CAT_1:def 13
         .= s.(cod g2)*(t.(cod g2)*(F1.g2'*F1.f2')) by A38,A39,A44,CAT_1:54
         .= s.(cod g2)*(t.(cod g2)*F1.g2'*F1.f2') by A39,A41,A43,CAT_1:54
         .= s.(cod g2)*(F2.g2'*t.(dom g2)*F1.f2') by A27,A42,NATTRA_1:def 8
         .= s.(cod g2)*(F2.g2'*(t.(dom g2)*F1.f2')) by A41,A45,A46,CAT_1:54
         .= s.(cod g2)*F2.g2'*(t.(dom g2)*F1.f2') by A38,A45,A47,CAT_1:54
         .= s.(cod g2)*F2.g2'*(t.(dom g2)*F1.f2' qua Morphism of C)
            by A47,A48,CAT_1:def 13
         .= s.(cod g2)*F2.g2'*(t.(cod f2)*F1.f2) by A32,A41,A46,A50,CAT_1:def
13
         .= s.(cod g2)*G1.g2*(t.(cod f2)*F1.f2) by A38,A45,A50,CAT_1:def 13
         .= F.g*F.f by A6,A29,A31,A34,A36;
    end;
  then reconsider F as Functor of [:A,B:],C;
 take F;
    now let f be Morphism of A;
    consider f1,f2 being Functor of B,C,
        t being natural_transformation of f1,f2 such that
A51:  f1 is_naturally_transformable_to f2 and
A52:  dom(G.f) = f1 & cod(G.f) = f2 and
A53:  G.f = [[f1,f2],t] by Th9;
      now let g be Morphism of B;
A54:    f1 = G.dom f by A52,CAT_1:109;
A55:    G.(id dom f qua Morphism of A)
        = id(G.dom f) by CAT_1:108
       .= [[f1,f1],id f1] by A54,NATTRA_1:def 18;
A56:   dom id cod g = cod g by CAT_1:44;
     thus (F?-dom f).g
           = F.[id dom f, g] by CAT_2:47
          .= (id f1).(cod g)*f1.g by A6,A55
          .= id(f1.cod g qua Object of C)*f1.g by NATTRA_1:21
          .= f1.(id cod g qua Morphism of B)*f1.g by CAT_1:108
          .= f1.((id cod g qua Morphism of B)*g) by A56,CAT_1:99
          .= f1.g by CAT_1:46;
    end;
then A57: f1 = F?-dom f by FUNCT_2:113;
      now let g be Morphism of B;
A58:    f2 = G.cod f by A52,CAT_1:109;
A59:    G.(id cod f qua Morphism of A)
        = id(G.cod f) by CAT_1:108
       .= [[f2,f2],id f2] by A58,NATTRA_1:def 18;
A60:   dom id cod g = cod g by CAT_1:44;
     thus (F?-cod f).g
           = F.[id cod f, g] by CAT_2:47
          .= (id f2).(cod g)*f2.g by A6,A59
          .= id(f2.cod g qua Object of C)*f2.g by NATTRA_1:21
          .= f2.(id cod g qua Morphism of B)*f2.g by CAT_1:108
          .= f2.((id cod g qua Morphism of B)*g) by A60,CAT_1:99
          .= f2.g by CAT_1:46;
    end;
then A61: f2 = F?-cod f by FUNCT_2:113;
      now let b be Object of B;
A62:   Hom(f1.b,f2.b) <> {} by A51,ISOCAT_1:30;
A63:   Hom(f1.b,f1.b) <> {} by CAT_1:56;
     thus (F?-f).b
         = F.[f,id b] by Th19
        .= t.(cod id b)*f1.(id b qua Morphism of B) by A6,A53
        .= t.(cod id b)*id(f1.b) by CAT_1:108
        .= t.b*(id(f1.b) qua Morphism of C) by CAT_1:44
        .= t.b*id(f1.b) by A62,A63,CAT_1:def 13
        .= t.b by A62,CAT_1:58;
    end;
   hence G.f =[[F?-dom f,F?-cod f],F?-f] by A51,A53,A57,A61,ISOCAT_1:31;
  end;
 hence thesis by Def4;
end;

theorem Th32:
 for F1,F2 being Functor of [:A,B:],C st
  export F1 is_naturally_transformable_to export F2
 for t being natural_transformation of export F1, export F2
 holds F1 is_naturally_transformable_to F2 &
  ex u being natural_transformation of F1,F2 st t = export u
 proof let F1,F2 be Functor of [:A,B:],C such that
A1:  export F1 is_naturally_transformable_to export F2;
  let t be natural_transformation of export F1, export F2;
defpred P[set,set] means
      for a being Object of A st $1 = a holds
       t.a = [[(export F1).a,(export F2).a],$2];
A2: now let o;
    assume o in the Objects of A;
     then reconsider a' = o as Object of A;
     consider f1,f2 being Functor of B,C,
           tau being natural_transformation of f1,f2 such that
        f1 is_naturally_transformable_to f2 and
A3:    dom(t.a') = f1 & cod(t.a') = f2 & t.a' =[[f1,f2],tau] by Th9;
     reconsider m = tau as set;
    take m;
    thus m in Funcs(the Objects of B, the Morphisms of C) by FUNCT_2:11;
    thus P[o,m]
    proof
    let a be Object of A such that
A4:   o = a;
       export F1 is_transformable_to export F2 by A1,NATTRA_1:def 7;
     then t.a is Morphism of (export F1).a, (export F2).a &
      Hom((export F1).a, (export F2).a) <> {} by NATTRA_1:def 2;
     then (export F1).a = f1 & (export F2).a = f2 by A3,A4,CAT_1:23;
    hence t.a = [[(export F1).a,(export F2).a],m] by A3,A4;
   end;
   end;
   consider t' being Function of
    the Objects of A, Funcs(the Objects of B,the Morphisms of C) such that
A5:   for o st o in the Objects of A holds P[o,t'.o] from FuncEx1(A2);
A6: the Objects of [:A,B:] =
    [:the Objects of A, the Objects of B:] by CAT_2:33;
     the Objects of [:A,B:] = [:the Objects of A, the Objects of B:] by CAT_2:
33
;
   then reconsider u' = uncurry t' as Function of
    the Objects of [:A,B:], the Morphisms of C;
A7: now let ab be Object of [:A,B:];
     consider a being Object of A, b being Object of B such that
A8:   ab = [a,b] by A6,DOMAIN_1:9;
       (export F1).a = F1?-a & (export F2).a = F2?-a by Th24;
     then t.a = [[F1?-a,F2?-a],t'.a] by A5;
     then [[F1?-a,F2?-a],t'.a] in the Morphisms of Functors(B,C);
     then [[F1?-a,F2?-a],t'.a] in NatTrans(B,C) by NATTRA_1:def 18;
     then consider G1,G2 being Functor of B,C,
      t'' being natural_transformation of G1,G2 such that
A9:   [[F1?-a,F2?-a],t'.a] = [[G1,G2],t''] and
A10:   G1 is_naturally_transformable_to G2 by NATTRA_1:def 15;
A11:   G1 is_transformable_to G2 by A10,NATTRA_1:def 7;
A12:  [F1?-a,F2?-a] = [G1,G2] & t'.a = t'' by A9,ZFMISC_1:33;
A13:  u'.[a,b] = t'.a.b by Th2
         .= (t'' qua Function of the Objects of B, the Morphisms of C).b by A9,
ZFMISC_1:33
         .= t''.b by A11,NATTRA_1:def 5;
A14:  F1.[a,b] = (F1?-a).b by Th12 .= G1.b by A12,ZFMISC_1:33;
A15:  F2.[a,b] = (F2?-a).b by Th12 .= G2.b by A12,ZFMISC_1:33;
       Hom(G1.b,G2.b) <> {} by A10,ISOCAT_1:30;
    hence u'.ab in Hom(F1.ab,F2.ab) by A8,A13,A14,A15,CAT_1:def 7;
   end;
A16: F1 is_transformable_to F2
    proof let a be Object of [:A,B:];
     thus Hom(F1.a,F2.a) <> {} by A7;
    end;
     u' is transformation of F1,F2
    proof
     thus F1 is_transformable_to F2 by A16;
     let a be Object of [:A,B:];
        u'.a in Hom(F1.a,F2.a) by A7;
     hence u'.a is Morphism of F1.a,F2.a by CAT_1:def 7;
    end;
   then reconsider u = u' as transformation of F1,F2;
A17:now let ab1,ab2 be Object of [:A,B:] such that
A18:  Hom(ab1,ab2) <> {};
     consider a1 being Object of A, b1 being Object of B such that
A19:   ab1 = [a1,b1] by A6,DOMAIN_1:9;
       (export F1).a1 = F1?-a1 & (export F2).a1 = F2?-a1 by Th24;
     then t.a1 = [[F1?-a1,F2?-a1],t'.a1] by A5;
     then [[F1?-a1,F2?-a1],t'.a1] in the Morphisms of Functors(B,C);
     then [[F1?-a1,F2?-a1],t'.a1] in NatTrans(B,C) by NATTRA_1:def 18;
     then consider G1,H1 being Functor of B,C,
      t1 being natural_transformation of G1,H1 such that
A20:   [[F1?-a1,F2?-a1],t'.a1] = [[G1,H1],t1] and
A21:   G1 is_naturally_transformable_to H1 by NATTRA_1:def 15;
A22:  [F1?-a1,F2?-a1] = [G1,H1] & t'.a1 = t1 by A20,ZFMISC_1:33;
then A23:  F1?-a1 = G1 & F2?-a1 = H1 by ZFMISC_1:33;
     consider a2 being Object of A, b2 being Object of B such that
A24:   ab2 = [a2,b2] by A6,DOMAIN_1:9;
       (export F1).a2 = F1?-a2 & (export F2).a2 = F2?-a2 by Th24;
     then t.a2 = [[F1?-a2,F2?-a2],t'.a2] by A5;
     then [[F1?-a2,F2?-a2],t'.a2] in the Morphisms of Functors(B,C);
     then [[F1?-a2,F2?-a2],t'.a2] in NatTrans(B,C) by NATTRA_1:def 18;
     then consider G2,H2 being Functor of B,C,
      t2 being natural_transformation of G2,H2 such that
A25:   [[F1?-a2,F2?-a2],t'.a2] = [[G2,H2],t2] and
A26:   G2 is_naturally_transformable_to H2 by NATTRA_1:def 15;
A27:  [F1?-a2,F2?-a2] = [G2,H2] & t'.a2 = t2 by A25,ZFMISC_1:33;
then A28:  F1?-a2 = G2 & F2?-a2 = H2 by ZFMISC_1:33;
    let f be Morphism of ab1,ab2;
    f is Morphism of [:A,B:] & the Morphisms of [:A,B:] =
      [:the Morphisms of A, the Morphisms of B:] by CAT_2:33;
     then consider g being (Morphism of A), h being Morphism of B such that
A29:   f = [g,h] by DOMAIN_1:9;
A30:  Hom(b1,b2) <> {} & Hom(a1,a2) <> {} by A18,A19,A24,Th13;
     reconsider g as Morphism of a1,a2 by A18,A19,A24,A29,Th14;
     reconsider h as Morphism of b1,b2 by A18,A19,A24,A29,Th14;
A31:   dom g = a1 & cod g = a2 by A30,CAT_1:23;
then A32: G1 is_naturally_transformable_to G2 by A23,A28,Th18;
then A33:  G1 is_transformable_to G2 by NATTRA_1:def 7;
A34: H1 is_naturally_transformable_to H2 by A23,A28,A31,Th18;
then A35:  H1 is_transformable_to H2 by NATTRA_1:def 7;
A36:  G1 is_transformable_to H1 by A21,NATTRA_1:def 7;
A37:  G2 is_transformable_to H2 by A26,NATTRA_1:def 7;
     reconsider v1 = F1?-g as natural_transformation of G1,G2 by A22,A28,A31,
ZFMISC_1:33;
     reconsider v2 = F2?-g as natural_transformation of H1,H2 by A22,A28,A31,
ZFMISC_1:33;
A38:  Hom(G2.b2,H2.b2) <> {} by A26,ISOCAT_1:30;
A39:  Hom(G1.b2,G2.b2) <> {} by A32,ISOCAT_1:30;
A40:  Hom(G1.b1,G1.b2) <> {} by A30,CAT_1:126;
A41:  Hom(H1.b2,H2.b2) <> {} by A34,ISOCAT_1:30;
A42:  Hom(G1.b2,H1.b2) <> {} by A21,ISOCAT_1:30;
A43:  Hom(H1.b1,H1.b2) <> {} by A30,CAT_1:126;
A44:  Hom(G1.b1,H1.b1) <> {} by A21,ISOCAT_1:30;
A45:  Hom(F1.ab1,F2.ab1) <> {} by A16,NATTRA_1:def 2;
A46:  Hom(F2.ab1,F2.ab2) <> {} by A18,CAT_1:126;
A47: Hom(F1.ab1,F1.ab2) <> {} by A18,CAT_1:126;
A48: Hom(F1.ab2,F2.ab2) <> {} by A16,NATTRA_1:def 2;
A49: Hom(G1.b1,G2.b2) <> {} by A39,A40,CAT_1:52;
A50: Hom(H1.b1,H2.b2) <> {} by A41,A43,CAT_1:52;
A51: Hom((export F1).a1,(export F1).a2) <> {} by A30,CAT_1:126;
A52: Hom((export F2).a1,(export F2).a2) <> {} by A30,CAT_1:126;
A53: Hom((export F1).a1,(export F2).a1) <> {} by A1,ISOCAT_1:30;
A54: Hom((export F1).a2,(export F2).a2) <> {} by A1,ISOCAT_1:30;
A55:  (export F1).a2 = F1?-a2 & (export F2).a1 = F2?-a1 &
     (export F1).a1 = F1?-a1 & (export F2).a2 = F2?-a2 by Th24;
     reconsider f' = f as Morphism of [:A,B:];
     reconsider g' = g as Morphism of A;
     reconsider h' = h as Morphism of B;
     reconsider e1 = (export F1).g, e2 = (export F2).g
      as Morphism of Functors(B,C);
A56:  (export F1).g' = [[G1,G2],v1] by A23,A28,A31,Def4;
A57:  (export F2).g' = [[H1,H2],v2] by A23,A28,A31,Def4;
A58:  t.a1 = [[G1,H1],t1] by A5,A20,A55;
    t.a2 = [[G2,H2],t2] by A5,A25,A55;
     then [[G1,H2],t2`*`v1]
        = t.a2*(export F1).g' by A56,NATTRA_1:42
       .= t.a2*e1 by A30,NATTRA_1:def 1
       .= t.a2*(export F1).g by A51,A54,CAT_1:def 13
       .= (export F2).g*t.a1 by A1,A30,NATTRA_1:def 8
       .= e2*t.a1 by A52,A53,CAT_1:def 13
       .= (export F2).g'*t.a1 by A30,NATTRA_1:def 1
       .= [[G1,H2],v2`*`t1] by A57,A58,NATTRA_1:42;
     then A59:  t2`*`v1 = v2`*`t1 by ZFMISC_1:33;
A60:   u.ab2 = u'.ab2 by A16,NATTRA_1:def 5
      .= t'.a2.b2 by A24,Th2 .= t2.b2 by A27,A37,NATTRA_1:def 5;
       Hom(a1,a1) <> {} by CAT_1:56;
then A61:  g'*(id a1) = g*(id a1) by A30,CAT_1:def 13 .= g by A30,CAT_1:58;
       Hom(b2,b2) <> {} by CAT_1:56;
then A62:  (id b2)*h' = (id b2)*h by A30,CAT_1:def 13.= h by A30,CAT_1:57;
A63:   cod id a1 = a1 & cod h = b2 & dom g = a1 & dom id b2 = b2
      by A30,CAT_1:23,44;
then A64:   cod[id a1,h] = [a1,b2] by CAT_2:38 .= dom[g,id b2] by A63,CAT_2:38;
then A65:   f = [g,id b2]*[id a1, h] by A29,A61,A62,CAT_2:40;
     the Morphisms of [:A,B:] = [:the Morphisms of A, the Morphisms of B:]
       by CAT_2:33;
     then reconsider FF1 = F1, FF2 = F2 as Function of
      [:the Morphisms of A, the Morphisms of B:], the Morphisms of C;
A66:  curry(F1,g) = (curry FF1).g by Def2;
A67:  v1.b2 = (v1 qua Function of the Objects of B, the Morphisms of C).b2
              by A33,NATTRA_1:def 5
          .= (curry(F1,g)*the Id of B).b2 by Def3
          .= curry(F1,g).((the Id of B).b2) by FUNCT_2:21
          .= curry(F1,g).id b2 by CAT_1:def 5
          .= F1.[g,id b2] by A66,CAT_2:3;
A68:  G1.h = (F1?-a1).(h qua Morphism of B) by A23,A30,NATTRA_1:def 1
         .= F1.[id a1,h] by CAT_2:47;
A69:   F1.f = F1.f' by A18,NATTRA_1:def 1
       .= v1.b2*(G1.h qua Morphism of C) by A64,A65,A67,A68,CAT_1:99
       .= v1.b2*G1.h by A39,A40,CAT_1:def 13;
A70:   u.ab1 = u'.ab1 by A16,NATTRA_1:def 5
      .= t'.a1.b1 by A19,Th2 .= t1.b1 by A22,A36,NATTRA_1:def 5;
A71:  curry(F2,g) = (curry FF2).g by Def2;
A72:  v2.b2 = (v2 qua Function of the Objects of B, the Morphisms of C).b2
              by A35,NATTRA_1:def 5
          .= (curry(F2,g)*the Id of B).b2 by Def3
          .= curry(F2,g).((the Id of B).b2) by FUNCT_2:21
          .= curry(F2,g).id b2 by CAT_1:def 5
          .= F2.[g,id b2] by A71,CAT_2:3;
A73:  H1.h = (F2?-a1).(h qua Morphism of B) by A23,A30,NATTRA_1:def 1
         .= F2.[id a1,h] by CAT_2:47;
A74:   F2.f = F2.f' by A18,NATTRA_1:def 1
       .= v2.b2*(H1.h qua Morphism of C) by A64,A65,A72,A73,CAT_1:99
       .= v2.b2*H1.h by A41,A43,CAT_1:def 13;
    thus u.ab2*F1.f
       = t2.b2*(v1.b2*G1.h qua Morphism of C) by A47,A48,A60,A69,CAT_1:def 13
      .= t2.b2*(v1.b2*G1.h) by A38,A49,CAT_1:def 13
      .= t2.b2*v1.b2*G1.h by A38,A39,A40,CAT_1:54
      .= (v2`*`t1).b2*G1.h by A26,A32,A59,NATTRA_1:27
      .= v2.b2*t1.b2*G1.h by A21,A34,NATTRA_1:27
      .= v2.b2*(t1.b2*G1.h) by A40,A41,A42,CAT_1:54
      .= v2.b2*(H1.h*t1.b1) by A21,A30,NATTRA_1:def 8
      .= v2.b2*H1.h*t1.b1 by A41,A43,A44,CAT_1:54
      .= F2.f*(u.ab1 qua Morphism of C) by A44,A50,A70,A74,CAT_1:def 13
      .= F2.f*u.ab1 by A45,A46,CAT_1:def 13;
   end;
  thus
A75: F1 is_naturally_transformable_to F2
   proof
    thus F1 is_transformable_to F2 by A16;
    thus thesis by A17;
   end;
    u is natural_transformation of F1,F2
   proof
    thus F1 is_naturally_transformable_to F2 by A75;
    thus thesis by A17;
   end;
  then reconsider u as natural_transformation of F1,F2;
  take u;
     now let s be Function of
      [:the Objects of A, the Objects of B:], the Morphisms of C such that
A76:  u = s;
    let a be Object of A;
       t' = curry u' by Th1;
    hence t.a = [[(export F1).a,(export F2).a],(curry s).a] by A5,A76;
   end;
  hence t = export u by A75,Def5;
 end;

definition let A,B,C;
 func export(A,B,C)-> Functor of Functors([:A,B:],C),Functors(A,Functors(B,C))
  means
:Def6: for F1,F2 being Functor of [:A,B:], C
    st F1 is_naturally_transformable_to F2
   for t being natural_transformation of F1,F2
   holds it.[[F1,F2],t] = [[export F1, export F2],export t];
 existence
  proof
defpred P[set,set] means
      for F1,F2 being Functor of [:A,B:], C,
          t being natural_transformation of F1,F2
       st $1 = [[F1,F2],t]
       holds $2 = [[export F1,export F2],export t];
       A1:  now let o; assume
        o in the Morphisms of Functors([:A,B:],C);
      then o in NatTrans([:A,B:],C) by NATTRA_1:def 18;
      then consider F1,F2 being Functor of [:A,B:],C,
               t being natural_transformation of F1,F2 such that
A2:    o = [[F1,F2],t] and
A3:    F1 is_naturally_transformable_to F2 by NATTRA_1:def 16;
     take m = [[export F1, export F2], export t];
        export F1 is_naturally_transformable_to export F2 by A3,Th27;
      then m in NatTrans(A,Functors(B,C)) by NATTRA_1:def 16;
     hence m in the Morphisms of Functors(A,Functors(B,C)) by NATTRA_1:def 18;
     thus P[o,m]
     proof
     let F1',F2' be Functor of [:A,B:],C,
         t' be natural_transformation of F1',F2';
     assume A4: o = [[F1',F2'],t'];
    then [F1,F2] = [F1',F2'] & t = t' by A2,ZFMISC_1:33;
      then F1 = F1' & F2 = F2' by ZFMISC_1:33;
     hence m = [[export F1', export F2'], export t'] by A2,A4,ZFMISC_1:33;
    end;
    end;
    consider FF being Function of
     the Morphisms of Functors([:A,B:],C),
     the Morphisms of Functors(A,Functors(B,C))
    such that
A5:   for o st o in the Morphisms of Functors([:A,B:],C) holds P[o,FF.o]
from FuncEx1(A1);
      FF is Functor of Functors([:A,B:],C),Functors(A,Functors(B,C))
     proof
      thus for c being Object of Functors([:A,B:],C)
       ex d being Object of Functors(A,Functors(B,C)) st FF.id c = id d
       proof let c be Object of Functors([:A,B:],C);
         reconsider F = c as Functor of [:A,B:],C by Th8;
A6:      id c = [[F,F],id F] by NATTRA_1:def 18;
         reconsider d = export F as Object of Functors(A,Functors(B,C))
          by Th8;
        take d;
A7:       id export F = export id F by Th28;
        thus FF.id c = [[export F, export F], export id F] by A5,A6
             .= id d by A7,NATTRA_1:def 18;
       end;
      thus for f being Morphism of Functors([:A,B:],C) holds
         FF.id dom f = id dom(FF.f) & FF.id cod f = id cod(FF.f)
       proof let f be Morphism of Functors([:A,B:],C);
         consider F1,F2 being Functor of [:A,B:],C,
               t being natural_transformation of F1,F2 such that
            F1 is_naturally_transformable_to F2 and
A8:        dom f = F1 & cod f = F2 & f =[[F1,F2],t] by Th9;
A9:      id dom f = [[F1,F1],id F1] by A8,NATTRA_1:def 18;
A10:      FF.f = [[export F1, export F2], export t] by A5,A8;
then A11:       dom(FF.f) = export F1 by NATTRA_1:39;
        thus FF.id dom f
          = [[export F1, export F1], export id F1] by A5,A9
         .= [[export F1, export F1], id export F1] by Th28
         .= id dom(FF.f) by A11,NATTRA_1:def 18;
A12:      id cod f = [[F2,F2],id F2] by A8,NATTRA_1:def 18;
A13:       cod(FF.f) = export F2 by A10,NATTRA_1:39;
        thus FF.id cod f = [[export F2, export F2], export id F2] by A5,A12
         .= [[export F2, export F2], id export F2] by Th28
         .= id cod(FF.f) by A13,NATTRA_1:def 18;
       end;
      let f,g be Morphism of Functors([:A,B:],C);
       consider F1,F2 being Functor of [:A,B:],C,
             t being natural_transformation of F1,F2 such that
A14:       F1 is_naturally_transformable_to F2 and
A15:      dom f = F1 & cod f = F2 & f =[[F1,F2],t] by Th9;
A16:    FF.f = [[export F1, export F2], export t] by A5,A15;
       consider G1,G2 being Functor of [:A,B:],C,
             u being natural_transformation of G1,G2 such that
A17:       G1 is_naturally_transformable_to G2 and
A18:      dom g = G1 & cod g = G2 & g =[[G1,G2],u] by Th9;
      assume A19:dom g = cod f;
       then reconsider u as natural_transformation of F2,G2 by A15,A18;
         g*f = [[F1,G2],u`*`t] by A15,A18,A19,NATTRA_1:42;
then A20:    FF.(g*f) = [[export F1, export G2], export(u`*`t)] by A5;
A21:    FF.g = [[export F2, export G2], export u] by A5,A15,A18,A19;
         (export u)`*`(export t) = export(u`*`t) by A14,A15,A17,A18,A19,Th29;
      hence FF.(g*f) = FF.g*FF.f by A16,A20,A21,NATTRA_1:42;
     end;
    then reconsider FF as Functor of Functors([:A,B:],C),Functors(A,Functors(B,
C));
   take FF;
   let F1,F2 be Functor of [:A,B:], C such that
A22:  F1 is_naturally_transformable_to F2;
   let t be natural_transformation of F1,F2;
      [[F1,F2],t] in NatTrans([:A,B:],C) by A22,NATTRA_1:35;
    then [[F1,F2],t] in the Morphisms of Functors([:A,B:],C) by NATTRA_1:def 18
;
   hence FF.[[F1,F2],t] = [[export F1, export F2],export t] by A5;
  end;
 uniqueness
  proof let IT1,IT2 be Functor of Functors([:A,B:],C),Functors(A,Functors(B,C))
   such that
A23: for F1,F2 being Functor of [:A,B:], C
     st F1 is_naturally_transformable_to F2
    for t being natural_transformation of F1,F2
    holds IT1.[[F1,F2],t] = [[export F1, export F2],export t] and
A24: for F1,F2 being Functor of [:A,B:], C
     st F1 is_naturally_transformable_to F2
    for t being natural_transformation of F1,F2
    holds IT2.[[F1,F2],t] = [[export F1, export F2],export t];
      now let f be Morphism of Functors([:A,B:],C);
      consider F1,F2 being Functor of [:A,B:],C,
            t being natural_transformation of F1,F2 such that
A25:    F1 is_naturally_transformable_to F2 and
A26:     dom f = F1 & cod f = F2 & f =[[F1,F2],t] by Th9;
     thus (IT1 qua Function of
            the Morphisms of Functors([:A,B:],C),
            the Morphisms of Functors(A,Functors(B,C))
          ).f
        = [[export F1, export F2], export t] by A23,A25,A26
       .= (IT2 qua Function of
            the Morphisms of Functors([:A,B:],C),
            the Morphisms of Functors(A,Functors(B,C))
          ).f by A24,A25,A26;
    end;
   hence thesis by FUNCT_2:113;
  end;
end;

theorem Th33:
 export(A,B,C) is_an_isomorphism
 proof
A1: dom export(A,B,C) = the Morphisms of Functors([:A,B:],C) by FUNCT_2:def 1;
  thus export(A,B,C) is one-to-one
   proof let x1,x2 be set;
    assume x1 in dom export(A,B,C);
     then reconsider f1 = x1 as Morphism of Functors([:A,B:],C);
     consider F1,F2 being Functor of [:A,B:],C,
         t being natural_transformation of F1,F2 such that
A2:  F1 is_naturally_transformable_to F2 and
A3:   dom f1 = F1 & cod f1 = F2 & f1 =[[F1,F2],t] by Th9;
    assume x2 in dom export(A,B,C);
     then reconsider f2 = x2 as Morphism of Functors([:A,B:],C);
     consider G1,G2 being Functor of [:A,B:],C,
         u being natural_transformation of G1,G2 such that
A4:  G1 is_naturally_transformable_to G2 and
A5:   dom f2 = G1 & cod f2 = G2 & f2 =[[G1,G2],u] by Th9;
    assume
     export(A,B,C).x1 = export(A,B,C).x2;
     then [[export F1, export F2], export t]
        = export(A,B,C).[[G1,G2],u] by A2,A3,A5,Def6
       .= [[export G1, export G2], export u] by A4,Def6;
     then A6:    [export F1, export F2] = [export G1, export G2] & export u =
export t
       by ZFMISC_1:33;
     then export F1 = export G1 & export F2 = export G2 by ZFMISC_1:33;
     then F1 = G1 & F2 = G2 by Th26;
    hence x1 = x2 by A2,A3,A5,A6,Th30;
   end;
  thus rng export(A,B,C) c= the Morphisms of Functors(A,Functors(B,C))
   by RELSET_1:12;
  let m;
  assume m in the Morphisms of Functors(A,Functors(B,C));
   then reconsider f = m as Morphism of Functors(A,Functors(B,C));
   consider F1,F2 being Functor of A,Functors(B,C),
         t being natural_transformation of F1,F2 such that
A7: F1 is_naturally_transformable_to F2 and
A8:  dom f = F1 & cod f = F2 & f =[[F1,F2],t] by Th9;
   consider G1 being Functor of [:A,B:],C such that
A9: F1 = export G1 by Th31;
   consider G2 being Functor of [:A,B:],C such that
A10: F2 = export G2 by Th31;
A11: G1 is_naturally_transformable_to G2 by A7,A9,A10,Th32;
   consider u being natural_transformation of G1,G2 such that
A12: t = export u by A7,A9,A10,Th32;
A13: export(A,B,C).[[G1,G2],u] = f by A8,A9,A10,A11,A12,Def6;
     [[G1,G2],u] in NatTrans([:A,B:],C) by A11,NATTRA_1:35;
   then [[G1,G2],u] in dom export(A,B,C) by A1,NATTRA_1:def 18;
  hence thesis by A13,FUNCT_1:def 5;
 end;

theorem
   Functors([:A,B:],C) ~= Functors(A,Functors(B,C))
 proof take export(A,B,C);
  thus export(A,B,C) is_an_isomorphism by Th33;
 end;

begin :: The isomorphism between (B x C)^A and B^A x C^A

theorem Th35:
 for F1,F2 being Functor of A,B, G being Functor of B,C
  st F1 is_naturally_transformable_to F2
  for t being natural_transformation of F1,F2 holds
 G*t = G*(t qua Function)
proof let F1,F2 be Functor of A,B, G be Functor of B,C; 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;
 thus G*t = G*(t qua transformation of F1,F2) by A1,ISOCAT_1:def 7
    .= G*(t qua Function) by A2,ISOCAT_1:def 5;
end;

definition let A,B;
 redefine func pr1(A,B) -> Functor of [:A,B:], A;
 coherence;
  func pr2(A,B) -> Functor of [:A,B:], B;
 coherence;
end;

definition let A,B,C;
 let F be Functor of A,B, G be Functor of A,C;
 redefine func <:F,G:> -> Functor of A, [:B,C:];
 coherence
  proof
   thus <:F,G:> is Functor of A, [:B,C:];
  end;
end;

definition let A,B,C; let F be Functor of A, [:B,C:];
 func Pr1 F -> Functor of A,B equals
:Def7:  pr1(B,C)*F;
 correctness;
 func Pr2 F -> Functor of A,C equals
:Def8:  pr2(B,C)*F;
 correctness;
end;

theorem Th36:
 for F being Functor of A,B, G being Functor of A,C holds
  Pr1<:F,G:> = F & Pr2<:F,G:> = G
proof let F be Functor of A,B, G be Functor of A,C;
 thus Pr1<:F,G:> = pr1(B,C)*<:F,G:> by Def7
   .= pr1(the Morphisms of B, the Morphisms of C)*<:F,G:> by CAT_2:def 10
   .= F by FUNCT_3:82;
 thus Pr2<:F,G:> = pr2(B,C)*<:F,G:> by Def8
   .= pr2(the Morphisms of B, the Morphisms of C)*<:F,G:> by CAT_2:def 11
   .= G by FUNCT_3:82;
end;

theorem Th37:
 for F,G being Functor of A, [:B,C:] st Pr1 F = Pr1 G & Pr2 F = Pr2 G
  holds F = G
proof let F,G be Functor of A, [:B,C:];
     the Morphisms of [:B,C:] = [:the Morphisms of B, the Morphisms of C:]
       by CAT_2:33;
  then reconsider f = F, g = G as
   Function of the Morphisms of A, [:the Morphisms of B, the Morphisms of C:];
 assume
A1: Pr1 F = Pr1 G;
A2: pr1(the Morphisms of B, the Morphisms of C)*f
     = pr1(B,C)*f by CAT_2:def 10
    .= Pr1 G by A1,Def7
    .= pr1(B,C)*g by Def7
    .= pr1(the Morphisms of B, the Morphisms of C)*g by CAT_2:def 10;
 assume
A3: Pr2 F = Pr2 G;
     pr2(the Morphisms of B, the Morphisms of C)*f
     = pr2(B,C)*f by CAT_2:def 11
    .= Pr2 G by A3,Def8
    .= pr2(B,C)*g by Def8
    .= pr2(the Morphisms of B, the Morphisms of C)*g by CAT_2:def 11;
 hence thesis by A2,Th5;
end;

definition let A,B,C; let F1,F2 be Functor of A, [:B,C:];
 let t be natural_transformation of F1,F2;
 func Pr1 t -> natural_transformation of Pr1 F1, Pr1 F2 equals
:Def9:  pr1(B,C)*t;
 coherence
  proof Pr1 F1 = pr1(B,C)*F1 & Pr1 F2 = pr1(B,C)*F2 by Def7;
   hence thesis;
  end;
 func Pr2 t -> natural_transformation of Pr2 F1, Pr2 F2 equals
:Def10:  pr2(B,C)*t;
 coherence
  proof Pr2 F1 = pr2(B,C)*F1 & Pr2 F2 = pr2(B,C)*F2 by Def8;
   hence thesis;
  end;
end;

theorem Th38:
 for F,G being Functor of A, [:B,C:] st
   F is_naturally_transformable_to G
 holds Pr1 F is_naturally_transformable_to Pr1 G
     & Pr2 F is_naturally_transformable_to Pr2 G
proof let F,G be Functor of A, [:B,C:];
    Pr1 F = pr1(B,C)*F & Pr2 F = pr2(B,C)*F &
  Pr1 G = pr1(B,C)*G & Pr2 G = pr2(B,C)*G by Def7,Def8;
 hence thesis by ISOCAT_1:27;
end;

theorem Th39:
 for F1,F2,G1,G2 being Functor of A, [:B,C:] st
  F1 is_naturally_transformable_to F2 &
  G1 is_naturally_transformable_to G2
 for s being natural_transformation of F1,F2,
     t being natural_transformation of G1,G2 st Pr1 s = Pr1 t & Pr2 s = Pr2 t
  holds s = t
proof let F1,F2,G1,G2 be Functor of A, [:B,C:] such that
A1: F1 is_naturally_transformable_to F2 and
A2: G1 is_naturally_transformable_to G2;
 let s be natural_transformation of F1,F2,
     t be natural_transformation of G1,G2 such that
A3: Pr1 s = Pr1 t & Pr2 s = Pr2 t;
     the Morphisms of [:B,C:] = [:the Morphisms of B, the Morphisms of C:]
     by CAT_2:33;
  then reconsider S = s, T = t as
   Function of the Objects of A, [:the Morphisms of B, the Morphisms of C:];
A4: pr1(the Morphisms of B, the Morphisms of C)*S
     = pr1(B,C)*S by CAT_2:def 10
    .= pr1(B,C)*s by A1,Th35
    .= Pr1 s by Def9
    .= pr1(B,C)*t by A3,Def9
    .= pr1(B,C)*T by A2,Th35
    .= pr1(the Morphisms of B, the Morphisms of C)*T by CAT_2:def 10;
     pr2(the Morphisms of B, the Morphisms of C)*S
     = pr2(B,C)*S by CAT_2:def 11
    .= pr2(B,C)*s by A1,Th35
    .= Pr2 s by Def10
    .= pr2(B,C)*t by A3,Def10
    .= pr2(B,C)*T by A2,Th35
    .= pr2(the Morphisms of B, the Morphisms of C)*T by CAT_2:def 11;
 hence thesis by A4,Th5;
end;

theorem Th40:
 for F being Functor of A, [:B,C:]
  holds id Pr1 F = Pr1 id F & id Pr2 F = Pr2 id F
proof let F be Functor of A, [:B,C:];
 thus id Pr1 F = id(pr1(B,C)*F) by Def7
    .= pr1(B,C)*id F by ISOCAT_1:38
    .= Pr1 id F by Def9;
 thus id Pr2 F = id(pr2(B,C)*F) by Def8
    .= pr2(B,C)*id F by ISOCAT_1:38
    .= Pr2 id F by Def10;
end;

theorem Th41:
 for F,G,H being Functor of A, [:B,C:] st
  F is_naturally_transformable_to G &
  G is_naturally_transformable_to H
 for s being natural_transformation of F,G,
     t being natural_transformation of G,H
  holds Pr1 t`*`s = (Pr1 t)`*`Pr1 s & Pr2 t`*`s = (Pr2 t)`*`Pr2 s
proof let F,G,H be Functor of A, [:B,C:] such that
A1: F is_naturally_transformable_to G and
A2: G is_naturally_transformable_to H;
 let s be natural_transformation of F,G,
     t be natural_transformation of G,H;
A3: Pr1 t = pr1(B,C)*t & Pr1 s = pr1(B,C)*s by Def9;
A4: pr1(B,C)*F = Pr1 F & pr1(B,C)*G = Pr1 G & pr1(B,C)*H = Pr1 H by Def7;
 thus Pr1 t`*`s = pr1(B,C)*(t`*`s) by Def9
    .= (Pr1 t)`*`Pr1 s by A1,A2,A3,A4,ISOCAT_1:32;
A5: Pr2 t = pr2(B,C)*t & Pr2 s = pr2(B,C)*s by Def10;
A6: pr2(B,C)*F = Pr2 F & pr2(B,C)*G = Pr2 G & pr2(B,C)*H = Pr2 H by Def8;
 thus Pr2 t`*`s = pr2(B,C)*(t`*`s) by Def10
    .= (Pr2 t)`*`Pr2 s by A1,A2,A5,A6,ISOCAT_1:32;
end;

Lm3:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C
  st F1 is_transformable_to G1 & F2 is_transformable_to G2
 for t1 being transformation of F1,G1, t2 being transformation of F2,G2
 for a being Object of A holds <:t1,t2:>.a = [t1.a,t2.a]
proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_transformable_to G1 & F2 is_transformable_to G2;
 let t1 be transformation of F1,G1, t2 be transformation of F2,G2;
 let a be Object of A;
  reconsider s1 = t1 as Function of the Objects of A, the Morphisms of B;
  reconsider s2 = t2 as Function of the Objects of A, the Morphisms of C;
 thus <:t1,t2:>.a
     = [s1.a,s2.a] by FUNCT_3:79
    .= [t1.a,s2.a] by A1,NATTRA_1:def 5
    .= [t1.a,t2.a] by A1,NATTRA_1:def 5;
end;

theorem Th42:
 for F being Functor of A,B, G being Functor of A,C
  for a,b being Object of A st Hom(a,b) <> {}
  for f being Morphism of a,b holds <:F,G:>.f = [F.f,G.f]
 proof let F be Functor of A,B, G be Functor of A,C;
  let a,b be Object of A such that
A1: Hom(a,b) <> {};
  let f be Morphism of a,b;
   reconsider g = f as Morphism of A;
  thus <:F,G:>.f = <:F,G:>.g by A1,NATTRA_1:def 1
         .= [F.g,G.g] by FUNCT_3:79
         .= [F.g,G.f] by A1,NATTRA_1:def 1
         .= [F.f,G.f] by A1,NATTRA_1:def 1;
 end;

theorem Th43:
 for F being Functor of A,B, G being Functor of A,C
 for a being Object of A
  holds <:F,G:>.a = [F.a,G.a]
 proof let F be Functor of A,B, G be Functor of A,C;
  let a be Object of A;
     <:F,G:>.(id a qua Morphism of A)
      = [F.(id a qua Morphism of A),G.(id a qua Morphism of A)] by FUNCT_3:79
     .= [id(F.a),G.(id a qua Morphism of A)] by CAT_1:108
     .= [id(F.a),id(G.a)] by CAT_1:108
     .= id[F.a,G.a] by CAT_2:41;
  hence <:F,G:>.a = [F.a,G.a] by CAT_1:107;
 end;

Lm4:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C st
  F1 is_transformable_to G1 & F2 is_transformable_to G2
 for t1 being transformation of F1,G1, t2 being transformation of F2,G2
 for a being Object of A holds <:t1,t2:>.a in Hom(<:F1,F2:>.a,<:G1,G2:>.a)
 proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_transformable_to G1 & F2 is_transformable_to G2;
  let t1 be transformation of F1,G1, t2 be transformation of F2,G2;
  let a be Object of A;
A2: t1.a in Hom(F1.a,G1.a) & t2.a in Hom(F2.a,G2.a) by A1,ISOCAT_1:7;
     [F1.a,F2.a] = <:F1,F2:>.a & [G1.a,G2.a] = <:G1,G2:>.a &
   [t1.a,t2.a] = <:t1,t2:>.a by A1,Lm3,Th43;
  hence <:t1,t2:>.a in Hom(<:F1,F2:>.a,<:G1,G2:>.a) by A2,Th16;
 end;

theorem Th44:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C st
  F1 is_transformable_to G1 & F2 is_transformable_to G2
 holds <:F1,F2:> is_transformable_to <:G1,G2:>
 proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1:  F1 is_transformable_to G1 & F2 is_transformable_to G2;
  let a be Object of A;
  thus Hom(<:F1,F2:>.a,<:G1,G2:>.a) <> {} by A1,Lm4;
 end;

definition let A,B,C;
 let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_transformable_to G1 & F2 is_transformable_to G2;
 let t1 be transformation of F1,G1, t2 be transformation of F2,G2;
  func <:t1,t2:> -> transformation of <:F1,F2:>,<:G1,G2:> equals
:Def11:  <:t1,t2:>;
 coherence
  proof
     the Morphisms of [:B,C:] = [:the Morphisms of B, the Morphisms of C:]
       by CAT_2:33;
    then reconsider t = <:t1,t2:> as
     Function of the Objects of A, the Morphisms of [:B,C:];
      t is transformation of <:F1,F2:>,<:G1,G2:>
     proof thus <:F1,F2:> is_transformable_to <:G1,G2:> by A1,Th44;
      let a be Object of A;
         t.a in Hom(<:F1,F2:>.a,<:G1,G2:>.a) by A1,Lm4;
      hence t.a is Morphism of <:F1,F2:>.a,<:G1,G2:>.a by CAT_1:def 7;
     end;
   hence thesis;
  end;
end;

theorem Th45:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C
  st F1 is_transformable_to G1 & F2 is_transformable_to G2
 for t1 being transformation of F1,G1, t2 being transformation of F2,G2
 for a being Object of A holds <:t1,t2:>.a = [t1.a,t2.a]
proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_transformable_to G1 & F2 is_transformable_to G2;
 let t1 be transformation of F1,G1, t2 be transformation of F2,G2;
 let a be Object of A;
  reconsider s1 = t1 as Function of the Objects of A, the Morphisms of B;
  reconsider s2 = t2 as Function of the Objects of A, the Morphisms of C;
    <:F1,F2:> is_transformable_to <:G1,G2:> by A1,Th44;
 hence <:t1,t2:>.a
     = (<:t1,t2:> qua
         Function of the Objects of A, the Morphisms of [:B,C:]).a
        by NATTRA_1:def 5
    .= <:s1,s2:>.a by A1,Def11
    .= [t1.a,t2.a] by A1,Lm3;
end;

Lm5:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C st
  F1 is_naturally_transformable_to G1 & F2 is_naturally_transformable_to G2
 for t1 being natural_transformation of F1,G1,
     t2 being natural_transformation of F2,G2
 for a,b being Object of A st Hom(a,b) <> {}
 for f being Morphism of a,b
   holds <:t1,t2:>.b*<:F1,F2:>.f = <:G1,G2:>.f*<:t1,t2:>.a
proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_naturally_transformable_to G1 and
A2: F2 is_naturally_transformable_to G2;
A3:  F1 is_transformable_to G1 & F2 is_transformable_to G2
      by A1,A2,NATTRA_1:def 7;
 let t1 be natural_transformation of F1,G1,
     t2 be natural_transformation of F2,G2;
 let a,b be Object of A such that
A4: Hom(a,b) <> {};
 let f be Morphism of a,b;
A5:t1.b*F1.f = G1.f*t1.a & t2.b*F2.f = G2.f*t2.a by A1,A2,A4,NATTRA_1:def 8;
A6: <:t1,t2:>.b = [t1.b,t2.b] by A3,Th45;
A7: <:F1,F2:>.f = [F1.f,F2.f] by A4,Th42;
A8: Hom(F1.b,G1.b) <> {} by A3,NATTRA_1:def 2;
A9: Hom(F1.a,F1.b) <> {} by A4,CAT_1:126;
A10: Hom(F2.a,F2.b) <> {} by A4,CAT_1:126;
A11: Hom(F2.b,G2.b) <> {} by A3,NATTRA_1:def 2;
A12: Hom(F1.a,G1.a) <> {} by A3,NATTRA_1:def 2;
A13: Hom(G1.a,G1.b) <> {} by A4,CAT_1:126;
A14: Hom(F2.a,G2.a) <> {} by A3,NATTRA_1:def 2;
A15: Hom(G2.a,G2.b) <> {} by A4,CAT_1:126;
A16: dom(t1.b) = F1.b by A8,CAT_1:23 .= cod(F1.f) by A9,CAT_1:23;
A17: dom(t2.b) = F2.b by A11,CAT_1:23 .= cod(F2.f) by A10,CAT_1:23;
A18: t1.b*F1.f = t1.b*(F1.f qua Morphism of B) by A8,A9,CAT_1:def 13;
A19: t2.b*F2.f = t2.b*(F2.f qua Morphism of C) by A10,A11,CAT_1:def 13;
A20: G1.f*t1.a = G1.f*(t1.a qua Morphism of B) by A12,A13,CAT_1:def 13;
A21: G2.f*t2.a = G2.f*(t2.a qua Morphism of C) by A14,A15,CAT_1:def 13;
A22: cod(t1.a) = G1.a by A12,CAT_1:23 .= dom(G1.f) by A13,CAT_1:23;
A23: cod(t2.a) = G2.a by A14,CAT_1:23 .= dom(G2.f) by A15,CAT_1:23;
A24: <:G1,G2:>.f = [G1.f,G2.f] by A4,Th42;
A25: <:t1,t2:>.a = [t1.a,t2.a] by A3,Th45;
A26: <:F1,F2:> is_transformable_to <:G1,G2:> by A3,Th44;
then A27: Hom(<:F1,F2:>.a,<:G1,G2:>.a) <> {} by NATTRA_1:def 2;
A28: Hom(<:G1,G2:>.a,<:G1,G2:>.b) <> {} by A4,CAT_1:126;
A29: Hom(<:F1,F2:>.a,<:F1,F2:>.b) <> {} by A4,CAT_1:126;
   Hom(<:F1,F2:>.b,<:G1,G2:>.b) <> {} by A26,NATTRA_1:def 2;
 hence <:t1,t2:>.b*<:F1,F2:>.f
     = <:t1,t2:>.b*(<:F1,F2:>.f qua Morphism of [:B,C:]) by A29,CAT_1:def 13
    .= [G1.f*t1.a,G2.f*t2.a] by A5,A6,A7,A16,A17,A18,A19,CAT_2:39
    .= <:G1,G2:>.f*(<:t1,t2:>.a qua Morphism of [:B,C:])
         by A20,A21,A22,A23,A24,A25,CAT_2:39
    .= <:G1,G2:>.f*<:t1,t2:>.a by A27,A28,CAT_1:def 13;
end;

theorem Th46:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C st
  F1 is_naturally_transformable_to G1 & F2 is_naturally_transformable_to G2
 holds <:F1,F2:> is_naturally_transformable_to <:G1,G2:>
 proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_naturally_transformable_to G1 and
A2: F2 is_naturally_transformable_to G2;
     F1 is_transformable_to G1 &
   F2 is_transformable_to G2 by A1,A2,NATTRA_1:def 7;
   hence <:F1,F2:> is_transformable_to <:G1,G2:> by Th44;
   consider t1 being natural_transformation of F1,G1,
            t2 being natural_transformation of F2,G2;
  take <:t1,t2:>;
  thus thesis by A1,A2,Lm5;
 end;

definition let A,B,C;
 let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_naturally_transformable_to G1 and
A2: F2 is_naturally_transformable_to G2;
 let t1 be natural_transformation of F1,G1,
     t2 be natural_transformation of F2,G2;
 func <:t1,t2:> -> natural_transformation of <:F1,F2:>,<:G1,G2:> equals
:Def12:  <:t1,t2:>;
 coherence
  proof
      <:t1,t2:> is natural_transformation of <:F1,F2:>,<:G1,G2:>
     proof
      thus <:F1,F2:> is_naturally_transformable_to <:G1,G2:> by A1,A2,Th46;
      thus thesis by A1,A2,Lm5;
     end;
   hence thesis;
  end;
end;

theorem Th47:
 for F1,G1 being Functor of A,B, F2,G2 being Functor of A,C st
  F1 is_naturally_transformable_to G1 &
  F2 is_naturally_transformable_to G2
 for t1 being natural_transformation of F1,G1,
     t2 being natural_transformation of F2,G2 holds
  Pr1<:t1,t2:> = t1 & Pr2<:t1,t2:> = t2
 proof let F1,G1 be Functor of A,B, F2,G2 be Functor of A,C such that
A1: F1 is_naturally_transformable_to G1 and
A2: F2 is_naturally_transformable_to G2;
A3: F1 is_transformable_to G1 & F2 is_transformable_to G2
    by A1,A2,NATTRA_1:def 7;
  let t1 be natural_transformation of F1,G1,
      t2 be natural_transformation of F2,G2;
   reconsider s = t1 as Function of the Objects of A, the Morphisms of B;
A4: <:F1,F2:> is_naturally_transformable_to <:G1,G2:> by A1,A2,Th46;
then A5: <:F1,F2:> is_transformable_to <:G1,G2:> by NATTRA_1:def 7;
  thus Pr1<:t1,t2:> = pr1(B,C)*<:t1,t2:> by Def9
     .= pr1(B,C)
         *(<:t1,t2:> qua transformation of <:F1,F2:>,<:G1,G2:>)
         by A4,ISOCAT_1:def 7
     .= pr1(B,C)*
         (<:t1,t2:> qua Function of the Objects of A, the Morphisms of [:B,C:])
         by A5,ISOCAT_1:def 5
     .= pr1(B,C)*
         (<:t1 qua transformation of F1,G1,t2:>
            qua Function of the Objects of A, the Morphisms of [:B,C:])
          by A1,A2,Def12
     .= pr1(B,C)*<:s,t2:> by A3,Def11
     .= pr1(the Morphisms of B, the Morphisms of C)*<:s,t2:> by CAT_2:def 10
     .= t1 by FUNCT_3:82;
  thus Pr2<:t1,t2:> = pr2(B,C)*<:t1,t2:> by Def10
     .= pr2(B,C)
         *(<:t1,t2:> qua transformation of <:F1,F2:>,<:G1,G2:>)
         by A4,ISOCAT_1:def 7
     .= pr2(B,C)*
         (<:t1,t2:> qua Function of the Objects of A, the Morphisms of [:B,C:])
         by A5,ISOCAT_1:def 5
     .= pr2(B,C)*
         (<:t1 qua transformation of F1,G1,t2:>
            qua Function of the Objects of A, the Morphisms of [:B,C:])
          by A1,A2,Def12
     .= pr2(B,C)*<:s,t2:> by A3,Def11
     .= pr2(the Morphisms of B, the Morphisms of C)*<:s,t2:> by CAT_2:def 11
     .= t2 by FUNCT_3:82;
 end;

definition let A,B,C;
 func distribute(A,B,C) ->
  Functor of Functors(A,[:B,C:]), [:Functors(A,B),Functors(A,C):] means
:Def13: for F1,F2 being Functor of A,[:B,C:]
    st F1 is_naturally_transformable_to F2
   for t being natural_transformation of F1,F2
   holds it.[[F1,F2],t] =
    [[[Pr1 F1, Pr1 F2],Pr1 t],[[Pr2 F1, Pr2 F2],Pr2 t]];
 existence
  proof
    defpred P[set,set] means
      for F1,F2 being Functor of A,[:B,C:],
          t being natural_transformation of F1,F2 st $1 = [[F1,F2],t]
      holds $2 = [[[Pr1 F1, Pr1 F2],Pr1 t],[[Pr2 F1, Pr2 F2],Pr2 t]];
A1:  now let f be Morphism of Functors(A,[:B,C:]);
A2:    the Morphisms of Functors(A,B) = NatTrans(A,B) &
      the Morphisms of Functors(A,C) = NatTrans(A,C) by NATTRA_1:def 18;
      consider F1,F2 being Functor of A,[:B,C:],
              s being natural_transformation of F1,F2 such that
A3:    F1 is_naturally_transformable_to F2 and
A4:    dom(f) = F1 & cod f = F2 & f = [[F1,F2],s] by Th9;
        Pr1 F1 is_naturally_transformable_to Pr1 F2 &
      Pr2 F1 is_naturally_transformable_to Pr2 F2 by A3,Th38;
      then [[Pr1 F1, Pr1 F2],Pr1 s] is Morphism of Functors(A,B) &
      [[Pr2 F1, Pr2 F2],Pr2 s] is Morphism of Functors(A,C) by A2,NATTRA_1:35;
      then reconsider g = [[[Pr1 F1, Pr1 F2],Pr1 s],[[Pr2 F1, Pr2 F2],Pr2 s]]
       as Morphism of [:Functors(A,B),Functors(A,C):] by CAT_2:36;
     take g;
     thus P[f,g]
     proof
     let G1,G2 be Functor of A,[:B,C:],
          t be natural_transformation of G1,G2;
     assume f = [[G1,G2],t];
      then A5:    [G1,G2] = [F1,F2] & t = s by A4,ZFMISC_1:33;
      then G1 = F1 & G2 = F2 by ZFMISC_1:33;
     hence g = [[[Pr1 G1, Pr1 G2],Pr1 t],[[Pr2 G1, Pr2 G2],Pr2 t]] by A5;
    end;
    end;
    consider IT being Function of
     the Morphisms of Functors(A,[:B,C:]),
     the Morphisms of [:Functors(A,B),Functors(A,C):] such that
A6:   for f being Morphism of Functors(A,[:B,C:]) holds P[f,IT.f]
       from FuncExD(A1);
      IT is Functor of Functors(A,[:B,C:]), [:Functors(A,B),Functors(A,C):]
     proof
A7:    the Morphisms of Functors(A,B) = NatTrans(A,B) by NATTRA_1:def 18;
A8:    the Morphisms of Functors(A,C) = NatTrans(A,C) by NATTRA_1:def 18;
      thus for c being Object of Functors(A,[:B,C:])
       ex d being Object of [:Functors(A,B),Functors(A,C):] st IT.id c = id d
       proof let c be Object of Functors(A,[:B,C:]);
         reconsider F = c as Functor of A, [:B,C:] by Th8;
         reconsider d1 = Pr1 F as Object of Functors(A,B) by Th8;
         reconsider d2 = Pr2 F as Object of Functors(A,C) by Th8;
        take [d1,d2];
           Pr1 id F = id Pr1 F by Th40;
then A9:       id d1 = [[Pr1 F, Pr1 F], Pr1 id F] by NATTRA_1:def 18;
           Pr2 id F = id Pr2 F by Th40;
then A10:       id d2 = [[Pr2 F, Pr2 F], Pr2 id F] by NATTRA_1:def 18;
           id c = [[F,F], id F] by NATTRA_1:def 18;
        hence IT.id c
            = [id d1, id d2] by A6,A9,A10
           .= id [d1,d2] by CAT_2:41;
       end;
      thus for f being Morphism of Functors(A,[:B,C:]) holds
        IT.id dom f = id dom(IT.f) & IT.id cod f = id cod(IT.f)
       proof let f be Morphism of Functors(A,[:B,C:]);
        consider F1,F2 being Functor of A,[:B,C:],
              s being natural_transformation of F1,F2 such that
A11:      F1 is_naturally_transformable_to F2 and
A12:      dom(f) = F1 & cod f = F2 & f = [[F1,F2],s] by Th9;
           Pr1 F1 is_naturally_transformable_to Pr1 F2 by A11,Th38;
         then reconsider f1 = [[Pr1 F1, Pr1 F2],Pr1 s]
          as Morphism of Functors(A,B) by A7,NATTRA_1:35;
           Pr2 F1 is_naturally_transformable_to Pr2 F2 by A11,Th38;
         then reconsider f2 = [[Pr2 F1, Pr2 F2],Pr2 s]
          as Morphism of Functors(A,C) by A8,NATTRA_1:35;
           dom f1 = Pr1 F1 & Pr1 id F1 = id Pr1 F1 by Th40,NATTRA_1:39;
then A13:       id dom f1 = [[Pr1 F1, Pr1 F1], Pr1 id F1] by NATTRA_1:def 18;
           dom f2 = Pr2 F1 & Pr2 id F1 = id Pr2 F1 by Th40,NATTRA_1:39;
then A14:       id dom f2 = [[Pr2 F1, Pr2 F1], Pr2 id F1] by NATTRA_1:def 18;
           id dom f = [[F1,F1], id F1] by A12,NATTRA_1:def 18;
        hence IT.id dom f
            = [id dom f1, id dom f2] by A6,A13,A14
           .= id [dom f1, dom f2] by CAT_2:41
           .= id dom [f1,f2] by CAT_2:38
           .= id dom(IT.f) by A6,A12;
           cod f1 = Pr1 F2 & Pr1 id F2 = id Pr1 F2 by Th40,NATTRA_1:39;
then A15:       id cod f1 = [[Pr1 F2, Pr1 F2], Pr1 id F2] by NATTRA_1:def 18;
           cod f2 = Pr2 F2 & Pr2 id F2 = id Pr2 F2 by Th40,NATTRA_1:39;
then A16:       id cod f2 = [[Pr2 F2, Pr2 F2], Pr2 id F2] by NATTRA_1:def 18;
           id cod f = [[F2,F2], id F2] by A12,NATTRA_1:def 18;
        hence IT.id cod f
            = [id cod f1, id cod f2] by A6,A15,A16
           .= id [cod f1, cod f2] by CAT_2:41
           .= id cod [f1,f2] by CAT_2:38
           .= id cod(IT.f) by A6,A12;
       end;
      let f,g be Morphism of Functors(A,[:B,C:]) such that
A17:     dom g = cod f;
      consider F1,F2 being Functor of A,[:B,C:],
            s being natural_transformation of F1,F2 such that
A18:    F1 is_naturally_transformable_to F2 and
A19:    dom(f) = F1 & cod f = F2 & f = [[F1,F2],s] by Th9;
      consider G1,G2 being Functor of A,[:B,C:],
            t being natural_transformation of G1,G2 such that
A20:   G1 is_naturally_transformable_to G2 and
A21:    dom(g) = G1 & cod g = G2 & g = [[G1,G2],t] by Th9;
       reconsider t as natural_transformation of F2,G2 by A17,A19,A21;
A22:     IT.f = [[[Pr1 F1, Pr1 F2],Pr1 s],[[Pr2 F1, Pr2 F2],Pr2 s]] by A6,A19;
         Pr1 F1 is_naturally_transformable_to Pr1 F2 &
       Pr1 F2 is_naturally_transformable_to Pr1 G2 by A17,A18,A19,A20,A21,Th38;
       then reconsider g1 = [[Pr1 F2, Pr1 G2],Pr1 t],
                  f1 = [[Pr1 F1, Pr1 F2],Pr1 s] as Morphism of Functors(A,B)
            by A7,NATTRA_1:35;
         Pr2 F1 is_naturally_transformable_to Pr2 F2 &
       Pr2 F2 is_naturally_transformable_to Pr2 G2 by A17,A18,A19,A20,A21,Th38;
       then reconsider g2 = [[Pr2 F2, Pr2 G2],Pr2 t],
                  f2 = [[Pr2 F1, Pr2 F2],Pr2 s] as Morphism of Functors(A,C)
            by A8,NATTRA_1:35;
A23:    dom g1 = Pr1 F2 by NATTRA_1:39 .= cod f1 by NATTRA_1:39;
A24:    dom g2 = Pr2 F2 by NATTRA_1:39 .= cod f2 by NATTRA_1:39;
A25:     g1*f1 = [[Pr1 F1, Pr1 G2],(Pr1 t)`*`Pr1 s] by NATTRA_1:42
            .= [[Pr1 F1, Pr1 G2],Pr1 t`*`s] by A17,A18,A19,A20,A21,Th41;
A26:     g2*f2 = [[Pr2 F1, Pr2 G2],(Pr2 t)`*`Pr2 s] by NATTRA_1:42
            .= [[Pr2 F1, Pr2 G2],Pr2 t`*`s] by A17,A18,A19,A20,A21,Th41;
         g*f = [[F1,G2],t`*`s] by A17,A19,A21,NATTRA_1:42;
      hence IT.(g*f) = [g1*f1,g2*f2] by A6,A25,A26
         .= [g1,g2]*[f1,f2] by A23,A24,CAT_2:39
         .= IT.g*IT.f by A6,A17,A19,A21,A22;
     end;
    then reconsider IT as
      Functor of Functors(A,[:B,C:]), [:Functors(A,B),Functors(A,C):];
   take IT;
   let F1,F2 be Functor of A,[:B,C:] such that
A27:  F1 is_naturally_transformable_to F2;
   let t be natural_transformation of F1,F2;
    set f = [[F1,F2],t];
      f in NatTrans(A,[:B,C:]) by A27,NATTRA_1:35;
    then reconsider f as Morphism of Functors(A,[:B,C:]) by NATTRA_1:def 18;
   thus IT.[[F1,F2],t] = IT.f
    .= [[[Pr1 F1, Pr1 F2],Pr1 t],[[Pr2 F1, Pr2 F2],Pr2 t]] by A6;
  end;
 uniqueness
  proof let IT1,IT2 be
    Functor of Functors(A,[:B,C:]), [:Functors(A,B),Functors(A,C):] such that
A28:for F1,F2 being Functor of A,[:B,C:]
    st F1 is_naturally_transformable_to F2
   for t being natural_transformation of F1,F2
   holds IT1.[[F1,F2],t] =
    [[[Pr1 F1, Pr1 F2],Pr1 t],[[Pr2 F1, Pr2 F2],Pr2 t]] and
A29:for F1,F2 being Functor of A,[:B,C:]
    st F1 is_naturally_transformable_to F2
   for t being natural_transformation of F1,F2
   holds IT2.[[F1,F2],t] =
    [[[Pr1 F1, Pr1 F2],Pr1 t],[[Pr2 F1, Pr2 F2],Pr2 t]];
      now let f be Morphism of Functors(A,[:B,C:]);
      consider F1,F2 being Functor of A,[:B,C:],
            s being natural_transformation of F1,F2 such that
A30:    F1 is_naturally_transformable_to F2 and
A31:     dom(f) = F1 & cod f = F2 & f = [[F1,F2],s] by Th9;
     thus IT1.f
        = [[[Pr1 F1, Pr1 F2],Pr1 s],[[Pr2 F1, Pr2 F2],Pr2 s]] by A28,A30,A31
       .= IT2.f by A29,A30,A31;
    end;
   hence IT1 = IT2 by FUNCT_2:113;
  end;
end;

theorem Th48:
 distribute(A,B,C) is_an_isomorphism
  proof
   thus distribute(A,B,C) is one-to-one
    proof let x1,x2 be set;
     assume x1 in dom distribute(A,B,C);
      then reconsider f1 = x1 as Morphism of Functors(A,[:B,C:]);
      consider F1,F2 being Functor of A,[:B,C:],
            s being natural_transformation of F1,F2 such that
A1:   F1 is_naturally_transformable_to F2 and
A2:    dom(f1) = F1 & cod f1 = F2 & f1 = [[F1,F2],s] by Th9;
     assume x2 in dom distribute(A,B,C);
      then reconsider f2 = x2 as Morphism of Functors(A,[:B,C:]);
      consider G1,G2 being Functor of A,[:B,C:],
            t being natural_transformation of G1,G2 such that
A3:   G1 is_naturally_transformable_to G2 and
A4:    dom(f2) = G1 & cod f2 = G2 & f2 = [[G1,G2],t] by Th9;
     assume
      distribute(A,B,C).x1 = distribute(A,B,C).x2;
      then [[[Pr1 F1,Pr1 F2],Pr1 s],[[Pr2 F1, Pr2 F2],Pr2 s]]
        = distribute(A,B,C).[[G1,G2],t] by A1,A2,A4,Def13
       .= [[[Pr1 G1,Pr1 G2],Pr1 t],[[Pr2 G1, Pr2 G2],Pr2 t]] by A3,Def13;
      then [[Pr1 F1,Pr1 F2],Pr1 s] = [[Pr1 G1,Pr1 G2],Pr1 t] &
           [[Pr2 F1,Pr2 F2],Pr2 s] = [[Pr2 G1,Pr2 G2],Pr2 t] by ZFMISC_1:33;
      then A5:    Pr1 s = Pr1 t & Pr2 s = Pr2 t &
       [Pr1 F1,Pr1 F2] = [Pr1 G1,Pr1 G2] & [Pr2 F1,Pr2 F2] = [Pr2 G1,Pr2 G2]
           by ZFMISC_1:33;
      then Pr1 F1 = Pr1 G1 & Pr2 F1 = Pr2 G1 & Pr1 F2 = Pr1 G2 & Pr2 F2 = Pr2
G2
           by ZFMISC_1:33;
      then s = t & F1 = G1 & F2 = G2 by A1,A3,A5,Th37,Th39;
     hence x1 = x2 by A2,A4;
    end;
   thus rng distribute(A,B,C) c=
    the Morphisms of [:Functors(A,B),Functors(A,C):] by RELSET_1:12;
   let o;
   assume o in the Morphisms of [:Functors(A,B),Functors(A,C):];
    then consider o1 being (Morphism of Functors(A,B)),
                  o2 being Morphism of Functors(A,C) such that
A6:   o = [o1,o2] by CAT_2:37;
    consider F1,F2 being Functor of A,B,
         s being natural_transformation of F1,F2 such that
A7: F1 is_naturally_transformable_to F2 and
A8:  dom o1 = F1 & cod o1 = F2 & o1 = [[F1,F2],s] by Th9;
    consider G1,G2 being Functor of A,C,
         t being natural_transformation of G1,G2 such that
A9: G1 is_naturally_transformable_to G2 and
A10:  dom o2 = G1 & cod o2 = G2 & o2 = [[G1,G2],t] by Th9;
    set f = [[<:F1,G1:>,<:F2,G2:>],<:s,t:>];
A11: <:F1,G1:> is_naturally_transformable_to <:F2,G2:> by A7,A9,Th46;
    then f in NatTrans(A,[:B,C:]) by NATTRA_1:35;
    then reconsider f as Morphism of Functors(A,[:B,C:]) by NATTRA_1:def 18;
      Pr1<:s,t:> = s & Pr2<:s,t:> = t &
    Pr1<:F1,G1:> = F1 & Pr1<:F2,G2:> = F2 &
    Pr2<:F1,G1:> = G1 & Pr2<:F2,G2:> = G2 by A7,A9,Th36,Th47;
    then distribute(A,B,C).f
        = o by A6,A8,A10,A11,Def13;
   hence o in rng distribute(A,B,C) by Th4;
  end;

theorem
   Functors(A,[:B,C:]) ~= [:Functors(A,B),Functors(A,C):]
 proof
  take distribute(A,B,C);
  thus distribute(A,B,C) is_an_isomorphism by Th48;
 end;

Back to top