CAT_8

index · ← RING_3 · ASYMPT_3 →
:: Exponential Objects
::  by Marco Riccardi
:: 
:: Received August 15, 2015
:: Copyright (c) 2015-2026 Association of Mizar Users
::           (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.

environ

 vocabularies FUNCT_1, TARSKI, ZFMISC_1, XBOOLE_0, RELAT_1, SUBSET_1, WELLORD1,
      CAT_1, CAT_4, ALTCAT_1, GRAPH_1, BINOP_1, STRUCT_0, PARTFUN1, MONOID_0,
      NATTRA_1, MSSUBFAM, CARD_1, FUNCTOR0, MOD_4, CAT_6, XTUPLE_0, RECDEF_2,
      MCART_1, PBOOLE, WELLORD2, FACIRC_1, FUNCT_2, NEWTON, POLYNOM2, CAT_7,
      CAT_8, PZFMISC1, FUNCOP_1;
 notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, FUNCT_1, FUNCT_2,
      ORDINAL1, PARTFUN1, FINSEQ_1, STRUCT_0, FUNCOP_1, RELSET_1, BINOP_1,
      GRAPH_1, CAT_1, CAT_2, CAT_3, NUMBERS, NAT_1, XTUPLE_0, ALG_1, WELLORD2,
      CARD_1, CAT_6, ENUMSET1, WELLORD1, CAT_7, NATTRA_1, ISOCAT_1;
 constructors NUMBERS, FUNCT_2, CLASSES2, FINSEQ_1, FUNCOP_1, RELAT_2,
      PARTFUN1, RELSET_1, BINOP_1, FUNCT_4, CAT_1, CAT_2, CAT_3, NAT_1,
      XXREAL_0, WELLORD2, XREAL_0, CARD_1, VALUED_0, ISOCAT_1, STRUCT_0, CAT_6,
      REALSET1, WELLORD1, ORDERS_2, CAT_7, NATTRA_1;
 registrations XBOOLE_0, FUNCT_1, ORDINAL1, XTUPLE_0, CARD_1, STRUCT_0,
      RELSET_1, FUNCT_2, PARTFUN1, CAT_1, NAT_1, CAT_6, CAT_7;
 requirements SUBSET, BOOLE, NUMERALS;
 theorems TARSKI, XBOOLE_0, XTUPLE_0, ZFMISC_1, RELAT_1, FUNCT_1, STRUCT_0,
      FUNCT_2, SUBSET_1, BINOP_1, CAT_6, WELLORD1, ENUMSET1, CARD_1, CARD_2,
      CAT_7, NATTRA_1, CAT_1, ISOCAT_1, CAT_3, RELSET_1, FUNCOP_1;
 schemes FUNCT_2;

begin :: Preliminaries

theorem Th1:
  for C being composable associative CategoryStr,
      f1,f2,f3 being morphism of C st f1 |> f2 & f2 |> f3 holds
   f1(*)f2(*)f3 = f1(*)(f2(*)f3)
  proof
    let C be composable associative CategoryStr;
    let f1,f2,f3 be morphism of C;
    assume
A1: f1 |> f2 & f2 |> f3;
    C is left_composable right_composable by CAT_6:def 11;
    then f1(*)f2 |> f3 & f1 |> f2(*)f3 by A1,CAT_6:def 8,def 9;
    hence f1(*)f2(*)f3 = f1(*)(f2(*)f3) by A1,CAT_6:def 10;
  end;

theorem Th2:
  for C being composable associative CategoryStr,
      f1,f2,f3,f4 being morphism of C st f1 |> f2 & f2 |> f3 & f3 |> f4 holds
  f1(*)f2(*)f3(*)f4 = (f1(*)f2)(*)(f3(*)f4) &
  f1(*)f2(*)f3(*)f4 = f1(*)(f2(*)f3)(*)f4 &
  f1(*)f2(*)f3(*)f4 = f1(*)(f2(*)f3(*)f4) &
  f1(*)f2(*)f3(*)f4 = f1(*)(f2(*)(f3(*)f4))
  proof
    let C be composable associative CategoryStr;
    let f1,f2,f3,f4 be morphism of C;
    assume
A1: f1 |> f2 & f2 |> f3 & f3 |> f4;
    C is left_composable right_composable by CAT_6:def 11;
    then
A2: f1(*)f2 |> f3 & f1 |> f2(*)f3 & f2(*)f3 |> f4 & f2 |> f3(*)f4
    by A1,CAT_6:def 8,def 9;
A3: (f1(*)f2)(*)(f3(*)f4) = f1(*)(f2(*)(f3(*)f4)) by A1,A2,Th1;
    f1(*)(f2(*)(f3(*)f4)) = f1(*)((f2(*)f3)(*)f4) by A1,Th1;
    hence thesis by A3,A1,A2,Th1;
  end;

theorem Th3:
  for C being composable CategoryStr,
      f,f1,f2 being morphism of C st f1 |> f2
  holds
  (f1(*)f2 |> f iff f2 |> f) &
  (f |> f1(*)f2 iff f |> f1)
  proof
    let C be composable CategoryStr;
    let f,f1,f2 be morphism of C;
    assume
A1: f1 |> f2;
    C is left_composable & C is right_composable by CAT_6:def 11;
    hence thesis by A1,CAT_6:def 8,def 9;
  end;

theorem Th4:
  for C being composable with_identities CategoryStr,
      f1,f2 being morphism of C st f1 |> f2
  holds
  (f1 is identity implies f1(*)f2 = f2) &
  (f2 is identity implies f1(*)f2 = f1)
  proof
    let C be composable with_identities CategoryStr;
    let f1,f2 be morphism of C;
    assume
A1: f1 |> f2;
    then
A2: C is non empty by CAT_6:1;
    thus f1 is identity implies f1(*)f2 = f2
    proof
      assume f1 is identity;
      then dom f1 = f1 by CAT_7:6;
      then cod f2 = f1 by A1,A2,CAT_7:5;
      hence f1(*)f2 = f2 by A2,CAT_7:9;
    end;
    assume f2 is identity;
    then cod f2 = f2 by CAT_7:6;
    then dom f1 = f2 by A1,A2,CAT_7:5;
    hence f1(*)f2 = f1 by A2,CAT_7:8;
  end;

theorem Th5:
  for C being non empty with_identities CategoryStr, f being morphism of C
  ex f1,f2 being morphism of C st f1 is identity & f2 is identity &
  f1 |> f & f |> f2
  proof
    let C be non empty with_identities CategoryStr;
    let f be morphism of C;
    f in Mor C;
    then
A1: f in the carrier of C by CAT_6:def 1;
    then consider f1 be morphism of C such that
A2: f1 |> f & f1 is left_identity by CAT_6:def 6,def 12;
    consider f2 be morphism of C such that
A3: f |> f2 & f2 is right_identity by A1,CAT_6:def 7,def 12;
    take f1,f2;
    f1 is right_identity by A2,CAT_6:9;
    hence f1 is identity by A2,CAT_6:def 14;
    f2 is left_identity by A3,CAT_6:9;
    hence f2 is identity by A3,CAT_6:def 14;
    thus thesis by A2,A3;
  end;

theorem Th6:
  for C being CategoryStr, a,b being Object of C
  for f being Morphism of a,b st Hom(a,b) = {f} for g being
  Morphism of a,b holds f = g
proof
  let C be CategoryStr, a,b be Object of C;
  let f be Morphism of a,b such that
A1: Hom(a,b) = {f};
  let g be Morphism of a,b;
  g in {f} by A1,CAT_7:def 3;
  hence thesis by TARSKI:def 1;
end;

theorem Th7:
  for C being CategoryStr, a,b being Object of C
  for f being Morphism of a,b st Hom(a,b) <> {} & for g being
  Morphism of a,b holds f = g holds Hom(a,b) = {f}
proof
  let C be CategoryStr, a,b be Object of C;
  let f be Morphism of a,b such that
A1: Hom(a,b) <> {} and
A2: for g being Morphism of a,b holds f = g;
  for x being object holds x in Hom(a,b) iff x = f
  proof
    let x be object;
    thus x in Hom(a,b) implies x = f
    proof
      assume x in Hom(a,b);
      then x in {f where f is morphism of C : ex f1,f2 being morphism of C st
      a = f1 & b = f2 & f |> f1 & f2 |> f} by CAT_7:def 1;
      then consider g being morphism of C such that
A3:   x = g and
A4:   ex f1,f2 being morphism of C st
      a = f1 & b = f2 & g |> f1 & f2 |> g;
      g in {f where f is morphism of C : ex f1,f2 being morphism of C st
      a = f1 & b = f2 & f |> f1 & f2 |> f} by A4;
      then g in Hom(a,b) by CAT_7:def 1;
      then g is Morphism of a,b by CAT_7:def 3;
      hence thesis by A2,A3;
    end;
    thus thesis by A1,CAT_7:def 3;
  end;
  hence thesis by TARSKI:def 1;
end;

theorem Th8:
  for x being object, C being CategoryStr st
  the carrier of C = {x} & the composition of C = {[[x,x],x]}
  holds C is non empty category
  proof
    let x be object;
    let C be CategoryStr;
    assume
A1: the carrier of C = {x};
    assume
A2: the composition of C = {[[x,x],x]};
A3: the carrier of C = the carrier of DiscreteCat({x}) by A1,CAT_6:def 16;
    for y being object holds y in the composition of DiscreteCat({x})
    iff y in {[[x,x],x]}
    proof
      let y be object;
      hereby
        assume y in the composition of DiscreteCat({x});
        then consider x1,x2 be object such that
A4:     y = [x1,x2] & x1 in [: the carrier of DiscreteCat({x}),
        the carrier of DiscreteCat({x}):] &
        x2 in the carrier of DiscreteCat({x}) by RELSET_1:2;
A5:     x1 in [:{x},{x}:] & x2 = x by A3,A4,A1,TARSKI:def 1;
        x1 in {[x,x]} by ZFMISC_1:29,A3,A4,A1;
        then x1 = [x,x] by TARSKI:def 1;
        hence y in {[[x,x],x]} by A5,A4,TARSKI:def 1;
      end;
      assume
A6:  y in {[[x,x],x]};
      x in the carrier of DiscreteCat({x}) by A3,A1,TARSKI:def 1;
      then reconsider f = x as morphism of DiscreteCat({x}) by CAT_6:def 1;
A7:  y = [[f,f],f] by A6,TARSKI:def 1;
A8:   DiscreteCat({x}) is non empty by CAT_6:def 16;
A9:  f is identity by CAT_6:def 15;
A10:   f |> f by A8,CAT_6:24,CAT_6:def 15;
      then
A11:   [f,f] in dom the composition of DiscreteCat({x}) by CAT_6:def 2;
      f = f (*) f by A9,A10,Th4;
      then (the composition of DiscreteCat({x})).(f,f) = f by A10,CAT_6:def 3;
      then (the composition of DiscreteCat({x})).[f,f] = f by BINOP_1:def 1;
      hence y in the composition of DiscreteCat({x}) by A7,A11,FUNCT_1:1;
    end;
    then the composition of DiscreteCat({x}) = {[[x,x],x]} by TARSKI:2;
    hence thesis by A3,A2,CAT_6:14,15,20;
  end;

theorem Th9:
  for C1,C2 being category, F being Functor of C1,C2 st
  F is isomorphism holds F is bijective
  proof
    let C1,C2 be category;
    let F be Functor of C1,C2;
    assume
A1: F is isomorphism;
    then
A2: F is covariant by CAT_7:def 19;
    consider G be Functor of C2,C1 such that
A3: G is covariant & G (*) F = id C1 & F (*) G = id C2 by A1,CAT_7:def 19;
A4: F*G = id C1 & G*F = id C2 by A2,A3,CAT_6:def 27;
    id C1 = id the carrier of C1 & id C2 = id the carrier of C2
    by STRUCT_0:def 4;
    then F is one-to-one & F is onto by A4,FUNCT_2:23;
    hence F is bijective;
  end;

theorem Th10:
  for C1,C2,C3 being composable with_identities CategoryStr
  st C1 ~= C2 & C2 ~= C3 holds C1 ~= C3
  proof
    let C1,C2,C3 be composable with_identities CategoryStr;
    assume
A1: C1 ~= C2;
    assume
A2: C2 ~= C3;
    per cases;
    suppose
A3:   C2 is non empty & C3 is non empty;
      consider F be Functor of C1,C2 such that
A4:   F is covariant & F is bijective by A1,CAT_7:12;
      consider G be Functor of C2,C3 such that
A5:   G is covariant & G is bijective by A2,CAT_7:12;
      F * G is onto by A4,A5,A3,FUNCT_2:27;
      then G (*) F is bijective by A4,A5,CAT_6:def 27;
      hence thesis by A4,A5,CAT_6:35,CAT_7:12;
    end;
    suppose C2 is empty or C3 is empty;
      then
A6:   C2 is empty & C3 is empty by A2,CAT_7:15;
      then C1 is empty by A1,CAT_7:15;
      hence thesis by A6,CAT_7:13;
    end;
  end;

theorem
  for C1,C2 being category st C1 ~= C2 holds C1 is empty iff C2 is empty
  proof
    let C1,C2 be category;
    assume C1 ~= C2;
    then consider F be Functor of C1,C2, G be Functor of C2,C1 such that
A1: F is covariant & G is covariant & G (*) F = id C1 & F (*) G = id C2
    by CAT_6:def 28;
    thus thesis by A1,CAT_6:31;
  end;

registration
  let C1 be empty with_identities CategoryStr;
  let C2 be with_identities CategoryStr;
  cluster -> covariant for Functor of C1,C2;
  correctness
  proof
    let F be Functor of C1,C2;
A1: for f being morphism of C1 st f is identity holds F.f is identity
    proof
      let f be morphism of C1;
      assume f is identity;
A2:   F.f = the Object of C2 by CAT_6:def 21;
      per cases;
      suppose C2 is empty;
        hence F.f is identity by CAT_6:10;
      end;
      suppose C2 is non empty;
        hence F.f is identity by A2,CAT_6:22;
      end;
    end;
    for f1,f2 being morphism of C1 st f1 |> f2 holds F.f1 |> F.f2 &
    F.(f1(*)f2) = (F.f1) (*) (F.f2) by CAT_6:1;
    then F is multiplicative by CAT_6:def 23;
    hence thesis by A1,CAT_6:def 25,def 22;
  end;
end;

theorem
  for C1,C2 being with_identities CategoryStr,
      f being morphism of C1, F being Functor of C1,C2
  st F is covariant & f is identity holds F.f is identity
  by CAT_6:def 22,def 25;

theorem Th13:
  for C1,C2 being with_identities CategoryStr,
      f1,f2 being morphism of C1, F being Functor of C1,C2
  st F is covariant & f1 |> f2
  holds F.f1 |> F.f2 & F.(f1(*)f2) = (F.f1) (*) (F.f2)
  proof
    let C1,C2 be with_identities CategoryStr;
    let f1,f2 be morphism of C1;
    let F be Functor of C1,C2;
    assume F is covariant;
    then
A1: F is multiplicative by CAT_6:def 25;
    assume f1 |> f2;
    hence thesis by A1,CAT_6:def 23;
  end;

theorem Th14:
  for C being Category, f being (Morphism of C), g being morphism of alter C
  st f = g holds dom g = id dom f & cod g = id cod f
  proof
    let C be Category;
    let f be Morphism of C;
    let g be morphism of alter C;
    assume
A1: f = g;
A2: alter C = CategoryStr(# the carrier' of C, the Comp of C #)
    by CAT_6:def 34;
    consider d1 be morphism of alter C such that
A3: dom g = d1 & g |> d1 & d1 is identity by CAT_6:def 18;
    reconsider d11 = d1 as Morphism of C by A2,CAT_6:def 1;
    [d1,d1] in dom the composition of alter C by A3,CAT_6:24,CAT_6:def 2;
    then
A4: dom d11 = cod d11 by A2,CAT_1:def 6;
    reconsider d2 = id dom f as morphism of alter C by A2,CAT_6:def 1;
A5: d1 is left_identity by A3,CAT_6:def 14;
A6: for f1 being morphism of alter C st f1 |> d2 holds f1 (*) d2 = f1
    proof
      let f1 be morphism of alter C;
      reconsider f11 = f1 as Morphism of C by A2,CAT_6:def 1;
      assume f1 |> d2;
      then
A7:   [f11,id dom f] in dom the Comp of C by A2,CAT_6:def 2;
      then
A8:  dom f11 = cod id dom f by CAT_1:def 6;
      thus f1 (*) d2 = f11 (*) id dom f by A7,CAT_6:40
      .= f1 by A8,CAT_1:22;
    end;
    [f,d11] in dom the Comp of C by A1,A2,A3,CAT_6:def 2;
    then dom d11 = cod id dom f by A4,CAT_1:def 6;
    then
A9: [d1,d2] in dom the composition of alter C by A2,CAT_1:def 6;
A10: d1 = d1 (*) d2 by A9,A6,CAT_6:def 2
    .= d2 by A9,A5,CAT_6:def 2,def 4;
    thus dom g = id dom f by A3,A10;
    consider c1 be morphism of alter C such that
A11: cod g = c1 & c1 |> g & c1 is identity by CAT_6:def 19;
    reconsider c11 = c1 as Morphism of C by A2,CAT_6:def 1;
    reconsider c2 = id cod f as morphism of alter C by A2,CAT_6:def 1;
A12: c1 is left_identity by A11,CAT_6:def 14;
A13: for f1 being morphism of alter C st f1 |> c2 holds f1 (*) c2 = f1
    proof
      let f1 be morphism of alter C;
      reconsider f11 = f1 as Morphism of C by A2,CAT_6:def 1;
      assume f1 |> c2;
      then
A14:   [f11,id cod f] in dom the Comp of C by A2,CAT_6:def 2;
      then
A15:  dom f11 = cod id cod f by CAT_1:def 6;
      thus f1 (*) c2 = f11 (*) id cod f by A14,CAT_6:40
      .= f1 by A15,CAT_1:22;
    end;
    [c11,f] in dom the Comp of C by A1,A2,A11,CAT_6:def 2;
    then dom c11 = cod id cod f by CAT_1:def 6;
    then
A16: [c11,id cod f] in dom the Comp of C by CAT_1:def 6;
A17: c1 = c1 (*) c2 by A16,A2,A13,CAT_6:def 2
    .= c2 by A16,A2,A12,CAT_6:def 2,def 4;
    thus cod g = id cod f by A11,A17;
  end;

theorem Th15:
  ex f being morphism of OrdC 1 st f is identity &
  Ob OrdC 1 = {f} & Mor OrdC 1 = {f}
  proof
    consider C be strict preorder category such that
A1: Ob C = 1 and
    for o1,o2 being Object of C st o1 in o2 holds Hom(o1,o2) = {[o1,o2]} and
A2: RelOb C = RelIncl 1 and
A3: Mor C = 1 \/ {[o1,o2] where o1,o2 is Element of 1: o1 in o2}
    by CAT_7:37;
A4: C is 1-ordered by A2,WELLORD1:38,CAT_7:def 14;
    then
A5: C ~= OrdC 1 by CAT_7:38;
    consider F be Functor of C, OrdC 1,
             G be Functor of OrdC 1,C such that
A6: F is covariant & G is covariant and
A7: G (*) F = id C & F (*) G = id OrdC 1 by A4,CAT_7:38,CAT_6:def 28;
A8: 0 in Ob C by A1,CARD_1:49,TARSKI:def 1;
    then reconsider g = 0 as morphism of C;
A9: C is non empty by A1;
    then
A10: g is identity by A8,CAT_6:22;
    set f = F.g;
    take f;
    thus
A11: f is identity by A6,A10,CAT_6:def 22,def 25;
    card Ob OrdC 1 = card 1 by A1,A5,CAT_7:14;
    then consider x be object such that
A12: Ob OrdC 1 = {x} by CARD_2:42;
    f is Object of OrdC 1 by A11,CAT_6:22;
    hence
A13: Ob OrdC 1 = {f} by A12,TARSKI:def 1;
    for x being object holds x in Mor OrdC 1 iff x in {f}
    proof
      let x be object;
      hereby
        assume
A14:    x in Mor OrdC 1;
        then
A15:     x in the carrier of OrdC 1 by CAT_6:def 1;
        reconsider f1 = x as morphism of OrdC 1 by A14;
        per cases;
        suppose f1 is identity;
          then f1 is Object of OrdC 1 by CAT_6:22;
          hence x in {f} by A13;
        end;
        suppose
A16:       f1 is not identity;
A17:       (id (the carrier of OrdC 1)).x = x by A15,FUNCT_1:18;
A18:       F.(G.f1) = (F(*)G).f1 by A6,CAT_6:34
          .= (id the carrier of OrdC 1).f1 by A7,STRUCT_0:def 4
          .= f1 by A17,CAT_6:def 21;
           G.f1 is not identity by A18,A16,CAT_6:def 22,A6,CAT_6:def 25;
          then not G.f1 in 1 by A1,A9,CAT_6:22;
          then G.f1 in {[o1,o2] where o1,o2 is Element of 1: o1 in o2}
          by A3,XBOOLE_0:def 3;
          then consider o1,o2 be Element of 1 such that
A19:      G.f1 = [o1,o2] & o1 in o2;
A20:      o1 = 0 by CARD_1:49,TARSKI:def 1;
          o2 = 0 by CARD_1:49,TARSKI:def 1;
          hence x in {f} by A19,A20;
        end;
      end;
      assume x in {f};
      hence x in Mor OrdC 1 by A13;
    end;
    hence Mor OrdC 1 = {f} by TARSKI:2;
  end;

theorem Th16:
  for C being non empty category, f1,f2 being morphism of C st
  MORPHISM(f1) = MORPHISM(f2) holds f1 = f2
  proof
    let C be non empty category;
    let f1,f2 be morphism of C;
    assume
A1: MORPHISM(f1) = MORPHISM(f2);
    consider f be morphism of OrdC 2 such that
A2: f is not identity &
    Ob OrdC 2 = {dom f, cod f} & Mor OrdC 2 = {dom f, cod f, f} &
    dom f, cod f, f are_mutually_distinct by CAT_7:39;
    thus f1 = (MORPHISM f1).f by A2,CAT_7:def 16
    .= f2 by A1,A2,CAT_7:def 16;
  end;

theorem Th17:
  for C being non empty category, F1,F2 being covariant Functor of OrdC 2, C,
  f being morphism of OrdC 2 st f is non identity & F1.f = F2.f
  holds F1 = F2
  proof
    let C be non empty category;
    let F1,F2 be covariant Functor of OrdC 2, C;
    let f be morphism of OrdC 2;
    assume
A1: f is non identity;
    assume
A2: F1.f = F2.f;
A3: dom F1 = the carrier of OrdC 2 by FUNCT_2:def 1
    .= dom F2 by FUNCT_2:def 1;
    consider f1 be morphism of OrdC(2) such that
A4: f1 is not identity &
    Ob OrdC 2 = {dom f1, cod f1} & Mor OrdC 2 = {dom f1, cod f1, f1} &
    dom f1, cod f1, f1 are_mutually_distinct by CAT_7:39;
A5: f = dom f1 or f = cod f1 or f = f1 by A4,ENUMSET1:def 1;
    for x being object st x in dom F1 holds F1.x = F2.x
    proof
      let x be object;
      assume x in dom F1;
      then x in the carrier of OrdC 2;
      then
A6:   x in {dom f1, cod f1, f1} by A4,CAT_6:def 1;
      per cases by A6,ENUMSET1:def 1;
      suppose
A7:     x = dom f1;
        thus F1.x = dom(F2.f1) by A2,A5,A1,CAT_6:22,A7,CAT_6:32
        .= F2.x by A7,CAT_6:32;
      end;
      suppose
A8:     x = cod f1;
        thus F1.x = cod(F2.f1) by A2,A5,A1,CAT_6:22,A8,CAT_6:32
        .= F2.x by A8,CAT_6:32;
      end;
      suppose
A9:     x = f1;
        thus F1.x = F2.f1 by A2,A5,A1,CAT_6:22,A9,CAT_6:def 21
        .= F2.x by A9,CAT_6:def 21;
      end;
    end;
    hence F1 = F2 by A3,FUNCT_1:2;
  end;

theorem Th18:
  ex f1,f2 being morphism of (OrdC 3) st
  f1 is not identity & f2 is not identity & cod f1 = dom f2 &
  Ob (OrdC 3) = {dom f1, cod f1, cod f2} &
  Mor (OrdC 3) = {dom f1, cod f1, cod f2, f1, f2, f2(*)f1} &
  dom f1, cod f1, cod f2, f1, f2, f2(*)f1 are_mutually_distinct
  proof
    consider C be strict preorder category such that
A1: Ob C = 3 and
A2: for o1,o2 being Object of C st o1 in o2 holds Hom(o1,o2) = {[o1,o2]} and
A3: RelOb C = RelIncl 3 and
A4: Mor C = 3 \/ {[o1,o2] where o1,o2 is Element of 3: o1 in o2} by CAT_7:37;
A5: C is 3-ordered by A3,WELLORD1:38,CAT_7:def 14;
    consider F be Functor of C, OrdC 3,
                  G be Functor of OrdC 3,C such that
A6: F is covariant & G is covariant and
A7: G (*) F = id C & F (*) G = id OrdC 3 by A5,CAT_7:38,CAT_6:def 28;
A8:  0 in 1 & 0 is Element of 3 & 1 is Element of 3
    by CARD_1:49,51,TARSKI:def 1,ENUMSET1:def 1;
    then
A9: [0,1] in {[o1,o2] where o1,o2 is Element of 3: o1 in o2};
    then
A10: [0,1] in Mor C by A4,XBOOLE_0:def 3;
    reconsider g1 = [0,1] as morphism of C by A9,A4,XBOOLE_0:def 3;
A11: C is non empty by A1;
A12: g1 is not identity
    proof
      assume g1 is identity;
      then g1 is Object of C by A11,CAT_6:22;
      hence contradiction by A1;
    end;
    set f1 = F.g1;
A13: 1 in 2 & 1 is Element of 3 & 2 is Element of 3
    by CARD_1:50,51,TARSKI:def 2,ENUMSET1:def 1;
    then
A14: [1,2] in {[o1,o2] where o1,o2 is Element of 3: o1 in o2};
    then
A15: [1,2] in Mor C by A4,XBOOLE_0:def 3;
    reconsider g2 = [1,2] as morphism of C by A14,A4,XBOOLE_0:def 3;
A16: g2 is not identity
    proof
      assume g2 is identity;
      then g2 is Object of C by A11,CAT_6:22;
      hence contradiction by A1;
    end;
    set f2 = F.g2;
A17: 0 in 2 & 0 is Element of 3 & 2 is Element of 3
    by CARD_1:50,51,TARSKI:def 2,ENUMSET1:def 1;
    then
A18: [0,2] in {[o1,o2] where o1,o2 is Element of 3: o1 in o2};
    reconsider g3 = [0,2] as morphism of C by A18,A4,XBOOLE_0:def 3;
    set f3 = F.g3;
    take f1,f2;
    thus
A19: f1 is not identity
    proof
      assume
A20:   f1 is identity;
      [0,1] in the carrier of C by A10,CAT_6:def 1;
      then (id the carrier of C).[0,1] = [0,1] by FUNCT_1:18;
      then
A21:   (id C).[0,1] = g1 by STRUCT_0:def 4;
      G.(F.g1) is identity by A20,CAT_6:def 22,A6,CAT_6:def 25;
      then (G(*)F).g1 is identity by A6,A11,CAT_6:34;
      hence contradiction by A12,A7,A11,A21,CAT_6:def 21;
    end;
    thus
A22: f2 is not identity
    proof
      assume
A23:   f2 is identity;
      [1,2] in the carrier of C by A15,CAT_6:def 1;
      then (id the carrier of C).[1,2] = [1,2] by FUNCT_1:18;
      then
A24:   (id C).[1,2] = g2 by STRUCT_0:def 4;
      G.(F.g2) is identity by A23,CAT_6:def 22,A6,CAT_6:def 25;
      then (G(*)F).g2 is identity by A6,A11,CAT_6:34;
      hence contradiction by A16,A7,A11,A24,CAT_6:def 21;
    end;
    reconsider o0 = 0 as Object of C by A1,CARD_1:51,ENUMSET1:def 1;
    reconsider o1 = 1 as Object of C by A1,CARD_1:51,ENUMSET1:def 1;
    reconsider o2 = 2 as Object of C by A1,CARD_1:51,ENUMSET1:def 1;
A25: C is non empty by A1;
    Hom(o0,o1) = {[0,1]} by A8,A2;
    then
A26: g1 in Hom(o0,o1) by TARSKI:def 1;
    then
A27: dom g1 = o0 & cod g1 = o1 by A25,CAT_7:20;
A28: F.(dom g1) = F.o0 & F.(cod g1) = F.o1 by A26,A25,CAT_7:20;
    then
A29: dom f1 = F.o0 & cod f1 = F.o1 by A6,A25,CAT_6:32;
    Hom(o1,o2) = {[1,2]} by A13,A2;
    then g2 in Hom(o1,o2) by TARSKI:def 1;
    then
A30: dom g2 = o1 & cod g2 = o2 by A25,CAT_7:20;
    then
A31: dom f2 = F.o1 & cod f2 = F.o2 by A6,A25,CAT_6:32;
    thus
A32: cod f1 = dom f2 by A29,A30,A6,A25,CAT_6:32;
A33: g2 |> g1 by A11,A27,A30,CAT_7:5;
    then dom(g2(*)g1) = dom g1 & cod(g2(*)g1) = cod g2 by CAT_7:4;
    then
A34: g2(*)g1 in Hom(o0,o2) by A30,A27,A11,CAT_7:20;
A35: F is multiplicative by A6,CAT_6:def 25;
A36: Hom(o0,o2) = {[0,2]} by A17,A2;
    then
A37: g3 = g2(*)g1 by A34,TARSKI:def 1;
A38: f3 = F.(g2(*)g1) by A36,A34,TARSKI:def 1
    .= f2(*)f1 by A35,A33,CAT_6:def 23;
    for x being object holds x in Ob OrdC 3 iff x in {dom f1, cod f1, cod f2}
    proof
      let x be object;
      hereby
        assume
A39:     x in Ob OrdC 3;
        then reconsider o = x as Object of OrdC 3;
        x in Mor OrdC 3 by A39;
        then
A40:     o in the carrier of OrdC 3 by CAT_6:def 1;
        reconsider f = o as morphism of OrdC 3 by A39;
A41:     G is identity-preserving by A6,CAT_6:def 25;
A42:     F.(G.f) = (F(*)G).f by A6,CAT_6:34
        .= (id the carrier of OrdC 3).f by A7,STRUCT_0:def 4
        .= (id the carrier of OrdC 3).o by CAT_6:def 21
        .= f by A40,FUNCT_1:18;
        G.f is identity by A41,CAT_6:22,def 22;
        then G.f in {f1 where f1 is morphism of C:
         f1 is identity & f1 in Mor C} by A11;
        then G.f in {0,1,2} by A1,CARD_1:51,CAT_6:def 17;
        then G.f = o0 or G.f = o1 or G.f = o2 by ENUMSET1:def 1;
        then f = F.o0 or f = F.o1 or f = F.o2 by A42,A25,CAT_6:def 21;
        hence x in {dom f1, cod f1, cod f2} by A29,A31,ENUMSET1:def 1;
      end;
      assume x in {dom f1, cod f1, cod f2};
      then x = dom f1 or x = cod f1 or x = cod f2 by ENUMSET1:def 1;
      hence x in Ob OrdC 3;
    end;
    hence
A43: Ob OrdC 3 = {dom f1, cod f1, cod f2} by TARSKI:2;
    for x being object holds x in Mor OrdC 3
    iff x in {dom f1, cod f1, cod f2, f1, f2, f2(*)f1}
    proof
      let x be object;
      hereby
        assume
A44:     x in Mor OrdC 3;
        then
A45:     x in the carrier of OrdC 3 by CAT_6:def 1;
        reconsider f = x as morphism of OrdC 3 by A44;
        per cases;
        suppose f is identity;
          then f is Object of OrdC 3 by CAT_6:22;
          then x = dom f1 or x = cod f1 or x = cod f2 by A43,ENUMSET1:def 1;
          hence x in {dom f1, cod f1, cod f2, f1, f2, f2(*)f1}
          by ENUMSET1:def 4;
        end;
        suppose
A46:       f is not identity;
A47:       (id (the carrier of OrdC 3)).x = x by A45,FUNCT_1:18;
A48:       F.(G.f) = (F(*)G).f by A6,CAT_6:34
          .= (id the carrier of OrdC 3).f by A7,STRUCT_0:def 4
          .= f by A47,CAT_6:def 21;
           G.f is not identity by A48,A46,CAT_6:def 22,A6,CAT_6:def 25;
          then not G.f in 3 by A1,A11,CAT_6:22;
          then G.f in {[o1,o2] where o1,o2 is Element of 3: o1 in o2}
          by A4,XBOOLE_0:def 3;
          then consider o1,o2 be Element of 3 such that
A49:      G.f = [o1,o2] & o1 in o2;
A50:      o1 = 0 or o1 = 1 or o1 = 2 by CARD_1:51,ENUMSET1:def 1;
          o2 = 0 or o2 = 1 or o2 = 2 by CARD_1:51,ENUMSET1:def 1;
          hence x in {dom f1, cod f1, cod f2, f1, f2, f2(*)f1}
          by A48,A38,ENUMSET1:def 4,A49,A50,CARD_1:49,TARSKI:def 1;
        end;
      end;
      assume x in {dom f1, cod f1, cod f2, f1, f2, f2(*)f1};
      then
A51:  x in {dom f1, cod f1, cod f2} \/ {f1, f2, f2(*)f1} by ENUMSET1:13;
      per cases by A51,A43,XBOOLE_0:def 3;
      suppose x in Ob OrdC 3;
        hence x in Mor OrdC 3;
      end;
      suppose x in {f1, f2, f2(*)f1};
        then x = f1 or x = f2 or x = f2(*)f1  by ENUMSET1:def 1;
        hence x in Mor OrdC 3;
      end;
    end;
    hence Mor OrdC 3 = {dom f1, cod f1, cod f2, f1, f2, f2(*)f1} by TARSKI:2;
    0 in 2 by CARD_1:50,TARSKI:def 2;
    then [0,2] in {[o1,o2] where o1,o2 is Element of 3: o1 in o2} by A8,A13;
    then
A52: [0,2] in Mor C by A4,XBOOLE_0:def 3;
A53: f2 |> f1 by A33,A35,CAT_6:def 23;
A54: F.(g2(*)g1) = f2(*)f1 by A35,A33,CAT_6:def 23;
A55: g2(*)g1 is not identity
    proof
      assume g2(*)g1 is identity;
      then g2(*)g1 is Object of C by A11,CAT_6:22;
      hence contradiction by A1,A36,A34,TARSKI:def 1;
    end;
A56: f2(*)f1 is not identity
    proof
      assume
A57:   f2(*)f1 is identity;
      [0,2] in the carrier of C by A52,CAT_6:def 1;
      then (id the carrier of C).[0,2] = [0,2] by FUNCT_1:18;
      then
A58:   (id C).[0,2] = g2(*)g1 by A37,STRUCT_0:def 4;
      G.(F.(g2(*)g1)) is identity by A54,A57,CAT_6:def 22,A6,CAT_6:def 25;
      then (G(*)F).(g2(*)g1) is identity by A6,A11,CAT_6:34;
      hence contradiction by A55,A37,A7,A11,A58,CAT_6:def 21;
    end;
    dom f1 in Ob OrdC 3;
    then
    reconsider o11 = dom f1 as morphism of OrdC 3;
    cod f1 in Ob OrdC 3;
    then
    reconsider o22 = cod f1 as morphism of OrdC 3;
    cod f2 in Ob OrdC 3;
    then
    reconsider o33 = cod f2 as morphism of OrdC 3;
A59: o11 is identity & o22 is identity & o33 is identity by CAT_6:22;
A60: F is bijective by Th9,A6,A7,CAT_7:def 19;
    dom F = the carrier of C by FUNCT_2:def 1;
    then
A61: dom F = Mor C by CAT_6:def 1;
A62: o0 in Ob C & o1 in Ob C & o2 in Ob C by A1;
A63: dom f1 <> cod f1 by A29,A60,A62,A61,FUNCT_1:def 4;
A64: dom f1 <> cod f2 by A28,A31,A60,A62,A61,FUNCT_1:def 4,A6,A25,CAT_6:32;
A65: cod f1 <> cod f2 by A28,A31,A60,A62,A61,FUNCT_1:def 4,A6,A25,CAT_6:32;
A66: f1 <> f2(*)f1 by A65,A53,CAT_7:4;
    f2 <> f2(*)f1 by A29,A60,A62,A61,FUNCT_1:def 4,A32,A53,CAT_7:4;
    hence thesis by A19,A22,A63,A56,A59,A66,A64,A65,ZFMISC_1:def 8;
  end;

definition
  let C be non empty category;
  let f1,f2 be morphism of C such that
A1: f1 |> f2;
  func COMPOSITION(f1,f2) -> covariant Functor of (OrdC 3), C means :Def1:
  for g1,g2 being morphism of OrdC 3 st g1 |> g2 & g1 is not identity &
  g2 is not identity holds it.g1 = f1 & it.g2 = f2;
  correctness
  proof
    consider h2,h1 be morphism of OrdC 3 such that
A2: h2 is not identity & h1 is not identity & cod h2 = dom h1 and
A3: Ob OrdC 3 = {dom h2, cod h2, cod h1} and
A4: Mor OrdC 3 = {dom h2, cod h2, cod h1, h2, h1, h1(*)h2} and
A5: dom h2, cod h2, cod h1, h2, h1, h1(*)h2 are_mutually_distinct by Th18;
A6: h1 |> h2 by A2,CAT_7:5;
A7: ex F being covariant Functor of OrdC 3,C st
    for g1,g2 being morphism of OrdC 3 st g1 |> g2 & not g1 is identity &
    not g2 is identity holds F.g1 = f1 & F.g2 = f2
    proof
      defpred P[object,object] means
      ($1 = dom h2 implies $2 = dom f2) &
      ($1 = cod h2 implies $2 = cod f2) &
      ($1 = cod h1 implies $2 = cod f1) &
      ($1 = h2 implies $2 = f2) &
      ($1 = h1 implies $2 = f1) &
      ($1 = h1(*)h2 implies $2 = f1(*)f2);
A8:  for x being object st x in the carrier of OrdC 3
      ex y being object st y in the carrier of C & P[x,y]
      proof
        let x be object;
        assume x in the carrier of OrdC 3;
        then
A9:     x in {dom h2, cod h2, cod h1, h2, h1, h1(*)h2} by CAT_6:def 1,A4;
        per cases by A9,ENUMSET1:def 4;
        suppose
A10:       x = dom h2;
          reconsider y = dom f2 as object;
          take y;
          y in Ob C;
          then y in Mor C;
          hence y in the carrier of C by CAT_6:def 1;
          thus P[x,y] by A10,A5,ZFMISC_1:def 8;
        end;
        suppose
A11:       x = cod h2;
          reconsider y = cod f2 as object;
          take y;
          y in Ob C;
          then y in Mor C;
          hence y in the carrier of C by CAT_6:def 1;
          thus P[x,y] by A11,A5,ZFMISC_1:def 8;
        end;
        suppose
A12:       x = cod h1;
          reconsider y = cod f1 as object;
          take y;
          y in Ob C;
          then y in Mor C;
          hence y in the carrier of C by CAT_6:def 1;
          thus P[x,y] by A12,A5,ZFMISC_1:def 8;
        end;
      suppose
A13:     x = h2;
        reconsider y = f2 as object;
        take y;
        y in Mor C;
        hence y in the carrier of C by CAT_6:def 1;
        thus P[x,y] by A13,A5,ZFMISC_1:def 8;
      end;
      suppose
A14:     x = h1;
        reconsider y = f1 as object;
        take y;
        y in Mor C;
        hence y in the carrier of C by CAT_6:def 1;
        thus P[x,y] by A14,A5,ZFMISC_1:def 8;
      end;
      suppose
A15:     x = h1(*)h2;
        reconsider y = f1(*)f2 as object;
        take y;
        y in Mor C;
        hence y in the carrier of C by CAT_6:def 1;
        thus P[x,y] by A15,A5,ZFMISC_1:def 8;
      end;
    end;
    consider F be Function of the carrier of OrdC 3, the carrier of C
    such that
A16: for x being object st x in the carrier of OrdC 3
    holds P[x,F.x] from FUNCT_2:sch 1(A8);
    reconsider F as Functor of OrdC 3, C;
    for g being morphism of OrdC 3 st g is identity
    holds F.g is identity
    proof
      let g be morphism of OrdC 3;
      assume
A17:  g is identity;
      reconsider x = g as object;
A18:  F.x = F.g by CAT_6:def 21;
      g in Mor OrdC 3;
      then x in the carrier of OrdC 3 by CAT_6:def 1;
      then
A19: P[x,F.x] by A16;
      g is Object of OrdC 3 by A17,CAT_6:22;
      hence F.g is identity by A19,A18,CAT_6:22,A3,ENUMSET1:def 1;
    end;
    then
A20: F is identity-preserving by CAT_6:def 22;
A21: for g being morphism of OrdC 3 st g = h2 holds F.g = f2
     proof
       let g be morphism of OrdC 3;
       assume
A22:   g = h2;
       reconsider x = g as object;
A23:   F.x = F.g by CAT_6:def 21;
       g in Mor OrdC 3;
       then x in the carrier of OrdC 3 by CAT_6:def 1;
       hence thesis by A16,A22,A23;
     end;
A24: for g being morphism of OrdC 3 st g = h1 holds F.g = f1
     proof
       let g be morphism of OrdC 3;
       assume
A25:   g = h1;
       reconsider x = g as object;
A26:   F.x = F.g by CAT_6:def 21;
       g in Mor OrdC 3;
       then x in the carrier of OrdC 3 by CAT_6:def 1;
       hence thesis by A16,A25,A26;
     end;
    for g1,g2 being morphism of OrdC 3 st g1 |> g2 holds
    F.g1 |> F.g2 & F.(g1 (*) g2) = (F.g1) (*) (F.g2)
    proof
      let g1,g2 be morphism of OrdC 3;
      assume
A27:   g1 |> g2;
A28:   for g being morphism of OrdC 3 st g = dom h2 holds F.g = dom f2
      proof
        let g be morphism of OrdC 3;
        assume
A29:     g = dom h2;
        reconsider x = g as object;
A30:     F.x = F.g by CAT_6:def 21;
        g in Mor OrdC 3;
        then x in the carrier of OrdC 3 by CAT_6:def 1;
        hence thesis by A16,A29,A30;
      end;
A31:   for g being morphism of OrdC 3 st g = cod h2 holds F.g = cod f2
      proof
        let g be morphism of OrdC 3;
        assume
A32:     g = cod h2;
        reconsider x = g as object;
A33:     F.x = F.g by CAT_6:def 21;
        g in Mor OrdC 3;
        then x in the carrier of OrdC 3 by CAT_6:def 1;
        hence thesis by A16,A32,A33;
      end;
A34:  for g being morphism of OrdC 3 st g = cod h1 holds F.g = cod f1
      proof
        let g be morphism of OrdC 3;
        assume
A35:     g = cod h1;
        reconsider x = g as object;
A36:     F.x = F.g by CAT_6:def 21;
        g in Mor OrdC 3;
        then x in the carrier of OrdC 3 by CAT_6:def 1;
        hence thesis by A16,A35,A36;
      end;
A37:  for g being morphism of OrdC 3 st g = h1(*)h2 holds F.g = f1(*)f2
      proof
        let g be morphism of OrdC 3;
        assume
A38:     g = h1(*)h2;
        reconsider x = g as object;
A39:     F.x = F.g by CAT_6:def 21;
        g in Mor OrdC 3;
        then x in the carrier of OrdC 3 by CAT_6:def 1;
        hence thesis by A16,A38,A39;
      end;
      per cases by A4,ENUMSET1:def 4;
      suppose
A40:    g1 = dom h2 & g2 = dom h2;
        then
A41:    F.g1 = dom f2 & F.g2 = dom f2 by A28;
        hence
A42:    F.g1 |> F.g2 by CAT_6:23;
        thus F.(g1 (*) g2) = F.g1 by A40,A27,CAT_6:23
        .= (F.g1) (*) (F.g2) by A42,A41,CAT_6:23;
      end;
      suppose
A43:    g1 = dom h2 & g2 = cod h2;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A43,A5,ZFMISC_1:def 8;
      end;
      suppose
A44:   g1 = dom h2 & g2 = cod h1;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A44,A5,ZFMISC_1:def 8;
      end;
      suppose
A45:    g1 = dom h2 & g2 = h2;
        then cod h2 = g1 by A27,CAT_6:22,27;
        hence thesis by A45,A5,ZFMISC_1:def 8;
      end;
      suppose
A46:    g1 = dom h2 & g2 = h1;
        then cod h1 = g1 by A27,CAT_6:22,27;
        hence thesis by A46,A5,ZFMISC_1:def 8;
      end;
      suppose
A47:    g1 = dom h2 & g2 = h1(*)h2;
        then cod(h1(*)h2) = g1 by A27,CAT_6:22,27;
        then cod h1 = g1 by A6,CAT_7:4;
        hence thesis by A47,A5,ZFMISC_1:def 8;
      end;
      suppose
A48:    g1 = cod h2 & g2 = dom h2;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A48,A5,ZFMISC_1:def 8;
      end;
      suppose
A49:    g1 = cod h2 & g2 = cod h2;
        then
A50:    F.g1 = cod f2 & F.g2 = cod f2 by A31;
        hence
A51:    F.g1 |> F.g2 by CAT_6:23;
        thus F.(g1 (*) g2) = F.g1 by A49,A27,CAT_6:23
        .= (F.g1) (*) (F.g2) by A51,A50,CAT_6:23;
      end;
      suppose
A52:    g1 = cod h2 & g2 = cod h1;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A52,A5,ZFMISC_1:def 8;
      end;
      suppose
A53:    g1 = cod h2 & g2 = h2;
        then
A54:    F.g1 = cod f2 & F.g2 = f2 by A31,A21;
        hence F.g1 |> F.g2 by CAT_7:9;
        thus F.(g1 (*) g2) = F.g2 by A53,CAT_7:9
        .= (F.g1) (*) (F.g2) by A54,CAT_7:9;
      end;
      suppose
A55:    g1 = cod h2 & g2 = h1;
        then cod h1 = g1 by A27,CAT_6:22,27;
        hence thesis by A55,A5,ZFMISC_1:def 8;
      end;
      suppose
A56:    g1 = cod h2 & g2 = h1(*)h2;
        then cod(h1(*)h2) = g1 by A27,CAT_6:22,27;
        then cod h1 = g1 by A6,CAT_7:4;
        hence thesis by A56,A5,ZFMISC_1:def 8;
      end;
      suppose
A57:    g1 = cod h1 & g2 = dom h2;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A57,A5,ZFMISC_1:def 8;
      end;
      suppose
A58:    g1 = cod h1 & g2 = cod h2;
        then g1 is identity & g2 is identity by CAT_6:22;
        then g1 = g2 by A27,CAT_7:7;
        hence thesis by A58,A5,ZFMISC_1:def 8;
      end;
      suppose
A59:    g1 = cod h1 & g2 = cod h1;
        then
A60:    F.g1 = cod f1 & F.g2 = cod f1 by A34;
        hence
A61:    F.g1 |> F.g2 by CAT_6:23;
        thus F.(g1 (*) g2) = F.g1 by A59,A27,CAT_6:23
        .= (F.g1) (*) (F.g2) by A61,A60,CAT_6:23;
      end;
      suppose
A62:    g1 = cod h1 & g2 = h2;
        then cod h2 = g1  by A27,CAT_6:22,27;
        hence thesis by A62,A5,ZFMISC_1:def 8;
      end;
      suppose
A63:    g1 = cod h1 & g2 = h1;
        then
A64:    F.g1 = cod f1 & F.g2 = f1 by A34,A24;
        hence F.g1 |> F.g2 by CAT_7:9;
        thus F.(g1 (*) g2) = F.g2 by A63,CAT_7:9
        .= (F.g1) (*) (F.g2) by A64,CAT_7:9;
      end;
      suppose
A65:    g1 = cod h1 & g2 = h1(*)h2;
        then
A66:    F.g1 = cod f1 & F.g2 = f1(*)f2 by A34,A37;
        then F.g1 = cod(f1(*)f2) by A1,CAT_7:4;
        hence F.g1 |> F.g2 by A66,CAT_7:9;
A67:   cod(f1(*)f2) = cod f1 by A1,CAT_7:4;
        cod(h1(*)h2) = cod h1 by A6,CAT_7:4;
        hence F.(g1 (*) g2) = F.g2 by A65,CAT_7:9
        .= (F.g1) (*) (F.g2) by A66,CAT_7:9,A67;
      end;
      suppose
A68:    g1 = h2 & g2 = dom h2;
        then
A69:    F.g1 = f2 & F.g2 = dom f2 by A28,A21;
        hence F.g1 |> F.g2 by CAT_7:8;
        thus F.(g1 (*) g2) = F.g1 by A68,CAT_7:8
        .= (F.g1) (*) (F.g2) by A69,CAT_7:8;
      end;
      suppose
A70:    g1 = h2 & g2 = cod h2;
        then dom g1 = g2 by A27,CAT_6:22,26;
        hence thesis by A70,A5,ZFMISC_1:def 8;
      end;
      suppose
A71:    g1 = h2 & g2 = cod h1;
        then dom g1 = g2 by A27,CAT_6:22,26;
        hence thesis by A71,A5,ZFMISC_1:def 8;
      end;
      suppose
A72:   g1 = h2 & g2 = h2;
        then dom g2 = cod g1 by A27,CAT_7:5;
        hence thesis by A72,A5,ZFMISC_1:def 8;
      end;
      suppose
A73:   g1 = h2 & g2 = h1;
        dom g1 = cod g2 by A27,CAT_7:5;
        hence thesis by A73,A5,ZFMISC_1:def 8;
      end;
      suppose
A74:   g1 = h2 & g2 = h1(*)h2;
        then dom g1 = cod(h1(*)h2) by A27,CAT_7:5;
        then dom g1 = cod h1 by A6,CAT_7:4;
        hence thesis by A74,A5,ZFMISC_1:def 8;
      end;
      suppose
A75:    g1 = h1 & g2 = dom h2;
        cod h2 = dom h2 by A75,A2,A27,CAT_6:22,26;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A76:    g1 = h1 & g2 = cod h2;
        then
A77:    F.g1 = f1 & F.g2 = cod f2 by A31,A24;
        then F.g2 is identity by CAT_6:22;
        then
A78:    cod(F.g2) = cod f2 by A77,CAT_7:6;
        dom(F.g1) = cod(F.g2) by A78,A77,A1,CAT_7:5;
        hence
A79:    F.g1 |> F.g2 by CAT_7:5;
        thus F.(g1 (*) g2) = F.g1 by A76,CAT_7:8,A2
        .= (F.g1) (*) (F.g2) by A79,A77,CAT_6:23;
      end;
      suppose
A80:    g1 = h1 & g2 = cod h1;
        cod h2 = cod h1 by A80,A2,A27,CAT_6:22,26;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A81:   g1 = h1 & g2 = h2;
       then
A82:    F.g1 = f1 & F.g2 = f2 by A21,A24;
        hence F.g1 |> F.g2 by A1;
        thus F.(g1 (*) g2) = (F.g1) (*) (F.g2) by A37,A82,A81;
      end;
      suppose
A83:   g1 = h1 & g2 = h1;
        cod h2 = cod h1 by A83,A2,A27,CAT_7:5;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A84:   g1 = h1 & g2 = h1(*)h2;
        then dom g1 = cod(h1(*)h2) by A27,CAT_7:5;
        then dom g1 = cod h1 by A6,CAT_7:4;
        hence thesis by A84,A2,A5,ZFMISC_1:def 8;
      end;
      suppose
A85:    g1 = h1(*)h2 & g2 = dom h2;
        then
A86:    F.g1 = f1(*)f2 & F.g2 = dom f2 by A28,A37;
A87:   dom(f1(*)f2) = dom f2 by A1,CAT_7:4;
        hence F.g1 |> F.g2 by A86,CAT_7:8;
        dom(h1(*)h2) = dom h2 by A6,CAT_7:4;
        then g1(*)g2 = h1(*)h2 by A85,CAT_7:8;
        hence F.(g1(*)g2) = (F.g1)(*)(F.g2) by A85,A87,A86,CAT_7:8;
      end;
      suppose
A88:    g1 = h1(*)h2 & g2 = cod h2;
        dom g1 = cod h2 by A88,A27,CAT_6:22,26;
        then dom h2 = cod h2 by A6,A88,CAT_7:4;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A89:    g1 = h1(*)h2 & g2 = cod h1;
        dom g1 = cod h1 by A89,A27,CAT_6:22,26;
        then dom h2 = cod h1 by A6,A89,CAT_7:4;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A90:   g1 = h1(*)h2 & g2 = h2;
        dom g1 = cod h2 by A90,A27,CAT_7:5;
        then dom h2 = cod h2 by A6,A90,CAT_7:4;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A91:   g1 = h1(*)h2 & g2 = h1;
        dom g1 = cod h1 by A91,A27,CAT_7:5;
        then dom h2 = cod h1 by A6,A91,CAT_7:4;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
      suppose
A92:   g1 = h1(*)h2 & g2 = h1(*)h2;
        dom g1 = cod g2 by A27,CAT_7:5;
        then dom g1 = cod h1 by A6,A92,CAT_7:4;
        then dom h2 = cod h1 by A6,A92,CAT_7:4;
        hence thesis by A5,ZFMISC_1:def 8;
      end;
    end;
    then reconsider F as covariant Functor of OrdC 3, C
    by A20,CAT_6:def 23,def 25;
    take F;
    let g1,g2 be morphism of OrdC 3;
    assume
A93: g1 |> g2;
    assume
A94: g1 is not identity & g2 is not identity;
A95: g1 = dom h2 or g1 = cod h2 or g1 = cod h1 or g1 = h2 or
    g1 = h1 or g1 = h1(*)h2 by A4,ENUMSET1:def 4;
A96: g2 = dom h2 or g2 = cod h2 or g2 = cod h1 or g2 = h2 or
    g2 = h1 or g2 = h1(*)h2 by A4,ENUMSET1:def 4;
A97: g1 = h1 & g2 = h2
    proof
      assume
A98:   g1 <> h1 or g2 <> h2;
      per cases by A98;
      suppose
A99:     g1 <> h1;
        per cases by A99,A95,A96,A94,CAT_6:22;
        suppose
A100:     g1 = h2 & g2 = h2;
          then dom g2 = cod g1 by A93,CAT_7:5;
          hence thesis by A100,A5,ZFMISC_1:def 8;
        end;
        suppose
A101:     g1 = h2 & g2 = h1;
          dom g1 = cod g2 by A93,CAT_7:5;
          hence thesis by A101,A5,ZFMISC_1:def 8;
        end;
        suppose
A102:     g1 = h2 & g2 = h1(*)h2;
          then dom g1 = cod(h1(*)h2) by A93,CAT_7:5;
          then dom g1 = cod h1 by A6,CAT_7:4;
          hence thesis by A102,A5,ZFMISC_1:def 8;
        end;
        suppose
A103:     g1 = h1(*)h2 & g2 = h2;
          dom g1 = cod h2 by A103,A93,CAT_7:5;
          then dom h2 = cod h2 by A6,A103,CAT_7:4;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
        suppose
A104:     g1 = h1(*)h2 & g2 = h1;
          dom g1 = cod h1 by A104,A93,CAT_7:5;
          then dom h2 = cod h1 by A6,A104,CAT_7:4;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
        suppose
A105:     g1 = h1(*)h2 & g2 = h1(*)h2;
          dom g1 = cod g2 by A93,CAT_7:5;
          then dom g1 = cod h1 by A6,A105,CAT_7:4;
          then dom h2 = cod h1 by A6,A105,CAT_7:4;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
      end;
      suppose
A106:     g2 <> h2;
        per cases by A106,A95,A96,A94,CAT_6:22;
        suppose
A107:     g2 = h1 & g1 = h2;
          dom g1 = cod g2 by A93,CAT_7:5;
          hence thesis by A107,A5,ZFMISC_1:def 8;
        end;
        suppose
A108:     g2 = h1 & g1 = h1;
          cod h2 = cod h1 by A108,A2,A93,CAT_7:5;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
        suppose
A109:     g2 = h1 & g1 = h1(*)h2;
          dom g1 = cod h1 by A109,A93,CAT_7:5;
          then dom h2 = cod h1 by A6,A109,CAT_7:4;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
        suppose
A110:     g2 = h1(*)h2 & g1 = h2;
          then dom g1 = cod(h1(*)h2) by A93,CAT_7:5;
          then dom g1 = cod h1 by A6,CAT_7:4;
          hence thesis by A110,A5,ZFMISC_1:def 8;
        end;
        suppose
A111:     g2 = h1(*)h2 & g1 = h1;
          then dom g1 = cod(h1(*)h2) by A93,CAT_7:5;
          then dom g1 = cod h1 by A6,CAT_7:4;
          hence thesis by A111,A2,A5,ZFMISC_1:def 8;
        end;
        suppose
A112:     g2 = h1(*)h2 & g1 = h1(*)h2;
          dom g1 = cod g2 by A93,CAT_7:5;
          then dom g1 = cod h1 by A6,A112,CAT_7:4;
          then dom h2 = cod h1 by A6,A112,CAT_7:4;
          hence thesis by A5,ZFMISC_1:def 8;
        end;
      end;
    end;
    thus F.g1 = f1 & F.g2 = f2 by A21,A24,A97;
  end;
A113: for F1,F2 being covariant Functor of OrdC 3,C st
    (for g1,g2 being morphism of OrdC 3 st g1 |> g2 & not g1 is identity &
    not g2 is identity holds F1.g1 = f1 & F1.g2 = f2) &
    for g1,g2 being morphism of OrdC 3 st g1 |> g2 & not g1 is identity &
    not g2 is identity holds F2.g1 = f1 & F2.g2 = f2 holds F1 = F2
  proof
    let F1,F2 be covariant Functor of OrdC 3,C;
    assume
A114: for g1,g2 being morphism of OrdC 3 st g1 |> g2 & not g1 is identity &
    not g2 is identity holds F1.g1 = f1 & F1.g2 = f2;
    assume
A115: for g1,g2 being morphism of OrdC 3 st g1 |> g2 & not g1 is identity &
    not g2 is identity holds F2.g1 = f1 & F2.g2 = f2;
    for x being object st x in the carrier of OrdC 3 holds F1.x = F2.x
    proof
      let x be object;
      assume x in the carrier of OrdC 3;
      then
A116:   x in {dom h2, cod h2, cod h1, h2, h1, h1(*)h2} by A4,CAT_6:def 1;
A117:   F1.h1 = f1 by A2,A6,A114 .= F2.h1 by A2,A6,A115;
A118:   F1.h2 = f2 by A2,A6,A114 .= F2.h2 by A2,A6,A115;
A119:  F1 is multiplicative & F2 is multiplicative by CAT_6:def 25;
      per cases by A116,ENUMSET1:def 4;
      suppose
A120:     x = dom h2;
        hence F1.x = dom(F1.h2) by CAT_6:32
        .= F2.x by A120,A118,CAT_6:32;
      end;
      suppose
A121:     x = cod h2;
        hence F1.x = cod(F1.h2) by CAT_6:32
        .= F2.x by A121,A118,CAT_6:32;
      end;
      suppose
A122:     x = cod h1;
        hence F1.x = cod(F1.h1) by CAT_6:32
        .= F2.x by A122,A117,CAT_6:32;
      end;
      suppose
A123:     x = h2;
        hence F1.x = F1.h2 by CAT_6:def 21
        .= F2.x by A123,A118,CAT_6:def 21;
      end;
      suppose
A124:     x = h1;
        hence F1.x = F1.h1 by CAT_6:def 21
        .= F2.x by A124,A117,CAT_6:def 21;
      end;
      suppose
A125:     x = h1(*)h2;
        hence F1.x = F1.(h1(*)h2) by CAT_6:def 21
        .= (F2.h1)(*)(F2.h2) by A117,A118,A6,A119,CAT_6:def 23
        .= F2.(h1(*)h2) by A6,A119,CAT_6:def 23
        .= F2.x by A125,CAT_6:def 21;
      end;
    end;
    hence F1 = F2 by FUNCT_2:12;
  end;
  thus thesis by A7,A113;
  end;
end;

begin :: Terminal Objects

definition
  let C be CategoryStr;
  let a be Object of C;
  attr a is terminal means
  for b being Object of C holds
  Hom(b,a)<>{} & ex f being Morphism of b,a
  st for g being Morphism of b,a holds f = g;
end;

theorem
  for C being CategoryStr, b being Object of C holds
  b is terminal iff for a being Object of C
  ex f being Morphism of a,b st Hom(a,b) = {f}
proof
  let C be CategoryStr, b be Object of C;
  thus b is terminal implies for a being Object of C
  ex f being Morphism of a,b st Hom(a,b) = {f}
  proof
    assume
A1: b is terminal;
    let a be Object of C;
    consider f being Morphism of a,b such that
A2: for g being Morphism of a,b holds f = g by A1;
    take f;
    thus thesis by A2,Th7,A1;
  end;
  assume
A3: for a being Object of C ex f being Morphism of a,b st Hom(a,b) = {f};
  let a be Object of C;
  consider f being Morphism of a,b such that
A4: Hom(a,b) = {f} by A3;
  thus Hom(a,b) <> {} by A4;
  take f;
  thus thesis by A4,Th6;
end;

theorem Th20:
  for C being with_identities non empty CategoryStr, a being Object of C holds
  a is terminal implies for h being Morphism of a,a holds id- a = h
proof
  let C be with_identities non empty CategoryStr, a be Object of C;
  assume a is terminal;
  then consider f being Morphism of a,a such that
A1: for g being Morphism of a,a holds f = g;
  let h be Morphism of a,a;
  id- a = f by A1;
  hence thesis by A1;
end;

theorem
  for C being composable with_identities non empty CategoryStr,
      a,b being Object of C
  holds a is terminal & b is terminal implies a,b are_isomorphic
proof
  let C be composable with_identities non empty CategoryStr,
  a,b be Object of C;
  assume that
A1: a is terminal and
A2: b is terminal;
  set g = the Morphism of b,a;
  set f = the Morphism of a,b;
A3: Hom(a,b) <> {} by A2;
  f is isomorphism
  proof
A4: Hom(b,a) <> {} by A1;
    g*f = id- a & f*g = id- b by A1,A2,Th20;
    hence thesis by A3,A4,CAT_7:def 9;
  end;
  hence thesis by CAT_7:def 10;
end;

theorem
  for C being non empty category, a,b being Object of C
  holds b is terminal & a,b are_isomorphic implies a is terminal
proof
  let C be non empty category, a,b be Object of C;
  assume
A1: b is terminal;
  assume a,b are_isomorphic;
  then consider f be Morphism of a,b such that
A2: f is isomorphism by CAT_7:def 10;
A3: Hom(b,a) <> {} by A2,CAT_7:def 9;
  let c be Object of C;
  consider h being Morphism of c,b such that
A4: for g being Morphism of c,b holds h = g by A1;
  Hom(c,b) <> {} by A1;
  hence
A5: Hom(c,a) <> {} by A3,CAT_7:22;
  consider f1 be Morphism of b,a such that
A6: f1*f = id- a and
  f*f1 = id- b by A2,CAT_7:def 9;
A7: Hom(a,b) <> {} by A2,CAT_7:def 9;
  take f1*h;
  let h1 be Morphism of c,a;
  thus f1*h = f1*(f*h1) by A4
    .= (f1*f)*h1 by A3,A5,A7,CAT_7:23
    .= h1 by A6,A5,CAT_7:18;
end;

theorem
  for C being composable with_identities CategoryStr,
      a,b being Object of C, f being Morphism of a,b
  holds Hom(a,b) <> {} & a is terminal implies f is monomorphism
proof
  let C be composable with_identities CategoryStr,
      a,b be Object of C, f be Morphism of a,b;
  assume that
A1: Hom(a,b) <> {} and
A2: a is terminal;
  now
    let c be Object of C such that Hom(c,a)<>{};
    let g,h be Morphism of c,a such that f*g=f*h;
    consider f1 be Morphism of c,a such that
A3: for g1 being Morphism of c,a holds f1=g1 by A2;
    f1 = g by A3;
    hence g=h by A3;
  end;
  hence thesis by A1,CAT_7:def 5;
end;

definition
  let C be category;
  attr C is with_terminal_objects means
  ex a being Object of C st a is terminal;
end;

theorem Th24:
  OrdC 1 is with_terminal_objects
  proof
    consider f be morphism of OrdC 1 such that
A1: f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
A2: for a,b being Object of OrdC 1, f1 being morphism of OrdC 1 holds
    f1 is Morphism of a,b
    proof
      let a,b be Object of OrdC 1;
      let f1 be morphism of OrdC 1;
A3:   dom f1 = f by A1,TARSKI:def 1 .= a by A1,TARSKI:def 1;
      cod f1 = f by A1,TARSKI:def 1 .= b by A1,TARSKI:def 1;
      then f1 in Hom(a,b) by A3,CAT_7:20;
      hence f1 is Morphism of a,b by CAT_7:def 3;
    end;
    reconsider a1 = f as Object of OrdC 1 by A1;
    take a1;
    let b1 be Object of OrdC 1;
    b1 = a1 by A1,TARSKI:def 1;
    hence Hom (b1,a1) <> {};
    reconsider f1 = f as Morphism of b1,a1 by A2;
    take f1;
    let g be Morphism of b1,a1;
    thus f1 = g by A1,TARSKI:def 1;
  end;

registration
  cluster with_terminal_objects for category;
  correctness by Th24;
end;

definition
  let C be category;
  attr C is terminal means :Def4:
  for B being category holds ex F being Functor of B,C st F is covariant &
  for G being Functor of B,C st G is covariant holds F = G;
end;

registration
  cluster OrdC 1 -> non empty terminal;
  correctness
  proof
    consider f be morphism of OrdC 1 such that
A1: f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
A2: the carrier of OrdC 1 = {f} by A1,CAT_6:def 1;
    for C1 being category ex F being Functor of C1,OrdC 1 st F is covariant &
    for F1 being Functor of C1,OrdC 1 st F1 is covariant holds F = F1
    proof
      let C1 be category;
      per cases;
      suppose C1 is empty;
        then reconsider C2 = C1 as empty category;
        set F2 = the covariant Functor of C2,OrdC 1;
        reconsider F = F2 as Functor of C1,OrdC 1;
        take F;
        thus thesis;
      end;
      suppose C1 is non empty;
        then reconsider C2 = C1 as non empty category;
        set F2 = the covariant Functor of C2,OrdC 1;
        reconsider F = F2 as Functor of C1,OrdC 1;
        take F;
        thus F is covariant;
        let F1 be Functor of C1,OrdC 1;
        assume F1 is covariant;
        for x1 being object st x1 in the carrier of C1 holds F.x1 = F1.x1
        proof
          let x1 be object;
          assume x1 in the carrier of C1;
          then
A3:       F.x1 in {f} & F1.x1 in {f} by A2,FUNCT_2:5;
          hence F.x1 = f by TARSKI:def 1
          .= F1.x1 by A3,TARSKI:def 1;
        end;
        hence F = F1 by FUNCT_2:12;
      end;
    end;
    hence thesis;
  end;
end;

registration
  cluster strict non empty terminal for category;
  correctness
  proof
    take OrdC 1;
    thus thesis;
  end;
  cluster strict non terminal for category;
  correctness
  proof
    set C = OrdC 0;
    take C;
    ex C1 being category st for F being Functor of C1,C holds
    F is non covariant or ex F1 being Functor of C1,C st
    F1 is covariant & not F = F1
    proof
      take OrdC 1;
      Mor(OrdC 0) = {};
      hence thesis by CAT_6:31;
    end;
    hence thesis;
  end;
end;

theorem Th25:
  for C,D being terminal category holds C ~= D
  proof
    let C,D be terminal category;
    ex F being Functor of C,D, G being Functor of D,C st
    F is covariant & G is covariant & G (*) F = id C & F (*) G = id D
    proof
      consider F be Functor of C,D such that
A1:   F is covariant & for F1 being Functor of C,D st F1 is covariant holds
      F = F1 by Def4;
      consider G be Functor of D,C such that
A2:   G is covariant & for G1 being Functor of D,C st G1 is covariant holds
      G = G1 by Def4;
      take F,G;
      thus F is covariant & G is covariant by A1,A2;
      consider F1 be Functor of C,C such that
A3:   F1 is covariant & for F2 being Functor of C,C st F2 is covariant holds
      F1 = F2 by Def4;
      thus G (*) F = F1 by A1,A2,A3,CAT_6:35 .= id C by A3;
      consider G1 be Functor of D,D such that
A4:   G1 is covariant & for G2 being Functor of D,D st G2 is covariant holds
      G1 = G2 by Def4;
      thus F (*) G = G1 by A1,A2,A4,CAT_6:35 .= id D by A4;
    end;
    hence C ~= D by CAT_6:def 28;
  end;

theorem Th26:
  for C,D being category st C is terminal & C ~= D holds D is terminal
proof
  let C,D be category;
  assume
A1: C is terminal;
  assume C ~= D;
  then consider F be Functor of C,D, G be Functor of D,C such that
A2: F is covariant & G is covariant & G (*) F = id C & F (*) G = id D
  by CAT_6:def 28;
  let B be category;
  consider F1 be Functor of B,C such that
A3: F1 is covariant &
  for G being Functor of B,C st G is covariant holds F1 = G by A1;
  set F2 = F(*)F1;
  take F2;
  for G1 being Functor of B,D st G1 is covariant holds F2 = G1
  proof
    let G1 be Functor of B,D;
    assume
A4: G1 is covariant;
    hence F2 = F(*)(G(*)G1) by A3,A2,CAT_6:35
    .= (F(*)G)(*)G1 by A4,A2,CAT_7:10
    .= G1 by A2,A4,CAT_7:11;
  end;
  hence thesis by A2,A3,CAT_6:35;
end;


Lm1:
  for C being category st C is terminal holds C is non empty trivial
  proof
    let C be category;
    assume
A1: C is terminal;
    consider F be Functor of OrdC 1,C such that
A2: F is covariant & F is bijective by A1,Th25,CAT_7:12;
A3: the carrier of C = rng F by A2,FUNCT_2:def 3;
A4: C is non empty by A2,CAT_6:31;
    for y1,y2 being object st y1 in the carrier of C & y2 in the carrier of C
    holds y1 = y2
    proof
      let y1,y2 be object;
      assume
A5:   y1 in the carrier of C;
      assume
A6:   y2 in the carrier of C;
      consider f be morphism of OrdC 1 such that
A7:   f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
      reconsider x = f as object;
      dom F = the carrier of OrdC 1 by A4,FUNCT_2:def 1;
      then dom F = {f} by A7,CAT_6:def 1;
      then
A8:   rng F = {F.x} by FUNCT_1:4;
      hence y1 = F.x by A5,A3,TARSKI:def 1
      .= y2 by A6,A8,A3,TARSKI:def 1;
    end;
    hence C is non empty trivial by A2,CAT_6:31,ZFMISC_1:def 10;
  end;

theorem Th27:
  for C being category holds C is non empty trivial iff C ~= OrdC 1
  proof
    let C be category;
    hereby
      assume
A1:   C is non empty trivial;
      consider f be morphism of OrdC 1 such that
A2:   f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
      ex F being Functor of C, OrdC 1 st F is covariant & F is bijective
      proof
        set F = (the carrier of C) --> f;
        the carrier of OrdC 1 = {f} by A2,CAT_6:def 1;
        then f in the carrier of OrdC 1 by TARSKI:def 1;
        then reconsider F as Functor of C, OrdC 1 by FUNCOP_1:45;
        take F;
        for f1 being morphism of C st f1 is identity holds F.f1 is identity
        proof
          let f1 be morphism of C;
          assume f1 is identity;
          reconsider x = f1 as object;
          Mor C is non empty by A1;
          then f1 in Mor C;
          then
A3:       f1 in the carrier of C by CAT_6:def 1;
          F.f1 = F.x by A1,CAT_6:def 21
          .= f by A3,FUNCOP_1:7;
          hence F.f1 is identity by A2;
        end;
        then
A4:     F is identity-preserving by CAT_6:def 22;
        for f1,f2 being morphism of C st f1 |> f2 holds
        F.f1 |> F.f2 & F.(f1(*)f2) = (F.f1)(*)(F.f2)
        proof
          let f1,f2 be morphism of C;
          assume f1 |> f2;
          reconsider x1 = f1, x2 = f2, x = f1(*)f2 as object;
          Mor C is non empty by A1;
          then f1 in Mor C & f2 in Mor C & f1(*)f2 in Mor C;
          then
A5:       f1 in the carrier of C & f2 in the carrier of C &
          f1(*)f2 in the carrier of C by CAT_6:def 1;
A6:       F.f1 = F.x1 by A1,CAT_6:def 21 .= f by A5,FUNCOP_1:7;
A7:       F.f2 = F.x2 by A1,CAT_6:def 21 .= f by A5,FUNCOP_1:7;
A8:       F.(f1(*)f2) = F.x by A1,CAT_6:def 21 .= f by A5,FUNCOP_1:7;
          thus F.f1 |> F.f2 by A2,A6,A7,CAT_6:24;
          f |> f by A2,CAT_6:24;
          hence F.(f1(*)f2) = (F.f1)(*)(F.f2) by A2,A6,A7,A8,Th4;
        end;
        hence F is covariant by A4,CAT_6:def 25,def 23;
        for x1,x2 being object st x1 in dom F & x2 in dom F & F.x1 = F.x2
        holds x1 = x2 by A1,ZFMISC_1:def 10;
        then
A9:     F is one-to-one by FUNCT_1:def 4;
        rng F = {f} by A1,FUNCOP_1:8
        .= the carrier of OrdC 1 by A2,CAT_6:def 1;
        then F is onto by FUNCT_2:def 3;
        hence F is bijective by A9;
      end;
      hence C ~= OrdC 1 by CAT_7:12;
    end;
    assume C ~= OrdC 1;
    then C is terminal by Th26;
    hence C is non empty trivial by Lm1;
  end;

theorem Th28:
  for C,D being non empty category st C is trivial & D is trivial holds C ~= D
  proof
    let C,D be non empty category;
    assume C is trivial & D is trivial;
    then C ~= OrdC 1 & D ~= OrdC 1 by Th27;
    hence C ~= D by Th10;
  end;

registration
  cluster non empty trivial -> terminal for category;
  correctness
  proof
    let C be category;
    assume C is non empty trivial;
    then C ~= OrdC 1 by Th27;
    hence thesis by Th26;
  end;
  cluster terminal -> non empty trivial for category;
  correctness by Lm1;
end;

definition
  let C be category;
  func C ->OrdC1 -> covariant Functor of C, OrdC 1 means
  not contradiction;
  correctness
  proof
    thus ex F being covariant Functor of C, OrdC 1 st not contradiction;
    let F1,F2 be covariant Functor of C, OrdC 1;
    consider F be Functor of C, OrdC 1 such that
A1: F is covariant & for F1 being Functor of C, OrdC 1
    st F1 is covariant holds F = F1 by Def4;
    thus F1 = F by A1 .= F2 by A1;
  end;
end;

theorem Th29:
  for C,C1,C2 being category, F1 being Functor of C,C1,
  F2 being Functor of C,C2 st F1 is covariant & F2 is covariant
  holds (C1 ->OrdC1)(*)F1 = (C2 ->OrdC1)(*)F2
  proof
    let C,C1,C2 be category;
    let F1 be Functor of C,C1;
    let F2 be Functor of C,C2;
    assume
A1: F1 is covariant & F2 is covariant;
    consider F be Functor of C, OrdC 1 such that
A2: F is covariant & for F1 being Functor of C, OrdC 1
    st F1 is covariant holds F = F1 by Def4;
    reconsider F11 = (C1 ->OrdC1)(*)F1 as covariant Functor of C, OrdC 1
    by A1,CAT_6:35;
    reconsider F22 = (C2 ->OrdC1)(*)F2 as covariant Functor of C, OrdC 1
    by A1,CAT_6:35;
    F11 = F & F22 = F by A2;
    hence thesis;
  end;

begin :: Initial Objects

definition
  let C be CategoryStr;
  let a be Object of C;
  attr a is initial means
  for b being Object of C holds
  Hom(a,b)<>{} & ex f being Morphism of a,b
  st for g being Morphism of a,b holds f = g;
end;

theorem
  for C being CategoryStr, b being Object of C holds
  b is initial iff for a being Object of C
  ex f being Morphism of b,a st Hom(b,a) = {f}
proof
  let C be CategoryStr, b be Object of C;
  thus b is initial implies for a being Object of C
  ex f being Morphism of b,a st Hom(b,a) = {f}
  proof
    assume
A1: b is initial;
    let a be Object of C;
    consider f being Morphism of b,a such that
A2: for g being Morphism of b,a holds f = g by A1;
    take f;
    thus thesis by A2,Th7,A1;
  end;
  assume
A3: for a being Object of C ex f being Morphism of b,a st Hom(b,a) = {f};
  let a be Object of C;
  consider f being Morphism of b,a such that
A4: Hom(b,a) = {f} by A3;
  thus Hom(b,a) <> {} by A4;
  take f;
  thus thesis by A4,Th6;
end;

theorem Th31:
  for C being with_identities non empty CategoryStr, a being Object of C holds
  a is initial implies for h being Morphism of a,a holds id- a = h
proof
  let C be with_identities non empty CategoryStr, a be Object of C;
  assume a is initial;
  then consider f being Morphism of a,a such that
A1: for g being Morphism of a,a holds f = g;
  let h be Morphism of a,a;
  id- a = f by A1;
  hence thesis by A1;
end;

theorem
  for C being composable with_identities non empty CategoryStr,
      a,b being Object of C
  holds a is initial & b is initial implies a,b are_isomorphic
proof
  let C be composable with_identities non empty CategoryStr,
      a,b be Object of C;
  assume that
A1: a is initial and
A2: b is initial;
  set g = the Morphism of b,a;
  set f = the Morphism of a,b;
A3: Hom(b,a) <> {} by A2;
  f is isomorphism
  proof
A4: Hom(a,b) <> {} by A1;
    g*f = id- a & f*g = id- b by A1,A2,Th31;
    hence thesis by A3,A4,CAT_7:def 9;
  end;
  hence thesis by CAT_7:def 10;
end;

theorem
  for C being non empty category, a,b being Object of C
  holds b is initial & b,a are_isomorphic implies a is initial
proof
  let C be non empty category, a,b be Object of C;
  assume
A1: b is initial;
  assume b,a are_isomorphic;
  then consider f be Morphism of b,a such that
A2: f is isomorphism by CAT_7:def 10;
A3: Hom(a,b) <> {} by A2,CAT_7:def 9;
  let c be Object of C;
  consider h being Morphism of b,c such that
A4: for g being Morphism of b,c holds h = g by A1;
  Hom(b,c) <> {} by A1;
  hence
A5: Hom(a,c) <> {} by A3,CAT_7:22;
  consider f1 be Morphism of a,b such that
  f1*f = id- b and
A6: f*f1 = id- a by A2,CAT_7:def 9;
A7: Hom(b,a) <> {} by A2,CAT_7:def 9;
  take h*f1;
  let h1 be Morphism of a,c;
  thus h*f1 = (h1*f)*f1 by A4
    .= h1*(f*f1) by A3,A5,A7,CAT_7:23
    .= h1 by A6,A5,CAT_7:18;
end;

theorem
  for C being composable with_identities CategoryStr,
      a,b being Object of C, f being Morphism of a,b
  holds Hom(a,b) <> {} & b is initial implies f is epimorphism
proof
  let C be composable with_identities CategoryStr,
      a,b be Object of C, f be Morphism of a,b;
  assume that
A1: Hom(a,b) <> {} and
A2: b is initial;
  now
    let c be Object of C such that Hom(b,c)<>{};
    let g,h be Morphism of b,c such that g*f=h*f;
    consider f1 be Morphism of b,c such that
A3: for g1 being Morphism of b,c holds f1=g1 by A2;
    f1 = g by A3;
    hence g=h by A3;
  end;
  hence thesis by A1,CAT_7:def 6;
end;

definition
  let C be category;
  attr C is with_initial_objects means
  ex a being Object of C st a is initial;
end;

theorem Th35:
  OrdC 1 is with_initial_objects
  proof
    consider f be morphism of OrdC 1 such that
A1: f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
A2: for a,b being Object of OrdC 1, f1 being morphism of OrdC 1 holds
    f1 is Morphism of a,b
    proof
      let a,b be Object of OrdC 1;
      let f1 be morphism of OrdC 1;
A3:   dom f1 = f by A1,TARSKI:def 1 .= a by A1,TARSKI:def 1;
      cod f1 = f by A1,TARSKI:def 1 .= b by A1,TARSKI:def 1;
      then f1 in Hom(a,b) by A3,CAT_7:20;
      hence f1 is Morphism of a,b by CAT_7:def 3;
    end;
    reconsider a1 = f as Object of OrdC 1 by A1;
    take a1;
    let b1 be Object of OrdC 1;
    b1 = a1 by A1,TARSKI:def 1;
    hence Hom (a1,b1) <> {};
    reconsider f1 = f as Morphism of a1,b1 by A2;
    take f1;
    let g be Morphism of a1,b1;
    thus f1 = g by A1,TARSKI:def 1;
  end;

registration
  cluster with_initial_objects for category;
  correctness by Th35;
end;

definition
  let C be category;
  attr C is initial means :Def8:
  for C1 being category ex F being Functor of C,C1 st F is covariant &
  for F1 being Functor of C,C1 st F1 is covariant holds F = F1;
end;

registration
  cluster OrdC 0 -> empty initial;
  correctness
  proof
    Mor(OrdC 0) = {};
    then reconsider C = OrdC 0 as strict empty category;
    for C1 being category ex F being Functor of C,C1 st F is covariant &
    for F1 being Functor of C,C1 st F1 is covariant holds F = F1
    proof
      let C1 be category;
      set F = the covariant Functor of C,C1;
      take F;
      thus F is covariant;
      let F1 be Functor of C,C1;
      assume F1 is covariant;
      thus F = F1;
    end;
    hence thesis;
  end;
end;

registration
  cluster strict empty initial for category;
  correctness
  proof
    take OrdC 0;
    thus thesis;
  end;
  cluster strict non initial for category;
  correctness
  proof
    set C = OrdC 1;
    take C;
    ex C1 being category st for F being Functor of C,C1 holds
    F is non covariant or ex F1 being Functor of C,C1 st
    F1 is covariant & not F = F1
    proof
      take OrdC 0;
      thus thesis by CAT_6:31;
    end;
    hence thesis;
  end;
end;

theorem
  for C,D being initial category holds C ~= D
  proof
    let C,D be initial category;
    ex F being Functor of C,D, G being Functor of D,C st
    F is covariant & G is covariant & G (*) F = id C & F (*) G = id D
    proof
      consider F be Functor of C,D such that
A1:   F is covariant & for F1 being Functor of C,D st F1 is covariant holds
      F = F1 by Def8;
      consider G be Functor of D,C such that
A2:   G is covariant & for G1 being Functor of D,C st G1 is covariant holds
      G = G1 by Def8;
      take F,G;
      thus F is covariant & G is covariant by A1,A2;
      consider F1 be Functor of C,C such that
A3:   F1 is covariant & for F2 being Functor of C,C st F2 is covariant holds
      F1 = F2 by Def8;
      thus G (*) F = F1 by A1,A2,A3,CAT_6:35 .= id C by A3;
      consider G1 be Functor of D,D such that
A4:   G1 is covariant & for G2 being Functor of D,D st G2 is covariant holds
      G1 = G2 by Def8;
      thus F (*) G = G1 by A1,A2,A4,CAT_6:35 .= id D by A4;
    end;
    hence C ~= D by CAT_6:def 28;
  end;

theorem
  for C,D being category st C is initial & C ~= D holds D is initial
proof
  let C,D be category;
  assume
A1: C is initial;
  assume C ~= D;
  then consider F be Functor of C,D, G be Functor of D,C such that
A2: F is covariant & G is covariant & G (*) F = id C & F (*) G = id D
  by CAT_6:def 28;
  let B be category;
  consider F1 be Functor of C,B such that
A3: F1 is covariant &
  for G being Functor of C,B st G is covariant holds F1 = G by A1;
  set F2 = F1(*)G;
  take F2;
  for G1 being Functor of D,B st G1 is covariant holds F2 = G1
  proof
    let G1 be Functor of D,B;
    assume
A4: G1 is covariant;
    hence F2 = (G1(*)F)(*)G by A3,A2,CAT_6:35
    .= G1(*)(F(*)G) by A4,A2,CAT_7:10
    .= G1 by A2,A4,CAT_7:11;
  end;
  hence thesis by A2,A3,CAT_6:35;
end;

registration
  cluster empty -> initial for category;
  correctness
  proof
    let C be category;
    assume
A1: C is empty;
    for C1 being category ex F being Functor of C,C1 st F is covariant &
    for F1 being Functor of C,C1 st F1 is covariant holds F = F1
    proof
      let C1 be category;
      set F = the Functor of C,C1;
      take F;
      thus F is covariant by A1;
      let F1 be Functor of C,C1;
      assume F1 is covariant;
      thus F = F1 by A1;
    end;
    hence thesis;
  end;
end;

definition
  let C be category;
  func OrdC0-> C -> covariant Functor of OrdC 0, C means
  not contradiction;
  correctness;
end;

theorem
  for C,C1,C2 being category, F1 being Functor of C1,C,
  F2 being Functor of C2,C st F1 is covariant & F2 is covariant
  holds F1(*)(OrdC0-> C1) = F2(*)(OrdC0-> C2);


begin :: Categorical Products

definition
  let C be category;
  let a,b,c be Object of C;
  let p1 be Morphism of c,a such that Hom(c,a) <> {};
  let p2 be Morphism of c,b such that Hom(c,b) <> {};
  pred c,p1,p2 is_product_of a,b means :Def10:
  for c1 being Object of C,
      q1 being Morphism of c1,a, q2 being Morphism of c1,b
  st Hom(c1,a) <> {} & Hom(c1,b) <> {}
  holds Hom(c1,c) <> {} & ex h being Morphism of c1,c st
   p1 * h = q1 & p2 * h = q2
   & for h1 being Morphism of c1,c st p1 * h1 = q1 & p2 * h1 = q2 holds h = h1;
end;

theorem
  for C being non empty category, c1,c2,a,b being Object of C,
      p1 being Morphism of a,c1, p2 being Morphism of a,c2,
      q1 being Morphism of b,c1, q2 being Morphism of b,c2
  st Hom(a,c1) <> {} & Hom(a,c2) <> {} & Hom(b,c1) <> {} & Hom(b,c2) <> {} &
     a,p1,p2 is_product_of c1,c2 & b,q1,q2 is_product_of c1,c2
  holds a,b are_isomorphic
  proof
    let C be non empty category;
    let c1,c2,a,b be Object of C;
    let p1 be Morphism of a,c1;
    let p2 be Morphism of a,c2;
    let q1 be Morphism of b,c1;
    let q2 be Morphism of b,c2;
    assume
A1: Hom(a,c1) <> {} & Hom(a,c2) <> {} & Hom(b,c1) <> {} & Hom(b,c2) <> {};
    assume
A2: a,p1,p2 is_product_of c1,c2;
    assume
A3: b,q1,q2 is_product_of c1,c2;
    ex ff being Morphism of a,b, gg being Morphism of b,a st
    Hom(a,b)<>{} & Hom(b,a)<>{} & gg * ff = id- a & ff * gg = id- b
    proof
      consider f be Morphism of a,b such that
A4:   q1 * f = p1 & q2 * f = p2 &
      for h1 being Morphism of a,b st q1 * h1 = p1 & q2 * h1 = p2
      holds f = h1 by A1,A3,Def10;
      consider g be Morphism of b,a such that
A5:   p1 * g = q1 & p2 * g = q2 &
      for h1 being Morphism of b,a st p1 * h1 = q1 & p2 * h1 = q2
      holds g = h1 by A1,A2,Def10;
      take f,g;
      thus
A6:  Hom(a,b)<>{} by A1,A3,Def10;
      thus
A7:  Hom(b,a)<>{} by A1,A2,Def10;
      set g11 = q1 * f;
      set g12 = q2 * f;
      consider h1 be Morphism of a,a such that
A8:   p1 * h1 = g11 & p2 * h1 = g12 & for h being Morphism of a,a
      st p1 * h = g11 & p2 * h = g12 holds h1 = h by A1,A2,Def10;
A9:   p1 * (g * f) = g11 by A1,A5,A7,A6,CAT_7:23;
A10:   p2 * (g * f) = g12 by A1,A5,A7,A6,CAT_7:23;
A11:  p1 * id- a = g11 by A1,A4,CAT_7:18;
A12:  p2 * id- a = g12 by A1,A4,CAT_7:18;
      thus g * f = h1 by A8,A9,A10 .= id- a by A8,A11,A12;
      set g21 = p1 * g;
      set g22 = p2 * g;
      consider h2 be Morphism of b,b such that
A13:   q1 * h2 = g21 & q2 * h2 = g22 & for h being Morphism of b,b
      st q1 * h = g21 & q2 * h = g22 holds h2 = h by A1,A3,Def10;
A14:   q1 * (f * g) = g21 by A1,A4,A7,A6,CAT_7:23;
A15:   q2 * (f * g) = g22 by A1,A4,A7,A6,CAT_7:23;
A16:  q1 * id- b = g21 by A1,A5,CAT_7:18;
A17:  q2 * id- b = g22 by A1,A5,CAT_7:18;
      thus f * g = h2 by A13,A14,A15 .= id- b by A13,A16,A17;
    end;
    hence a,b are_isomorphic by CAT_7:def 11;
  end;

theorem
  for C being category, c1,c2,d being Object of C,
      p1 being Morphism of d,c1, p2 being Morphism of d,c2
  st Hom(d,c1) <> {} & Hom(d,c2) <> {} &
     d,p1,p2 is_product_of c1,c2 holds d,p2,p1 is_product_of c2,c1
  proof
    let C be category;
    let c1,c2,d be Object of C;
    let p1 be Morphism of d,c1;
    let p2 be Morphism of d,c2;
    assume
A1: Hom(d,c1) <> {} & Hom(d,c2) <> {};
    assume
A2: d,p1,p2 is_product_of c1,c2;
    for d1 being Object of C,
    g2 being Morphism of d1,c2, g1 being Morphism of d1,c1
    st Hom(d1,c2) <> {} & Hom(d1,c1) <> {}
    holds Hom(d1,d) <> {} & ex h being Morphism of d1,d st
    p2 * h = g2 & p1 * h = g1
    & for h1 being Morphism of d1,d st p2 * h1 = g2 & p1 * h1 = g1
    holds h = h1
    proof
      let d1 be Object of C;
      let g2 be Morphism of d1,c2;
      let g1 be Morphism of d1,c1;
      assume
A3:   Hom(d1,c2) <> {} & Hom(d1,c1) <> {};
      hence Hom(d1,d) <> {} by A2,A1,Def10;
      consider h be Morphism of d1,d such that
A4:   p1 * h = g1 & p2 * h = g2
      & for h1 being Morphism of d1,d st p1 * h1 = g1 & p2 * h1 = g2
      holds h = h1 by A3,A2,A1,Def10;
      take h;
      thus thesis by A4;
    end;
    hence d,p2,p1 is_product_of c2,c1 by A1,Def10;
  end;

definition
  let C be category;
  attr C is with_binary_products means :Def11:
  for a,b being Object of C holds ex d being Object of C,
  p1 being Morphism of d,a, p2 being Morphism of d,b st
  Hom(d,a) <> {} & Hom(d,b) <> {} & d,p1,p2 is_product_of a,b;
end;

theorem Th41:
  OrdC 1 is with_binary_products
  proof
    set C = OrdC 1;
    consider f be morphism of OrdC 1 such that
A1: f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
A2: for o1,o2 being Object of C, f1 being morphism of C holds
    f1 is Morphism of o1,o2
    proof
      let o1,o2 be Object of C;
      let f1 be morphism of C;
A3:   dom f1 = f by A1,TARSKI:def 1 .= o1 by A1,TARSKI:def 1;
      cod f1 = f by A1,TARSKI:def 1 .= o2 by A1,TARSKI:def 1;
      then f1 in Hom(o1,o2) by A3,CAT_7:20;
      hence f1 is Morphism of o1,o2 by CAT_7:def 3;
    end;
    let a,b be Object of C;
A4: a = f by A1,TARSKI:def 1 .= b by A1,TARSKI:def 1;
    take a;
    reconsider p1 = f as Morphism of a,a by A2;
    reconsider p2 = f as Morphism of a,b by A2;
    take p1,p2;
    thus
A5: Hom(a,a) <> {} & Hom(a,b) <> {} by A4;
    for c1 being Object of C,
        q1 being Morphism of c1,a, q2 being Morphism of c1,b
    st Hom(c1,a) <> {} & Hom(c1,b) <> {}
    holds Hom(c1,a) <> {} & ex h being Morphism of c1,a st
    p1 * h = q1 & p2 * h = q2
    & for h1 being Morphism of c1,a st p1 * h1 = q1 & p2 * h1 = q2 holds h = h1
    proof
      let c1 be Object of C;
      let q1 be Morphism of c1,a;
      let q2 be Morphism of c1,b;
      assume Hom(c1,a) <> {} & Hom(c1,b) <> {};
      c1 = f by A1,TARSKI:def 1 .= a by A1,TARSKI:def 1;
      hence Hom(c1,a) <> {};
      reconsider h = f as Morphism of c1,a by A2;
      take h;
      thus p1 * h = f by A1,TARSKI:def 1 .= q1 by A1,TARSKI:def 1;
      thus p2 * h = f by A1,TARSKI:def 1 .= q2 by A1,TARSKI:def 1;
      let h1 be Morphism of c1,a;
      assume p1 * h1 = q1 & p2 * h1 = q2;
      thus h = h1 by A1,TARSKI:def 1;
    end;
    hence a,p1,p2 is_product_of a,b by A5,Def10;
  end;

registration
  cluster with_binary_products non empty for category;
  correctness by Th41;
end;

definition
  let C be with_binary_products category;
  let c1,c2 be Object of C;
  mode categorical_product of c1,c2 -> triple object means :Def12:
  ex d being Object of C, p1 being Morphism of d,c1, p2 being Morphism of d,c2
  st it = [d,p1,p2] & Hom(d,c1) <> {} & Hom(d,c2) <> {} &
  d,p1,p2 is_product_of c1,c2;
  correctness
  proof
    consider d be Object of C, p1 be Morphism of d,c1,
    p2 be Morphism of d,c2 such that
A1: Hom(d,c1) <> {} & Hom(d,c2) <> {} & d,p1,p2 is_product_of c1,c2 by Def11;
    take [d,p1,p2];
    thus thesis by A1;
  end;
end;

definition
  let C be with_binary_products category;
  let c1,c2 be Object of C;
  func c1 [x] c2 -> Object of C equals
  (the categorical_product of c1,c2)`1_3;
  correctness
  proof
    set T = the categorical_product of c1,c2;
    consider d be Object of C, p1 be Morphism of d,c1, p2 be Morphism of d,c2
    such that
A1: T = [d,p1,p2] & Hom(d,c1) <> {} & Hom(d,c2) <> {} &
    d,p1,p2 is_product_of c1,c2 by Def12;
    thus thesis by A1;
  end;
end;

definition
  let C be with_binary_products category;
  let c1,c2 be Object of C;
  func pr1(c1,c2) -> Morphism of c1 [x] c2,c1 equals
  (the categorical_product of c1,c2)`2_3;
  correctness
  proof
    set T = the categorical_product of c1,c2;
    consider d be Object of C, p1 be Morphism of d,c1, p2 be Morphism of d,c2
    such that
A1: T = [d,p1,p2] & Hom(d,c1) <> {} & Hom(d,c2) <> {} &
    d,p1,p2 is_product_of c1,c2 by Def12;
    thus thesis by A1;
  end;
  func pr2(c1,c2) -> Morphism of c1 [x] c2,c2 equals
  (the categorical_product of c1,c2)`3_3;
  correctness
  proof
    set T = the categorical_product of c1,c2;
    consider d be Object of C, p1 be Morphism of d,c1, p2 be Morphism of d,c2
    such that
A2: T = [d,p1,p2] & Hom(d,c1) <> {} & Hom(d,c2) <> {} &
    d,p1,p2 is_product_of c1,c2 by Def12;
    thus thesis by A2;
  end;
end;

theorem Th42:
  for C being with_binary_products category, a,b being Object of C holds
  a [x] b, pr1(a,b), pr2(a,b) is_product_of a,b &
  Hom(a [x] b,a) <> {} & Hom(a [x] b,b) <> {}
  proof
    let C be with_binary_products category;
    let a,b be Object of C;
    set T = the categorical_product of a,b;
    consider c be Object of C, p1 be Morphism of c,a, p2 be Morphism of c,b
    such that
A1: T = [c,p1,p2] & Hom(c,a) <> {} & Hom(c,b) <> {} &
    c,p1,p2 is_product_of a,b by Def12;
    thus thesis by A1;
  end;

theorem
  for C being with_binary_products category, a,b,c being Object of C
  st Hom(c,a) <> {} & Hom(c,b) <> {} holds Hom(c,a [x] b)<> {}
  proof
    let C be with_binary_products category;
    let a,b,c be Object of C;
    assume
A1: Hom(c,a) <> {} & Hom(c,b) <> {};
    a [x] b, pr1(a,b), pr2(a,b) is_product_of a,b &
    Hom(a [x] b,a) <> {} & Hom(a [x] b,b) <> {} by Th42;
    hence Hom(c,a [x] b)<> {} by Def10,A1;
  end;

theorem Th44:
  for C being with_binary_products category, a,b,c,d being Object of C
  st Hom(a,b) <> {} & Hom(c,d) <> {} holds Hom(a [x] c,b [x] d)<> {}
  proof
    let C be with_binary_products category;
    let a,b,c,d be Object of C;
    assume
A1: Hom(a,b) <> {};
    assume
A2: Hom(c,d) <> {};
A3: a [x] c, pr1(a,c), pr2(a,c) is_product_of a,c &
    Hom(a [x] c,a) <> {} & Hom(a [x] c,c) <> {} by Th42;
A4: b [x] d, pr1(b,d), pr2(b,d) is_product_of b,d &
    Hom(b [x] d,b) <> {} & Hom(b [x] d,d) <> {} by Th42;
    Hom(a [x] c,b) <> {} & Hom(a [x] c,d) <> {} by A3,A1,A2,CAT_7:22;
    hence thesis by A4,Def10;
  end;

definition
  let C be with_binary_products category;
  let a,b,c,d be Object of C;
  let f be Morphism of a,b such that
A1: Hom(a,b) <> {};
  let g be Morphism of c,d such that
A2: Hom(c,d) <> {};
  func f [x] g -> Morphism of a [x] c,b [x] d means :Def16:
  f * pr1(a,c) = pr1(b,d) * it & g * pr2(a,c) = pr2(b,d) * it;
  correctness
  proof
A3: a [x] c, pr1(a,c), pr2(a,c) is_product_of a,c &
    Hom(a [x] c,a) <> {} & Hom(a [x] c,c) <> {} by Th42;
A4: b [x] d, pr1(b,d), pr2(b,d) is_product_of b,d &
    Hom(b [x] d,b) <> {} & Hom(b [x] d,d) <> {} by Th42;
    Hom(a [x] c,b) <> {} & Hom(a [x] c,d) <> {} by A3,A1,A2,CAT_7:22;
    then consider h be Morphism of a [x] c,b [x] d such that
A5: pr1(b,d) * h = f * pr1(a,c) & pr2(b,d) * h = g * pr2(a,c) &
    for h1 being Morphism of a [x] c,b [x] d
    st pr1(b,d) * h1 = f * pr1(a,c) & pr2(b,d) * h1 = g * pr2(a,c)
    holds h = h1 by A4,Def10;
    for h1,h2 being Morphism of a [x] c,b [x] d st
    f * pr1(a,c) = pr1(b,d) * h1 & g * pr2(a,c) = pr2(b,d) * h1 &
    f * pr1(a,c) = pr1(b,d) * h2 & g * pr2(a,c) = pr2(b,d) * h2 holds
    h1 = h2
    proof
      let h1,h2 be Morphism of a [x] c,b [x] d;
      assume
A6:   f * pr1(a,c) = pr1(b,d) * h1 & g * pr2(a,c) = pr2(b,d) * h1;
      assume
A7:   f * pr1(a,c) = pr1(b,d) * h2 & g * pr2(a,c) = pr2(b,d) * h2;
      thus h1 = h by A6,A5 .= h2 by A5,A7;
    end;
    hence thesis by A5;
  end;
end;

definition
  let C1,C2,D be category;
  let P1 be Functor of D,C1 such that P1 is covariant;
  let P2 be Functor of D,C2 such that P2 is covariant;
  pred D,P1,P2 is_product_of C1,C2 means :Def17:
  for D1 being category, G1 being Functor of D1,C1, G2 being Functor of D1,C2
  st G1 is covariant & G2 is covariant holds
  ex H being Functor of D1,D st H is covariant & P1 (*) H = G1 & P2 (*) H = G2
  & for H1 being Functor of D1,D
  st H1 is covariant & P1 (*) H1 = G1 & P2 (*) H1 = G2 holds H = H1;
end;

theorem
  for C1,C2,A,B being category, P1 be Functor of A,C1, P2 be Functor of A,C2,
      Q1 be Functor of B,C1, Q2 be Functor of B,C2
  st P1 is covariant & P2 is covariant & Q1 is covariant & Q2 is covariant &
      A,P1,P2 is_product_of C1,C2 & B,Q1,Q2 is_product_of C1,C2
  holds A ~= B
  proof
    let C1,C2,A,B be category;
    let P1 be Functor of A,C1;
    let P2 be Functor of A,C2;
    let Q1 be Functor of B,C1;
    let Q2 be Functor of B,C2;
    assume
A1: P1 is covariant & P2 is covariant & Q1 is covariant & Q2 is covariant;
    assume
A2: A,P1,P2 is_product_of C1,C2;
    assume
A3: B,Q1,Q2 is_product_of C1,C2;
    ex FF being Functor of A,B, GG being Functor of B,A st
    FF is covariant & GG is covariant & GG (*) FF = id A & FF (*) GG = id B
    proof
      consider FF be Functor of A,B such that
A4:   FF is covariant & Q1 (*) FF = P1 & Q2 (*) FF = P2 &
      for H1 being Functor of A,B st H1 is covariant &
      Q1 (*) H1 = P1 & Q2 (*) H1 = P2 holds FF = H1 by A1,A3,Def17;
      consider GG be Functor of B,A such that
A5:   GG is covariant & P1 (*) GG = Q1 & P2 (*) GG = Q2 &
      for H1 being Functor of B,A st H1 is covariant &
      P1 (*) H1 = Q1 & P2 (*) H1 = Q2 holds GG = H1 by A1,A2,Def17;
      take FF,GG;
      thus FF is covariant & GG is covariant by A4,A5;
      set G11 = Q1 (*) FF;
      set G12 = Q2 (*) FF;
      consider H1 be Functor of A,A such that
A6:   H1 is covariant & P1 (*) H1 = G11 & P2 (*) H1 = G12 &
      for H being Functor of A,A st H is covariant & P1 (*) H = G11 &
      P2 (*) H = G12 holds H1 = H by A1,A4,A2,Def17;
A7:   P1 (*) (GG (*) FF) = G11 by A1,A4,A5,CAT_7:10;
A8:  P2 (*) (GG (*) FF) = G12 by A1,A4,A5,CAT_7:10;
A9:  P1 (*) id A = G11 by A1,A4,CAT_7:11;
A10:  P2 (*) id A = G12 by A1,A4,CAT_7:11;
      thus GG (*) FF = H1 by A6,A7,A8,A4,A5,CAT_6:35 .= id A by A6,A9,A10;
      set G21 = P1 (*) GG;
      set G22 = P2 (*) GG;
      consider H2 be Functor of B,B such that
A11:   H2 is covariant & Q1 (*) H2 = G21 & Q2 (*) H2 = G22 &
      for H being Functor of B,B st H is covariant & Q1 (*) H = G21 &
      Q2 (*) H = G22 holds H2 = H by A1,A5,A3,Def17;
A12:  Q1 (*) (FF (*) GG) = G21 by A1,A4,A5,CAT_7:10;
A13:  Q2 (*) (FF (*) GG) = G22 by A1,A4,A5,CAT_7:10;
A14:  Q1 (*) id B = G21 by A1,A5,CAT_7:11;
A15:  Q2 (*) id B = G22 by A1,A5,CAT_7:11;
      thus FF (*) GG = H2 by A11,A12,A13,A4,A5,CAT_6:35
      .= id B by A11,A14,A15;
    end;
    hence A ~= B by CAT_6:def 28;
  end;

theorem
  for C1,C2,D being category, P1 being Functor of D,C1,
      P2 being Functor of D,C2
  st P1 is covariant & P2 is covariant &
  D,P1,P2 is_product_of C1,C2 holds D,P2,P1 is_product_of C2,C1
  proof
    let C1,C2,D be category;
    let P1 be Functor of D,C1;
    let P2 be Functor of D,C2;
    assume
A1: P1 is covariant & P2 is covariant;
    assume
A2: D,P1,P2 is_product_of C1,C2;
    for D1 being category, G1 being Functor of D1,C2, G2 being Functor of D1,C1
    st G1 is covariant & G2 is covariant holds
    ex H being Functor of D1,D st H is covariant &
    P2 (*) H = G1 & P1 (*) H = G2 & for H1 being Functor of D1,D
    st H1 is covariant & P2 (*) H1 = G1 & P1 (*) H1 = G2 holds H = H1
    proof
      let D1 be category;
      let G1 be Functor of D1,C2;
      let G2 be Functor of D1,C1;
      assume
A3:   G1 is covariant & G2 is covariant;
      consider H be Functor of D1,D such that
A4:   H is covariant & P1 (*) H = G2 & P2 (*) H = G1
      & for H1 being Functor of D1,D
      st H1 is covariant & P1 (*) H1 = G2 & P2 (*) H1 = G1 holds H = H1
      by A3,A2,A1,Def17;
      take H;
      thus H is covariant & P2 (*) H = G1 & P1 (*) H = G2 by A4;
      let H1 be Functor of D1,D;
      assume H1 is covariant & P2 (*) H1 = G1 & P1 (*) H1 = G2;
      hence H = H1 by A4;
    end;
    hence D,P2,P1 is_product_of C2,C1 by A1,Def17;
  end;

notation
  let C,C1,C2 be category;
  let F1 be Functor of C1,C;
  let F2 be Functor of C2,C;
  synonym F1 [|x|] F2 for [| F1, F2 |];
end;

theorem Th47:
  for C1,C2 being category holds (C1 ->OrdC1)[|x|](C2 ->OrdC1),
  pr1(C1 ->OrdC1,C2 ->OrdC1),pr2(C1 ->OrdC1,C2 ->OrdC1) is_product_of C1,C2
  proof
    let C1,C2 be category;
    set F1 = C1 ->OrdC1;
    set F2 = C2 ->OrdC1;
A1: pr1(F1,F2) is covariant by CAT_7:52;
A2: pr2(F1,F2) is covariant by CAT_7:52;
    for D1 being category, G1 being Functor of D1,C1, G2 being Functor of D1,C2
    st G1 is covariant & G2 is covariant holds
    ex H being Functor of D1,F1 [|x|] F2 st H is covariant &
    pr1(F1,F2) (*) H = G1 & pr2(F1,F2) (*) H = G2 &
    for H1 being Functor of D1,F1 [|x|] F2 st H1 is covariant &
    pr1(F1,F2) (*) H1 = G1 & pr2(F1,F2) (*) H1 = G2 holds H = H1
    proof
      let D1 be category;
      let G1 be Functor of D1,C1;
      let G2 be Functor of D1,C2;
      assume
A3:   G1 is covariant & G2 is covariant;
A4:  F1 [|x|] F2, pr1(F1,F2), pr2(F1,F2) is_pullback_of F1,F2 by CAT_7:52;
      F1 (*) G1 = F2 (*) G2 by A3,Th29;
      then consider H be Functor of D1,F1 [|x|] F2 such that
A5:   H is covariant & pr1(F1,F2) (*) H = G1 & pr2(F1,F2) (*) H = G2
      & for H1 being Functor of D1,F1 [|x|] F2
      st H1 is covariant & pr1(F1,F2) (*) H1 = G1 &
      pr2(F1,F2) (*) H1 = G2 holds H = H1 by A4,A3,A1,A2,CAT_7:def 20;
      take H;
      thus thesis by A5;
    end;
    hence thesis by A1,A2,Def17;
end;

definition
  let C1,C2 be category;
  mode categorical_product of C1,C2 -> triple object means :Def18:
  ex D being strict category, P1 being Functor of D,C1,
  P2 being Functor of D,C2 st it = [D,P1,P2] &
  P1 is covariant & P2 is covariant & D,P1,P2 is_product_of C1,C2;
  correctness
  proof
    set D = (C1 ->OrdC1)[|x|](C2 ->OrdC1);
    reconsider P1 = pr1(C1 ->OrdC1,C2 ->OrdC1) as Functor of D,C1;
    reconsider P2 = pr2(C1 ->OrdC1,C2 ->OrdC1) as Functor of D,C2;
    take [D,P1,P2];
    P1 is covariant & P2 is covariant by CAT_7:52;
    hence thesis by Th47;
  end;
end;

definition
  let C1,C2 be category;
  func C1 [x] C2 -> strict category equals
  (the categorical_product of C1,C2)`1_3;
  correctness
  proof
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A1: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A1;
  end;
end;

definition
  let C1,C2 be category;
  func pr1(C1,C2) -> Functor of C1 [x] C2, C1 equals
  (the categorical_product of C1,C2)`2_3;
  correctness
  proof
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A1: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A1;
  end;
  func pr2(C1,C2) -> Functor of C1 [x] C2, C2 equals
  (the categorical_product of C1,C2)`3_3;
  correctness
  proof
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A2: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A2;
  end;
end;

theorem Th48:
  for C1,C2 being category holds
  C1 [x] C2,pr1(C1,C2),pr2(C1,C2) is_product_of C1,C2
  proof
    let C1,C2 be category;
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A1: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A1;
end;

registration
  let C1,C2 be category;
  cluster pr1(C1,C2) -> covariant;
  correctness
  proof
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A1: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A1;
  end;
  cluster pr2(C1,C2) -> covariant;
  correctness
  proof
    set T = the categorical_product of C1,C2;
    consider D be strict category, P1 be Functor of D,C1,
    P2 be Functor of D,C2 such that
A2: T = [D,P1,P2] & P1 is covariant & P2 is covariant &
    D,P1,P2 is_product_of C1,C2 by Def18;
    thus thesis by A2;
  end;
end;

theorem Th49:
  for C1,C2 being category holds
  C1 [x] C2 is non empty iff (C1 is non empty & C2 is non empty)
  proof
    let C1,C2 be category;
    hereby
      assume
A1:   C1 [x] C2 is non empty;
      pr1(C1,C2) is covariant;
      hence C1 is non empty by A1,CAT_6:31;
      pr2(C1,C2) is covariant;
      hence C2 is non empty by A1,CAT_6:31;
    end;
    assume
A2: C1 is non empty & C2 is non empty;
    reconsider C01 = C1 as non empty category by A2;
    reconsider C02 = C2 as non empty category by A2;
    set D = OrdC 1;
    set G01 = the covariant Functor of D,C01;
    set G02 = the covariant Functor of D,C02;
    reconsider G1 = G01 as Functor of D,C1;
    reconsider G2 = G02 as Functor of D,C2;
    C1 [x] C2,pr1(C1,C2),pr2(C1,C2) is_product_of C1,C2 by Th48;
    then
    consider H be Functor of D,C1 [x] C2 such that
A3: H is covariant & pr1(C1,C2)(*)H = G1 & pr2(C1,C2)(*)H = G2 &
    (for H1 being Functor of D,C1 [x] C2 st
    H1 is covariant & pr1(C1,C2)(*)H1 = G1 & pr2(C1,C2)(*)H1 = G2 holds H = H1)
    by Def17;
    thus C1 [x] C2 is non empty by A3,CAT_6:31;
  end;

registration
  let C1 be empty category;
  let C2 be category;
  cluster C1 [x] C2 -> empty;
  correctness by Th49;
end;

registration
  let C1 be category;
  let C2 be empty category;
  cluster C1 [x] C2 -> empty;
  correctness by Th49;
end;

registration
  let C1 be non empty category;
  let C2 be non empty category;
  cluster C1 [x] C2 -> non empty;
  correctness by Th49;
end;

definition
  let C1,C2,D1,D2 be category;
  let F1 be Functor of C1,D1;
  let F2 be Functor of C2,D2;
  assume
A1: F1 is covariant & F2 is covariant;
  func F1 [x] F2 -> Functor of C1 [x] C2,D1 [x] D2 means :Def22:
  it is covariant &
  F1(*)pr1(C1,C2) = pr1(D1,D2)(*)it & F2(*)pr2(C1,C2) = pr2(D1,D2)(*)it;
  correctness
  proof
    set G1 = F1(*)pr1(C1,C2);
    set G2 = F2(*)pr2(C1,C2);
A2: D1 [x] D2,pr1(D1,D2),pr2(D1,D2) is_product_of D1,D2 by Th48;
    G1 is covariant & G2 is covariant by A1,CAT_6:35;
    then consider H2 be Functor of C1 [x] C2,D1 [x] D2 such that
A3: H2 is covariant & pr1(D1,D2)(*)H2  = G1 & pr2(D1,D2)(*)H2 = G2 &
    (for H1 being Functor of C1 [x] C2,D1 [x] D2 st
    H1 is covariant & pr1(D1,D2)(*)H1 = G1 & pr2(D1,D2)(*)H1 = G2
    holds H2 = H1) by A2,Def17;
    thus ex H being Functor of C1 [x] C2,D1 [x] D2 st H is covariant &
    F1(*)pr1(C1,C2) = pr1(D1,D2)(*)H & F2(*)pr2(C1,C2) = pr2(D1,D2)(*)H by A3;
    let H3,H4 be Functor of C1 [x] C2,D1 [x] D2;
    assume
A4: H3 is covariant & F1(*)pr1(C1,C2) = pr1(D1,D2)(*)H3 &
    F2(*)pr2(C1,C2) = pr2(D1,D2)(*)H3;
    assume
A5: H4 is covariant & F1(*)pr1(C1,C2) = pr1(D1,D2)(*)H4 &
    F2(*)pr2(C1,C2) = pr2(D1,D2)(*)H4;
    thus H3 = H2 by A4,A3 .= H4 by A5,A3;
  end;
end;

theorem Th50:
  for A1,A2,B1,B2,C1,C2 being category, F1 being Functor of A1,B1,
      F2 being Functor of A2,B2, G1 being Functor of B1,C1,
      G2 being Functor of B2,C2
  st F1 is covariant & G1 is covariant & F2 is covariant & G2 is covariant
  holds (G1 [x] G2)(*)(F1 [x] F2) = G1(*)F1 [x] G2(*)F2
  proof
    let A1,A2,B1,B2,C1,C2 be category;
    let F1 be Functor of A1,B1;
    let F2 be Functor of A2,B2;
    let G1 be Functor of B1,C1;
    let G2 be Functor of B2,C2;
    assume
A1: F1 is covariant;
    assume
A2: G1 is covariant;
    assume
A3: F2 is covariant;
    assume
A4: G2 is covariant;
A5: F1 [x] F2 is covariant by A1,A3,Def22;
A6: G1 [x] G2 is covariant by A2,A4,Def22;
A7: G1(*)F1 is covariant by A1,A2,CAT_6:35;
A8: G2(*)F2 is covariant by A3,A4,CAT_6:35;
A9: (G1 [x] G2)(*)(F1 [x] F2) is covariant by A5,A6,CAT_6:35;
A10: (G1(*)F1)(*)pr1(A1,A2) = G1(*)(F1(*)pr1(A1,A2)) by A1,A2,CAT_7:10
    .= G1(*)(pr1(B1,B2)(*)(F1 [x] F2)) by A1,A3,Def22
    .= (G1(*)pr1(B1,B2))(*)(F1 [x] F2) by A5,A2,CAT_7:10
    .= (pr1(C1,C2)(*)(G1 [x] G2))(*)(F1 [x] F2) by A2,A4,Def22
    .= pr1(C1,C2)(*)((G1 [x] G2)(*)(F1 [x] F2)) by A5,A6,CAT_7:10;
    (G2(*)F2)(*)pr2(A1,A2) = G2(*)(F2(*)pr2(A1,A2)) by A3,A4,CAT_7:10
    .= G2(*)(pr2(B1,B2)(*)(F1 [x] F2)) by A1,A3,Def22
    .= (G2(*)pr2(B1,B2))(*)(F1 [x] F2) by A5,A4,CAT_7:10
    .= (pr2(C1,C2)(*)(G1 [x] G2))(*)(F1 [x] F2) by A2,A4,Def22
    .= pr2(C1,C2)(*)((G1 [x] G2)(*)(F1 [x] F2)) by A5,A6,CAT_7:10;
    hence thesis by A7,A10,A8,A9,Def22;
  end;

theorem Th51:
  for C1,C2 being category holds id C1 [x] id C2 = id(C1 [x] C2)
  proof
    let C1,C2 be category;
A1: (id C1)(*)pr1(C1,C2) = pr1(C1,C2) by CAT_7:11
    .= pr1(C1,C2)(*)id(C1 [x] C2) by CAT_7:11;
    (id C2)(*)pr2(C1,C2) = pr2(C1,C2) by CAT_7:11
    .= pr2(C1,C2)(*)id(C1 [x] C2) by CAT_7:11;
    hence id C1 [x] id C2 = id(C1 [x] C2) by A1,Def22;
  end;

notation
  let x,y be object;
  synonym KuratowskiPair(x,y) for [x,y];
end;

definition
  let C1,C2 be category;
  let f1 be morphism of C1;
  let f2 be morphism of C2;
  func [f1,f2] -> morphism of C1 [x] C2 means :Def23:
  pr1(C1,C2).it = f1 & pr2(C1,C2).it = f2 if C1 is not empty & C2 is not empty
  otherwise it = the morphism of C1 [x] C2;
  correctness
  proof
    C1 is not empty & C2 is not empty implies
    (ex f being morphism of C1 [x] C2 st pr1(C1,C2).f = f1 & pr2(C1,C2).f = f2)
    & for f11,f22 being morphism of C1 [x] C2 st
    pr1(C1,C2).f11 = f1 & pr2(C1,C2).f11 = f2 &
    pr1(C1,C2).f22 = f1 & pr2(C1,C2).f22 = f2 holds f11 = f22
    proof
      assume
A1:   C1 is non empty & C2 is non empty;
      reconsider D1=C1, D2=C2 as non empty category by A1;
      reconsider g1=f1 as morphism of D1;
      reconsider g2=f2 as morphism of D2;
      D1 [x] D2, pr1(D1,D2), pr2(D1,D2) is_product_of D1,D2 by Th48;
      then
      consider H be Functor of OrdC 2,D1 [x] D2 such that
A2:   H is covariant &
      pr1(D1,D2) (*) H = MORPHISM(g1) & pr2(D1,D2) (*) H = MORPHISM(g2) &
      for H1 being Functor of OrdC 2,D1 [x] D2 st H1 is covariant &
      pr1(D1,D2) (*) H1 = MORPHISM(g1) & pr2(D1,D2) (*) H1 = MORPHISM(g2)
      holds H = H1 by Def17;
      consider g12 be morphism of OrdC(2) such that
A3:   g12 is not identity &
      Ob OrdC 2 = {dom g12, cod g12} & Mor OrdC 2 = {dom g12, cod g12, g12} &
      dom g12, cod g12, g12 are_mutually_distinct by CAT_7:39;
      reconsider f = H.g12 as morphism of C1 [x] C2;
      thus ex f being morphism of C1 [x] C2 st
      pr1(C1,C2).f = f1 & pr2(C1,C2).f = f2
      proof
        take f;
        thus pr1(C1,C2).f = (pr1(D1,D2) (*) H).g12 by A2,CAT_6:34
        .= f1 by A2,A3,CAT_7:def 16;
        thus pr2(C1,C2).f = (pr2(D1,D2) (*) H).g12 by A2,CAT_6:34
        .= f2 by A2,A3,CAT_7:def 16;
      end;
      let f11,f22 be morphism of C1 [x] C2;
      reconsider g11=f11 as morphism of D1 [x] D2;
      reconsider g22=f22 as morphism of D1 [x] D2;
      assume
A4:   pr1(C1,C2).f11 = f1 & pr2(C1,C2).f11 = f2;
      assume
A5:  pr1(C1,C2).f22 = f1 & pr2(C1,C2).f22 = f2;
      set H1 = MORPHISM(g11);
      set H2 = MORPHISM(g22);
A6:   pr1(D1,D2) (*) H1 is covariant by CAT_6:35;
      (pr1(D1,D2) (*) H1).g12 = pr1(D1,D2).(H1.g12) by CAT_6:34
      .= pr1(D1,D2).g11 by A3,CAT_7:def 16
      .= (MORPHISM g1).g12 by A4,A3,CAT_7:def 16;
      then
A7:   pr1(D1,D2) (*) H1 = MORPHISM(g1) by A6,A3,Th17;
A8:  pr2(D1,D2) (*) H1 is covariant by CAT_6:35;
      (pr2(D1,D2) (*) H1).g12 = pr2(D1,D2).(H1.g12) by CAT_6:34
      .= pr2(D1,D2).g11 by A3,CAT_7:def 16
      .= (MORPHISM g2).g12 by A4,A3,CAT_7:def 16;
      then
      pr2(D1,D2) (*) H1 = MORPHISM(g2) by A8,A3,Th17;
      then
A9:   H1 = H by A7,A2;
A10:   pr1(D1,D2) (*) H2 is covariant by CAT_6:35;
      (pr1(D1,D2) (*) H2).g12 = pr1(D1,D2).(H2.g12) by CAT_6:34
      .= pr1(D1,D2).g22 by A3,CAT_7:def 16
      .= (MORPHISM g1).g12 by A5,A3,CAT_7:def 16;
      then
A11:  pr1(D1,D2) (*) H2 = MORPHISM(g1) by A10,A3,Th17;
A12:   pr2(D1,D2) (*) H2 is covariant by CAT_6:35;
      (pr2(D1,D2) (*) H2).g12 = pr2(D1,D2).(H2.g12) by CAT_6:34
      .= pr2(D1,D2).g22 by A3,CAT_7:def 16
      .= (MORPHISM g2).g12 by A5,A3,CAT_7:def 16;
      then
      pr2(D1,D2) (*) H2 = MORPHISM(g2) by A12,A3,Th17;
      hence thesis by A2,A11,A9,Th16;
    end;
    hence thesis;
  end;
end;

theorem Th52:
  for C1,C2 be category, f being morphism of C1 [x] C2
  ex f1 being morphism of C1, f2 being morphism of C2 st f = [f1,f2]
  proof
    let C1,C2 be category;
    let f be morphism of C1 [x] C2;
    per cases;
    suppose
A1:  C1 is non empty & C2 is non empty;
      take pr1(C1,C2).f, pr2(C1,C2).f;
      thus f = [pr1(C1,C2).f, pr2(C1,C2).f] by A1,Def23;
    end;
    suppose
A2:   C1 is empty or C2 is empty;
      set f1 = the morphism of C1;
      set f2 = the morphism of C2;
      take f1,f2;
      f = {} by A2,SUBSET_1:def 1
      .= the morphism of C1 [x] C2 by A2,SUBSET_1:def 1;
      hence thesis by A2,Def23;
    end;
  end;

Lm2:
  for C1,C2 being non empty category, f1,g1 being morphism of C1,
      f2,g2 being morphism of C2
  st f1 |> g1 & f2 |> g2 holds [f1,f2] |> [g1,g2]
  proof
    let C1,C2 be non empty category;
    let f1,g1 be morphism of C1;
    let f2,g2 be morphism of C2;
    assume A1: f1 |> g1;
    assume A2: f2 |> g2;
    set G1 = COMPOSITION(f1,g1);
    set G2 = COMPOSITION(f2,g2);
    C1 [x] C2, pr1(C1,C2), pr2(C1,C2) is_product_of C1,C2 by Th48;
    then
    consider H be Functor of OrdC 3,C1 [x] C2 such that
A3: H is covariant & pr1(C1,C2) (*) H = G1 & pr2(C1,C2) (*) H = G2 and
    for H1 being Functor of OrdC 3,C1 [x] C2 st H1 is covariant &
    pr1(C1,C2) (*) H1 = G1 & pr2(C1,C2) (*) H1 = G2 holds H = H1 by Def17;
    consider g3,f3 be morphism of OrdC 3 such that
A4: g3 is not identity & f3 is not identity & cod g3 = dom f3 and
    Ob (OrdC 3) = {dom g3, cod g3, cod f3} and
    Mor (OrdC 3) = {dom g3, cod g3, cod f3, g3, f3, f3(*)g3} and
    dom g3, cod g3, cod f3, g3, f3, f3(*)g3 are_mutually_distinct by Th18;
A5: f3 |> g3 by A4,CAT_7:5;
A6: pr1(C1,C2).(H.f3) = G1.f3 by A3,CAT_6:34 .= f1 by A1,A5,A4,Def1;
    pr2(C1,C2).(H.f3) = G2.f3 by A3,CAT_6:34 .= f2 by A2,A5,A4,Def1;
    then
A7: H.f3 = [f1,f2] by A6,Def23;
A8: pr1(C1,C2).(H.g3) = G1.g3 by A3,CAT_6:34 .= g1 by A1,A5,A4,Def1;
    pr2(C1,C2).(H.g3) = G2.g3 by A3,CAT_6:34 .= g2 by A2,A5,A4,Def1;
    then
A9: H.g3 = [g1,g2] by A8,Def23;
    H is multiplicative by A3,CAT_6:def 25;
    hence [f1,f2] |> [g1,g2] by A9,A7,A5,CAT_6:def 23;
  end;

theorem Th53:
  for C1,C2 being non empty category, f1,g1 being morphism of C1,
      f2,g2 being morphism of C2
  st [f1,f2] = [g1,g2] holds f1 = g1 & f2 = g2
  proof
    let C1,C2 be non empty category;
    let f1,g1 be morphism of C1;
    let f2,g2 be morphism of C2;
    assume
A1: [f1,f2] = [g1,g2];
    pr1(C1,C2).[f1,f2] = f1 & pr1(C1,C2).[g1,g2] = g1 by Def23;
    hence f1 = g1 by A1;
    pr2(C1,C2).[f1,f2] = f2 & pr2(C1,C2).[g1,g2] = g2 by Def23;
    hence f2 = g2 by A1;
  end;

theorem Th54:
  for C1,C2 being category, f1,g1 being morphism of C1,
      f2,g2 being morphism of C2
  holds [f1,f2] |> [g1,g2] iff f1 |> g1 & f2 |> g2
  proof
    let C1,C2 be category;
    let f1,g1 be morphism of C1;
    let f2,g2 be morphism of C2;
    per cases;
    suppose
A1:   C1 is non empty & C2 is non empty;
      hereby
        assume
A2:    [f1,f2] |> [g1,g2];
A3:     pr1(C1,C2).[f1,f2] = f1 & pr1(C1,C2).[g1,g2] = g1 by A1,Def23;
        pr1(C1,C2) is multiplicative by CAT_6:def 25;
        hence f1 |> g1 by A3,A2,CAT_6:def 23;
A4:     pr2(C1,C2).[f1,f2] = f2 & pr2(C1,C2).[g1,g2] = g2 by A1,Def23;
        pr2(C1,C2) is multiplicative by CAT_6:def 25;
        hence f2 |> g2 by A4,A2,CAT_6:def 23;
      end;
      assume f1 |> g1 & f2 |> g2;
      hence [f1,f2] |> [g1,g2] by A1,Lm2;
    end;
    suppose C1 is empty or C2 is empty; hence thesis by CAT_6:1; end;
  end;

theorem Th55:
  for C1,C2 being category, f1,g1 being morphism of C1,
      f2,g2 being morphism of C2 st f1 |> g1 & f2 |> g2 holds
  [f1,f2](*)[g1,g2] = [f1(*)g1,f2(*)g2]
  proof
    let C1,C2 be category;
    let f1,g1 be morphism of C1;
    let f2,g2 be morphism of C2;
    assume
A1: f1 |> g1;
    then
A2: C1 is non empty by CAT_6:1;
    assume
A3: f2 |> g2;
    then
A4: C2 is non empty by CAT_6:1;
A5: [f1,f2] |> [g1,g2] by A1,A3,Th54;
A6: pr1(C1,C2).([f1,f2](*)[g1,g2])
    = (pr1(C1,C2).[f1,f2])(*)(pr1(C1,C2).[g1,g2]) by A5,Th13
    .= f1(*)(pr1(C1,C2).[g1,g2]) by A2,A4,Def23
    .= f1(*)g1 by A2,A4,Def23;
    pr2(C1,C2).([f1,f2](*)[g1,g2])
    = (pr2(C1,C2).[f1,f2])(*)(pr2(C1,C2).[g1,g2]) by A5,Th13
    .= f2(*)(pr2(C1,C2).[g1,g2]) by A2,A4,Def23
    .= f2(*)g2 by A2,A4,Def23;
    hence [f1,f2](*)[g1,g2] = [f1(*)g1,f2(*)g2] by A2,A4,A6,Def23;
  end;

theorem Th56:
  for C1,C2 be category, f1 being morphism of C1, f2 being morphism of C2,
  f being morphism of C1 [x] C2
  st f = [f1,f2] & C1 is non empty & C2 is non empty
  holds f is identity iff f1 is identity & f2 is identity
  proof
    let C1,C2 be category;
    let f1 be morphism of C1;
    let f2 be morphism of C2;
    let f be morphism of C1 [x] C2;
    assume
A1: f = [f1,f2];
    assume
A2: C1 is non empty & C2 is non empty;
    hereby
      assume
A3:   f is identity;
      f1 = pr1(C1,C2).f & f2 = pr2(C1,C2).f by A2,A1,Def23;
      hence f1 is identity & f2 is identity by A3,CAT_6:def 22,def 25;
    end;
    assume
A4: f1 is identity & f2 is identity;
    for g being morphism of C1 [x] C2 st f |> g holds f (*) g = g
    proof
      let g be morphism of C1 [x] C2;
      assume
A5:   f |> g;
      consider g1 be morphism of C1, g2 be morphism of C2 such that
A6:   g = [g1,g2] by Th52;
A7:   f1 |> g1 & f2 |> g2 by A6,A5,A1,Th54;
      hence f (*) g = [f1(*)g1,f2(*)g2] by A6,A1,Th55
      .= [g1,f2(*)g2] by A7,A4,Th4
      .= g by A6,A7,A4,Th4;
    end;
    then
A8: f is left_identity by CAT_6:def 4;
    for g being morphism of C1 [x] C2 st g |> f holds g (*) f = g
    proof
      let g be morphism of C1 [x] C2;
      assume
A9:   g |> f;
      consider g1 be morphism of C1, g2 be morphism of C2 such that
A10:   g = [g1,g2] by Th52;
A11:   g1 |> f1 & g2 |> f2 by A10,A9,A1,Th54;
      hence g (*) f = [g1(*)f1,g2(*)f2] by A10,A1,Th55
      .= [g1,g2(*)f2] by A11,A4,Th4
      .= g by A10,A11,A4,Th4;
    end;
    hence f is identity by A8,CAT_6:def 5,def 14;
  end;

theorem Th57:
  for C1,C2 being non empty category, D1,D2 being category,
      F1 being Functor of C1,D1, F2 being Functor of C2,D2,
      c1 being morphism of C1, c2 being morphism of C2
  st F1 is covariant & F2 is covariant holds (F1[x]F2).[c1,c2] = [F1.c1,F2.c2]
  proof
    let C1,C2 be non empty category;
    let D1,D2 be category;
    let F1 be Functor of C1,D1;
    let F2 be Functor of C2,D2;
    let c1 be morphism of C1;
    let c2 be morphism of C2;
    assume
A1: F1 is covariant & F2 is covariant;
A2: D1 is not empty & D2 is not empty by A1,CAT_6:31;
A3: F1 [x] F2 is covariant by A1,Def22;
A4: F1.c1 = F1.(pr1(C1,C2).[c1,c2]) by Def23
    .= (F1(*)pr1(C1,C2)).[c1,c2] by A1,CAT_6:34
    .= (pr1(D1,D2)(*)(F1 [x] F2)).[c1,c2] by A1,Def22
    .= pr1(D1,D2).((F1 [x] F2).[c1,c2]) by A3,CAT_6:34;
    F2.c2 = F2.(pr2(C1,C2).[c1,c2]) by Def23
    .= (F2(*)pr2(C1,C2)).[c1,c2] by A1,CAT_6:34
    .= (pr2(D1,D2)(*)(F1 [x] F2)).[c1,c2] by A1,Def22
    .= pr2(D1,D2).((F1 [x] F2).[c1,c2]) by A3,CAT_6:34;
    hence (F1 [x] F2).[c1,c2] = [F1.c1,F2.c2] by A4,A2,Def23;
  end;

begin :: Natural Transformations

definition
  let C1,C2 be category;
  let F1,F2 be Functor of C1,C2;
  let T be Functor of C1,C2;
  pred T is_natural_transformation_of F1,F2 means
  for f1,f2 being morphism of C1 st f1 |> f2
  holds T.f1 |> F1.f2 & F2.f1 |> T.f2 &
  T.(f1(*)f2) = (T.f1)(*)(F1.f2) & T.(f1(*)f2) = (F2.f1)(*)(T.f2);
end;

theorem Th58:
  for C1,C2 being category, F1,F2 being Functor of C1,C2,
      T being Functor of C1,C2 st F1 is covariant & F2 is covariant holds
  T is_natural_transformation_of F1,F2 iff
  for f,f1,f2 being morphism of C1 st f1 is identity & f2 is identity &
    f1 |> f & f |> f2 holds T.f1 |> F1.f & F2.f |> T.f2 &
    T.f = (T.f1)(*)(F1.f) & T.f = (F2.f)(*)(T.f2)
  proof
    let C1,C2 be category;
    let F1,F2 be Functor of C1,C2;
    let T be Functor of C1,C2;
    assume
A1: F1 is covariant & F2 is covariant;
    hereby
      assume
A2:   T is_natural_transformation_of F1,F2;
      let f,f1,f2 be morphism of C1;
      assume
A3:   f1 is identity & f2 is identity;
      assume
A4:   f1 |> f & f |> f2;
      hence T.f1 |> F1.f & F2.f |> T.f2 by A2;
      thus T.f = T.(f1(*)f) by A3,A4,Th4
      .= (T.f1)(*)(F1.f) by A4,A2;
      thus T.f = T.(f(*)f2) by A3,A4,Th4
      .= (F2.f)(*)(T.f2) by A4,A2;
    end;
    assume
A5: for f,f1,f2 being morphism of C1 st f1 is identity & f2 is identity &
    f1 |> f & f |> f2 holds T.f1 |> F1.f & F2.f |> T.f2 &
    T.f = (T.f1)(*)(F1.f) & T.f = (F2.f)(*)(T.f2);
    for g1,g2 being morphism of C1 st g1 |> g2
    holds T.g1 |> F1.g2 & F2.g1 |> T.g2 &
    T.(g1(*)g2) = (T.g1)(*)(F1.g2) & T.(g1(*)g2) = (F2.g1)(*)(T.g2)
    proof
      let g1,g2 be morphism of C1;
      assume
A6:   g1 |> g2;
      then
A7:   C1 is non empty by CAT_6:1;
      then consider f1,f2 be morphism of C1 such that
A8:   f1 is identity & f2 is identity and
A9:   f1 |> g1(*)g2 & g1(*)g2 |> f2 by Th5;
      consider g11 be morphism of C1 such that
A10:   dom g1 = g11 & g1 |> g11 & g11 is identity by A7,CAT_6:def 18;
      f1 |> g1 by A6,A9,Th3;
      then
A11:   T.f1 |> F1.g1 & T.g1 = (T.f1)(*)(F1.g1) by A8,A10,A5;
A12:   F1.g1 |> F1.g2 by A1,A6,Th13;
      hence T.g1 |> F1.g2 by A11,Th3;
      consider g22 be morphism of C1 such that
A13:   cod g2 = g22 & g22 |> g2 & g22 is identity by A7,CAT_6:def 19;
      g2 |> f2 by A6,A9,Th3;
      then
A14:   F2.g2 |> T.f2 & T.g2 = (F2.g2)(*)(T.f2) by A13,A8,A5;
A15:  F2.g1 |> F2.g2 by A1,A6,Th13;
      hence F2.g1 |> T.g2 by A14,Th3;
      thus T.(g1(*)g2) = (T.f1)(*)(F1.(g1(*)g2)) by A8,A9,A5
      .= (T.f1)(*)((F1.g1)(*)(F1.g2)) by A1,A6,Th13
      .= (T.g1)(*)(F1.g2) by A11,A12,Th1;
      thus T.(g1(*)g2) = (F2.(g1(*)g2))(*)(T.f2) by A8,A9,A5
      .= ((F2.g1)(*)(F2.g2))(*)(T.f2) by A1,A6,Th13
      .= (F2.g1)(*)(T.g2) by A14,A15,Th1;
    end;
    hence T is_natural_transformation_of F1,F2;
  end;

theorem 
  for C1,C2 being non empty category, F1,F2 being covariant Functor of C1,C2,
      T being Function of Ob(C1), Mor(C2) holds
  (ex T1 being Functor of C1,C2
   st T = T1|Ob(C1) & T1 is_natural_transformation_of F1,F2) iff
  (for a being Object of C1 holds T.a in Hom(F1.a,F2.a)) &
  (for a1,a2 being Object of C1,f being Morphism of a1,a2 st Hom(a1,a2) <> {}
   holds (T.a2)(*)(F1.f) = (F2.f)(*)(T.a1))
  proof
    let C1,C2 be non empty category;
    let F1,F2 be covariant Functor of C1,C2;
    let T be Function of Ob(C1), Mor(C2);
    hereby
      given T1 be Functor of C1,C2 such that
A1:   T = T1|Ob(C1) and
A2:   T1 is_natural_transformation_of F1,F2;
      thus for a being Object of C1 holds T.a in Hom(F1.a,F2.a)
      proof
        let a be Object of C1;
        a in Ob C1;
        then a in {f where f is morphism of C1: f is identity & f in Mor C1}
        by CAT_6:def 17;
        then consider f be morphism of C1 such that
A3:     a = f & f is identity & f in Mor(C1);
        f |> f by A3,CAT_6:24;
        then
A4:     T1.f |> F1.f & F2.f |> T1.f & T1.f = (T1.f)(*)(F1.f) &
        T1.f = (F2.f)(*)(T1.f) by A2,Th58,A3;
        reconsider g = T1.f as morphism of C2;
        F1 is identity-preserving &
        F2 is identity-preserving by CAT_6:def 25;
        then
A5:    dom(T1.f) = F1.f & cod(T1.f) = F2.f by A4,CAT_6:26,27,A3,CAT_6:def 22;
A6:    T1.f = T1.a by A3,CAT_6:def 21 .= T.a by A1,FUNCT_1:49;
        F1.f = F1.a & F2.f = F2.a by A3,CAT_6:def 21;
        hence T.a in Hom(F1.a,F2.a) by A6,A5,CAT_7:20;
      end;
      let a1,a2 be Object of C1;
      let f be Morphism of a1,a2;
      assume Hom(a1,a2) <> {};
      then f in Hom(a1,a2) by CAT_7:def 3;
      then f in {g where g is morphism of C1: ex f1, f2 being morphism of C1 st
      a1 = f1 & a2 = f2 & g |> f1 & f2 |> g } by CAT_7:def 1;
      then consider g be morphism of C1 such that
A7:  f = g & ex f1, f2 being morphism of C1 st
      a1 = f1 & a2 = f2 & g |> f1 & f2 |> g;
      consider f1, f2 be morphism of C1 such that
A8:  a1 = f1 & a2 = f2 & g |> f1 & f2 |> g by A7;
      f1 is identity & f2 is identity by A8,CAT_6:22;
      then
A9:  T1.f2 |> F1.f & F2.f |> T1.f1 &
      T1.f = (T1.f2)(*)(F1.f) & T1.f = (F2.f)(*)(T1.f1) by A2,Th58,A8,A7;
A10:  T1.f2 = T1.a2 by A8,CAT_6:def 21 .= T.a2 by A1,FUNCT_1:49;
      T1.f1 = T1.a1 by A8,CAT_6:def 21 .= T.a1 by A1,FUNCT_1:49;
      hence (T.a2)(*)(F1.f) = (F2.f)(*)(T.a1) by A9,A10;
    end;
    assume
A11: for a being Object of C1 holds T.a in Hom(F1.a,F2.a);
    assume
A12: for a1,a2 being Object of C1,f being Morphism of a1,a2
    st Hom(a1,a2) <> {} holds (T.a2)(*)(F1.f) = (F2.f)(*)(T.a1);
    defpred P[object,object] means
    for f being morphism of C1 st $1 = f holds $2 = (T.cod f)(*)(F1.f);
A13: for x being object st x in the carrier of C1
    ex y being object st y in the carrier of C2 & P[x,y]
    proof
      let x be object;
      assume x in the carrier of C1;
      then reconsider f = x as morphism of C1 by CAT_6:def 1;
      reconsider y = (T.cod f)(*)(F1.f) as object;
      take y;
      y in Mor C2;
      hence y in the carrier of C2 by CAT_6:def 1;
      thus P[x,y];
    end;
    consider T1 be Function of the carrier of C1, the carrier of C2 such that
A14: for x being object st x in the carrier of C1
    holds P[x,T1.x] from FUNCT_2:sch 1(A13);
    reconsider T1 as Functor of C1,C2;
    take T1;
A15: dom T1 = the carrier of C1 by FUNCT_2:def 1 .= Mor C1 by CAT_6:def 1;
A16: dom T = Ob C1 by FUNCT_2:def 1 .= dom(T1|Ob(C1)) by A15,RELAT_1:62;
    for x being object st x in dom T holds T.x = (T1|Ob(C1)).x
    proof
      let x be object;
      assume
A17:  x in dom T;
      then
A18:   x in Ob C1;
      x in Mor C1 by A18;
      then
A19:  x in the carrier of C1 by CAT_6:def 1;
      reconsider f = x as morphism of C1 by A18;
A20:  F1 is identity-preserving by CAT_6:def 25;
A21:  f is identity by A17,CAT_6:22;
A22:  F1.f is identity by A17,CAT_6:22,A20,CAT_6:def 22;
      T.(cod f) in Hom(F1.(cod f),F2.(cod f)) by A11;
      then dom(T.cod f) = F1.(cod f) by CAT_7:20;
      then dom(T.cod f) = cod(F1.f) by CAT_6:32;
      then
A23:  T.(cod f) |> F1.f by CAT_7:5;
A24:  cod f = x by A21,CAT_7:6;
      T1.x = (T.cod f)(*)(F1.f) by A19,A14
      .= T.x by A24,A23,A22,Th4;
      hence T.x = (T1|Ob(C1)).x by A17,FUNCT_1:49;
    end;
    hence
A25: T = T1|Ob(C1) by A16,FUNCT_1:2;
    for f,f1,f2 being morphism of C1 st f1 is identity & f2 is identity &
    f1 |> f & f |> f2 holds T1.f1 |> F1.f & F2.f |> T1.f2 &
    T1.f = (T1.f1)(*)(F1.f) & T1.f = (F2.f)(*)(T1.f2)
    proof
      let f,f1,f2 be morphism of C1;
      assume
A26:   f1 is identity & f2 is identity;
      assume
A27:  f1 |> f & f |> f2;
      reconsider o1 = f1 as Object of C1 by A26,CAT_6:22;
      T.o1 in Hom(F1.o1,F2.o1) by A11;
      then dom(T.o1) = F1.o1 by CAT_7:20;
      then dom(T.o1) = F1.(cod f1) by A26,CAT_7:6;
      then dom(T.o1) = cod(F1.f1) by CAT_6:32;
      then
A28:  T.o1 |> F1.f1 by CAT_7:5;
A29:  F1.f1 |> F1.f by A27,Th13;
A30:  F1.f1 is identity by A26,CAT_6:def 22,def 25;
A31: T.o1 = T1.o1 by A25,FUNCT_1:49 .= T1.f1 by CAT_6:def 21;
      hence T1.f1 |> F1.f by A28,A29,A30,CAT_7:3;
      reconsider o2 = f2 as Object of C1 by A26,CAT_6:22;
      T.o2 in Hom(F1.o2,F2.o2) by A11;
      then cod(T.o2) = F2.o2 by CAT_7:20;
      then cod(T.o2) = F2.(dom f2) by A26,CAT_7:6;
      then cod(T.o2) = dom(F2.f2) by CAT_6:32;
      then
A32:  F2.f2 |> T.o2 by CAT_7:5;
A33:  F2.f |> F2.f2 by A27,Th13;
A34:  F2.f2 is identity by A26,CAT_6:def 22,def 25;
A35: T.o2 = T1.o2 by A25,FUNCT_1:49 .= T1.f2 by CAT_6:def 21;
      hence F2.f |> T1.f2 by A32,A33,A34,CAT_7:3;
      reconsider x = f as object;
      f in Mor C1;
      then x in the carrier of C1 by CAT_6:def 1;
      then
A36: T1.x = (T.cod f)(*)(F1.f) by A14
      .= (T1.f1)(*)(F1.f) by A31,A26,A27,CAT_6:def 19;
      hence T1.f = (T1.f1)(*)(F1.f) by CAT_6:def 21;
      dom f = o2 & cod f = o1 by A26,A27,CAT_6:def 18,def 19;
      then
A37:  f in Hom(o2,o1) by CAT_7:20;
      then reconsider g = f as Morphism of o2,o1 by CAT_7:def 3;
      (T.o1)(*)(F1.g) = (F2.g)(*)(T.o2) by A37,A12;
      hence T1.f = (F2.f)(*)(T1.f2) by A36,A31,A35,CAT_6:def 21;
    end;
    hence T1 is_natural_transformation_of F1,F2 by Th58;
  end;

theorem
  for C,D being Category, F1,F2 being Functor of C,D,
  G1,G2,T being Functor of alter(C),alter(D) st F1 = G1 & F2 = G2 &
  T is_natural_transformation_of G1,G2
  holds (IdMap C)*T is natural_transformation of F1,F2
  proof
    let C,D be Category;
    let F1,F2 be Functor of C,D;
    let G1,G2,T be Functor of alter(C),alter(D);
    assume
A1: F1 = G1 & F2 = G2;
    assume
A2: T is_natural_transformation_of G1,G2;
A3: alter C = CategoryStr(#the carrier' of C, the Comp of C#) by CAT_6:def 34;
A4: alter D = CategoryStr(#the carrier' of D, the Comp of D#) by CAT_6:def 34;
A5: for a being Object of C holds T.(id a) in Hom(F1.a,F2.a)
    proof
      let a be Object of C;
      reconsider f = id a as morphism of alter C by A3,CAT_6:def 1;
A6:   f is identity by CAT_6:41;
      f |> f by CAT_6:24,41;
      then
A7:   T.f |> G1.f & G2.f |> T.f & T.(f(*)f) = (T.f)(*)(G1.f) &
      T.(f(*)f) = (G2.f)(*)(T.f) by A2;
      reconsider g = T.f as Morphism of D by A4,CAT_6:def 1;
      G1 is covariant & G2 is covariant by A1,CAT_6:42;
      then G1 is identity-preserving &
      G2 is identity-preserving by CAT_6:def 25;
      then dom(T.f) = G1.f & cod(T.f) = G2.f
      by A7,CAT_6:26,27,A6,CAT_6:def 22;
      then dom(T.f) = F1.f & cod(T.f) = F2.f by A1,CAT_6:def 21;
      then F1.f = id dom g & F2.f = id cod g by Th14;
      then
A8:   dom g = F1.a & cod g = F2.a by CAT_1:70;
      g in Hom(dom g,cod g) by CAT_1:1;
      hence T.(id a) in Hom(F1.a,F2.a) by A8,CAT_6:def 21;
    end;
A9: for a being Object of C holds Hom(F1.a,F2.a) <> {} by A5;
    then
A10: F1 is_transformable_to F2 by NATTRA_1:def 2;
    reconsider T1 = T as
    Function of the carrier' of C, the carrier' of D by A3,A4;
    reconsider t1 = (IdMap C)*T1 as
    Function of the carrier of C, the carrier' of D;
A11: ex t being transformation of F1,F2 st t = (IdMap C)*T1 &
    for a,b being Object of C st
    Hom(a,b) <> {} holds
    (for f being Morphism of a,b holds t.b*F1/.f = F2/.f*t.a)
    proof
      for a being Object of C holds t1.a is Morphism of F1.a,F2.a
      proof
        let a be Object of C;
        a in the carrier of C;
        then
A12:     a in dom IdMap C by FUNCT_2:def 1;
        t1.a = T1.((IdMap C).a) by A12,FUNCT_1:13
        .= T.(id a) by ISOCAT_1:def 12;
        then t1.a in Hom(F1.a,F2.a) by A5;
        hence t1.a is Morphism of F1.a,F2.a by CAT_1:def 5;
      end;
      then reconsider t = t1 as transformation of F1,F2 by A10,NATTRA_1:def 3;
      take t;
      thus t = (IdMap C)*T1;
      let a,b be Object of C;
      assume
A13:  Hom(a,b) <> {};
      let f be Morphism of a,b;
      a in the carrier of C;
      then
A14:   a in dom IdMap C by FUNCT_2:def 1;
A15: t.a = t1.a by A9,NATTRA_1:def 5,NATTRA_1:def 2
      .= T1.((IdMap C).a) by A14,FUNCT_1:13
      .= T.(id a) by ISOCAT_1:def 12;
      b in the carrier of C;
      then
A16:  b in dom IdMap C by FUNCT_2:def 1;
A17:  t.b = t1.b by A9,NATTRA_1:def 5,NATTRA_1:def 2
      .= T1.((IdMap C).b) by A16,FUNCT_1:13
      .= T.(id b) by ISOCAT_1:def 12;
      reconsider g2 = id a as morphism of alter C by A3,CAT_6:def 1;
      reconsider g1 = id b as morphism of alter C by A3,CAT_6:def 1;
      reconsider g = f as morphism of alter C by A3,CAT_6:def 1;
A18:  f in Hom(a,b) by A13,CAT_1:def 5;
      cod f = dom id b by A18,CAT_1:1;
      then
A19:  KuratowskiPair(g1,g) in dom the composition of alter C by A3,CAT_1:def 6;
      then
A20:  g1 |> g by CAT_6:def 2;
      dom f = cod id a by A18,CAT_1:1;
      then
A21:  KuratowskiPair(g,g2) in dom the composition of alter C by A3,CAT_1:def 6;
      then
A22:  g |> g2 by CAT_6:def 2;
A23:  for g being morphism of alter C st g1 |> g holds g1 (*) g = g
      proof
        let g be morphism of alter C;
        assume
A24:    g1 |> g;
        reconsider f = g as Morphism of C by A3,CAT_6:def 1;
A25:    [id b,f] in dom the Comp of C by A3,A24,CAT_6:def 2;
        then dom id b = cod f by CAT_1:15;
        then (id b)(*)f = f by CAT_1:21;
        hence g1 (*) g = g by A25,CAT_6:40;
      end;
A26:  for g being morphism of alter C st g |> g2 holds g (*) g2 = g
      proof
        let g be morphism of alter C;
        assume
A27:    g |> g2;
        reconsider f = g as Morphism of C by A3,CAT_6:def 1;
A28:    [f,id a] in dom the Comp of C by A3,A27,CAT_6:def 2;
        then cod id a = dom f by CAT_1:15;
        then f(*)(id a) = f by CAT_1:22;
        hence g (*) g2 = g by A28,CAT_6:40;
      end;
A29:  T.g1 |> G1.g & G2.g |> T.g2 & T.(g1(*)g) = (T.g1)(*)(G1.g) &
      T.(g(*)g2) = (G2.g)(*)(T.g2) by A20,A22,A2;
A30:  g1(*)g = g & g(*)g2 = g by A19,A21,A23,A26,CAT_6:def 2;
A31:  Hom(F1.b,F2.b) <> {} by A5;
A32:  Hom(F1.a,F1.b) <> {} by A13,CAT_1:82;
A33:  Hom(F1.a,F2.a) <> {} by A5;
A34:  Hom(F2.a,F2.b) <> {} by A13,CAT_1:82;
A35:  t.b = T.g1 by A17,CAT_6:def 21;
A36:  F1.f = G1.g by A1,CAT_6:def 21;
A37:  t.a = T.g2 by A15,CAT_6:def 21;
A38:  F2.f = G2.g by A1,CAT_6:def 21;
A39:  [t.b,F1.f] in dom the Comp of D by A35,A36,A4,A29,CAT_6:def 2;
A40:  [F2.f,t.a] in dom the Comp of D by A37,A38,A4,A29,CAT_6:def 2;
      thus t.b*F1/.f = (t.b)(*)(F1/.f) by A31,A32,CAT_1:def 13
      .= (t.b)(*)(F1.f) by A13,CAT_3:def 10
      .= (the Comp of D).(t.b,F1.f) by A39,CAT_1:def 1
      .= (the composition of alter D).(T.g1,G1.g) by A36,A4,A17,CAT_6:def 21
      .= (T.g1)(*)(G1.g) by A29,CAT_6:def 3
      .= (the composition of alter D).(G2.g,T.g2) by A30,A29,CAT_6:def 3
      .= (the Comp of D).(F2.f,t.a) by A38,A4,A15,CAT_6:def 21
      .= (F2.f)(*)(t.a) by A40,CAT_1:def 1
      .= (F2/.f)(*)(t.a) by A13,CAT_3:def 10
      .= F2/.f*t.a by A33,A34,CAT_1:def 13;
    end;
    then
A41: F1 is_naturally_transformable_to F2 by A9,NATTRA_1:def 7,def 2;
    consider t be transformation of F1,F2 such that
A42: t = (IdMap C)*T1 & for a,b being Object of C st Hom(a,b) <> {} holds
    (for f being Morphism of a,b holds t.b*F1/.f = F2/.f*t.a) by A11;
    thus thesis by A41,A42,NATTRA_1:def 8;
  end;

definition
  let C,D be category;
  let F1,F2 be Functor of C,D;
  pred F1 is_naturally_transformable_to F2 means
  ex T being Functor of C,D st T is_natural_transformation_of F1,F2;
end;

definition
  let C,D be category;
  let F1,F2 be Functor of C,D;
  assume
A1: F1 is_naturally_transformable_to F2;
  mode natural_transformation of F1,F2 -> Functor of C,D means :Def26:
  it is_natural_transformation_of F1,F2;
  correctness by A1;
end;

theorem Th61:
  for C,D being category, F being Functor of C,D
  st F is covariant holds F is_natural_transformation_of F,F
  proof
    let C,D be category;
    let F be Functor of C,D;
    assume
A1: F is covariant;
    then
A2: F is multiplicative by CAT_6:def 25;
    for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
    f1 |> f & f |> f2 holds F.f1 |> F.f & F.f |> F.f2 &
    F.f = (F.f1)(*)(F.f) & F.f = (F.f)(*)(F.f2)
    proof
      let f,f1,f2 be morphism of C;
      assume
A3:  f1 is identity;
      assume
A4:  f2 is identity;
      assume
A5:   f1 |> f;
      assume
A6:   f |> f2;
      thus F.f1 |> F.f by A2,A5,CAT_6:def 23;
      thus F.f |> F.f2 by A2,A6,CAT_6:def 23;
      thus F.f = F.(f1(*)f) by A3,A5,CAT_6:def 4,def 14
      .= (F.f1)(*)(F.f) by A2,A5,CAT_6:def 23;
      thus F.f = F.(f(*)f2) by A4,A6,CAT_6:def 5,def 14
      .= (F.f)(*)(F.f2) by A2,A6,CAT_6:def 23;
    end;
    hence F is_natural_transformation_of F,F by A1,Th58;
  end;

Lm3:
  for C,D being category, F,F1,F2 being Functor of C,D,
  T1 being natural_transformation of F1,F,
  T2 being natural_transformation of F,F2 st
  F1 is_naturally_transformable_to F & F is_naturally_transformable_to F2 &
  F is covariant & F1 is covariant & F2 is covariant holds
  ex T being natural_transformation of F1,F2 st
  T is_natural_transformation_of F1,F2 &
  for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
  f |> f1 & f2 |> f holds T.f = (T2.f2)(*)(F.f)(*)(T1.f1)
  proof
    let C,D be category;
    let F,F1,F2 be Functor of C,D;
    let T1 be natural_transformation of F1,F;
    let T2 be natural_transformation of F,F2;
    assume
A1: F1 is_naturally_transformable_to F & F is_naturally_transformable_to F2;
    assume
A2: F is covariant & F1 is covariant & F2 is covariant;
    per cases;
    suppose
A3:   C is empty;
      set T = the natural_transformation of F1,F2;
      take T;
      thus thesis by A3,CAT_6:1;
    end;
    suppose
A4:   C is non empty;
      then
A5:   D is non empty by A2,CAT_6:31;
      defpred P[object,object] means
      ex f being morphism of C st $1 = f & (for f1,f2 being morphism of C
      st f1 is identity & f2 is identity & f |> f1 & f2 |> f
      holds $2 = (T2.f2)(*)(F.f)(*)(T1.f1));
A6:   T1 is_natural_transformation_of F1,F by A1,Def26;
A7:   T2 is_natural_transformation_of F,F2 by A1,Def26;
A8:   for x being object st x in the carrier of C
      ex y being object st y in the carrier of D & P[x,y]
      proof
        let x be object;
        assume x in the carrier of C;
        then reconsider f = x as morphism of C by CAT_6:def 1;
        Ob C is non empty by A4;
        then dom f in Ob C & cod f in Ob C;
        then reconsider f1 = dom f, f2 = cod f as morphism of C;
        reconsider y = (T2.f2)(*)(F.f)(*)(T1.f1) as object;
        take y;
        Mor D is non empty by A5;
        then y in Mor D;
        hence y in the carrier of D by CAT_6:def 1;
        thus P[x,y]
        proof
          take f;
          thus x = f;
          let f1,f2 be morphism of C;
          assume f1 is identity & f2 is identity & f |> f1 & f2 |> f;
          then f1 = dom f & f2 = cod f by CAT_6:26,27;
          hence y = (T2.f2)(*)(F.f)(*)(T1.f1);
        end;
      end;
      consider T be Function of the carrier of C, the carrier of D such that
A9:   for x being object st x in the carrier of C holds P[x,T.x]
      from FUNCT_2:sch 1(A8);
      reconsider T as Functor of C,D;
A10:  for f,f1,f2 be morphism of C st f1 is identity & f2 is identity &
      f |> f1 & f2 |> f holds T.f = (T2.f2)(*)(F.f)(*)(T1.f1)
      proof
        let f,f1,f2 be morphism of C;
        assume
A11:     f1 is identity & f2 is identity & f |> f1 & f2 |> f;
        Mor C is non empty by A4;
        then f in Mor C;
        then
A12:     f in the carrier of C by CAT_6:def 1;
        reconsider x = f as object;
        consider ff being morphism of C such that
A13:     x = ff & (for f1,f2 being morphism of C
        st f1 is identity & f2 is identity & ff |> f1 & f2 |> ff
        holds T.x = (T2.f2)(*)(F.ff)(*)(T1.f1)) by A12,A9;
        T.x = (T2.f2)(*)(F.ff)(*)(T1.f1) by A11,A13;
        hence T.f = (T2.f2)(*)(F.f)(*)(T1.f1) by A4,A13,CAT_6:def 21;
      end;
A14:  for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
      f1 |> f & f |> f2 holds T.f1 |> F1.f & F2.f |> T.f2 &
      T.f = (T.f1)(*)(F1.f) & T.f = (F2.f)(*)(T.f2)
      proof
        let f,f1,f2 be morphism of C;
        assume
A15:    f1 is identity & f2 is identity & f1 |> f & f |> f2;
A16:    T1.f1 |> F1.f & F.f |> T1.f2 & T1.f = (T1.f1)(*)(F1.f) &
        T1.f = (F.f)(*)(T1.f2) by A2,A15,A6,Th58;
A17:    T2.f1 |> F.f & F2.f |> T2.f2 & T2.f = (T2.f1)(*)(F.f) &
        T2.f = (F2.f)(*)(T2.f2) by A2,A15,A7,Th58;
A18:    f1 |> f1 by A4,A15,CAT_6:24;
        then
A19:    T2.f1 |> F.f1 by A7;
        F.f1 |> T1.f1 by A18,A6;
        then dom(F.f1) = cod(T1.f1) by A5,CAT_7:5;
        then dom((T2.f1)(*)(F.f1)) = cod(T1.f1) by A19,CAT_7:4;
        then
A20:    (T2.f1)(*)(F.f1) |> T1.f1 by A5,CAT_7:5;
A21:    f1 |> f1 by A4,A15,CAT_6:24;
        then T.f1 = (T2.f1)(*)(F.f1)(*)(T1.f1) by A15,A10;
        then
A22:    dom(T.f1) = dom(T1.f1) by A20,CAT_7:4;
        dom(T1.f1) = cod(F1.f) by A16,A5,CAT_7:5;
        hence T.f1 |> F1.f by A22,A5,CAT_7:5;
A23:    f2 |> f2 by A4,A15,CAT_6:24;
        then
A24:    T2.f2 |> F.f2 & F2.f2 |> T2.f2 & T2.f2 = (T2.f2)(*)(F.f2) &
        T2.f2 = (F2.f2)(*)(T2.f2) by A2,A7,A15,Th58;
A25:    T1.f2 |> F1.f2 & F.f2 |> T1.f2 & T1.f2 = (T1.f2)(*)(F1.f2) &
        T1.f2 = (F.f2)(*)(T1.f2) by A2,A23,A6,A15,Th58;
A26:    D is left_composable & D is right_composable by CAT_6:def 11;
A27:    T2.f2 |> (F.f2)(*)(T1.f2) by A24,A25,A26,CAT_6:def 9;
A28:    f2 |> f2 by A4,A15,CAT_6:24;
        then T.f2 = (T2.f2)(*)(F.f2)(*)(T1.f2) by A15,A10;
        then
A29:    cod(T.f2) = cod(T2.f2) by A24,A25,A27,CAT_7:4;
        F2.f |> T2.f2 by A15,A7;
        then cod(T2.f2) = dom(F2.f) by A5,CAT_7:5;
        hence F2.f |> T.f2 by A29,A5,CAT_7:5;
A30:    F is identity-preserving & F is multiplicative by A2,CAT_6:def 25;
A31:    F.f = F.(f(*)f2) by A15,CAT_6:def 14,CAT_6:def 5
        .= (F.f)(*)(F.f2) by A30,A15,CAT_6:def 23;
A32:    T2.f1 |> F.f1 by A18,A7;
A33:    F.f1 |> T1.f1 by A18,A6;
A34:    F.f1 |> F.f by A30,A15,CAT_6:def 23;
A35:    F.f |> F.f2 by A30,A15,CAT_6:def 23;
A36:    F2.f |> T2.f2 by A15,A7;
A37:    T2.f2 |> F.f2 by A23,A7;
        thus T.f = (T2.f1)(*)((F.f)(*)(F.f2))(*)(T1.f2) by A10,A15,A31
        .= (T2.f1)(*)(F.f1)(*)(F.f)(*)(T1.f2) by A2,A31,A15,A18,A7,Th58
        .= ((T2.f1)(*)(F.f1))(*)((F.f)(*)(T1.f2)) by A32,A34,A16,Th2
        .= (T2.f1)(*)(F.f1)(*)(T1.f1)(*)(F1.f) by A32,A33,A16,Th2
        .= (T.f1)(*)(F1.f) by A21,A15,A10;
        thus T.f = (T2.f1)(*)((F.f)(*)(F.f2))(*)(T1.f2) by A10,A15,A31
        .= (F2.f)(*)(T2.f2)(*)(F.f2)(*)(T1.f2) by A17,A35,A25,Th2
        .= (F2.f)(*)((T2.f2)(*)(F.f2)(*)(T1.f2)) by A25,A36,A37,Th2
        .= (F2.f)(*)(T.f2) by A28,A15,A10;
      end;
      then
A38:  T is_natural_transformation_of F1,F2 by A2,Th58;
      then F1 is_naturally_transformable_to F2;
      then reconsider T as natural_transformation of F1,F2 by A38,Def26;
      take T;
      thus thesis by A2,A14,A10,Th58;
    end;
  end;

definition
  let C,D be category;
  let F,F1,F2 be Functor of C,D;
  assume that
A1: F1 is_naturally_transformable_to F &
    F is_naturally_transformable_to F2 and
A2: F is covariant & F1 is covariant & F2 is covariant;
  let T1 be natural_transformation of F1,F;
  let T2 be natural_transformation of F,F2;
  func T2`*`T1 -> natural_transformation of F1,F2 means :Def27:
  for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
  f |> f1 & f2 |> f holds it.f = (T2.f2)(*)(F.f)(*)(T1.f1);
  existence
  proof
    consider T be natural_transformation of F1,F2 such that
A3: T is_natural_transformation_of F1,F2 &
    for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
    f |> f1 & f2 |> f holds T.f = (T2.f2)(*)(F.f)(*)(T1.f1) by A1,A2,Lm3;
    take T;
    thus thesis by A3;
  end;
  uniqueness
  proof
    let IT1,IT2 be natural_transformation of F1,F2;
    assume
A4: for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
    f |> f1 & f2 |> f holds IT1.f = (T2.f2)(*)(F.f)(*)(T1.f1);
    assume
A5: for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
    f |> f1 & f2 |> f holds IT2.f = (T2.f2)(*)(F.f)(*)(T1.f1);
    for x being object st x in the carrier of C holds IT1.x = IT2.x
    proof
      let x be object;
      assume
A6:   x in the carrier of C;
      reconsider f = x as morphism of C by A6,CAT_6:def 1;
      consider f2 be morphism of C such that
A7:   f2 |> f & f2 is left_identity by A6,CAT_6:def 6,def 12;
      consider f1 be morphism of C such that
A8:   f |> f1 & f1 is right_identity by A6,CAT_6:def 7,def 12;
      f1 is left_identity & f2 is right_identity by A7,A8,CAT_6:9;
      then
A9:   f1 is identity & f2 is identity by A7,A8,CAT_6:def 14;
A10:  C is non empty by A6;
      hence IT1.x = IT1.f by CAT_6:def 21
      .= (T2.f2)(*)(F.f)(*)(T1.f1) by A4,A7,A8,A9
      .= IT2.f by A5,A7,A8,A9
      .= IT2.x by A10,CAT_6:def 21;
    end;
    hence IT1 = IT2 by FUNCT_2:12;
  end;
end;

theorem Th62:
  for C,D being category, F,F1,F2 being Functor of C,D
  st F1 is_naturally_transformable_to F & F is_naturally_transformable_to F2 &
  F is covariant & F1 is covariant & F2 is covariant
  holds F1 is_naturally_transformable_to F2
  proof
    let C,D be category;
    let F,F1,F2 be Functor of C,D;
    set T1 = the natural_transformation of F1,F;
    set T2 = the natural_transformation of F,F2;
    assume F1 is_naturally_transformable_to F &
    F is_naturally_transformable_to F2 & F is covariant & F1 is covariant
    & F2 is covariant;
    then ex T being natural_transformation of F1,F2 st
    T is_natural_transformation_of F1,F2 &
    for f,f1,f2 being morphism of C st f1 is identity & f2 is identity &
    f |> f1 & f2 |> f holds T.f = (T2.f2)(*)(F.f)(*)(T1.f1) by Lm3;
    hence F1 is_naturally_transformable_to F2;
  end;

Lm4:
  for C1,C2 being category, X being set st C1 is non empty & C2 is empty &
    X = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
      T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
      & F1 is_naturally_transformable_to F2}
    holds X = {} & {[[x2,x1],x3] where x1,x2,x3 is
         Element of X: ex F1,F2,F3 being Functor of C1,C2,
         T1 being natural_transformation of F1,F2,
         T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
         x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} = {}
  proof
    let C1,C2 be category;
    let X be set;
    assume
A1: C1 is non empty & C2 is empty;
    assume
A2: X = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
    T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant &
    F1 is_naturally_transformable_to F2};
    set Y = {[[x2,x1],x3] where x1,x2,x3 is
         Element of X: ex F1,F2,F3 being Functor of C1,C2,
         T1 being natural_transformation of F1,F2,
         T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
         x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]};
    thus
A3: X = {}
    proof
      assume X <> {};
      then consider x be object such that
A4:   x in X by XBOOLE_0:def 1;
      consider F1,F2 be Functor of C1,C2,
      T be natural_transformation of F1,F2 such that
A5:   x = [[F1,F2],T] & F1 is covariant & F2 is covariant &
      F1 is_naturally_transformable_to F2 by A4,A2;
      thus contradiction by A5,A1,CAT_6:31;
    end;
    thus Y = {}
    proof
      assume Y <> {};
      then consider x be object such that
A6:   x in Y by XBOOLE_0:def 1;
      consider x1,x2,x3 be Element of X such that
A7:   x = [[x2,x1],x3] & ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1] by A6;
      thus contradiction by A7,A3;
    end;
  end;

