
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;
