reserve y for set;
reserve A for Category,
  a,o for Object of A;
reserve f for Morphism of A;

theorem Th2:
  for f being Morphism of A holds <|cod f,?>
  is_naturally_transformable_to <|dom f,?>
proof
  let f;
  set F1=<|cod f,?> ,F2=<|dom f,?>;
  set B = EnsHom(A);
  deffunc F(Element of A) = [[Hom(cod f,$1),Hom(dom f,$1)],hom(
  f,$1)];
A1: for a being Object of A holds [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] in
  Hom(F1.a,F2.a)
  proof
    let a be Object of A;
A2: EnsHom A = CatStr(# Hom A,Maps Hom A,fDom Hom A,fCod Hom A, fComp Hom A #)
       by ENS_1:def 13;
    then reconsider m = [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] as Morphism of
    EnsHom A by ENS_1:48;
    reconsider m9=m as Element of Maps Hom A by ENS_1:48;
A3: cod(m)= (fCod Hom A).m by A2
      .= cod m9 by ENS_1:def 10
      .= m`1`2 by ENS_1:def 4
      .= [Hom(cod f,a),Hom(dom f,a)]`2
      .= Hom(dom f,a)
      .= (Obj (hom?-(Hom A,dom f))).a by ENS_1:60
      .= (hom?-(Hom A,dom f)).a
      .= F2.a by ENS_1:def 25;
    dom(m)=(fDom Hom A).m by A2
      .= dom m9 by ENS_1:def 9
      .= m`1`1 by ENS_1:def 3
      .= [Hom(cod f,a),Hom(dom f,a)]`1
      .= Hom(cod f,a)
      .= (Obj (hom?-(Hom A,cod f))).a by ENS_1:60
      .= (hom?-(Hom A,cod f)).a
      .=F1.a by ENS_1:def 25;
    hence thesis by A3;
  end;
A4: for a being Element of A holds F(a) in the carrier' of B
  proof
    let a;
    [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] in Hom(F1.a,F2.a) by A1;
    hence thesis;
  end;
  consider t being Function of the carrier of A, the carrier' of B such that
A5: for o being Element of A holds t.o = F(o) from
  FUNCT_2:sch 8(A4);
A6: for a being Object of A holds t.a is Morphism of F1.a,F2.a
  proof
    let a;
    [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] in Hom(F1.a,F2.a) by A1;
    then [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] is Morphism of F1.a,F2.a by
CAT_1:def 5;
    hence thesis by A5;
  end;
  for a being Object of A holds Hom(F1.a,F2.a) <> {} by A1;
  then
A7: F1 is_transformable_to F2 by NATTRA_1:def 2;
  then reconsider t as transformation of F1,F2 by A6,NATTRA_1:def 3;
  for a,b being Object of A st Hom(a,b) <> {} for g being Morphism of a,b
  holds t.b*F1/.g = F2/.g*t.a
  proof
    let a,b be Object of A such that
A8: Hom(a,b) <> {};
A9: Hom(F1.a,F1.b)<>{} by A8,CAT_1:84;
    let g be Morphism of a,b;
A10: dom g =a by A8,CAT_1:5;
A11: rng hom(cod f,g) c= dom hom(f,b)
    proof
A12:  cod g =b by A8,CAT_1:5;
      per cases;
      suppose
A13:    Hom(dom f,b) = {};
        Hom(cod f,b) = {} by A13,ENS_1:42;
        hence thesis by A12;
      end;
      suppose
A14:    Hom(dom f,b) <> {};
        cod g = b by A8,CAT_1:5;
        then
A15:    rng hom(cod f,g) c= Hom(cod f,cod g) & Hom(cod f,cod g)=dom hom(f
        ,b) by A14,FUNCT_2:def 1,RELAT_1:def 19;
        let e be object;
        assume e in rng hom(cod f,g);
        hence thesis by A15;
      end;
    end;
A16: rng hom(f,a) c= dom hom(dom f,g)
    proof
A17:  dom g =a by A8,CAT_1:5;
      per cases;
      suppose
A18:    Hom(dom f,cod g) = {};
        Hom(dom f,dom g) = {} by A18,ENS_1:42;
        hence thesis by A17;
      end;
      suppose
A19:    Hom(dom f,cod g) <> {};
        let e be object;
        assume
A20:    e in rng hom(f,a);
        rng hom(f,a) c= Hom(dom f,a) & Hom(dom f,a) = dom hom(dom f,g) by A17
,A19,FUNCT_2:def 1,RELAT_1:def 19;
        hence thesis by A20;
      end;
    end;
A21: dom (hom(f,b)*hom(cod f,g)) = dom(hom(dom f,g)*hom(f,a))
    proof
      per cases;
      suppose
A22:    Hom(cod f,dom g)= {};
        dom (hom(f,b)*hom(cod f,g))=dom (hom(cod f,g)) by A11,RELAT_1:27
          .=Hom(cod f,dom g) by A22
          .=dom (hom(f,a)) by A10,A22
          .=dom(hom(dom f,g)*hom(f,a)) by A16,RELAT_1:27;
        hence thesis;
      end;
      suppose
A23:    Hom(cod f,dom g) <> {};
        then
A24:    Hom(cod f,cod g) <> {} by ENS_1:42;
A25:    Hom(dom f,a) <> {} by A10,A23,ENS_1:42;
        dom (hom(f,b)*hom(cod f,g))=dom (hom(cod f,g)) by A11,RELAT_1:27
          .=Hom(cod f,dom g) by A24,FUNCT_2:def 1
          .=Hom(cod f,a) by A8,CAT_1:5
          .=dom (hom(f,a)) by A25,FUNCT_2:def 1
          .=dom(hom(dom f,g)*hom(f,a)) by A16,RELAT_1:27;
        hence thesis;
      end;
    end;
A26: for x being object st x in dom (hom(f,b)*hom(cod f,g)) holds (hom(f,b)*
    hom(cod f,g)).x = (hom(dom f,g)*hom(f,a)).x
    proof
      let x be object such that
A27:  x in dom (hom(f,b)*hom(cod f,g));
      per cases;
      suppose
A28:    Hom(cod f,dom g) <> {};
A29:    x in dom hom(cod f,g) by A27,FUNCT_1:11;
        Hom(cod f,cod g) <> {} by A28,ENS_1:42;
        then
A30:    x in Hom(cod f,dom g) by A29,FUNCT_2:def 1;
        then reconsider x as Morphism of A;
A31:    dom(g) = cod(x) & dom(x) = cod(f) by A30,CAT_1:1;
A32:    dom(g) = cod(x) by A30,CAT_1:1;
        then
A33:    cod(g(*)x)=cod(g) by CAT_1:17
          .=b by A8,CAT_1:5;
A34:    hom(f,a).x =x(*)f by A10,A30,ENS_1:def 20;
        then reconsider h=hom(f,a).x as Morphism of A;
A35:    dom(x) = cod(f) by A30,CAT_1:1;
        then
A36:    dom(x(*)f) =dom f by CAT_1:17;
        dom(g(*)x) =dom x by A32,CAT_1:17
          .=cod f by A30,CAT_1:1;
        then
A37:    g(*)x in Hom(cod f,b) by A33;
        cod(x(*)f)=cod(x) by A35,CAT_1:17
          .=dom g by A30,CAT_1:1;
        then
A38:    hom(f,a).x in Hom(dom f,dom g) by A34,A36;
        (hom(f,b)*hom(cod f,g)).x = hom(f,b).(hom(cod f,g).x) by A27,FUNCT_1:12
          .=hom(f,b).(g(*)x) by A30,ENS_1:def 19
          .=(g(*)x)(*)f by A37,ENS_1:def 20
          .= g(*)(x(*)f) by A31,CAT_1:18
          .= g(*)(h) by A10,A30,ENS_1:def 20
          .= hom(dom f,g).(hom(f,a).x) by A38,ENS_1:def 19
          .= (hom(dom f,g)*hom(f,a)).x by A21,A27,FUNCT_1:12;
        hence thesis;
      end;
      suppose
A39:    Hom(cod f,dom g) = {};
        x in dom hom(cod f,g) by A27,FUNCT_1:11;
        hence thesis by A39;
      end;
    end;
A40: Hom(F2.a,F2.b)<>{} by A8,CAT_1:84;
A41: cod g =b by A8,CAT_1:5;
    reconsider f4 = t.a as Morphism of EnsHom A;
A42: t.a = (t qua Function of the carrier of A, the carrier' of B).a by A7,
NATTRA_1:def 5
      .= [[Hom(cod f,a),Hom(dom f,a)],hom(f,a)] by A5;
    then reconsider f49=f4 as Element of Maps Hom A by ENS_1:48;
A43: Hom(F1.a,F2.a)<>{} by A1;
    reconsider f1=t.b as Morphism of EnsHom A;
A44: t.b= (t qua Function of the carrier of A, the carrier' of B).b by A7,
NATTRA_1:def 5
      .= [[Hom(cod f,b),Hom(dom f,b)],hom(f,b)] by A5;
    then reconsider f19=f1 as Element of Maps Hom A by ENS_1:48;
A45: EnsHom A = CatStr(# Hom A,Maps Hom A,fDom Hom A,fCod Hom A, fComp Hom
      A #) by ENS_1:def 13;
    then
A46: cod(f1) = (fCod Hom A).f1 .= cod f19 by ENS_1:def 10
      .= f1`1`2 by ENS_1:def 4
      .= [Hom(cod f,b),Hom(dom f,b)]`2 by A44
      .= Hom(dom f,b);
A47: dom(f4) = (fDom Hom A).f4 by A45
      .= dom f49 by ENS_1:def 9
      .= f4`1`1 by ENS_1:def 3
      .= [Hom(cod f,a),Hom(dom f,a)]`1 by A42
      .=Hom(cod f,a);
A48: cod(f4) = (fCod Hom A).f4 by A45
      .= cod f49 by ENS_1:def 10
      .= f4`1`2 by ENS_1:def 4
      .= [Hom(cod f,a),Hom(dom f,a)]`2 by A42
      .= Hom(dom f,a);
    reconsider f2=F1/.g as Morphism of EnsHom A;
A49: f2 = (hom?-(cod f)).g by A8,CAT_3:def 10
      .=[[Hom(cod f,dom g),Hom(cod f,cod g)],hom(cod f,g)] by ENS_1:def 21;
    then reconsider f29=f2 as Element of Maps Hom A by ENS_1:47;
A50: dom(f2) = (fDom Hom A).f2 by A45
      .= dom f29 by ENS_1:def 9
      .= f2`1`1 by ENS_1:def 3
      .= [Hom(cod f,dom g),Hom(cod f,cod g)]`1 by A49
      .= Hom(cod f,dom g);
A51: cod(f2) = (fCod Hom A).f2 by A45
      .= cod f29 by ENS_1:def 10
      .= f2`1`2 by ENS_1:def 4
      .= [Hom(cod f,dom g),Hom(cod f,cod g)]`2 by A49
      .= Hom(cod f,cod g);
A52: dom(f1) =(fDom Hom A).f1 by A45
      .= dom f19 by ENS_1:def 9
      .= f1`1`1 by ENS_1:def 3
      .=[Hom(cod f,b),Hom(dom f,b)]`1 by A44
      .=Hom(cod f,b);
    then
A53: cod f2 = dom f1 by A8,A51,CAT_1:5;
    reconsider f3 = F2/.g as Morphism of EnsHom A;
A54: f3= (hom?-(dom f)).g by A8,CAT_3:def 10
      .=[[Hom(dom f,dom g),Hom(dom f,cod g)],hom(dom f,g)] by ENS_1:def 21;
    then reconsider f39=f3 as Element of Maps Hom A by ENS_1:47;
A55: cod(f3) = (fCod Hom A).f3 by A45
      .= cod f39 by ENS_1:def 10
      .= f3`1`2 by ENS_1:def 4
      .= [Hom(dom f,dom g),Hom(dom f,cod g)]`2 by A54
      .= Hom(dom f,cod g);
A56: dom(f3) =(fDom Hom A).f3 by A45
      .= dom f39 by ENS_1:def 9
      .= f3`1`1 by ENS_1:def 3
      .= [Hom(dom f,dom g),Hom(dom f,cod g)]`1 by A54
      .= Hom(dom f,dom g);
    then
A57: cod f4 = dom f3 by A8,A48,CAT_1:5;
    Hom(F1.b,F2.b)<>{} by A1;
    then t.b*F1/.g = f1(*)f2 by A9,CAT_1:def 13
      .= [[Hom(cod f,dom g),Hom(dom f,b)],hom(f,b)*hom(cod f,g)] by A44,A52,A46
,A49,A50,A51,A53,Th1
      .= [[ Hom(cod f,a),Hom(dom f,cod g)],hom(dom f,g)*hom(f,a)] by A10,A41
,A21,A26,FUNCT_1:2
      .= f3(*)f4 by A54,A56,A55,A42,A47,A48,A57,Th1
      .= F2/.g*t.a by A40,A43,CAT_1:def 13;
    hence thesis;
  end;
  hence thesis by A7,NATTRA_1:def 7;
end;