Lm5:
  for C1,C2 being category, X1,X2 being set st C1 is empty &
    X1 = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
      T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
      & F1 is_naturally_transformable_to F2} & X2 = [[{},{}],{}]
    holds X1 = {X2} & {[[x2,x1],x3] where x1,x2,x3 is
         Element of X1: ex F1,F2,F3 being Functor of C1,C2,
         T1 being natural_transformation of F1,F2,
         T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
         x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} = {[[X2,X2],X2]}
  proof
    let C1,C2 be category;
    let X1,X2 be set;
    assume
A1: C1 is empty;
    assume
A2: X1 = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
     T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant &
     F1 is_naturally_transformable_to F2};
    assume
A3: X2 = [[{},{}],{}];
    set Y = {[[x2,x1],x3] where x1,x2,x3 is Element of X1:
    ex F1,F2,F3 being Functor of C1,C2,
       T1 being natural_transformation of F1,F2,
       T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
       x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]};
A4: for x being object holds x in X1 iff x = X2
    proof
      let x be object;
      hereby
        assume x in X1;
        then consider F1,F2 be Functor of C1,C2,
        T be natural_transformation of F1,F2 such that
A5:     x = [[F1,F2],T] & F1 is covariant & F2 is covariant &
        F1 is_naturally_transformable_to F2 by A2;
        F1 = {} & F2 = {} & T = {} by A1;
        hence x = X2 by A3,A5;
      end;
      assume
A6:  x = X2;
      reconsider CA = C1 as empty category by A1;
      set F = the covariant Functor of CA,C2;
      reconsider F as Functor of C1,C2;
A7:   F is_natural_transformation_of F,F by Th61;
A8:   F is_naturally_transformable_to F by Th61;
      then reconsider T = F as natural_transformation of F,F by A7,Def26;
      [[F,F],T] in X1 by A8,A2;
      hence x in X1 by A3,A6;
    end;
    hence X1 = {X2} by TARSKI:def 1;
    for x being object holds x in Y iff x = [[X2,X2],X2]
    proof
      let x be object;
      hereby
        assume x in Y;
        then consider x1,x2,x3 be Element of X1 such that
A9:     x = [[x2,x1],x3] & ex F1,F2,F3 being Functor of C1,C2,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
        x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1];
        consider F1,F2,F3 be Functor of C1,C2,
        T1 be natural_transformation of F1,F2,
        T2 be natural_transformation of F2,F3 such that
A10:     x1 = [[F1,F2],T1] & x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1] by A9;
        F1 = {} & F2 = {} & F3 = {} & T1 = {} & T2 = {} & T2`*`T1 = {} by A1;
        hence x = [[X2,X2],X2] by A9,A3,A10;
      end;
      assume
A11:  x = [[X2,X2],X2];
      reconsider CA = C1 as empty category by A1;
      set F = the covariant Functor of CA,C2;
      reconsider F as Functor of C1,C2;
A12:   F is_natural_transformation_of F,F by Th61;
      F is_naturally_transformable_to F by Th61;
      then reconsider T = F as natural_transformation of F,F by A12,Def26;
      reconsider F1=F,F2=F,F3=F as Functor of C1,C2;
      reconsider T1=T as natural_transformation of F1,F2;
      reconsider T2=T as natural_transformation of F2,F3;
A13:   T2`*`T1 = {};
      reconsider x1 = [[F1,F2],T1] as Element of X1 by A3,A4;
      reconsider x2 = [[F2,F3],T2] as Element of X1 by A3,A4;
      reconsider x3 = [[F1,F3],T2`*`T1] as Element of X1 by A3,A13,A4;
      ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1];
      hence x in Y by A11,A13,A3;
    end;
    hence Y = {[[X2,X2],X2]} by TARSKI:def 1;
  end;

definition
  let C1,C2 be category;
  func Functors(C1,C2) -> strict category means :Def28:
  the carrier of it = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
      T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
      & F1 is_naturally_transformable_to F2} &
  the composition of it = {[[x2,x1],x3] where x1,x2,x3 is
         Element of the carrier of it: ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]};
  existence
  proof
    per cases;
    suppose
A1:   C1 is non empty & C2 is empty;
      set car = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
      T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
      & F1 is_naturally_transformable_to F2};
      reconsider car as set;
      set comp = {[[x2,x1],x3] where x1,x2,x3 is Element of car:
      ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]};
      for x being object st x in comp holds x in [:[:car,car:],car:]
      by A1,Lm4;
      then reconsider comp as Relation of [:car,car:],car by TARSKI:def 3;
      reconsider comp as PartFunc of [:car,car:],car by A1,Lm4;
      reconsider C = CategoryStr(# car, comp #) as CategoryStr;
      C is empty by A1,Lm4;
      then reconsider C as strict category by CAT_6:def 11,def 12;
      take C;
      thus thesis;
    end;
    suppose
A2:   (C1 is non empty & C2 is non empty) or C1 is empty;
      set car = {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
      T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
      & F1 is_naturally_transformable_to F2};
      car is non empty
      proof
        per cases by A2;
        suppose C1 is non empty & C2 is non empty;
          then reconsider CA = C1, CB = C2 as non empty category;
          set F = the covariant Functor of CA,CB;
A3:      F is_natural_transformation_of F,F by Th61;
          F is_naturally_transformable_to F by Th61;
          then reconsider T = F as natural_transformation of F,F by A3,Def26;
          F is_naturally_transformable_to F by Th61;
          then [[F,F],T] in car;
          hence thesis;
        end;
        suppose C1 is empty;
          then reconsider CA = C1 as empty category;
          set F = the covariant Functor of CA,C2;
          F is_naturally_transformable_to F by Th61;
          then reconsider T = F as natural_transformation of F,F by Def26;
          F is_naturally_transformable_to F by Th61;
          then [[F,F],T] in car;
          hence thesis;
        end;
      end;
      then reconsider car as non empty set;
      set comp = {[[x2,x1],x3] where x1,x2,x3 is Element of car:
      ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]};
      for x being object st x in comp holds x in [:[:car,car:],car:]
      proof
        let x be object;
        assume x in comp;
        then consider x1,x2,x3 be Element of car such that
A4:     x = [[x2,x1],x3] &
        ex F1,F2,F3 being Functor of C1,C2,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
        x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1];
        [x2,x1] in [:car,car:] by ZFMISC_1:def 2;
        hence thesis by A4,ZFMISC_1:def 2;
      end;
      then reconsider comp as Relation of [:car,car:],car by TARSKI:def 3;
      for x,y1,y2 being object st [x,y1] in comp & [x,y2] in comp
      holds y1 = y2
      proof
        let x,y1,y2 be object;
        assume [x,y1] in comp;
        then consider x11,x12,x13 be Element of car such that
A5:     [x,y1] = [[x12,x11],x13] &
        ex F1,F2,F3 being Functor of C1,C2,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F2,F3 st x11 = [[F1,F2],T1] &
        x12 = [[F2,F3],T2] & x13 = [[F1,F3],T2`*`T1];
        assume [x,y2] in comp;
        then consider x21,x22,x23 be Element of car such that
A6:     [x,y2] = [[x22,x21],x23] &
        ex F1,F2,F3 being Functor of C1,C2,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F2,F3 st x21 = [[F1,F2],T1] &
        x22 = [[F2,F3],T2] & x23 = [[F1,F3],T2`*`T1];
A7:     x = [x12,x11] & y1 = x13 by A5,XTUPLE_0:1;
A8:     x = [x22,x21] & y2 = x23 by A6,XTUPLE_0:1;
A9:     x11 = x21 & x12 = x22 by A7,A8,XTUPLE_0:1;
        consider F11,F12,F13 be Functor of C1,C2,
        T11 be natural_transformation of F11,F12,
        T12 be natural_transformation of F12,F13 such that
A10:     x11 = [[F11,F12],T11] &
        x12 = [[F12,F13],T12] & x13 = [[F11,F13],T12`*`T11] by A5;
        consider F21,F22,F23 be Functor of C1,C2,
        T21 be natural_transformation of F21,F22,
        T22 be natural_transformation of F22,F23 such that
A11:     x21 = [[F21,F22],T21] &
        x22 = [[F22,F23],T22] & x23 = [[F21,F23],T22`*`T21] by A6;
A12:    [F11,F12] = [F21,F22] & T21 = T11 by A10,A11,A9,XTUPLE_0:1;
        then
A13:    F11 = F21 & F12 = F22 by XTUPLE_0:1;
A14:    [F12,F13] = [F22,F23] & T22 = T12 by A10,A11,A9,XTUPLE_0:1;
        then F12 = F22 & F13 = F23 by XTUPLE_0:1;
        hence thesis by A5,XTUPLE_0:1,A6,A10,A11,A12,A13,A14;
      end;
      then reconsider comp as PartFunc of [:car,car:],car by FUNCT_1:def 1;
      reconsider C = CategoryStr(# car, comp #) as non empty CategoryStr;
      per cases by A2;
      suppose C1 is non empty & C2 is non empty;
        then reconsider CA = C1, CB = C2 as non empty category;
A15:    for g1,g2 being morphism of C st g1 |> g2 holds
        ex F1,F2,F3 being Functor of CA,CB,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F2,F3 st
        g1 = [[F2,F3],T2] & g2 = [[F1,F2],T1] & F1 is covariant &
        F2 is covariant & F3 is covariant &
        F1 is_naturally_transformable_to F2 &
        F2 is_naturally_transformable_to F3 & g1(*)g2 = [[F1,F3],T2`*`T1]
        proof
          let g1,g2 be morphism of C;
          assume
A16:      g1 |> g2;
          g1 in Mor C;
          then
          g1 in the carrier of C by CAT_6:def 1;
          then consider F11,F12 be Functor of CA,CB,
          T11 be natural_transformation of F11,F12 such that
A17:      g1 = [[F11,F12],T11] & F11 is covariant & F12 is covariant &
          F11 is_naturally_transformable_to F12;
          g2 in Mor C;
          then
          g2 in the carrier of C by CAT_6:def 1;
          then consider F21,F22 be Functor of CA,CB,
          T22 be natural_transformation of F21,F22 such that
A18:      g2 = [[F21,F22],T22] & F21 is covariant & F22 is covariant &
          F21 is_naturally_transformable_to F22;
          [g1,g2] in dom the composition of C by A16,CAT_6:def 2;
          then consider y be object such that
A19:      [[g1,g2],y] in comp by XTUPLE_0:def 12;
          consider x1,x2,x3 be Element of car such that
A20:      [[g1,g2],y] = [[x2,x1],x3] &
          ex F1,F2,F3 being Functor of CA,CB,
          T1 being natural_transformation of F1,F2,
          T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
          x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1] by A19;
          consider F1,F2,F3 be Functor of CA,CB,
          T1 be natural_transformation of F1,F2,
          T2 be natural_transformation of F2,F3 such that
A21:      x1 = [[F1,F2],T1] & x2 = [[F2,F3],T2] &
          x3 = [[F1,F3],T2`*`T1] by A20;
A22:      [g1,g2] = [x2,x1] & y = x3 by A20,XTUPLE_0:1;
          then
A23:      g1 = x2 & g2 = x1 by XTUPLE_0:1;
          take F1,F2,F3,T1,T2;
          thus g1 = [[F2,F3],T2] & g2 = [[F1,F2],T1] by A21,A22,XTUPLE_0:1;
A24:      [F11,F12] = [F2,F3] & [F21,F22] = [F1,F2]
          by A17,A18,A21,A23,XTUPLE_0:1;
          then
A25:      F11 = F2 & F12 = F3 & F21 = F1 & F22 = F2 by XTUPLE_0:1;
          thus F1 is covariant & F2 is covariant & F3 is covariant
          by A17,A18,A24,XTUPLE_0:1;
          thus F1 is_naturally_transformable_to F2 by A18,A25;
          thus F2 is_naturally_transformable_to F3 by A17,A25;
          thus g1(*)g2 = (the composition of C).(g1,g2) by A16,CAT_6:def 3
          .= (the composition of C).[g1,g2] by BINOP_1:def 1
          .= y by A19,FUNCT_1:1
          .= [[F1,F3],T2`*`T1] by A21,A20,XTUPLE_0:1;
        end;
A26:    for g1,g2 being morphism of C st ex F1,F2,F3,F4 being Functor of CA,CB,
        T1 being natural_transformation of F1,F2,
        T2 being natural_transformation of F3,F4 st
        g1 = [[F1,F2],T1] & g2 = [[F3,F4],T2] & F2 = F3 &
        F1 is covariant & F2 is covariant & F4 is covariant &
        F1 is_naturally_transformable_to F2 &
        F3 is_naturally_transformable_to F4 holds g2 |> g1
        proof
          let g1,g2 be morphism of C;
          given F1,F2,F3,F4 be Functor of CA,CB,
          T1 be natural_transformation of F1,F2,
          T2 be natural_transformation of F3,F4 such that
A27:      g1 = [[F1,F2],T1] & g2 = [[F3,F4],T2] & F2 = F3 &
          F1 is covariant & F2 is covariant & F4 is covariant &
          F1 is_naturally_transformable_to F2 &
          F3 is_naturally_transformable_to F4;
A28:      g1 in car & g2 in car by A27;
          reconsider T2 as natural_transformation of F2,F4 by A27;
          set g3 = [[F1,F4],T2`*`T1];
          F1 is_naturally_transformable_to F4 by A27,Th62;
          then
A29:      g3 in car by A27;
          [[g2,g1],g3] in comp by A27,A28,A29;
          then [g2,g1] in dom comp by XTUPLE_0:def 12;
          hence g2 |> g1 by CAT_6:def 2;
        end;
        for g,g1,g2 being morphism of C st g1|>g2
        holds g1(*)g2 |> g iff g2 |> g
        proof
          let g,g1,g2 be morphism of C;
          assume g1 |> g2;
          then consider F11,F12,F13 be Functor of C1,C2,
          T11 be natural_transformation of F11,F12,
          T12 be natural_transformation of F12,F13 such that
A30:      g1 = [[F12,F13],T12] & g2 = [[F11,F12],T11] & F11 is covariant &
          F12 is covariant & F13 is covariant &
          F11 is_naturally_transformable_to F12 &
          F12 is_naturally_transformable_to F13 &
          g1(*)g2 = [[F11,F13],T12`*`T11] by A15;
          hereby
            assume g1 (*) g2 |> g;
            then consider F01,F02,F03 be Functor of C1,C2,
            T01 be natural_transformation of F01,F02,
            T02 be natural_transformation of F02,F03 such that
A31:        g1(*)g2 = [[F02,F03],T02] & g = [[F01,F02],T01] &
            F01 is covariant & F02 is covariant & F03 is covariant &
            F01 is_naturally_transformable_to F02 &
            F02 is_naturally_transformable_to F03 &
            (g1(*)g2)(*)g = [[F01,F03],T02`*`T01] by A15;
            [F11,F13] = [F02,F03] & T12`*`T11 = T02 by A30,A31,XTUPLE_0:1;
            then F11 = F02 & F13 = F03 by XTUPLE_0:1;
            hence g2 |> g by A26,A30,A31;
          end;
          assume g2 |> g;
          then consider F01,F02,F03 be Functor of C1,C2,
          T01 be natural_transformation of F01,F02,
          T02 be natural_transformation of F02,F03 such that
A32:      g2 = [[F02,F03],T02] & g = [[F01,F02],T01] &
          F01 is covariant & F02 is covariant & F03 is covariant &
          F01 is_naturally_transformable_to F02 &
          F02 is_naturally_transformable_to F03 &
          g2(*)g = [[F01,F03],T02`*`T01] by A15;
          [F11,F12] = [F02,F03] & T11 = T02 by A30,A32,XTUPLE_0:1;
          then
A33:      F11 = F02 & F12 = F03 by XTUPLE_0:1;
          F11 is_naturally_transformable_to F13 by A30,Th62;
          hence g1 (*) g2 |> g by A26,A30,A32,A33;
        end;
        then
A34:    C is left_composable by CAT_6:def 8;
A35:    for g,g1,g2 being morphism of C st g1|>g2
        holds g |> g1(*)g2 iff g |> g1
        proof
          let g,g1,g2 be morphism of C;
          assume g1 |> g2;
          then consider F11,F12,F13 be Functor of C1,C2,
          T11 be natural_transformation of F11,F12,
          T12 be natural_transformation of F12,F13 such that
A36:      g1 = [[F12,F13],T12] & g2 = [[F11,F12],T11] & F11 is covariant &
          F12 is covariant & F13 is covariant &
          F11 is_naturally_transformable_to F12 &
          F12 is_naturally_transformable_to F13 &
          g1(*)g2 = [[F11,F13],T12`*`T11] by A15;
          hereby
            assume g |> g1(*)g2;
            then consider F01,F02,F03 be Functor of C1,C2,
            T01 be natural_transformation of F01,F02,
            T02 be natural_transformation of F02,F03 such that
A37:        g = [[F02,F03],T02] & g1(*)g2 = [[F01,F02],T01] &
            F01 is covariant & F02 is covariant & F03 is covariant &
            F01 is_naturally_transformable_to F02 &
            F02 is_naturally_transformable_to F03 &
            g(*)(g1(*)g2) = [[F01,F03],T02`*`T01] by A15;
            [F11,F13] = [F01,F02] & T12`*`T11 = T01 by A36,A37,XTUPLE_0:1;
            then F11 = F01 & F13 = F02 by XTUPLE_0:1;
            hence g |> g1 by A26,A36,A37;
          end;
          assume g |> g1;
          then consider F01,F02,F03 be Functor of C1,C2,
          T01 be natural_transformation of F01,F02,
          T02 be natural_transformation of F02,F03 such that
A38:      g = [[F02,F03],T02] & g1 = [[F01,F02],T01] &
          F01 is covariant & F02 is covariant & F03 is covariant &
          F01 is_naturally_transformable_to F02 &
          F02 is_naturally_transformable_to F03 &
          g(*)g1 = [[F01,F03],T02`*`T01] by A15;
          [F12,F13] = [F01,F02] & T12 = T01 by A36,A38,XTUPLE_0:1;
          then
A39:      F12 = F01 & F13 = F02 by XTUPLE_0:1;
          F11 is_naturally_transformable_to F13 by A36,Th62;
          hence g |> g1(*)g2 by A26,A36,A38,A39;
        end;
        for g1 being morphism of C st g1 in the carrier of C holds
        ex g being morphism of C st g |> g1 & g is left_identity
        proof
          let g1 be morphism of C;
          assume g1 in the carrier of C;
          then consider F11,F12 be Functor of CA,CB,
          T11 be natural_transformation of F11,F12 such that
A40:      g1 = [[F11,F12],T11] & F11 is covariant & F12 is covariant &
          F11 is_naturally_transformable_to F12;
A41:      F12 is_natural_transformation_of F12,F12 by A40,Th61;
A42:      F12 is_naturally_transformable_to F12 by A40,Th61;
          then reconsider T = F12 as natural_transformation of F12,F12
          by A41,Def26;
          set g = [[F12,F12],T];
          g in car by A40,A42;
          then reconsider g as morphism of C by CAT_6:def 1;
          take g;
          thus g |> g1 by A26,A40,A42;
          for g1 being morphism of C st g |> g1 holds g (*) g1 = g1
          proof
            let g1 be morphism of C;
            assume g |> g1;
            then consider F01,F02,F03 be Functor of CA,CB,
            T01 be natural_transformation of F01,F02,
            T02 be natural_transformation of F02,F03 such that
A43:        g = [[F02,F03],T02] & g1 = [[F01,F02],T01] &
            F01 is covariant & F02 is covariant & F03 is covariant &
            F01 is_naturally_transformable_to F02 &
            F02 is_naturally_transformable_to F03 &
            g(*)g1 = [[F01,F03],T02`*`T01] by A15;
A44:        [F02,F03] = [F12,F12] & T = T02 by A43,XTUPLE_0:1;
            then
A45:        F02 = F12 & F03 = F12 by XTUPLE_0:1;
            for x being object st x in the carrier of CA
            holds (T02`*`T01).x = T01.x
            proof
              let x be object;
              assume
A46:          x in the carrier of CA;
              reconsider f = x as morphism of CA by A46,CAT_6:def 1;
            consider f1 be morphism of CA such that
A47:        f1 |> f & f1 is left_identity by A46,CAT_6:def 6,def 12;
            consider f2 be morphism of CA such that
A48:        f |> f2 & f2 is right_identity by A46,CAT_6:def 7,def 12;
            f2 is left_identity & f1 is right_identity by A47,A48,CAT_6:9;
            then
A49:        f1 is identity & f2 is identity by A47,A48,CAT_6:def 14;
A50:        T01 is_natural_transformation_of F01,F02 by A43,Def26;
            T02 is_natural_transformation_of F02,F03 by A43,Def26;
            then
A51:        T02.f1 |> F02.f & F03.f |> T02.f2 & T02.f = (T02.f1)(*)(F02.f) &
            T02.f = (F03.f)(*)(T02.f2) by A43,A47,A48,A49,Th58;
            T02 is covariant by A43,A44,XTUPLE_0:1;
            then
A52:        T02.f1 is identity by A49,CAT_6:def 22,def 25;
            thus (T02`*`T01).x = (T02`*`T01).f by CAT_6:def 21
            .= (T02.f1)(*)(F02.f)(*)(T01.f2) by A47,A48,A49,A43,Def27
            .= (F02.f)(*)(T01.f2) by A52,A51,CAT_6:def 4,def 14
            .= T01.f by A43,A50,A47,A48,A49,Th58
            .= T01.x by CAT_6:def 21;
          end;
          hence g (*) g1 = g1 by A43,A45,FUNCT_2:12;
        end;
        hence g is left_identity by CAT_6:def 4;
      end;
      then
A53:  C is with_left_identities by CAT_6:def 6;
A54:  for g1 being morphism of C st g1 in the carrier of C holds
       ex g being morphism of C st g1 |> g & g is right_identity
      proof
        let g1 be morphism of C;
        assume g1 in the carrier of C;
        then consider F11,F12 be Functor of CA,CB,
        T11 be natural_transformation of F11,F12 such that
A55:    g1 = [[F11,F12],T11] & F11 is covariant & F12 is covariant &
        F11 is_naturally_transformable_to F12;
A56:    F11 is_natural_transformation_of F11,F11 by A55,Th61;
A57:    F11 is_naturally_transformable_to F11 by A55,Th61;
        then reconsider T = F11 as natural_transformation of F11,F11
        by A56,Def26;
        set g = [[F11,F11],T];
        g in car by A55,A57;
        then reconsider g as morphism of C by CAT_6:def 1;
        take g;
        thus g1 |> g by A26,A55,A57;
        for g1 being morphism of C st g1 |> g holds g1 (*) g = g1
        proof
          let g1 be morphism of C;
          assume g1 |> g;
          then consider F01,F02,F03 be Functor of CA,CB,
          T01 be natural_transformation of F01,F02,
          T02 be natural_transformation of F02,F03 such that
A58:      g1 = [[F02,F03],T02] & g = [[F01,F02],T01] &
          F01 is covariant & F02 is covariant & F03 is covariant &
          F01 is_naturally_transformable_to F02 &
          F02 is_naturally_transformable_to F03 &
          g1(*)g = [[F01,F03],T02`*`T01] by A15;
A59:      [F01,F02] = [F11,F11] & T01 = T by A58,XTUPLE_0:1;
          then
A60:      F01 = F11 & F02 = F11 by XTUPLE_0:1;
          for x being object st x in the carrier of CA
          holds (T02`*`T01).x = T02.x
          proof
            let x be object;
            assume
A61:        x in the carrier of CA;
            reconsider f = x as morphism of CA by A61,CAT_6:def 1;
            consider f1 be morphism of CA such that
A62:        f1 |> f & f1 is left_identity by A61,CAT_6:def 6,def 12;
            consider f2 be morphism of CA such that
A63:        f |> f2 & f2 is right_identity by A61,CAT_6:def 7,def 12;
            f2 is left_identity & f1 is right_identity by A62,A63,CAT_6:9;
            then
A64:        f1 is identity & f2 is identity by A62,A63,CAT_6:def 14;
            T01 is_natural_transformation_of F01,F02 by A58,Def26;
            then
A65:        T01.f1 |> F01.f & F02.f |> T01.f2 & T01.f = (T01.f1)(*)(F01.f) &
            T01.f = (F02.f)(*)(T01.f2) by A58,A62,A63,A64,Th58;
            T02 is_natural_transformation_of F02,F03 by A58,Def26;
            then
A66:        T02.f1 |> F02.f & F03.f |> T02.f2 & T02.f = (T02.f1)(*)(F02.f) &
            T02.f = (F03.f)(*)(T02.f2) by A58,A62,A63,A64,Th58;
            thus (T02`*`T01).x = (T02`*`T01).f by CAT_6:def 21
            .= (T02.f1)(*)(F02.f)(*)(T01.f2) by A62,A63,A64,A58,Def27
            .= T02.f by A59,A60,A66,A65,Th1
            .= T02.x by CAT_6:def 21;
          end;
          hence g1 (*) g = g1 by A58,A60,FUNCT_2:12;
        end;
        hence g is right_identity by CAT_6:def 5;
      end;
        for g1,g2,g3 being morphism of C st
        g1 |> g2 & g2 |> g3 & g1 (*) g2 |> g3 & g1 |> g2 (*) g3
        holds g1 (*) (g2 (*) g3) = (g1 (*) g2) (*) g3
        proof
          let g1,g2,g3 be morphism of C;
          assume g1 |> g2;
          then consider F01,F02,F03 be Functor of CA,CB,
          T01 be natural_transformation of F01,F02,
          T02 be natural_transformation of F02,F03 such that
A67:      g1 = [[F02,F03],T02] & g2 = [[F01,F02],T01] & F01 is covariant &
          F02 is covariant & F03 is covariant &
          F01 is_naturally_transformable_to F02 &
          F02 is_naturally_transformable_to F03 &
          g1(*)g2 = [[F01,F03],T02`*`T01] by A15;
          assume g2 |> g3;
          then consider F11,F12,F13 be Functor of CA,CB,
          T11 be natural_transformation of F11,F12,
          T12 be natural_transformation of F12,F13 such that
A68:      g2 = [[F12,F13],T12] & g3 = [[F11,F12],T11] & F11 is covariant &
          F12 is covariant & F13 is covariant &
          F11 is_naturally_transformable_to F12 &
          F12 is_naturally_transformable_to F13 &
          g2(*)g3 = [[F11,F13],T12`*`T11] by A15;
          assume g1 (*) g2 |> g3;
          then consider F21,F22,F23 be Functor of CA,CB,
          T21 be natural_transformation of F21,F22,
          T22 be natural_transformation of F22,F23 such that
A69:      g1(*)g2 = [[F22,F23],T22] & g3 = [[F21,F22],T21] & F21 is covariant &
          F22 is covariant & F23 is covariant &
          F21 is_naturally_transformable_to F22 &
          F22 is_naturally_transformable_to F23 &
          (g1(*)g2)(*)g3 = [[F21,F23],T22`*`T21] by A15;
          assume g1 |> g2 (*) g3;
          then consider F31,F32,F33 be Functor of CA,CB,
          T31 be natural_transformation of F31,F32,
          T32 be natural_transformation of F32,F33 such that
A70:      g1 = [[F32,F33],T32] & g2(*)g3 = [[F31,F32],T31] & F31 is covariant &
          F32 is covariant & F33 is covariant &
          F31 is_naturally_transformable_to F32 &
          F32 is_naturally_transformable_to F33 &
          g1(*)(g2(*)g3) = [[F31,F33],T32`*`T31] by A15;
          [F02,F03] = [F32,F33] & T02 = T32 by A67,A70,XTUPLE_0:1;
          then
A71:      F02 = F32 & F03 = F33 by XTUPLE_0:1;
A72:      [F01,F02] = [F12,F13] & T01 = T12 by A67,A68,XTUPLE_0:1;
          then
A73:      F01 = F12 & F02 = F13 by XTUPLE_0:1;
A74:      [F01,F03] = [F22,F23] & T02`*`T01 = T22 by A67,A69,XTUPLE_0:1;
          then
A75:      F01 = F22 & F03 = F23 by XTUPLE_0:1;
          [F11,F12] = [F21,F22] & T11 = T21 by A68,A69,XTUPLE_0:1;
          then
A76:      F11 = F21 & F12 = F22 by XTUPLE_0:1;
          [F11,F13] = [F31,F32] & T12`*`T11 = T31 by A68,A70,XTUPLE_0:1;
          then
A77:      F11 = F31 & F13 = F32 by XTUPLE_0:1;
          for x being object st x in the carrier of CA
          holds (T32`*`T31).x = (T22`*`T21).x
          proof
            let x be object;
            assume
A78:        x in the carrier of CA;
            reconsider f = x as morphism of CA by A78,CAT_6:def 1;
            consider f1 be morphism of CA such that
A79:        f1 |> f & f1 is left_identity by A78,CAT_6:def 6,def 12;
            consider f2 be morphism of CA such that
A80:        f |> f2 & f2 is right_identity by A78,CAT_6:def 7,def 12;
A81:        f2 is left_identity & f1 is right_identity by A79,A80,CAT_6:9;
            then
A82:        f1 is identity & f2 is identity by A79,A80,CAT_6:def 14;
A83:        f1 |> f1 & f2 |> f2 by A81,A79,A80,CAT_6:def 14,CAT_6:24;
A84:        T31.f2 = (T12`*`T11).f2 by A68,A70,XTUPLE_0:1
            .= (T12.f2)(*)(F12.f2)(*)(T11.f2) by A82,A83,A68,Def27;
A85:        T22.f1 = (T02`*`T01).f1 by A67,A69,XTUPLE_0:1
            .= (T02.f1)(*)(F02.f1)(*)(T01.f1) by A82,A83,A67,Def27;
A86:        T02 is_natural_transformation_of F02,F03 by A67,Def26;
A87:        T01 is_natural_transformation_of F01,F02 by A67,Def26;
            then
A88:        T01.f1 |> F01.f & F02.f |> T01.f2 & T01.f = (T01.f1)(*)(F01.f) &
            T01.f = (F02.f)(*)(T01.f2) by A79,A80,A82,A67,Th58;
A89:        CB is left_composable & CB is right_composable by CAT_6:def 11;
A90:        f1 |> f1 & f2 |> f2 by A81,CAT_6:24,A79,A80,CAT_6:def 14;
A91:        T12 is_natural_transformation_of F12,F13 by A68,Def26;
            then
A92:        T12.f2 |> F12.f2 by A90;
A93:        T01 is_natural_transformation_of F01,F02 by A67,Def26;
            then
A94:        F02.f1 |> T01.f1 by A90;
            T11 is_natural_transformation_of F11,F12 by A68,Def26;
            then
A95:        F12.f2 |> T11.f2 by A90;
            T02 is_natural_transformation_of F02,F03 by A67,Def26;
            then
A96:        T02.f1 |> F02.f1 by A90;
A97:        F32.f |> T12.f2 by A87,A73,A77,A72,A80;
A98:        T02.f1 |> F32.f by A86,A73,A77,A79;
A99:       T01.f1 |> F22.f by A87,A75,A79;
A100:       F32.f |> (T12.f2)(*)(F12.f2) by A97,A91,A90,A82,A68,Th58;
A101:       (T02.f1)(*)(F32.f) |> (T12.f2)(*)(F12.f2)
            by A89,A98,A100,CAT_6:def 8;
A102:       (T12.f2)(*)(F12.f2) |> T11.f2 by A89,A92,A95,CAT_6:def 8;
A103:       (F32.f)(*)((T12.f2)(*)(F12.f2))
            = (F32.f)(*)(T12.f2) by A91,A90,A82,A68,Th58
            .= (F02.f)(*)(T01.f2) by A72,A77,XTUPLE_0:1
            .= (T01.f1)(*)(F22.f) by A88,A74,XTUPLE_0:1
            .= (F02.f1)(*)(T01.f1)(*)(F22.f) by A67,A93,A90,A82,Th58;
A104:       ((T02.f1)(*)(F32.f))(*)((T12.f2)(*)(F12.f2))
            = (T02.f1)(*)((F02.f1)(*)(T01.f1)(*)(F22.f)) by A103,A98,A100,Th1
            .= (T02.f1)(*)(F02.f1)(*)(T01.f1)(*)(F22.f) by A96,A94,A99,Th2;
            thus (T32`*`T31).x = (T32`*`T31).f by CAT_6:def 21
            .= (T32.f1)(*)(F32.f)(*)(T31.f2) by A79,A80,A82,A70,Def27
            .= (T02.f1)(*)(F32.f)(*)((T12.f2)(*)(F12.f2)(*)(T11.f2))
            by A84,A67,A70,XTUPLE_0:1
            .= ((T02.f1)(*)(F32.f))(*)((T12.f2)(*)(F12.f2))(*)(T11.f2)
            by A101,A102,Th1
            .= ((T02.f1)(*)(F02.f1)(*)(T01.f1))(*)(F22.f)(*)(T21.f2)
            by A104,A68,A69,XTUPLE_0:1
            .= (T22`*`T21).f by A79,A80,A82,A69,A85,Def27
            .= (T22`*`T21).x by CAT_6:def 21;
          end;
          hence thesis by A69,A70,A71,A75,A76,A77,FUNCT_2:12;
        end;
        then reconsider C as strict category
        by A54,A53,A35,A34,CAT_6:def 10,def 11,def 12,def 7,def 9;
        take C;
        thus thesis;
      end;
      suppose
A105:     C1 is empty;
        reconsider x = [[{},{}],{}] as set by TARSKI:1;
        car = {x} & {[[x2,x1],x3] where x1,x2,x3 is
             Element of car: ex F1,F2,F3 being Functor of C1,C2,
             T1 being natural_transformation of F1,F2,
             T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
             x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} = {[[x,x],x]}
             by A105,Lm5;
        then C is non empty category by Th8;
        hence thesis;
      end;
    end;
  end;
  uniqueness;
end;

registration
  let C1 be non empty category;
  let C2 be empty category;
  cluster Functors(C1,C2) -> empty;
  correctness
  proof
    the carrier of Functors(C1,C2) =
    {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
    T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
    & F1 is_naturally_transformable_to F2} by Def28;
    hence thesis by Lm4;
  end;
end;

registration
  let C1 be empty category;
  let C2 be category;
  cluster Functors(C1,C2) -> non empty trivial;
  correctness
  proof
    reconsider X2 = [[{},{}],{}] as set by TARSKI:1;
    the carrier of Functors(C1,C2) =
    {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
    T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
    & F1 is_naturally_transformable_to F2} by Def28;
    then the carrier of Functors(C1,C2) = {X2} &
    {[[x2,x1],x3] where x1,x2,x3 is
    Element of the carrier of Functors(C1,C2):
    ex F1,F2,F3 being Functor of C1,C2,
    T1 being natural_transformation of F1,F2,
    T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
    x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} = {[[X2,X2],X2]} by Lm5;
    hence thesis;
  end;
end;

registration
  let C1 be non empty category;
  let C2 be non empty category;
  cluster Functors(C1,C2) -> non empty;
  correctness
  proof
A1: the carrier of Functors(C1,C2) =
    {[[F1,F2],t] where F1,F2 is Functor of C1,C2,
    t is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
    & F1 is_naturally_transformable_to F2} by Def28;
    set F = the covariant Functor of C1,C2;
A2: F is_natural_transformation_of F,F by Th61;
    F is_naturally_transformable_to F by Th61;
    then reconsider t = F as natural_transformation of F,F by A2,Def26;
    F is_naturally_transformable_to F by Th61;
    then [[F,F],t] in the carrier of Functors(C1,C2) by A1;
    hence thesis;
  end;
end;

theorem Th63:
  for C1,C2 being non empty category, f1,f2 being morphism of Functors(C1,C2)
  holds f1 |> f2 iff ex F,F1,F2 being covariant Functor of C1,C2,
  T1 being natural_transformation of F1,F,
  T2 being natural_transformation of F,F2 st
  f1 = [[F,F2],T2] & f2 = [[F1,F],T1] & f1(*)f2 = [[F1,F2],T2`*`T1] &
  for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
  (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1)
  proof
    let C1,C2 be non empty category;
    let f1,f2 be morphism of Functors(C1,C2);
A1: the composition of Functors(C1,C2) =
    {[[x2,x1],x3] where x1,x2,x3 is
     Element of the carrier of Functors(C1,C2):
     ex F1,F2,F3 being Functor of C1,C2,
     T1 being natural_transformation of F1,F2,
     T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
     x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} by Def28;
    thus f1 |> f2 implies ex F,F1,F2 being covariant Functor of C1,C2,
    T1 being natural_transformation of F1,F,
    T2 being natural_transformation of F,F2 st
    f1 = [[F,F2],T2] & f2 = [[F1,F],T1] & f1(*)f2 = [[F1,F2],T2`*`T1] &
    for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
    (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1)
    proof
      assume
A2:   f1 |> f2;
      then
A3:   KuratowskiPair(f1,f2) in
      dom the composition of Functors(C1,C2) by CAT_6:def 2;
      (the composition of Functors(C1,C2)).KuratowskiPair(f1,f2)
      = (the composition of Functors(C1,C2)).(f1,f2) by BINOP_1:def 1
      .= f1(*)f2 by A2,CAT_6:def 3;
      then
      [KuratowskiPair(f1,f2),f1(*)f2] in {[[x2,x1],x3] where x1,x2,x3 is
       Element of the carrier of Functors(C1,C2):
       ex F1,F2,F3 being Functor of C1,C2,
       T1 being natural_transformation of F1,F2,
       T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
       x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} by A1,A3,FUNCT_1:1;
      then consider x1,x2,x3 be Element of the carrier of Functors(C1,C2)
      such that
A4:   [KuratowskiPair(f1,f2),f1(*)f2] = [[x2,x1],x3] and
A5:   ex F1,F2,F3 being Functor of C1,C2,
       T1 being natural_transformation of F1,F2,
       T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
       x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1];
      consider F1,F,F2 be Functor of C1,C2,
       T1 be natural_transformation of F1,F,
       T2 be natural_transformation of F,F2 such that
A6:    x1 = [[F1,F],T1] & x2 = [[F,F2],T2] & x3 = [[F1,F2],T2`*`T1] by A5;
A7:  the carrier of Functors(C1,C2) =
      {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
       T is natural_transformation of F1,F2:
       F1 is covariant & F2 is covariant &
       F1 is_naturally_transformable_to F2} by Def28;
       x1 in the carrier of Functors(C1,C2);
       then consider F11,F12 be Functor of C1,C2,
       T11 be natural_transformation of F11,F12 such that
A8:  x1 = [[F11,F12],T11] & F11 is covariant & F12 is covariant &
      F11 is_naturally_transformable_to F12 by A7;
      x2 in the carrier of Functors(C1,C2);
      then consider F21,F22 be Functor of C1,C2,
      T21 be natural_transformation of F21,F22 such that
A9:  x2 = [[F21,F22],T21] & F21 is covariant & F22 is covariant &
      F21 is_naturally_transformable_to F22 by A7;
A10:  [F11,F12] = [F1,F] & [F21,F22] = [F,F2] by A8,A9,A6,XTUPLE_0:1;
      then reconsider F,F1,F2 as covariant Functor of C1,C2
      by A8,A9,XTUPLE_0:1;
      reconsider T1 as natural_transformation of F1,F;
      reconsider T2 as natural_transformation of F,F2;
A11:   KuratowskiPair(f1,f2) = [x2,x1] & f1(*)f2 = x3 by A4,XTUPLE_0:1;
      take F,F1,F2,T1,T2;
      thus f1 = [[F,F2],T2] by A6,A11,XTUPLE_0:1;
      thus f2 = [[F1,F],T1] by A6,A11,XTUPLE_0:1;
      thus f1(*)f2 = [[F1,F2],T2`*`T1] by A4,A6,XTUPLE_0:1;
      let g1,g2 be morphism of C1;
      assume
A12:  g2 |> g1;
      consider g11,g12 be morphism of C1 such that
A13:   g11 is identity & g12 is identity & g11 |> g1 & g1 |> g12 by Th5;
A14:  F11 = F1 & F12 = F by A10,XTUPLE_0:1;
      T1 is_natural_transformation_of F1,F by A14,A8,Def26;
      then
A15:   T1.g11 |> F1.g1 & F.g1 |> T1.g12 &
      T1.g1 = (T1.g11)(*)(F1.g1) & T1.g1 = (F.g1)(*)(T1.g12) by A13,Th58;
      consider g21,g22 be morphism of C1 such that
A16:   g21 is identity & g22 is identity & g21 |> g2 & g2 |> g22 by Th5;
A17:  F21 = F & F22 = F2 by A10,XTUPLE_0:1;
      T2 is_natural_transformation_of F,F2 by A17,A9,Def26;
      then
A18:   T2.g21 |> F.g2 & F2.g2 |> T2.g22 &
      T2.g2 = (T2.g21)(*)(F.g2) & T2.g2 = (F2.g2)(*)(T2.g22) by A16,Th58;
      dom(F.g2) = cod(F.g1) by CAT_7:5,A12,Th13;
      then dom(T2.g2) = cod(F.g1) by A18,CAT_7:4;
      then dom(T2.g2) = cod(T1.g1) by A15,CAT_7:4;
      hence T2.g2 |> T1.g1 by CAT_7:5;
      dom(g2(*)g1) = dom g1 by A12,CAT_7:4 .= cod g12 by A13,CAT_7:5;
      then
A19:  g2(*)g1 |> g12 by CAT_7:5;
      dom g21 = cod g2 by A16,CAT_7:5 .= cod(g2(*)g1) by A12,CAT_7:4;
      then
A20:  g21 |> g2(*)g1 by CAT_7:5;
A21:  F.(g2(*)g1) = (F.g2)(*)(F.g1) & F.g2 |> F.g1 by A12,Th13;
      thus (T2`*`T1).(g2(*)g1) = (T2.g21)(*)(F.(g2(*)g1))(*)(T1.g12)
       by A13,A19,A20,A16,A14,A8,A17,A9,Def27
      .= ((T2.g21)(*)(F.g2))(*)(F.g1)(*)(T1.g12) by A18,A21,A15,Th2
      .= (T2.g2)(*)(T1.g1) by A18,A21,A15,Th2;
    end;
    assume
A22: ex F,F1,F2 being covariant Functor of C1,C2,
    T1 being natural_transformation of F1,F,
    T2 being natural_transformation of F,F2 st
    f1 = [[F,F2],T2] & f2 = [[F1,F],T1] & f1(*)f2 = [[F1,F2],T2`*`T1] &
    for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
    (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1);
    reconsider x1 = f2, x2 = f1, x3 = f1(*)f2
    as Element of the carrier of Functors(C1,C2) by CAT_6:def 1;
    [[x2,x1],x3] in {[[x2,x1],x3] where x1,x2,x3 is
      Element of the carrier of Functors(C1,C2):
      ex F1,F2,F3 being Functor of C1,C2,
      T1 being natural_transformation of F1,F2,
      T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
      x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]} by A22;
    then KuratowskiPair(f1,f2) in
    dom the composition of Functors(C1,C2) by A1,XTUPLE_0:def 12;
    hence f1 |> f2 by CAT_6:def 2;
  end;

theorem Th64:
  for C1,C2 being non empty category, f being morphism of Functors(C1,C2) holds
  f is identity iff ex F being covariant Functor of C1,C2 st f = [[F,F],F]
  proof
    let C1,C2 be non empty category;
    set C = Functors(C1,C2);
    let f be morphism of C;
    thus f is identity implies
    ex F being covariant Functor of C1,C2 st f = [[F,F],F]
    proof
      assume
A1:  f is identity;
      consider F,F1,F2 be covariant Functor of C1,C2,
      T1 be natural_transformation of F1,F,
      T2 be natural_transformation of F,F2 such that
A2:   f = [[F,F2],T2] & f = [[F1,F],T1] & f(*)f = [[F1,F2],T2`*`T1] &
      for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
      (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1) by A1,CAT_6:24,Th63;
A3:   [F,F2] = [F1,F] & T1 = T2 by A2,XTUPLE_0:1;
      then
A4:   F = F1 & F = F2 by XTUPLE_0:1;
      set f1 = [[F,F],F];
A5:   F is_natural_transformation_of F,F by Th61;
A6:   F is_naturally_transformable_to F by Th61;
      then F is natural_transformation of F,F by A5,Def26;
      then f1 in {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
       T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
       & F1 is_naturally_transformable_to F2} by A6;
      then f1 in the carrier of C by Def28;
      then reconsider f1 as morphism of C by CAT_6:def 1;
      reconsider x2 = f1 as Element of the carrier of C by CAT_6:def 1;
      reconsider x3 = f as Element of the carrier of C by CAT_6:def 1;
      reconsider x1 = f as Element of the carrier of C by CAT_6:def 1;
      ex F1,F2,F3 being Functor of C1,C2,
       T1 being natural_transformation of F1,F2,
       T2 being natural_transformation of F2,F3 st x1 = [[F1,F2],T1] &
       x2 = [[F2,F3],T2] & x3 = [[F1,F3],T2`*`T1]
      proof
        set F1 = F, F2 = F, F3 = F;
        reconsider T1 as natural_transformation of F1,F2 by A3,XTUPLE_0:1;
        reconsider T2 = F as natural_transformation of F2,F3 by A6,A5,Def26;
        take F1,F2,F3, T1, T2;
        thus x1 = [[F1,F2],T1] by A2,A3,XTUPLE_0:1;
        thus x2 = [[F2,F3],T2];
        for x being object st x in the carrier of C1 holds T1.x = (T2`*`T1).x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider f = x as morphism of C1 by CAT_6:def 1;
          consider f1,f2 be morphism of C1 such that
A7:       f1 is identity & f2 is identity & f1 |> f & f |> f2 by Th5;
A8:       T1 is_natural_transformation_of F1,F2 by A6,Def26;
          thus T1.x = T1.f by CAT_6:def 21
          .= (F.f)(*)(T1.f2) by A8,A7,Th58
          .= (F.(f1(*)f))(*)(T1.f2) by A7,Th4
          .= (F.f1)(*)(F.f)(*)(T1.f2) by A7,Th13
          .= (T2`*`T1).f by A6,A7,Def27
          .= (T2`*`T1).x by CAT_6:def 21;
        end;
        hence x3 = [[F1,F3],T2`*`T1] by A2,A4,FUNCT_2:12;
      end;
      then
      [KuratowskiPair(f1,f),f] in
      {[[x2,x1],x3] where x1,x2,x3 is Element of the carrier of C:
       ex F1,F2,F3 being Functor of C1,C2,
       t1 being natural_transformation of F1,F2,
       t2 being natural_transformation of F2,F3 st x1 = [[F1,F2],t1] &
       x2 = [[F2,F3],t2] & x3 = [[F1,F3],t2`*`t1]};
      then
A9:  [KuratowskiPair(f1,f),f] in the composition of C by Def28;
      then
A10:  KuratowskiPair(f1,f) in dom the composition of C by XTUPLE_0:def 12;
      then
A11:  f1 |> f by CAT_6:def 2;
A12:  f1(*)f = (the composition of C).(f1,f) by A10,CAT_6:def 3,def 2
      .= (the composition of C).KuratowskiPair(f1,f) by BINOP_1:def 1
      .= f by A9,A10,FUNCT_1:def 2;
      take F;
      thus thesis by A12,A11,A1,Th4;
    end;
    assume ex F being covariant Functor of C1,C2 st f = [[F,F],F];
    then consider F be covariant Functor of C1,C2 such that
A13: f = [[F,F],F];
A14: for f1 being morphism of C st f |> f1 holds f (*) f1 = f1
    proof
      let f1 be morphism of C;
      assume f |> f1;
      then consider F3,F1,F2 be covariant Functor of C1,C2,
      T1 be natural_transformation of F1,F3,
      T2 be natural_transformation of F3,F2 such that
A15:   f = [[F3,F2],T2] & f1 = [[F1,F3],T1] & f(*)f1 = [[F1,F2],T2`*`T1] &
      for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
      (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1) by Th63;
A16:   [F,F] = [F3,F2] & F = T2 by A13,A15,XTUPLE_0:1;
      then
A17:   F = F3 & F = F2 by XTUPLE_0:1;
      for x being object st x in the carrier of C1 holds T1.x = (T2`*`T1).x
      proof
        let x be object;
        assume x in the carrier of C1;
        then reconsider g = x as morphism of C1 by CAT_6:def 1;
        consider g1,g2 be morphism of C1 such that
A18:     g1 is identity & g2 is identity & g1 |> g & g |> g2 by Th5;
A19:    F.g1 is identity by A18,CAT_6:def 22,def 25;
A20:    T2.g1 |> T1.g by A15,A18;
        thus T1.x = T1.g by CAT_6:def 21
        .= (T2.g1)(*)(T1.g) by A16,A19,A20,Th4
        .= (T2`*`T1).(g1(*)g) by A15,A18
        .= (T2`*`T1).g by A18,Th4
        .= (T2`*`T1).x by CAT_6:def 21;
      end;
      hence f (*) f1 = f1 by A15,A17,FUNCT_2:12;
    end;
    then f is left_identity by CAT_6:def 4;
    then f is right_identity by CAT_6:9;
    hence thesis by A14,CAT_6:def 4,def 14;
  end;

theorem Th65:
  for C1,C2 being non empty category, f being morphism of Functors(C1,C2) holds
  ex F1,F2 being covariant Functor of C1,C2,
     T being natural_transformation of F1,F2 st f = [[F1,F2],T] &
     dom f = [[F1,F1],F1] & cod f = [[F2,F2],F2]
  proof
    let C1,C2 be non empty category;
    set C = Functors(C1,C2);
    let f be morphism of C;
    consider f1 be morphism of C such that
A1: dom f = f1 & f |> f1 & f1 is identity by CAT_6:def 18;
    consider f2 be morphism of C such that
A2: cod f = f2 & f2 |> f & f2 is identity by CAT_6:def 19;
    consider G1,G11,G12 be covariant Functor of C1,C2,
    T11 be natural_transformation of G11,G1,
    T12 be natural_transformation of G1,G12 such that
A3: f = [[G1,G12],T12] & f1 = [[G11,G1],T11] & f(*)f1 = [[G11,G12],T12`*`T11] &
    for g1,g2 being morphism of C1 st g2 |> g1 holds T12.g2 |> T11.g1 &
    (T12`*`T11).(g2(*)g1) = (T12.g2)(*)(T11.g1) by A1,Th63;
    consider F1 be covariant Functor of C1,C2 such that
A4: f1 = [[F1,F1],F1] by A1,Th64;
    [G11,G1] = [F1,F1] by A3,A4,XTUPLE_0:1;
    then
A5: G1 = F1 by XTUPLE_0:1;
    consider G2,G21,G22 be covariant Functor of C1,C2,
    T21 be natural_transformation of G21,G2,
    T22 be natural_transformation of G2,G22 such that
A6: f2 = [[G2,G22],T22] & f = [[G21,G2],T21] & f2(*)f = [[G21,G22],T22`*`T21] &
    for g1,g2 being morphism of C1 st g2 |> g1 holds T22.g2 |> T21.g1 &
    (T22`*`T21).(g2(*)g1) = (T22.g2)(*)(T21.g1) by A2,Th63;
    consider F2 be covariant Functor of C1,C2 such that
A7: f2 = [[F2,F2],F2] by A2,Th64;
    [G2,G22] = [F2,F2] by A6,A7,XTUPLE_0:1;
    then
A8: G2 = F2 by XTUPLE_0:1;
A9: [G1,G12] = [G21,G2] by A3,A6,XTUPLE_0:1;
    then reconsider T = T12 as natural_transformation of F1,F2
    by A5,A8,XTUPLE_0:1;
    take F1,F2,T;
    thus f = [[F1,F2],T] by A3,A5,A9,A8,XTUPLE_0:1;
    thus dom f = [[F1,F1],F1] by A1,A4;
    thus cod f = [[F2,F2],F2] by A2,A7;
  end;

begin :: Exponential Objects

definition
  let C be with_binary_products non empty category;
  let a,b,c be Object of C;
  let e be Morphism of c [x] a, b such that Hom(c [x] a, b)<>{};
  pred c,e is_exponent_of a,b means :Def29:
  for d being Object of C, f being Morphism of d [x] a,b st Hom(d [x] a,b)<>{}
  holds Hom(d,c)<>{} & ex h being Morphism of d,c st f = e * (h [x] id- a) &
  for h1 being Morphism of d,c st f = e * (h1 [x] id- a) holds h = h1;
end;

theorem Th66:
  for C being with_binary_products category,
      a1,a2,b1,b2,c1,c2 being Object of C, f1 being Morphism of a1,b1,
      f2 being Morphism of a2,b2, g1 being Morphism of b1,c1,
      g2 being Morphism of b2,c2
  st Hom(a1,b1)<>{} & Hom(b1,c1)<>{} & Hom(a2,b2)<>{} & Hom(b2,c2)<>{}
  holds (g1 [x] g2) * (f1 [x] f2) = (g1*f1) [x] (g2*f2)
  proof
    let C be with_binary_products category;
    let a1,a2,b1,b2,c1,c2 be Object of C;
    let f1 be Morphism of a1,b1;
    let f2 be Morphism of a2,b2;
    let g1 be Morphism of b1,c1;
    let g2 be Morphism of b2,c2;
    assume
A1: Hom(a1,b1)<>{};
    assume
A2: Hom(b1,c1)<>{};
    assume
A3: Hom(a2,b2)<>{};
    assume
A4: Hom(b2,c2)<>{};
A5: Hom(a1,c1)<>{} by A1,A2,CAT_7:22;
A6: Hom(a1 [x] a2,a1)<>{} by Th42;
A7: Hom(b1 [x] b2,b1)<>{} by Th42;
A8: Hom(c1 [x] c2,c1)<>{} by Th42;
A9: Hom(a1 [x] a2,a2)<>{} by Th42;
A10: Hom(b1 [x] b2,b2)<>{} by Th42;
A11: Hom(c1 [x] c2,c2)<>{} by Th42;
A12: Hom(a1 [x] a2,b1 [x] b2)<>{} by A1,A3,Th44;
A13: Hom(b1 [x] b2,c1 [x] c2)<>{} by A2,A4,Th44;
A14: Hom(a2,c2)<>{} by A3,A4,CAT_7:22;
A15: (g1*f1) * pr1(a1,a2) = g1 * (f1 * pr1(a1,a2)) by A6,A1,A2,CAT_7:23
    .= g1 * (pr1(b1,b2) * (f1 [x] f2)) by A1,A3,Def16
    .= (g1 * pr1(b1,b2)) * (f1 [x] f2) by A7,A12,A2,CAT_7:23
    .= (pr1(c1,c2) * (g1 [x] g2)) * (f1 [x] f2) by A2,A4,Def16
    .= pr1(c1,c2) * ((g1 [x] g2) * (f1 [x] f2))
    by A12,A13,A8,CAT_7:23;
    (g2*f2) * pr2(a1,a2) = g2 * (f2 * pr2(a1,a2)) by A9,A3,A4,CAT_7:23
    .= g2 * (pr2(b1,b2) * (f1 [x] f2)) by A1,A3,Def16
    .= (g2 * pr2(b1,b2)) * (f1 [x] f2) by A10,A12,A4,CAT_7:23
    .= (pr2(c1,c2) * (g1 [x] g2)) * (f1 [x] f2) by A2,A4,Def16
    .= pr2(c1,c2) * ((g1 [x] g2) * (f1 [x] f2))
    by A12,A13,A11,CAT_7:23;
    hence (g1 [x] g2) * (f1 [x] f2) = (g1*f1) [x] (g2*f2) by A15,A14,A5,Def16;
  end;

theorem Th67:
  for C being with_binary_products non empty category, a,b being Object of C
  holds id- a [x] id- b = id-(a [x] b)
  proof
    let C be with_binary_products non empty category;
    let a,b be Object of C;
A1: Hom(a [x] b,a) <> {} by Th42;
A2: Hom(a,a)<>{} & Hom(b,b)<>{};
A3: (id- a) * pr1(a,b) = pr1(a,b) by A1,CAT_7:18
    .= pr1(a,b) * id-(a [x] b) by A1,CAT_7:18;
A4: Hom(a [x] b,b) <> {} by Th42;
    (id- b) * pr2(a,b) = pr2(a,b) by A4,CAT_7:18
    .= pr2(a,b) * id-(a [x] b) by A4,CAT_7:18;
    hence id- a [x] id- b = id-(a [x] b) by A2,A3,Def16;
  end;

theorem
  for C being with_binary_products non empty category,
      a,b,c1,c2 being Object of C,
      e1 being Morphism of c1 [x] a, b, e2 being Morphism of c2 [x] a, b
  st Hom(c1 [x] a, b)<>{} & Hom(c2 [x] a, b)<>{} & c1,e1 is_exponent_of a,b &
  c2,e2 is_exponent_of a,b holds c1,c2 are_isomorphic
  proof
    let C be with_binary_products non empty category;
    let a,b,c1,c2 be Object of C;
    let e1 be Morphism of c1 [x] a, b;
    let e2 be Morphism of c2 [x] a, b;
    assume
A1: Hom(c1 [x] a, b)<>{};
    assume
A2: Hom(c2 [x] a, b)<>{};
    assume
A3: c1,e1 is_exponent_of a,b;
    then
A4: Hom(c2,c1)<>{} & ex h being Morphism of c2,c1 st e2 = e1 * (h [x] id- a) &
    for h1 being Morphism of c2,c1 st e2 = e1 * (h1 [x] id- a) holds h = h1
    by A2,A1,Def29;
    assume
A5: c2,e2 is_exponent_of a,b;
    then
A6: Hom(c1,c2)<>{} & ex h being Morphism of c1,c2 st e1 = e2 * (h [x] id- a) &
    for h1 being Morphism of c1,c2 st e1 = e2 * (h1 [x] id- a) holds h = h1
    by A1,A2,Def29;
    ex f being Morphism of c1,c2 st f is isomorphism
    proof
      consider f be Morphism of c1,c2 such that
A7:   e1 = e2 * (f [x] id- a) & for h1 being Morphism of c1,c2
      st e1 = e2 * (h1 [x] id- a) holds f = h1 by A1,A2,A5,Def29;
      take f;
      ex g being Morphism of c2,c1 st g*f = id- c1 & f*g = id- c2
      proof
        consider g be Morphism of c2,c1 such that
A8:     e2 = e1 * (g [x] id- a) & for h1 being Morphism of c2,c1
        st e2 = e1 * (h1 [x] id- a) holds g = h1 by A2,A1,A3,Def29;
        take g;
A9:     Hom(a,a)<>{};
A10:     Hom(c1 [x] a,c2 [x] a)<>{} by A9,A6,Th44;
A11:     Hom(c2 [x] a,c1 [x] a)<>{} by A9,A4,Th44;
        consider h2 be Morphism of c1,c1 such that
        e1 = e1 * (h2 [x] id- a) and
A12:     for h1 being Morphism of c1,c1 st e1 = e1 * (h1 [x] id- a)
        holds h2 = h1 by A3,A1,Def29;
        e1 = e1 * ((g [x]id- a) * (f[x]id- a)) by A7,A8,A10,A11,A1,CAT_7:23
        .= e1 * ((g*f)[x]((id- a)*(id- a))) by A4,A6,A9,Th66
        .= e1 * ((g*f)[x]id- a) by A9,CAT_7:18;
        then
A13:     g*f = h2 by A12;
        e1 = e1 * id-(c1 [x] a) by A1,CAT_7:18
        .= e1 * (id- c1[x]id- a) by Th67;
        hence g*f = id- c1 by A12,A13;
        consider h3 be Morphism of c2,c2 such that
        e2 = e2 * (h3[x]id- a) and
A14:     for h1 being Morphism of c2,c2 st e2 = e2 * (h1[x]id- a) holds h3 = h1
        by A5,A2,Def29;
        e2 = e2 * ((f[x]id- a) * (g[x]id- a)) by A7,A8,A10,A11,A2,CAT_7:23
        .= e2 * ((f*g)[x]((id- a)*(id- a))) by A4,A6,A9,Th66
        .= e2 * ((f*g)[x]id- a) by A9,CAT_7:18;
        then
A15:     f*g = h3 by A14;
        e2 = e2 * id-(c2 [x] a) by A2,CAT_7:18
        .= e2 * (id- c2[x]id- a) by Th67;
        hence f*g = id- c2 by A14,A15;
      end;
      hence f is isomorphism by A4,A6,CAT_7:def 9;
    end;
    hence c1,c2 are_isomorphic by CAT_7:def 10;
  end;

definition
  let C be with_binary_products non empty category;
  attr C is with_exponential_objects means :Def30:
  for a,b being Object of C holds ex c being Object of C,
  e being Morphism of c [x] a,b st Hom(c [x] a, b)<>{} &
  c,e is_exponent_of a,b;
end;

registration
  cluster OrdC 1 -> with_binary_products;
  correctness by Th41;
end;

theorem Th69:
  OrdC 1 is with_exponential_objects
  proof
    set C = OrdC 1;
    consider f be morphism of OrdC 1 such that
A1: f is identity & Ob OrdC 1 = {f} & Mor OrdC 1 = {f} by Th15;
A2: for o1,o2 being Object of C, f1 being morphism of C holds
    f1 is Morphism of o1,o2
    proof
      let o1,o2 be Object of C;
      let f1 be morphism of C;
A3:   dom f1 = f by A1,TARSKI:def 1 .= o1 by A1,TARSKI:def 1;
      cod f1 = f by A1,TARSKI:def 1 .= o2 by A1,TARSKI:def 1;
      then f1 in Hom(o1,o2) by A3,CAT_7:20;
      hence f1 is Morphism of o1,o2 by CAT_7:def 3;
    end;
    for a,b being Object of C holds ex c being Object of C,
    e being Morphism of c [x] a,b st
    Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b
    proof
      let a,b be Object of C;
      set c = a;
      take c;
      reconsider e = f as Morphism of c [x] a,b by A2;
      take e;
      c [x] a = f by A1,TARSKI:def 1 .= b by A1,TARSKI:def 1;
      hence
A4:   Hom(c [x] a, b)<>{};
      for d being Object of C, f1 being Morphism of d [x] a,b
      st Hom(d [x] a,b)<>{} holds
      Hom(d,c) <> {} & ex h being Morphism of d,c st f1 = e * (h [x] id- a) &
      for h1 being Morphism of d,c st f1 = e * (h1[x]id- a) holds h = h1
      proof
        let d be Object of C;
        let f1 be Morphism of d [x] a,b;
        assume Hom(d [x] a,b)<>{};
        reconsider h = f as Morphism of d,a by A2;
        d = f by A1,TARSKI:def 1 .= a by A1,TARSKI:def 1;
        hence Hom(d,c) <> {};
        take h;
        thus f1 = f by A1,TARSKI:def 1 .= e * (h [x] id- a) by A1,TARSKI:def 1;
        let h1 be Morphism of d,c;
        assume f1 = e * (h1[x]id- a);
        thus h = h1 by A1,TARSKI:def 1;
      end;
      hence c,e is_exponent_of a,b by A4,Def29;
    end;
    hence thesis;
  end;

registration
  cluster with_exponential_objects for with_binary_products non empty category;
  correctness by Th69;
end;

definition
  let C be with_exponential_objects with_binary_products non empty category;
  let a,b be Object of C;
  mode categorical_exponent of a,b -> pair object means :Def31:
  ex c being Object of C, e being Morphism of c [x] a,b st it = [c,e] &
  Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b;
  correctness
  proof
    consider c be Object of C, e be Morphism of c [x] a,b such that
A1: Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b by Def30;
    take [c,e];
    thus thesis by A1;
  end;
end;

definition
  let C be with_exponential_objects with_binary_products non empty category;
  let a,b be Object of C;
  func b |^ a -> Object of C equals
  (the categorical_exponent of a,b)`1;
  correctness
  proof
    set T = the categorical_exponent of a,b;
    consider c be Object of C, e be Morphism of c [x] a,b such that
A1: T = [c,e] & Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b by Def31;
    thus thesis by A1;
  end;
end;

definition
  let C be with_exponential_objects with_binary_products non empty category;
  let a,b be Object of C;
  func eval(a,b) -> Morphism of b|^a [x] a, b equals
  (the categorical_exponent of a,b)`2;
  correctness
  proof
    set T = the categorical_exponent of a,b;
    consider c be Object of C, e be Morphism of c [x] a,b such that
A1: T = [c,e] & Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b by Def31;
    thus thesis by A1;
  end;
end;

theorem Th70:
  for C being with_exponential_objects with_binary_products non empty category,
      a,b being Object of C holds Hom(b|^a [x] a, b)<>{} &
      b|^a,eval(a,b) is_exponent_of a,b
  proof
    let C be with_exponential_objects with_binary_products non empty category;
    let a,b be Object of C;
    set T = the categorical_exponent of a,b;
    consider c be Object of C, e be Morphism of c [x] a,b such that
A1: T = [c,e] & Hom(c [x] a, b)<>{} & c,e is_exponent_of a,b by Def31;
    thus thesis by A1;
  end;

theorem
  for C being with_exponential_objects with_binary_products non empty category,
      a,b,c being Object of C st Hom(c [x] a,b) <> {} 
  holds
  ex L being Function of Hom(c [x] a,b), Hom(c,b|^a) st
  (for f being Morphism of c [x] a,b, h being Morphism of c,b|^a st h = L.f
  holds eval(a,b) * (h [x] id- a) = f) & L is bijective
  proof
    let C be with_exponential_objects with_binary_products non empty category;
    let a,b,c be Object of C;
    assume
A1: Hom(c [x] a, b) <> {};
A2: Hom(b|^a [x] a, b) <> {} & b|^a,eval(a,b) is_exponent_of a,b by Th70;
    defpred P[object,object] means
    for f being Morphism of c [x] a,b st f = $1 ex h being Morphism of c,b|^a
    st h = $2 & f = eval(a,b) * (h [x] id- a) &
    for h1 being Morphism of c,b|^a st f = eval(a,b) * (h1[x]id- a)
    holds h = h1;
A4: for x being object st x in Hom(c [x] a,b)
    ex y being object st y in Hom(c,b|^a) & P[x,y]
    proof
      let x be object;
      assume
A5:   x in Hom(c [x] a,b);
      reconsider f = x as Morphism of c [x] a,b by A5,CAT_7:def 3;
      consider y be Morphism of c,b|^a such that
A6:   f = eval(a,b) * (y[x]id- a) &
      for h1 being Morphism of c,b|^a st f = eval(a,b) * (h1[x]id- a)
      holds y = h1 by A2,A1,Def29;
      take y;
      Hom(c,b|^a)<>{} by A2,A1,Def29;
      hence y in Hom(c,b|^a) by CAT_7:def 3;
      thus P[x,y] by A6;
    end;
    consider L be Function of Hom(c [x] a,b), Hom(c,b|^a) such that
A7: for x being object st x in Hom(c [x] a,b) holds P[x,L.x]
    from FUNCT_2:sch 1(A4);
    take L;
A8: ex y being object st y in Hom(c,b|^a)
    proof
      consider x be object such that
A9:   x in Hom(c [x] a,b) by A1,XBOOLE_0:def 1;
      consider y be object such that
A10:   y in Hom(c,b|^a) & P[x,y] by A9,A4;
      take y;
      thus y in Hom(c,b|^a) by A10;
    end;
    thus for f being Morphism of c [x] a,b, h being Morphism of c,b|^a
    st h = L.f holds eval(a,b) * (h [x] id- a) = f
    proof
      let f be Morphism of c [x] a,b;
      f in Hom(c [x] a,b) by A1,CAT_7:def 3;
      then consider h0 be Morphism of c,b|^a such that
A11:  h0 = L.f & f = eval(a,b) * (h0[x]id- a) &
      for h1 being Morphism of c,b|^a st f = eval(a,b) * (h1[x]id- a)
      holds h0 = h1 by A7;
      let h be Morphism of c,b|^a;
      assume h = L.f;
      hence eval(a,b) * (h [x] id- a) = f by A11;
    end;
    for x1,x2 being object st x1 in Hom(c [x] a,b) & x2 in Hom(c [x] a,b) &
    L.x1 = L.x2 holds x1 = x2
    proof
      let x1,x2 be object;
      assume
A12:   x1 in Hom(c [x] a,b);
      then reconsider f1 = x1 as Morphism of c [x] a,b by CAT_7:def 3;
      consider h1 be Morphism of c,b|^a such that
A13:  h1 = L.x1 & f1 = eval(a,b) * (h1[x]id- a) &
      for h0 being Morphism of c,b|^a st f1 = eval(a,b) * (h0[x]id- a)
      holds h1 = h0 by A12,A7;
      assume
A14:   x2 in Hom(c [x] a,b);
      then reconsider f2 = x2 as Morphism of c [x] a,b by CAT_7:def 3;
      consider h2 be Morphism of c,b|^a such that
A15:  h2 = L.x2 & f2 = eval(a,b) * (h2[x]id- a) &
      for h0 being Morphism of c,b|^a st f2 = eval(a,b) * (h0[x]id- a)
      holds h2 = h0 by A14,A7;
      assume L.x1 = L.x2;
      hence x1 = x2 by A13,A15;
    end;
    then
A16: L is one-to-one by A8,FUNCT_2:19;
    for y being object st y in Hom(c,b|^a) holds y in rng L
    proof
      let y be object;
      assume y in Hom(c,b|^a);
      then reconsider h = y as Morphism of c,b|^a by CAT_7:def 3;
      set f1 = eval(a,b) * (h [x] id- a);
A17:  f1 in Hom(c [x] a,b) by A1,CAT_7:def 3;
      then consider h1 be Morphism of c,b|^a such that
A18:  h1 = L.f1 & f1 = eval(a,b) * (h1[x]id- a) &
      for h0 being Morphism of c,b|^a st f1 = eval(a,b) * (h0[x]id- a)
      holds h1 = h0 by A7;
A19:  y = L.f1 by A18;
      f1 in dom L by A8,A17,FUNCT_2:def 1;
      hence y in rng L by A19,FUNCT_1:3;
    end;
    then Hom(c,b|^a) c= rng L by TARSKI:def 3;
    then L is onto by FUNCT_2:def 3,XBOOLE_0:def 10;
    hence L is bijective by A16;
  end;

definition
  let A,B,C be category;
  let E be Functor of C [x] A, B such that E is covariant;
  pred C,E is_exponent_of A,B means :Def34:
  for D being category, F being Functor of D [x] A, B st F is covariant holds
  ex H being Functor of D,C st H is covariant & F = E (*)(H [x] id A) &
  for H1 being Functor of D,C st H1 is covariant & F = E (*)(H1 [x] id A)
  holds H = H1;
end;

Lm6:
  for C,C1,C2 being non empty category st C = Functors(C1,C2)
  holds ex E being Functor of C [x] C1,C2 st E is covariant &
  for D being category, F being Functor of D [x] C1,C2 st F is covariant holds
  ex H being Functor of D, C st H is covariant & F = E (*)(H [x] id C1) &
  for H1 being Functor of D, C st H1 is covariant & F = E (*)(H1 [x] id C1)
  holds H = H1
  proof
    let C,C1,C2 be non empty category;
    assume
A1: C = Functors(C1,C2);
    defpred R1[object,object] means
    ex c being morphism of C, c1 being morphism of C1,
        d being morphism of C [x] C1, c2 being morphism of C2,
        F12 being Functor of C1,C2
    st d = [c,c1] & $1 = d & $2 = c2 & c2 = F12.c1 & F12 = c`2;
A2: for x being object st x in the carrier of C [x] C1
    ex y being object st y in the carrier of C2 & R1[x,y]
    proof
      let x be object;
      assume x in the carrier of C [x] C1;
      then reconsider d = x as morphism of C [x] C1 by CAT_6:def 1;
      consider c be morphism of C, c1 be morphism of C1 such that
A3:   d = [c,c1] by Th52;
A4:   the carrier of Functors(C1,C2) = {[[F1,F2],t]
      where F1, F2 is Functor of C1,C2,
      t is natural_transformation of F1,F2 : F1 is covariant &
      F2 is covariant & F1 is_naturally_transformable_to F2} by Def28;
      c in Mor C;
      then c in {[[F1,F2],t] where F1, F2 is Functor of C1,C2,
      t is natural_transformation of F1,F2 : F1 is covariant &
      F2 is covariant & F1 is_naturally_transformable_to F2}
      by A4,A1,CAT_6:def 1;
      then consider F1,F2 be Functor of C1,C2,
      t be natural_transformation of F1,F2 such that
A5:   c = [[F1,F2],t] & F1 is covariant &
      F2 is covariant & F1 is_naturally_transformable_to F2;
      reconsider F12 = t as Functor of C1,C2;
      set c2 = F12.c1;
      reconsider y = c2 as object;
      take y;
      c2 in Mor C2;
      hence y in the carrier of C2 by CAT_6:def 1;
      take c,c1,d,c2,F12;
      thus thesis by A5,A3;
    end;
    consider E be Function of the carrier of C [x] C1,C2 such that
A6: for x being object st x in the carrier of C [x] C1 holds R1[x,E.x]
    from FUNCT_2:sch 1(A2);
    reconsider E as Functor of C [x] C1,C2;
    take E;
A7: for f being morphism of C [x] C1 holds
    ex c being morphism of C, c1 being morphism of C1,
        c2 being morphism of C2,
        F12 being Functor of C1,C2
    st f = [c,c1] & E.f = c2 & c2 = F12.c1 & F12 = c`2
    proof
      let f be morphism of C [x] C1;
      reconsider x = f as object;
      f in Mor(C [x] C1);
      then f in the carrier of C [x] C1 by CAT_6:def 1;
      then consider c be morphism of C, c1 be morphism of C1,
        d be morphism of C [x] C1, c2 be morphism of C2,
        F12 be Functor of C1,C2 such that
A8:   d = [c,c1] & x = d & E.x = c2 & c2 = F12.c1 & F12 = c`2 by A6;
      take c,c1,c2,F12;
      thus thesis by A8,CAT_6:def 21;
    end;
    for f being morphism of C [x] C1 st f is identity holds E.f is identity
    proof
      let f be morphism of C [x] C1;
      assume
A9:  f is identity;
      consider c be morphism of C, c1 be morphism of C1,
        c2 be morphism of C2, F12 be Functor of C1,C2 such that
A10:   f = [c,c1] & E.f = c2 & c2 = F12.c1 & F12 = c`2 by A7;
A11:   c is identity & c1 is identity by A9,A10,Th56;
      consider F be covariant Functor of C1,C2 such that
A12:   c = [[F,F],F] by A1,A11,Th64;
      thus E.f is identity by A10,A11,A12,CAT_6:def 22,def 25;
    end;
    then
A13: E is identity-preserving by CAT_6:def 22;
    for f1,f2 being morphism of C [x] C1 st f1 |> f2 holds
    E.f1 |> E.f2 & E.(f1 (*) f2) = (E.f1)(*)(E.f2)
    proof
      let f1,f2 be morphism of C [x] C1;
      assume
A14:  f1 |> f2;
      consider c1 be morphism of C, c11 be morphism of C1,
        c12 be morphism of C2, F11 be Functor of C1,C2 such that
A15:   f1 = [c1,c11] & E.f1 = c12 & c12 = F11.c11 & F11 = c1`2 by A7;
      consider c2 be morphism of C, c21 be morphism of C1,
        c22 be morphism of C2, F22 be Functor of C1,C2 such that
A16:   f2 = [c2,c21] & E.f2 = c22 & c22 = F22.c21 & F22 = c2`2 by A7;
A17:   c1 |> c2 & c11 |> c21 by A14,A15,A16,Th54;
      then consider F,F1,F2 be covariant Functor of C1,C2,
      T1 be natural_transformation of F1,F,
      T2 be natural_transformation of F,F2 such that
A18:   c1 = [[F,F2],T2] & c2 = [[F1,F],T1] & c1(*)c2 = [[F1,F2],T2`*`T1] &
      for g1,g2 being morphism of C1 st g2 |> g1 holds T2.g2 |> T1.g1 &
      (T2`*`T1).(g2(*)g1) = (T2.g2)(*)(T1.g1) by A1,Th63;
      thus E.f1 |> E.f2 by A15,A16,A17,A18;
      consider d be morphism of C, d1 be morphism of C1,
        d2 be morphism of C2, G12 be Functor of C1,C2 such that
A19:   f1(*)f2 = [d,d1] & E.(f1(*)f2) = d2 & d2 = G12.d1 & G12 = d`2 by A7;
A20:   [d,d1] = [c1(*)c2,c11(*)c21] by A19,A15,A16,A17,Th55;
A21:   d = pr1(C,C1).[d,d1] by Def23 .= c1(*)c2 by A20,Def23;
A22:   d1 = pr2(C,C1).[d,d1] by Def23 .= c11(*)c21 by A20,Def23;
      thus E.(f1(*)f2)
      = (E.f1)(*)(E.f2) by A15,A16,A18,A17,A21,A19,A22;
    end;
    hence
A23: E is covariant by A13,CAT_6:def 25,def 23;
    let D be category;
    let F be Functor of D [x] C1,C2;
    assume
A24: F is covariant;
    per cases;
    suppose D is empty;
      then reconsider D0 = D as empty category;
      set H = the covariant Functor of D0, C;
      reconsider H as Functor of D, C;
      take H;
      thus thesis;
    end;
    suppose
A25:  D is non empty;
A26:  for d being morphism of D ex F1 being Functor of C1,C2 st
      (for c1 being morphism of C1 holds F1.c1 = F.[d,c1]) &
      (d is identity implies F1 is covariant)
      proof
        let d be morphism of D;
        defpred R2[object,object] means
        ex c1 being morphism of C1 st $1 = c1 & $2 = F.[d,c1];
A27:     for x being object st x in the carrier of C1
        ex y being object st y in the carrier of C2 & R2[x,y]
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          set y = F.[d,c1];
          take y;
          y in Mor C2;
          hence y in the carrier of C2 by CAT_6:def 1;
          thus R2[x,y];
        end;
        consider F1 be Function of the carrier of C1,C2 such that
A28:     for x being object st x in the carrier of C1 holds R2[x,F1.x]
        from FUNCT_2:sch 1(A27);
        reconsider F1 as Functor of C1,C2;
        take F1;
        thus
A29:    for c1 being morphism of C1 holds F1.c1 = F.[d,c1]
        proof
          let c1 be morphism of C1;
          c1 in Mor C1;
          then
A30:       c1 in the carrier of C1 by CAT_6:def 1;
          reconsider x = c1 as object;
          consider c2 be morphism of C1 such that
A31:       x = c2 & F1.x = F.[d,c2] by A28,A30;
          thus F1.c1 = F.[d,c1] by A31,CAT_6:def 21;
        end;
        thus d is identity implies F1 is covariant
        proof
          assume
A32:       d is identity;
          for c1 being morphism of C1 st c1 is identity holds F1.c1 is identity
          proof
            let c1 be morphism of C1;
            assume c1 is identity;
            then
A33:         [d,c1] is identity by A25,A32,Th56;
            F1.c1 = F.[d,c1] by A29;
            hence F1.c1 is identity by A33,A24,CAT_6:def 25,def 22;
          end;
          then
A34:       F1 is identity-preserving by CAT_6:def 22;
          for c1,c2 being morphism of C1 st c1 |> c2 holds
          F1.c1 |> F1.c2 & F1.(c1(*)c2) = (F1.c1)(*)(F1.c2)
          proof
            let c1,c2 be morphism of C1;
            assume
A35:         c1 |> c2;
A36:        d |> d by A25,A32,CAT_6:24;
A37:        [d,c1] |> [d,c2] by A35,A36,Th54;
A38:       F is multiplicative by A24,CAT_6:def 25;
A39:         F1.c1 = F.[d,c1] & F1.c2 = F.[d,c2] by A29;
            hence F1.c1 |> F1.c2 by A38,A37,CAT_6:def 23;
            thus F1.(c1(*)c2) = F.[d,c1(*)c2] by A29
            .= F.[d(*)d,c1(*)c2] by A36,A32,Th4
            .= F.([d,c1](*)[d,c2]) by A35,A36,Th55
            .= (F1.c1)(*)(F1.c2) by A38,A39,A37,CAT_6:def 23;
          end;
          hence thesis by A34,CAT_6:def 25,def 23;
        end;
      end;
      defpred R3[object,object] means
      ex d,d1,d2 being morphism of D, F1,F2 being Functor of C1,C2,
      T being natural_transformation of F1,F2 st $1 = d & d2 |> d & d |> d1 &
      d1 is identity & d2 is identity & $2 = [[F1,F2],T] &
      F1 is covariant & F2 is covariant & F1 is_naturally_transformable_to F2 &
      (for c1 being morphism of C1 holds F1.c1 = F.[d1,c1] &
      F2.c1 = F.[d2,c1] & T.c1 = F.[d,c1]);
A40:   for x being object st x in the carrier of D
      ex y being object st y in the carrier of C & R3[x,y]
      proof
        let x be object;
        assume x in the carrier of D;
        then reconsider d = x as morphism of D by CAT_6:def 1;
        consider d2,d1 be morphism of D such that
A41:     d2 is identity & d1 is identity & d2 |> d & d |> d1 by A25,Th5;
        consider F1 be Functor of C1,C2 such that
A42:     (for c1 being morphism of C1 holds F1.c1 = F.[d1,c1]) &
        (d1 is identity implies F1 is covariant) by A26;
        consider F2 be Functor of C1,C2 such that
A43:     (for c1 being morphism of C1 holds F2.c1 = F.[d2,c1]) &
        (d2 is identity implies F2 is covariant) by A26;
        consider T be Functor of C1,C2 such that
A44:     (for c1 being morphism of C1 holds T.c1 = F.[d,c1]) &
        (d is identity implies T is covariant) by A26;
        for f,f1,f2 being morphism of C1 st f1 is identity & f2 is identity &
        f1 |> f & f |> f2 holds T.f1 |> F1.f & F2.f |> T.f2 &
        T.f = (T.f1)(*)(F1.f) & T.f = (F2.f)(*)(T.f2)
        proof
          let f,f1,f2 be morphism of C1;
          assume
A45:       f1 is identity & f2 is identity;
          assume
A46:       f1 |> f & f |> f2;
A47:       T.f1 = F.[d,f1] & T.f2 = F.[d,f2] by A44;
A48:       F1.f = F.[d1,f] by A42;
A49:       F2.f = F.[d2,f] by A43;
A50:       F is multiplicative by A24,CAT_6:def 25;
A51:     [d,f1] |> [d1,f] by A46,A41,Th54;
          thus T.f1 |> F1.f by A47,A48,A51,A50,CAT_6:def 23;
A52:     [d2,f] |> [d,f2] by A46,A41,Th54;
          hence F2.f |> T.f2 by A49,A47,A50,CAT_6:def 23;
          thus T.f = F.[d,f] by A44
          .= F.[d,f1(*)f] by A46,A45,Th4
          .= F.[d(*)d1,f1(*)f] by A41,Th4
          .= F.([d,f1](*)[d1,f]) by A46,A41,Th55
          .= (F.[d,f1])(*)(F.[d1,f]) by A51,A50,CAT_6:def 23
          .= (T.f1)(*)(F1.f) by A48,A44;
          thus T.f = F.[d,f] by A44
          .= F.[d,f(*)f2] by A46,A45,Th4
          .= F.[d2(*)d,f(*)f2] by A41,Th4
          .= F.([d2,f](*)[d,f2]) by A46,A41,Th55
          .= (F.[d2,f])(*)(F.[d,f2]) by A52,A50,CAT_6:def 23
          .= (F2.f)(*)(T.f2) by A49,A44;
        end;
        then
A53:    T is_natural_transformation_of F1,F2 by Th58,A42,A43,A41;
        then
A54:    F1 is_naturally_transformable_to F2;
        then reconsider T as natural_transformation of F1,F2 by A53,Def26;
        set y = [[F1,F2],T];
        take y;
        y in {[[F1,F2],T] where F1,F2 is Functor of C1,C2,
        T is natural_transformation of F1,F2: F1 is covariant & F2 is covariant
        & F1 is_naturally_transformable_to F2} by A54,A42,A43,A41;
        hence y in the carrier of C by A1,Def28;
        thus R3[x,y] by A41,A42,A43,A44,A54;
      end;
      consider H be Function of the carrier of D,C such that
A55:  for x being object st x in the carrier of D holds R3[x,H.x]
      from FUNCT_2:sch 1(A40);
      reconsider H as Functor of D,C;
      take H;
A56: for f being morphism of D st f is identity holds H.f is identity
      proof
        let f be morphism of D;
        assume
A57:     f is identity;
        reconsider x = f as object;
        Mor D is non empty by A25;
        then f in Mor D;
        then x in the carrier of D by CAT_6:def 1;
        then consider d,d1,d2 be morphism of D, F1,F2 be Functor of C1,C2,
        T be natural_transformation of F1,F2 such that
A58:     x = d & d2 |> d & d |> d1 & d1 is identity & d2 is identity &
        H.x = [[F1,F2],T] & F1 is covariant & F2 is covariant &
        F1 is_naturally_transformable_to F2 &
        (for c1 being morphism of C1 holds F1.c1 = F.[d1,c1] &
        F2.c1 = F.[d2,c1] & T.c1 = F.[d,c1]) by A55;
A59:     d2 = d2(*)d by A58,A57,Th4 .= d by A58,Th4;
A60:     d1 = d(*)d1 by A58,A57,Th4 .= d by A58,Th4;
        for x being object st x in the carrier of C1 holds F1.x = F2.x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          thus F1.x = F1.c1 by CAT_6:def 21
          .= F.[d1,c1] by A58
          .= F2.c1 by A58,A59,A60
          .= F2.x by CAT_6:def 21;
        end;
        then
A61:    F1 = F2 by FUNCT_2:12;
A62:   for x being object st x in the carrier of C1 holds F2.x = T.x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          thus F2.x = F2.c1 by CAT_6:def 21
          .= F.[d2,c1] by A58
          .= T.c1 by A58,A59
          .= T.x by CAT_6:def 21;
        end;
        H.f = H.x by A25,CAT_6:def 21 .= [[F1,F1],F1]
        by A58,A62,A61,FUNCT_2:12;
        hence H.f is identity by A1,A58,Th64;
      end;
      then
A63:  H is identity-preserving by CAT_6:def 22;
      for f1,f2 being morphism of D st f1 |> f2 holds
      H.f1 |> H.f2 & H.(f1(*)f2) = (H.f1)(*)(H.f2)
      proof
        let f1,f2 be morphism of D;
        assume
A64:     f1 |> f2;
        reconsider x1 = f1, x2 = f2 as object;
A65:    Mor D is non empty by A25;
        then f1 in Mor D & f2 in Mor D;
        then
A66:   x1 in the carrier of D & x2 in the carrier of D by CAT_6:def 1;
        consider d1,d11,d12 be morphism of D, F11,F12 be Functor of C1,C2,
        T1 be natural_transformation of F11,F12 such that
A67:    x2 = d1 & d12 |> d1 & d1 |> d11 & d11 is identity & d12 is identity &
        H.x2 = [[F11,F12],T1] & F11 is covariant & F12 is covariant &
        F11 is_naturally_transformable_to F12 &
        (for c1 being morphism of C1 holds F11.c1 = F.[d11,c1] &
         F12.c1 = F.[d12,c1] & T1.c1 = F.[d1,c1]) by A66,A55;
        consider d2,d21,d22 be morphism of D, F21,F22 be Functor of C1,C2,
        T2 be natural_transformation of F21,F22 such that
A68:    x1 = d2 & d22 |> d2 & d2 |> d21 & d21 is identity & d22 is identity &
        H.x1 = [[F21,F22],T2] & F21 is covariant & F22 is covariant &
        F21 is_naturally_transformable_to F22 &
        (for c1 being morphism of C1 holds F21.c1 = F.[d21,c1] &
         F22.c1 = F.[d22,c1] & T2.c1 = F.[d2,c1]) by A66,A55;
        reconsider x12 = f1(*)f2 as object;
        f1(*)f2 in Mor D by A65;
        then
A69:   x12 in the carrier of D by CAT_6:def 1;
        consider d3,d31,d32 be morphism of D, F31,F32 be Functor of C1,C2,
        T3 be natural_transformation of F31,F32 such that
A70:    x12 = d3 & d32 |> d3 & d3 |> d31 & d31 is identity & d32 is identity &
        H.x12 = [[F31,F32],T3] & F31 is covariant & F32 is covariant &
        F31 is_naturally_transformable_to F32 &
        (for c1 being morphism of C1 holds F31.c1 = F.[d31,c1] &
         F32.c1 = F.[d32,c1] & T3.c1 = F.[d3,c1]) by A69,A55;
A71:    dom d2 = cod d1 by A25,CAT_7:5,A64,A67,A68;
A72:    d12 = cod d1 by A67,CAT_6:27
        .= d21 by A71,A68,CAT_6:26;
A73:   for x being object st x in the carrier of C1 holds F12.x = F21.x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          thus F12.x = F12.c1 by CAT_6:def 21
          .= F.[d12,c1] by A67
          .= F21.c1 by A72,A68
          .= F21.x by CAT_6:def 21;
        end;
        then
A74:    F12 = F21 by FUNCT_2:12;
        reconsider T2 as natural_transformation of F12,F22 by A73,FUNCT_2:12;
A75:     d31 = dom(f1(*)f2) by A70,CAT_6:26
        .= dom d1 by A67,A64,CAT_7:4
        .= d11 by A67,CAT_6:26;
        for x being object st x in the carrier of C1 holds F31.x = F11.x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          thus F31.x = F31.c1 by CAT_6:def 21
          .= F.[d31,c1] by A70
          .= F11.c1 by A75,A67
          .= F11.x by CAT_6:def 21;
        end;
        then
A76:    F31 = F11 by FUNCT_2:12;
A77:     d32 = cod(f1(*)f2) by A70,CAT_6:27
        .= cod d2 by A68,A64,CAT_7:4
        .= d22 by A68,CAT_6:27;
        for x being object st x in the carrier of C1 holds F32.x = F22.x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c1 = x as morphism of C1 by CAT_6:def 1;
          thus F32.x = F32.c1 by CAT_6:def 21
          .= F.[d32,c1] by A70
          .= F22.c1 by A77,A68
          .= F22.x by CAT_6:def 21;
        end;
        then
A78:    F32 = F22 by FUNCT_2:12;
A79:   for x being object st x in the carrier of C1 holds T3.x = (T2`*`T1).x
        proof
          let x be object;
          assume x in the carrier of C1;
          then reconsider c = x as morphism of C1 by CAT_6:def 1;
          consider c2,c1 be morphism of C1 such that
A80:       c2 is identity & c1 is identity & c2 |> c & c |> c1 by Th5;
A81:       F is multiplicative by A24,CAT_6:def 25;
A82:       [d2,c2] |> [d12,c] by A80,Th54,A68,A72;
A83:       [d2,c2](*)[d12,c] = [d2(*)d12,c2(*)c] by A72,A68,A80,Th55
          .= [d2,c2(*)c] by A72,A68,Th4
          .= [d2,c] by A80,Th4;
A84:       [d2,c] |> [d1,c1] by A80,A64,A67,A68,Th54;
A85:       [d2,c] (*) [d1,c1] = [d2(*)d1,c(*)c1] by A64,A67,A68,A80,Th55
          .= [d3,c] by A70,A80,A67,A68,Th4;
          thus T3.x = T3.c by CAT_6:def 21
          .= F.([d2,c](*)[d1,c1]) by A85,A70
          .= (F.([d2,c2](*)[d12,c]))(*)(F.[d1,c1]) by A83,A81,A84,CAT_6:def 23
          .= (F.[d2,c2])(*)(F.[d12,c])(*)(F.[d1,c1]) by A82,A81,CAT_6:def 23
          .= (F.[d2,c2])(*)(F.[d12,c])(*)(T1.c1) by A67
          .= (F.[d2,c2])(*)(F12.c)(*)(T1.c1) by A67
          .= (T2.c2)(*)(F12.c)(*)(T1.c1) by A68
          .= (T2`*`T1).c by A74,A67,A68,A80,Def27
          .= (T2`*`T1).x by CAT_6:def 21;
        end;
A86:    H.f1 = H.x1 by A25,CAT_6:def 21 .= [[F12,F22],T2]
        by A73,A68,FUNCT_2:12;
A87:    H.f2 = [[F11,F12],T1] by A67,A25,CAT_6:def 21;
A88:    H.(f1(*)f2) = [[F31,F32],T3] by A70,A25,CAT_6:def 21
        .= [[F11,F22],T2`*`T1] by A76,A78,A79,FUNCT_2:12;
A89:    the carrier of C = {[[F1,F2],t] where F1,F2 is Functor of C1,C2,
        t is natural_transformation of F1,F2: F1 is covariant &
        F2 is covariant & F1 is_naturally_transformable_to F2} by A1,Def28;
        H.x1 in the carrier of C by A68,A89;
        then
A90:    H.f1 is Element of the carrier of C by A25,CAT_6:def 21;
        H.x2 in the carrier of C by A67,A89;
        then
A91:    H.f2 is Element of the carrier of C by A25,CAT_6:def 21;
        H.x12 in the carrier of C by A70,A89;
        then
A92:    H.(f1(*)f2) is Element of the carrier of C by A25,CAT_6:def 21;
        [KuratowskiPair(H.f1,H.f2),H.(f1(*)f2)] in
         {[[x2,x1],x3] where x1,x2,x3 is Element of the carrier of C:
         ex F1,F2,F3 being Functor of C1,C2,
         t1 being natural_transformation of F1,F2,
         t2 being natural_transformation of F2,F3 st x1 = [[F1,F2],t1] &
         x2 = [[F2,F3],t2] & x3 = [[F1,F3],t2`*`t1]}
        by A86,A87,A88,A90,A91,A92;
        then
A93:    [KuratowskiPair(H.f1,H.f2),H.(f1(*)f2)] in the composition of C
         by A1,Def28;
        then
A94:    KuratowskiPair(H.f1,H.f2) in dom the composition of C
         by XTUPLE_0:def 12;
        hence H.f1 |> H.f2 by CAT_6:def 2;
        thus H.(f1(*)f2) = (the composition of C).KuratowskiPair(H.f1,H.f2)
         by A94,A93,FUNCT_1:def 2
         .= (the composition of C).(H.f1,H.f2) by BINOP_1:def 1
         .= (H.f1)(*)(H.f2) by A94,CAT_6:def 3,def 2;
      end;
      hence
A95:  H is covariant by A63,CAT_6:def 25,def 23;
A96:  for d being morphism of D, c1 being morphism of C1 holds
      F.[d,c1] = E.[H.d,c1]
      proof
        let d be morphism of D;
        let c1 be morphism of C1;
        reconsider x = [H.d,c1] as object;
        [H.d,c1] in Mor(C [x] C1);
        then x in the carrier of C [x] C1 by CAT_6:def 1;
        then consider c be morphism of C, c11 be morphism of C1,
        d1 be morphism of C [x] C1, c22 be morphism of C2,
        F12 be Functor of C1,C2 such that
A97:     d1 = [c,c11] & x = d1 & E.x = c22 & c22 = F12.c11 & F12 = c`2 by A6;
A98:     H.d = c & c1 = c11 by A97,Th53;
        reconsider x1 = d as object;
        Mor D is non empty by A25;
        then d in Mor D;
        then x1 in the carrier of D by CAT_6:def 1;
        then consider d1,d11,d12 be morphism of D, F1,F2 be Functor of C1,C2,
        T be natural_transformation of F1,F2 such that
A99:     x1 = d1 & d12 |> d1 & d1 |> d11 & d11 is identity & d12 is identity &
        H.x1 = [[F1,F2],T] & F1 is covariant & F2 is covariant &
        F1 is_naturally_transformable_to F2 &
        (for c1 being morphism of C1 holds F1.c1 = F.[d11,c1] &
        F2.c1 = F.[d12,c1] & T.c1 = F.[d1,c1]) by A55;
A100:  H.d = [[F1,F2],T] by A99,A25,CAT_6:def 21;
        thus F.[d,c1] = E.x by A97,A98,A100,A99
        .= E.[H.d,c1] by CAT_6:def 21;
      end;
A101: for c1 being morphism of C1 holds (id C1).c1 = c1
      proof
        let c1 be morphism of C1;
        reconsider x1 = c1 as object;
        x1 in Mor C1;
        then
A102:   x1 in the carrier of C1 by CAT_6:def 1;
        thus (id C1).c1 = (id C1).x1 by CAT_6:def 21
        .= (id the carrier of C1).x1 by STRUCT_0:def 4
        .= c1 by A102,FUNCT_1:18;
      end;
A103: for x being object st x in the carrier of D [x] C1
      holds F.x = (E (*) (H [x] id C1)).x
      proof
        let x be object;
        assume x in the carrier of D [x] C1;
        then reconsider f = x as morphism of D [x] C1 by CAT_6:def 1;
A104:     (H [x] id C1) is covariant by A95,Def22;
        consider d be morphism of D, c1 be morphism of C1 such that
A105:     f = [d,c1] by Th52;
        thus F.x = F.[d,c1] by A105,A25,CAT_6:def 21
        .= E.[H.d,c1] by A96
        .= E.[H.d,(id C1).c1] by A101
        .= E.((H [x] id C1).f) by A105,A25,A95,Th57
        .= (E (*) (H [x] id C1)).f by A23,A104,A25,CAT_6:34
        .= (E (*) (H [x] id C1)).x by A25,CAT_6:def 21;
      end;
      hence F = E (*) (H [x] id C1) by FUNCT_2:12;
      let H1 be Functor of D, C;
      assume
A106: H1 is covariant;
      assume
A107: F = E (*) (H1 [x] id C1);
A108: for d being morphism of D st d is identity holds H.d = H1.d
      proof
        let d be morphism of D;
        assume
A109:   d is identity;
        then consider F1 be covariant Functor of C1,C2 such that
A110:    H.d = [[F1,F1],F1] by A1,Th64,A56;
        H1 is identity-preserving by A106,CAT_6:def 25;
        then consider F2 be covariant Functor of C1,C2 such that
A111:    H1.d = [[F2,F2],F2] by A1,Th64,A109,CAT_6:def 22;
        F1 = F2
        proof
          assume F1 <> F2;
          then consider x be object such that
A112:       x in the carrier of C1 & F1.x <> F2.x by FUNCT_2:12;
          reconsider c1 = x as morphism of C1 by A112,CAT_6:def 1;
A113:       (H [x] id C1) is covariant by A95,Def22;
A114:      (E (*) (H [x] id C1)).[d,c1]
          = E.((H [x] id C1).[d,c1]) by A25,A23,A113,CAT_6:34
          .= E.[H.d,(id C1).c1] by A25,A95,Th57
          .= E.[H.d,c1] by A101;
          consider c01 be morphism of C, c11 be morphism of C1,
                  c12 be morphism of C2, F12 be Functor of C1,C2 such that
A115:    [H.d,c1] = [c01,c11] & E.[H.d,c1] = c12 & c12 = F12.c11 & F12 = c01`2
          by A7;
A116:       H.d = c01 & c1 = c11 by A115,Th53;
A117:      (H1 [x] id C1) is covariant by A106,Def22;
A118:      (E (*) (H1 [x] id C1)).[d,c1]
           = E.((H1 [x] id C1).[d,c1]) by A25,A23,A117,CAT_6:34
          .= E.[H1.d,(id C1).c1] by A106,A25,Th57
          .= E.[H1.d,c1] by A101;
          consider c02 be morphism of C, c21 be morphism of C1,
                   c22 be morphism of C2, F22 be Functor of C1,C2 such that
A119:      [H1.d,c1] = [c02,c21] & E.[H1.d,c1] = c22 & c22 = F22.c21 &
          F22 = c02`2 by A7;
A120:      H1.d = c02 & c1 = c21 by A119,Th53;
          F1.x = F1.c1 by CAT_6:def 21
          .= F2.c1 by A110,A111,A120,A115,A116,A119,A114,A118,
          A103,A107,FUNCT_2:12
          .= F2.x by CAT_6:def 21;
          hence contradiction by A112;
        end;
        hence H.d = H1.d by A110,A111;
      end;
      for x being object st x in the carrier of D holds H.x = H1.x
      proof
        let x be object;
        assume x in the carrier of D;
        then reconsider d = x as morphism of D by CAT_6:def 1;
        consider d1,d2 be morphism of D such that
A121:     d1 is identity & d2 is identity & d1 |> d & d |> d2 by A25,Th5;
A122:     dom d = d2 & cod d = d1 by A121,CAT_6:26,27;
A123:     H.d1 = H1.d1 & H.d2 = H1.d2 by A121,A108;
A124:     dom(H.d) = H.(dom d) by A25,A95,CAT_6:32
        .= H1.d2 by A25,A122,A123,CAT_6:def 21
        .= H1.(dom d) by A25,A122,CAT_6:def 21
        .= dom(H1.d) by A25,A106,CAT_6:32;
A125:     cod(H.d) = H.(cod d) by A25,A95,CAT_6:32
        .= H1.d1 by A25,A122,A123,CAT_6:def 21
        .= H1.(cod d) by A25,A122,CAT_6:def 21
        .= cod(H1.d) by A25,A106,CAT_6:32;
        consider F1,F2 be covariant Functor of C1,C2,
          T be natural_transformation of F1,F2 such that
A126:     H.d = [[F1,F2],T] &
        dom(H.d) = [[F1,F1],F1] & cod(H.d) = [[F2,F2],F2] by A1,Th65;
        consider F11,F12 be covariant Functor of C1,C2,
          T1 be natural_transformation of F11,F12 such that
A127:     H1.d = [[F11,F12],T1] &
        dom(H1.d) = [[F11,F11],F11] & cod(H1.d) = [[F12,F12],F12] by A1,Th65;
A128:     F1 = F11 by A126,A127,A124,XTUPLE_0:1;
A129:     F2 = F12 by A126,A127,A125,XTUPLE_0:1;
A130:  T = T1
        proof
          assume T<>T1;
          then consider x be object such that
A131:      x in the carrier of C1 & T.x <> T1.x by FUNCT_2:12;
          reconsider c1 = x as morphism of C1 by A131,CAT_6:def 1;
A132:     (E (*) (H [x] id C1)).[d,c1] = (E (*) (H1 [x] id C1)).[d,c1]
          by A103,FUNCT_2:12,A107;
A133:       (H [x] id C1) is covariant by A95,Def22;
A134:      (E (*) (H [x] id C1)).[d,c1]
           = E.((H [x] id C1).[d,c1]) by A25,A23,A133,CAT_6:34
          .= E.[H.d,(id C1).c1] by A25,A95,Th57
          .= E.[H.d,c1] by A101;
          consider c01 be morphism of C, c11 be morphism of C1,
                 c12 be morphism of C2, F12 be Functor of C1,C2 such that
A135:     [H.d,c1] = [c01,c11] & E.[H.d,c1] = c12 & c12 = F12.c11 & F12 = c01`2
          by A7;
A136:       H.d = c01 & c1 = c11 by A135,Th53;
A137:      (H1 [x] id C1) is covariant by A106,Def22;
A138:      (E (*) (H1 [x] id C1)).[d,c1]
           = E.((H1 [x] id C1).[d,c1]) by A25,A23,A137,CAT_6:34
          .= E.[H1.d,(id C1).c1] by A106,A25,Th57
          .= E.[H1.d,c1] by A101;
          consider c02 be morphism of C, c21 be morphism of C1,
                 c22 be morphism of C2, F22 be Functor of C1,C2 such that
A139:      [H1.d,c1] = [c02,c21] & E.[H1.d,c1] = c22 & c22 = F22.c21 &
          F22 = c02`2 by A7;
A140:    H1.d = c02 & c1 = c21 by A139,Th53;
          T.x = T.c1 by CAT_6:def 21;
          hence contradiction by A131,A136,A135,A126,A140,A139,A127,
          CAT_6:def 21,A132,A134,A138;
        end;
        thus H.x = H1.d by A130,A25,A126,A127,A128,A129,CAT_6:def 21
        .= H1.x by A25,CAT_6:def 21;
      end;
      hence H = H1 by FUNCT_2:12;
    end;
  end;


Lm7:
for C1 being non empty category, C2 being empty category,
    E being Functor of OrdC 0 [x] C1, C2 st E = OrdC0-> C2
    holds OrdC 0,E is_exponent_of C1,C2
  proof
    let C1 be non empty category;
    let C2 be empty category;
    let E be Functor of OrdC 0 [x] C1, C2;
    assume E = OrdC0-> C2;
    set C = OrdC 0;
    reconsider E as Functor of C [x] C1,C2;
    for D being category, F being Functor of D [x] C1,C2
    st F is covariant holds
    ex H being Functor of D,C st H is covariant & F = E (*) (H [x] id C1) &
    for H1 being Functor of D,C st H1 is covariant & F = E (*) (H1 [x] id C1)
    holds H = H1
    proof
      let D be category, F be Functor of D [x] C1,C2;
      assume
A1:   F is covariant;
      set G1 = OrdC0-> C;
A2:   D is empty by A1,CAT_6:31;
      then reconsider G1 as Functor of D,C;
      take G1;
      thus G1 is covariant by A2;
      thus F=E(*)(G1 [x] id C1);
      thus for G2 being Functor of D,C st G2 is covariant &
      F = E(*)(G2 [x] id C1) holds G1 = G2;
    end;
    hence thesis by Def34;
  end;

Lm8:
for C1 being empty category, C2 being category,
    E being Functor of OrdC 1 [x] C1, C2
    st E = OrdC0-> C2 holds OrdC 1,E is_exponent_of C1,C2
  proof
    let C1 be empty category;
    let C2 be category;
    let E be Functor of OrdC 1 [x] C1, C2;
    assume E = OrdC0-> C2;
    set C = OrdC 1;
    reconsider E as Functor of C [x] C1,C2;
    for D being category, F being Functor of D [x] C1,C2
    st F is covariant holds
    ex H being Functor of D,C st H is covariant & F = E(*)(H [x] id C1) &
    for H1 being Functor of D,C st H1 is covariant & F = E(*)(H1 [x] id C1)
    holds H = H1
    proof
      let D be category;
      let F be Functor of D [x] C1,C2;
      assume F is covariant;
      set H = D ->OrdC1;
      reconsider H as Functor of D,C;
      take H;
      thus H is covariant;
      thus F = E (*) (H [x] id C1);
      let H1 be Functor of D,C;
      assume
A1:   H1 is covariant;
      consider H2 be Functor of D,C such that
A2:   H2 is covariant & for H3 being Functor of D,C
      st H3 is covariant holds H2 = H3 by Def4;
      assume F = E (*) (H1 [x] id C1);
      thus H = H2 by A2 .= H1 by A2,A1;
    end;
    hence thesis by Def34;
  end;

definition
  let C1,C2 be category;
  mode categorical_exponent of C1,C2 -> pair object means :Def35:
  ex C being category, E being Functor of C [x] C1,C2 st
  it = [C,E] & E is covariant & C,E is_exponent_of C1,C2;
  existence
  proof
    per cases;
    suppose
A1:   C1 is empty;
      set C = OrdC 1;
      reconsider E = OrdC0-> C2 as Functor of C [x] C1,C2 by A1;
      set IT = [C,E];
      take IT;
      take C,E;
      thus thesis by A1,Lm8;
    end;
    suppose
A2:   C2 is empty & C1 is non empty;
      set C = OrdC 0;
      reconsider E = OrdC0-> C2 as Functor of (C [x] C1),C2;
      set IT = [C,E];
      take IT;
      take C,E;
      thus thesis by A2,Lm7;
    end;
    suppose
A3:   C1 is non empty & C2 is non empty;
      set C = Functors(C1,C2);
      consider E be Functor of C [x] C1,C2 such that
A4:   E is covariant and
A5:   for D being category,
      F being Functor of D [x] C1,C2 st F is covariant holds
      ex H being Functor of D, C st
      H is covariant & F = E (*) (H [x] id C1) &
      for H1 being Functor of D, C st
      H1 is covariant & F = E (*) (H1 [x] id C1)
      holds H = H1 by A3,Lm6;
      set IT = [C,E];
      take IT;
      take C,E;
      thus thesis by A5,A4,Def34;
    end;
  end;
end;


definition
  let C1,C2 be category;
  func C2 |^ C1 -> category equals
  (the categorical_exponent of C1,C2)`1;
  correctness
  proof
    set T = the categorical_exponent of C1,C2;
    consider C be category, E be Functor of C [x] C1,C2 such that
A1: T = [C,E] & E is covariant & C,E is_exponent_of C1,C2 by Def35;
    thus thesis by A1;
  end;
end;

definition
  let C1,C2 be category;
  func eval(C1,C2) -> Functor of C2|^C1 [x] C1, C2 equals
  (the categorical_exponent of C1,C2)`2;
  correctness
  proof
    set T = the categorical_exponent of C1,C2;
    consider C be category, E be Functor of C [x] C1,C2 such that
A1: T = [C,E] & E is covariant & C,E is_exponent_of C1,C2 by Def35;
    thus thesis by A1;
  end;
end;

theorem Th72:
  for C1,C2 being category holds C2|^C1,eval(C1,C2) is_exponent_of C1,C2
  proof
    let C1,C2 be category;
    set T = the categorical_exponent of C1,C2;
    consider C be category, E be Functor of C [x] C1,C2 such that
A1: T = [C,E] & E is covariant & C,E is_exponent_of C1,C2 by Def35;
    thus thesis by A1;
  end;

theorem Th73:
  for A,B,C1,C2 being category, E1 being Functor of C1 [x] A,B,
      E2 being Functor of C2 [x] A,B st E1 is covariant & E2 is covariant &
  C1,E1 is_exponent_of A,B & C2,E2 is_exponent_of A,B holds C1 ~= C2
  proof
    let A,B,C1,C2 be category;
    let E1 be Functor of C1 [x] A,B;
    let E2 be Functor of C2 [x] A,B;
    assume
A1: E1 is covariant;
    assume
A2: E2 is covariant;
    assume
A3: C1,E1 is_exponent_of A,B;
    assume
A4: C2,E2 is_exponent_of A,B;
    ex F being Functor of C1,C2, G being Functor of C2,C1 st
    F is covariant & G is covariant & G (*) F = id C1 & F (*) G = id C2
    proof
      consider F be Functor of C1,C2 such that
A5:   F is covariant & E1 = E2 (*)(F [x] id A) & for H1 being Functor of C1,C2
      st H1 is covariant & E1 = E2 (*)(H1 [x] id A) holds F = H1
      by A1,A2,A4,Def34;
      consider G be Functor of C2,C1 such that
A6:   G is covariant & E2 = E1 (*)(G [x] id A) & for H1 being Functor of C2,C1
      st H1 is covariant & E2 = E1 (*)(H1 [x] id A) holds G = H1
      by A1,A2,A3,Def34;
      take F,G;
      thus F is covariant & G is covariant by A5,A6;
      consider H2 be Functor of C1,C1 such that
A7:  H2 is covariant & E1 = E1 (*)(H2 [x] id A) & for H1 being Functor of C1,C1
      st H1 is covariant & E1 = E1 (*)(H1 [x] id A) holds H2 = H1
      by A1,A3,Def34;
A8:   G [x] id A is covariant by A6,Def22;
A9:   F [x] id A is covariant by A5,Def22;
      E1 = E1 (*) ((G [x] id A)(*)(F [x] id A)) by A5,A6,A8,A9,A1,CAT_7:10
      .= E1 (*)(G(*)F [x]( id A)(*)(id A)) by A5,A6,Th50
      .= E1 (*)(G(*)F [x] id A) by CAT_7:11;
      then
A10:  G(*)F = H2 by A7,A5,A6,CAT_6:35;
      E1 = E1(*)id(C1 [x] A) by A1,CAT_7:11
      .= E1(*)(id C1 [x] id A) by Th51;
      hence G(*)F = id C1 by A7,A10;
      consider H3 be Functor of C2,C2 such that
A11:  H3 is covariant & E2 = E2(*)(H3 [x] id A) & for H1 being Functor of C2,C2
      st H1 is covariant & E2 = E2 (*) (H1 [x] id A) holds H3 = H1
      by A2,A4,Def34;
      E2 = E2 (*) ((F [x] id A)(*)(G [x] id A)) by A2,A5,A6,A8,A9,CAT_7:10
      .= E2 (*)(F(*)G [x] (id A)(*)(id A)) by A5,A6,Th50
      .= E2 (*)(F(*)G [x] id A) by CAT_7:11;
      then
A12:  F(*)G = H3 by A11,A5,A6,CAT_6:35;
      E2 = E2(*)id(C2 [x] A) by A2,CAT_7:11
      .= E2(*)(id C2 [x] id A) by Th51;
      hence F(*)G = id C2 by A11,A12;
    end;
    hence C1,C2 are_isomorphic by CAT_6:def 28;
  end;

registration
  let C1,C2 be category;
  cluster eval(C1,C2) -> covariant;
  correctness
  proof
    set T = the categorical_exponent of C1,C2;
    consider C be category, E be Functor of C [x] C1,C2 such that
A1: T = [C,E] & E is covariant & C,E is_exponent_of C1,C2 by Def35;
    thus thesis by A1;
  end;
end;

registration
  let C1 be non empty category;
  let C2 be empty category;
  cluster C2|^C1 -> empty;
  correctness
  proof
A1: C2|^C1,eval(C1,C2) is_exponent_of C1,C2 by Th72;
    reconsider E = OrdC0-> C2 as Functor of OrdC 0 [x] C1, C2;
    OrdC 0,E is_exponent_of C1,C2 by Lm7;
    hence thesis by CAT_7:15,A1,Th73;
  end;
end;

registration
  let C1 be empty category;
  let C2 be category;
  cluster C2|^C1 -> non empty trivial;
  correctness
  proof
A1: C2|^C1,eval(C1,C2) is_exponent_of C1,C2 by Th72;
    reconsider E = OrdC0-> C2 as Functor of OrdC 1 [x] C1, C2;
    OrdC 1,E is_exponent_of C1,C2 by Lm8;
    then C2|^C1 ~= OrdC 1 by A1,Th73;
    hence thesis by Th27;
  end;
end;

registration
  let C1 be non empty category;
  let C2 be non empty category;
  cluster C2|^C1 -> non empty;
  correctness
  proof
    set C = Functors(C1,C2);
    consider E be Functor of C [x] C1,C2 such that
A1: E is covariant and
A2: for D being category,
    F being Functor of D [x] C1,C2 st F is covariant holds
    ex H being Functor of D, C st
    H is covariant & F = E (*) (H [x] id C1) &
    for H1 being Functor of D, C st
    H1 is covariant & F = E (*) (H1 [x] id C1)
    holds H = H1 by Lm6;
A3: C,E is_exponent_of C1,C2 by A1,A2,Def34;
    C2|^C1,eval(C1,C2) is_exponent_of C1,C2 by Th72;
    hence thesis by CAT_7:15,A1,A3,Th73;
  end;
end;

theorem
  for C1,C2 being category holds Functors(C1,C2) ~= C2|^C1
  proof
    let C1,C2 be category;
    per cases;
    suppose
      C1 is empty;
      hence thesis by Th28;
    end;
    suppose
      C2 is empty & C1 is non empty;
      hence thesis by CAT_7:13;
    end;
    suppose
A1:   C1 is non empty & C2 is non empty;
      set C = Functors(C1,C2);
      consider E be Functor of C [x] C1,C2 such that
A2:   E is covariant and
A3:   for D being category,
      F being Functor of D [x] C1,C2 st F is covariant holds
      ex H being Functor of D, C st
      H is covariant & F = E (*) (H [x] id C1) &
      for H1 being Functor of D, C st
      H1 is covariant & F = E (*) (H1 [x] id C1)
      holds H = H1 by A1,Lm6;
A4:  C,E is_exponent_of C1,C2 by A2,A3,Def34;
      C2|^C1,eval(C1,C2) is_exponent_of C1,C2 by Th72;
      hence thesis by A2,A4,Th73;
    end;
  end;