The Mizar article:

Natural transformations. Discrete categories

by
Andrzej Trybulec

Received May 15, 1991

Copyright (c) 1991 Association of Mizar Users

MML identifier: NATTRA_1
[ MML identifier index ]


environ

 vocabulary FUNCT_1, RELAT_1, PARTFUN1, FUNCT_4, BOOLE, CAT_1, CAT_2, MCART_1,
      FUNCT_2, FINSET_1, CARD_1, NATTRA_1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, MCART_1, FINSET_1, PARTFUN1,
      RELAT_1, FUNCT_1, FUNCT_2, FUNCT_4, CARD_1, CAT_1, CAT_2;
 constructors MCART_1, CARD_1, CAT_2, PARTFUN1, MEMBERED, XBOOLE_0;
 clusters FUNCT_1, FINSET_1, CAT_1, CAT_2, RELSET_1, SUBSET_1, MEMBERED,
      ZFMISC_1, XBOOLE_0;
 requirements SUBSET, BOOLE;
 definitions CAT_2, TARSKI, CAT_1, XBOOLE_0;
 theorems SUBSET_1, FUNCT_2, CAT_1, TARSKI, MCART_1, ZFMISC_1, PARTFUN1,
      FUNCT_1, DOMAIN_1, CAT_2, CARD_2, FUNCT_3, CARD_1, FUNCT_4, GRFUNC_1,
      RELAT_1, RELSET_1, XBOOLE_0, XBOOLE_1;
 schemes FUNCT_2, PARTFUN1, FRAENKEL, SUPINF_2, COMPTS_1, XBOOLE_0;

begin

:: Preliminaries

reserve A1,A2,B1,B2 for non empty set,
        f for Function of A1,B1,
        g for Function of A2,B2,
        Y1 for non empty Subset of A1,
        Y2 for non empty Subset of A2;

definition let A1 be set, B1 be non empty set,
               f be Function of A1, B1,
               Y1 be Subset of A1;
 redefine func f|Y1 -> Function of Y1,B1;
  coherence by FUNCT_2:38;
end;

theorem Th1:
 [:f,g:]|[:Y1,Y2:] = [:f|Y1,g|Y2:]
  proof
      now let a be Element of [:Y1,Y2:];
      consider a1 being Element of Y1, a2 being Element of Y2 such that
A1:     a = [a1,a2] by DOMAIN_1:9;
        (f|Y1).a1 = f.a1 & (g|Y2).a2 = g.a2 by FUNCT_1:72;
     hence [:f|Y1,g|Y2:].a = [f.a1,g.a2] by A1,FUNCT_3:96
       .= [:f,g:].a by A1,FUNCT_3:96
       .= ([:f,g:]|[:Y1,Y2:]).a by FUNCT_1:72;
    end;
   hence thesis by FUNCT_2:113;
  end;

definition let A,B be non empty set;
  let A1 be non empty Subset of A, B1 be non empty Subset of B;
  let f be PartFunc of [:A1,A1:],A1; let g be PartFunc of [:B1,B1:],B1;
 redefine func |:f,g:| -> PartFunc of [:[:A1,B1:],[:A1,B1:]:],[:A1,B1:];
 coherence by FUNCT_4:62;
end;

theorem Th2:
 for f being PartFunc of [:A1,A1:],A1, g being PartFunc of [:A2,A2:],A2
 for F being PartFunc of [:Y1,Y1:],Y1 st F = f|([:Y1,Y1:] qua set)
 for G being PartFunc of [:Y2,Y2:],Y2 st G = g|([:Y2,Y2:] qua set)
 holds |:F,G:| = |:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)
 proof let f be PartFunc of [:A1,A1:],A1, g be PartFunc of [:A2,A2:],A2;
  let F be PartFunc of [:Y1,Y1:],Y1 such that
A1: F = f|([:Y1,Y1:] qua set);
  let G be PartFunc of [:Y2,Y2:],Y2 such that
A2: G = g|([:Y2,Y2:] qua set);
   set X = dom|:F,G:|;
A3: dom F c= dom f & dom G c= dom g by A1,A2,FUNCT_1:76;
A4: X c= [:[:Y1,Y2:],[:Y1,Y2:]:] by RELSET_1:12;
A5: X = dom(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set))
    proof
     thus X c= dom(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set))
      proof let x be set;
       assume x in X; then consider x11,x21,x12,x22 being set such that
A6:     x = [[x11,x12],[x21,x22]] and
A7:     [x11,x21] in dom F and
A8:     [x12,x22] in dom G by FUNCT_4:def 3;
        A9:      x in dom|:f,g:| by A3,A6,A7,A8,FUNCT_4:def 3;
          dom F c= [:Y1,Y1:] & dom G c= [:Y2,Y2:] by A1,A2,RELAT_1:87;
        then x11 in Y1 & x21 in Y1 & x12 in Y2 & x22 in
 Y2 by A7,A8,ZFMISC_1:106;
        then [x11,x12] in [:Y1,Y2:] & [x21,x22] in [:Y1,Y2:] by ZFMISC_1:106;
        then x in [:[:Y1,Y2:],[:Y1,Y2:]:] by A6,ZFMISC_1:106;
        then x in dom|:f,g:|/\[:[:Y1,Y2:],[:Y1,Y2:]:] by A9,XBOOLE_0:def 3;
       hence x in
 dom(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)) by RELAT_1:90;
      end;
     let x be set;
     assume x in dom(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set));
then A10:    x in dom|:f,g:|/\[:[:Y1,Y2:],[:Y1,Y2:]:] by RELAT_1:90;
      then x in dom|:f,g:| by XBOOLE_0:def 3;
      then consider x11,x21,x12,x22 being set such that
A11:    x = [[x11,x12],[x21,x22]] and
A12:    [x11,x21] in dom f and
A13:    [x12,x22] in dom g by FUNCT_4:def 3;
        x in [:[:Y1,Y2:],[:Y1,Y2:]:] by A10,XBOOLE_0:def 3;
      then [x11,x12] in [:Y1,Y2:] & [x21,x22] in [:Y1,Y2:] by A11,ZFMISC_1:106
;
      then x11 in Y1 & x12 in Y2 & x21 in Y1 & x22 in Y2 by ZFMISC_1:106;
then A14:    [x11,x21] in [:Y1,Y1:] & [x12,x22] in [:Y2,Y2:] by ZFMISC_1:106;
        dom F = (dom f)/\[:Y1,Y1:] & dom G = (dom g)/\[:Y2,Y2:]
       by A1,A2,RELAT_1:90;
      then [x11,x21] in dom F & [x12,x22] in dom G by A12,A13,A14,XBOOLE_0:def
3;
     hence x in X by A11,FUNCT_4:def 3;
    end;
A15:now let x be set;
    assume
A16:   x in X; then consider x11,x21,x12,x22 being set such that
A17:   x = [[x11,x12],[x21,x22]] and
A18:   [x11,x21] in dom F and
A19:   [x12,x22] in dom G by FUNCT_4:def 3;
    thus |:F,G:|.x = [F.[x11,x21],G.[x12,x22]]
        by A17,A18,A19,FUNCT_4:def 3
       .= [f.[x11,x21],G.[x12,x22]] by A1,A18,FUNCT_1:70
       .= [f.[x11,x21],g.[x12,x22]] by A2,A19,FUNCT_1:70
       .= |:f,g:|.x by A3,A17,A18,A19,FUNCT_4:def 3
       .= (|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)).x by A5,A16,FUNCT_1:70;
   end;
A20: rng(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)) c= rng|:F,G:|
    proof let x be set;
     assume x in rng(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:]qua set));
      then consider y being set such that
A21:    y in dom(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:]qua set)) and
A22:    x = (|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)).y by FUNCT_1:def 5;
        x = |:F,G:|.y by A5,A15,A21,A22;
     hence x in rng|:F,G:| by A5,A21,FUNCT_1:def 5;
    end;
A23: for x being Element of [:[:Y1,Y2:],[:Y1,Y2:]:] st x in X holds
     |:F,G:|.x = (|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)).x by A15;
     rng|:F,G:| c= [:Y1,Y2:] by RELSET_1:12;
   then rng(|:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)) c= [:Y1,Y2:]
                    by A20,XBOOLE_1:1;
   then |:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)
    is PartFunc of [:[:Y1,Y2:],[:Y1,Y2:]:],[:Y1,Y2:] by A4,A5,RELSET_1:11;
  hence |:F,G:| = |:f,g:| |([:[:Y1,Y2:],[:Y1,Y2:]:] qua set)
                           by A5,A23,PARTFUN1:34;
 end;

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

scheme M_Choice{A()-> non empty set, B()-> non empty set,
                  F(set) -> set}:
ex t being Function of A(),B() st
  for a being Element of A() holds t.a in F(a)
provided
A1: for a being Element of A() holds B() meets F(a)
proof
   defpred _P[set,set] means $2 in F($1);
A2: for e being set st e in A() ex u being set st u in B() & _P[e,u]
 proof let e be set; assume e in A(); then B() meets F(e) by A1;
  hence thesis by XBOOLE_0:3;
 end;
 consider t being Function such that
A3:  dom t = A() & rng t c= B() and
A4:  for e being set st e in A() holds _P[e,t.e] from NonUniqBoundFuncEx(A2);
 reconsider t as Function of A(),B() by A3,FUNCT_2:def 1,RELSET_1:11;
 take t; let a be Element of A();
 thus t.a in F(a) by A4;
end;

theorem Th3:
 for a being Object of A, m being Morphism of a,a holds m in Hom(a,a)
  proof let a be Object of A, m be Morphism of a,a;
      Hom(a,a) <> {} by CAT_1:56;
   hence m in Hom(a,a) by CAT_1:def 7;
  end;

reserve m,o for set;

theorem Th4:
 for f,g being Morphism of 1Cat(o,m) holds f = g
proof let f,g be Morphism of 1Cat(o,m);
    f = m & g = m by CAT_1:35;
 hence f = g;
end;

theorem Th5:
 for a being Object of A holds [[id a,id a],id a] in the Comp of A
 proof let a be Object of A;
A1:dom id a = a & cod id a = a by CAT_1:44;
   then (id a)*(id a qua Morphism of A) = id a by CAT_1:47;
then A2: (the Comp of A).[id a,id a] = id a by A1,CAT_1:41;
     [id a,id a] in dom the Comp of A by A1,CAT_1:40;
  hence [[id a,id a],id a] in the Comp of A by A2,FUNCT_1:def 4;
 end;

theorem Th6:
 the Comp of 1Cat(o,m) = {[[m,m],m]}
 proof
   set A = 1Cat(o,m);
  thus the Comp of A c= {[[m,m],m]}
   proof let x be set;
    consider o' being Object of A;
A1:dom id o' = o' & cod id o' = o' by CAT_1:44;
    assume A2: x in the Comp of A;
     then consider x1,x2 being set such that
A3:    x = [x1,x2] by RELAT_1:def 1;
A4:  x1 in dom the Comp of A by A2,A3,RELAT_1:def 4;
       dom the Comp of A c= [:the Morphisms of A, the Morphisms of A:]
                                                     by RELSET_1:12;
     then consider x11,x12 being set such that
A5:    x11 in the Morphisms of A & x12 in the Morphisms of A and
A6:    x1 = [x11,x12] by A4,ZFMISC_1:def 2;
      x11 = id o' & x12 = id o' by A5,Th4;
     then x2 = (the Comp of A).[id o',id o'] by A2,A3,A4,A6,FUNCT_1:def 4;
     then x2 = id o'*(id o' qua Morphism of A) by A1,CAT_1:41;
     then x11 = m & x12 = m & x2 = m by A5,CAT_1:35;
    hence x in {[[m,m],m]} by A3,A6,TARSKI:def 1;
   end;
   reconsider f = m as Morphism of A by CAT_1:33;
   consider a being Object of A;
A7: f = id a by CAT_1:35;
  let x be set;
  assume x in {[[m,m],m]};
   then x = [[m,m],m] by TARSKI:def 1;
  hence x in the Comp of 1Cat(o,m) by A7,Th5;
 end;

theorem Th7:
 for a being Object of A holds 1Cat(a,id a) is Subcategory of A
  proof let d be Object of A;
   thus the Objects of 1Cat(d,id d) c= the Objects of A
    proof let b be set;
     assume b in the Objects of 1Cat(d,id d);
      then b = d by CAT_1:34;
     hence thesis;
    end;
   thus for a,b being Object of 1Cat(d,id d), a',b' being Object of A
      st a = a' & b = b' holds Hom(a,b) c= Hom(a',b')
    proof let a,b be Object of 1Cat(d,id d), a',b' be Object of A;
     assume a = a' & b = b';
then A1:   a' = d & b' = d by CAT_1:34;
     let x be set;
     assume x in Hom(a,b);
      then x = id d by CAT_1:35;
     hence x in Hom(a',b') by A1,CAT_1:55;
    end;
   thus the Comp of 1Cat(d,id d) c= the Comp of A
    proof let x be set;
     assume x in the Comp of 1Cat(d,id d);
      then x in {[[id d,id d],id d]} by Th6;
      then x = [[id d,id d],id d] by TARSKI:def 1;
     hence x in the Comp of A by Th5;
    end;
   let a be Object of 1Cat(d,id d), a' be Object of A;
   assume a = a';
    then a' = d by CAT_1:34;
   hence id a = id a' by CAT_1:35;
  end;

theorem Th8:
 for C being Subcategory of A holds
   the Dom of C = (the Dom of A)|the Morphisms of C &
   the Cod of C = (the Cod of A)|the Morphisms of C &
   the Comp of C = (the Comp of A)|[:the Morphisms of C, the Morphisms of C:] &
   the Id of C = (the Id of A)|the Objects of C
  proof let C be Subcategory of A;
A1:  dom the Dom of C = the Morphisms of C by FUNCT_2:def 1;
A2:  the Morphisms of C c= the Morphisms of A by CAT_2:13;
      dom the Dom of A = the Morphisms of A by FUNCT_2:def 1;
then A3:  dom the Dom of C = (dom the Dom of A) /\
 the Morphisms of C by A1,A2,XBOOLE_1:28;
      now let x be set;
     assume x in dom the Dom of C;
      then reconsider m = x as Morphism of C by FUNCT_2:def 1;
      reconsider m'=m as Morphism of A by CAT_2:14;
     thus (the Dom of C).x = dom m by CAT_1:def 2 .= dom m' by CAT_2:15
      .= (the Dom of A).x by CAT_1:def 2;
    end;
   hence the Dom of C = (the Dom of A)|the Morphisms of C by A3,FUNCT_1:68;
A4:  dom the Cod of C = the Morphisms of C by FUNCT_2:def 1;
      dom the Cod of A = the Morphisms of A by FUNCT_2:def 1;
then A5:  dom the Cod of C = (dom the Cod of A) /\
 the Morphisms of C by A2,A4,XBOOLE_1:28;
      now let x be set;
     assume x in dom the Cod of C;
      then reconsider m = x as Morphism of C by FUNCT_2:def 1;
      reconsider m'=m as Morphism of A by CAT_2:14;
     thus (the Cod of C).x = cod m by CAT_1:def 3 .= cod m' by CAT_2:15
      .= (the Cod of A).x by CAT_1:def 3;
    end;
   hence the Cod of C = (the Cod of A)|the Morphisms of C by A5,FUNCT_1:68;
A6: dom the Comp of C =
      (dom the Comp of A) /\ [:the Morphisms of C, the Morphisms of C:]
    proof
        the Comp of C <= the Comp of A by CAT_2:def 4;
      then dom the Comp of C c= [:the Morphisms of C, the Morphisms of C:]
      & dom the Comp of C c= dom the Comp of A by RELAT_1:25,RELSET_1:12;
      hence dom the Comp of C c=
      (dom the Comp of A) /\ [:the Morphisms of C, the Morphisms of C:]
        by XBOOLE_1:19;
      let x be set;
      assume
    A7:  x in(dom the Comp of A) /\ [:the Morphisms of C, the Morphisms of C:];
       then A8:  x in [:the Morphisms of C, the Morphisms of C:] by XBOOLE_0:
def 3;
      then reconsider f=x`1, g=x`2 as Morphism of C by MCART_1:10;
      reconsider f'=f, g'=g as Morphism of A by CAT_2:14;
        x in dom the Comp of A by A7,XBOOLE_0:def 3;
    then A9:  [f',g'] in dom the Comp of A by A8,MCART_1:23;
        dom f = dom f' by CAT_2:15 .= cod g' by A9,CAT_1:40 .= cod g by CAT_2:
15
;
      then [f,g] in dom the Comp of C by CAT_1:40;
      hence x in dom the Comp of C by A8,MCART_1:23;
    end;
      the Comp of C <= the Comp of A by CAT_2:def 4;
   hence the Comp of C = (the Comp of A)|
        ((dom the Comp of A) /\ [:the Morphisms of C, the Morphisms of C:])
          by A6,GRFUNC_1:64
     .= ((the Comp of A)| dom the Comp of A)|
            [:the Morphisms of C, the Morphisms of C:] by RELAT_1:100
     .= (the Comp of A)|[:the Morphisms of C, the Morphisms of C:]
           by RELAT_1:97;
A10:  dom the Id of C = the Objects of C by FUNCT_2:def 1;
      dom the Id of A = the Objects of A &
    the Objects of C c= the Objects of A by CAT_2:def 4,FUNCT_2:def 1;
then A11:  dom the Id of C = (dom the Id of A) /\ the Objects of C by A10,
XBOOLE_1:28;
      now let x be set;
     assume x in dom the Id of C;
      then reconsider o = x as Object of C by FUNCT_2:def 1;
      reconsider o'=o as Object of A by CAT_2:12;
     thus (the Id of C).x = id o by CAT_1:def 5 .= id o' by CAT_2:def 4
      .= (the Id of A).x by CAT_1:def 5;
    end;
   hence the Id of C = (the Id of A)|the Objects of C by A11,FUNCT_1:68;
  end;

theorem Th9:
 for O being non empty Subset of the Objects of A,
     M being non empty Subset of the Morphisms of A
 for DOM,COD being Function of M,O st
   DOM = (the Dom of A) |M & COD = (the Cod of A)|M
 for COMP being PartFunc of [:M,M qua non empty set:], M st
   COMP = (the Comp of A)|([:M,M:] qua set)
 for ID being Function of O,M st ID = (the Id of A)|O
  holds CatStr(#O,M,DOM,COD,COMP,ID#) is Subcategory of A
 proof let O be non empty Subset of the Objects of A,
     M be non empty Subset of the Morphisms of A;
  let DOM,COD be Function of M,O such that
A1: DOM = (the Dom of A) |M & COD = (the Cod of A)|M;
  let COMP be PartFunc of [:M,M qua non empty set:], M such that
A2: COMP = (the Comp of A)|([:M,M:] qua set);
  let ID be Function of O,M such that
A3: ID = (the Id of A)|O;
   set C = CatStr(#O,M,DOM,COD,COMP,ID#);
A4: dom the Comp of C c= dom the Comp of A by A2,FUNCT_1:76;
A5: now let f be (Morphism of A), g be Morphism of C such that
A6:   f = g;
        dom the Dom of C = the Morphisms of C by FUNCT_2:def 1;
     hence (the Dom of A).f = (the Dom of C).g by A1,A6,FUNCT_1:70;
        dom the Cod of C = the Morphisms of C by FUNCT_2:def 1;
     hence (the Cod of A).f = (the Cod of C).g by A1,A6,FUNCT_1:70;
    end;
A7: dom the Comp of C = (dom the Comp of A)
       /\ [:the Morphisms of C, the Morphisms of C:] by A2,RELAT_1:90;
A8: now let f,g be Morphism of C;
      reconsider g'=g, f'=f as Morphism of A by TARSKI:def 3;
     assume
     (the Dom of C).g = (the Cod of C).f;
      then (the Dom of A).g' = (the Cod of C).f by A5
       .= (the Cod of A).f' by A5;
      then A9:     [g',f'] in dom the Comp of A by CAT_1:def 8;
        [g,f] in [:the Morphisms of C, the Morphisms of C:] by ZFMISC_1:106;
     hence [g,f] in dom the Comp of C by A7,A9,XBOOLE_0:def 3;
    end;
     C is Category-like
    proof
     thus for f,g being Morphism of C holds
         [g,f] in dom(the Comp of C) iff (the Dom of C).g=(the Cod of C).f
      proof let f,g be Morphism of C;
        reconsider g'=g, f'=f as Morphism of A by TARSKI:def 3;
       thus [g,f] in dom(the Comp of C) implies
          (the Dom of C).g=(the Cod of C).f
        proof assume A10: [g,f] in dom the Comp of C;
         thus (the Dom of C).g = (the Dom of A).g' by A5
          .= (the Cod of A).f' by A4,A10,CAT_1:def 8
          .= (the Cod of C).f by A5;
        end;
       thus thesis by A8;
      end;
     thus for f,g being Morphism of C
         st (the Dom of C).g=(the Cod of C).f holds
         (the Dom of C).((the Comp of C).[g,f]) = (the Dom of C).f &
         (the Cod of C).((the Comp of C).[g,f]) = (the Cod of C).g
      proof let f,g be Morphism of C;
        reconsider g'=g, f'=f as Morphism of A by TARSKI:def 3;
       assume
A11:        (the Dom of C).g=(the Cod of C).f;
then A12:     (the Dom of A).g' = (the Cod of C).f by A5 .= (the Cod of A).f'
by A5;
A13:     [g,f] in dom the Comp of C by A8,A11;
then A14:     (the Comp of C).[g,f] = (the Comp of A).[g',f'] by A2,FUNCT_1:70;
A15:     (the Comp of C).[g,f] is Morphism of C by A13,PARTFUN1:27;
then A16:     (the Comp of A).[g',f'] is Morphism of A by A14,TARSKI:def 3;
       hence (the Dom of C).((the Comp of C).[g,f])
          = (the Dom of A).((the Comp of A).[g',f']) by A5,A14,A15
         .= (the Dom of A).f' by A12,CAT_1:def 8
         .= (the Dom of C).f by A5;
       thus (the Cod of C).((the Comp of C).[g,f])
          = (the Cod of A).((the Comp of A).[g',f']) by A5,A14,A15,A16
         .= (the Cod of A).g' by A12,CAT_1:def 8
         .= (the Cod of C).g by A5;
      end;
     thus for f,g,h being Morphism of C
         st (the Dom of C).h = (the Cod of C).g &
            (the Dom of C).g = (the Cod of C).f
        holds (the Comp of C).[h,(the Comp of C).[g,f]]
            = (the Comp of C).[(the Comp of C).[h,g],f]
      proof let f,g,h be Morphism of C;
        reconsider g'=g, f'=f, h'=h as Morphism of A by TARSKI:def 3;
       assume that
A17:     (the Dom of C).h = (the Cod of C).g and
A18:     (the Dom of C).g = (the Cod of C).f;
A19:     (the Dom of A).h' = (the Cod of C).g by A5,A17
           .= (the Cod of A).g' by A5;
A20:     (the Dom of A).g' = (the Cod of C).f by A5,A18
           .= (the Cod of A).f' by A5;
A21:     [h,g] in dom the Comp of C by A8,A17;
then A22:     (the Comp of C).[h,g] = (the Comp of A).[h',g'] by A2,FUNCT_1:70;
A23:     [g,f] in dom the Comp of C by A8,A18;
then A24:     (the Comp of C).[g,f] = (the Comp of A).[g',f'] by A2,FUNCT_1:70;
        reconsider gf = (the Comp of C).[g,f], hg = (the Comp of C).[h,g]
           as Morphism of C by A21,A23,PARTFUN1:27;
          [g',f'] in dom the Comp of A & [h',g'] in dom the Comp of A
          by A19,A20,CAT_1:def 8;
        then reconsider gf' = (the Comp of A).[g',f'], hg' = (the Comp of A).[
h',g']
           as Morphism of A by PARTFUN1:27;
          (the Dom of C).h = (the Cod of A).g' by A5,A17
          .= (the Cod of A).gf' by A20,CAT_1:def 8
          .= (the Cod of C).gf by A5,A24;
then A25:     [h,(the Comp of C).[g,f]] in dom the Comp of C by A8;
          (the Dom of C).hg = (the Dom of A).hg' by A5,A22
           .= (the Dom of A).g' by A19,CAT_1:def 8
           .= (the Cod of C).f by A5,A18;
then A26:     [hg,f] in dom the Comp of C by A8;
       thus (the Comp of C).[h,(the Comp of C).[g,f]]
            = (the Comp of A).[h',(the Comp of A).[g',f']]
              by A2,A24,A25,FUNCT_1:70
           .= (the Comp of A).[(the Comp of A).[h',g'],f'] by A19,A20,CAT_1:def
8
           .= (the Comp of C).[(the Comp of C).[h,g],f]
              by A2,A22,A26,FUNCT_1:70;
      end;
     let b be Object of C;
      reconsider b' = b as Object of A by TARSKI:def 3;
        dom the Id of C = the Objects of C by FUNCT_2:def 1;
then A27:   (the Id of C).b = (the Id of A).b' by A3,FUNCT_1:70;
     hence (the Dom of C).((the Id of C).b)
            = (the Dom of A).((the Id of A).b') by A5
           .= b by CAT_1:def 8;
     thus (the Cod of C).((the Id of C).b)
            = (the Cod of A).((the Id of A).b') by A5,A27
           .= b by CAT_1:def 8;
     thus for f being Morphism of C st (the Cod of C).f = b
           holds (the Comp of C).[(the Id of C).b,f] = f
      proof let f be Morphism of C such that
A28:      (the Cod of C).f = b;
        reconsider f' = f as Morphism of A by TARSKI:def 3;
A29:     (the Cod of A).f' = b' by A5,A28;
           (the Cod of C).f = (the Cod of A).f' by A5
          .= (the Dom of A).((the Id of A).b') by A29,CAT_1:def 8
          .= (the Dom of C).((the Id of C).b) by A5,A27;
        then [(the Id of C).b,f] in dom the Comp of C by A8;
       hence (the Comp of C).[(the Id of C).b,f]
          = (the Comp of A).[(the Id of A).b',f'] by A2,A27,FUNCT_1:70
         .= f by A29,CAT_1:def 8;
      end;
     let g be Morphism of C such that
A30:    (the Dom of C).g = b;
      reconsider g' = g as Morphism of A by TARSKI:def 3;
A31:   (the Dom of A).g' = b' by A5,A30;
          (the Dom of C).g = (the Dom of A).g' by A5
        .= (the Cod of A).((the Id of A).b') by A31,CAT_1:def 8
        .= (the Cod of C).((the Id of C).b) by A5,A27;
      then [g,(the Id of C).b] in dom the Comp of C by A8;
     hence (the Comp of C).[g,(the Id of C).b]
       = (the Comp of A).[g',(the Id of A).b'] by A2,A27,FUNCT_1:70
      .= g by A31,CAT_1:def 8;
    end;
   then reconsider C as Category;
     C is Subcategory of A
    proof
     thus the Objects of C c= the Objects of A;
     thus for a,b being Object of C, a',b' being Object of A
      st a = a' & b = b' holds Hom(a,b) c= Hom(a',b')
      proof let a,b be Object of C, a',b' be Object of A such that
A32:      a = a' & b = b';
       let x be set;
       assume x in Hom(a,b);
        then x in {f where f is Morphism of C: dom f = a & cod f = b}
         by CAT_1:def 6; then consider f being Morphism of C such that
A33:     x = f and
A34:     dom f = a & cod f = b;
        reconsider f' = f as Morphism of A by TARSKI:def 3;
A35:      dom f' = (the Dom of A).f' by CAT_1:def 2 .= (the Dom of C).f by A5
          .= a' by A32,A34,CAT_1:def 2;
          cod f' = (the Cod of A).f' by CAT_1:def 3 .= (the Cod of C).f by A5
          .= b' by A32,A34,CAT_1:def 3;
        then x in {g where g is Morphism of A: dom g = a' & cod g = b'} by A33,
A35;
       hence x in Hom(a',b') by CAT_1:def 6;
      end;
     thus the Comp of C <= the Comp of A by A2,RELAT_1:88;
     let a be Object of C, a' be Object of A such that
A36:    a = a';
A37:      dom the Id of C = the Objects of C by FUNCT_2:def 1;
     thus id a = (the Id of C).a by CAT_1:def 5
       .= (the Id of A).a' by A3,A36,A37,FUNCT_1:70
       .= id a' by CAT_1:def 5;
    end;
  hence thesis;
 end;

theorem Th10:
 for C being strict Category, A being strict Subcategory of C st
  the Objects of A = the Objects of C & the Morphisms of A = the Morphisms of C
 holds A = C
 proof let C be strict Category, A be strict Subcategory of C such that
A1: the Objects of A = the Objects of C &
   the Morphisms of A = the Morphisms of C;
A2: dom the Dom of C = the Morphisms of C &
   dom the Cod of C = the Morphisms of C &
   dom the Id of C = the Objects of C by FUNCT_2:def 1;
     now
    thus the Dom of A = (the Dom of C)|the Morphisms of A by Th8
     .= the Dom of C by A1,A2,RELAT_1:97;
    thus the Cod of A = (the Cod of C)|the Morphisms of A by Th8
     .= the Cod of C by A1,A2,RELAT_1:97;
A3:   dom the Comp of C c= [:the Morphisms of C, the Morphisms of C:]
     by RELSET_1:12;
    thus the Comp of A
      = (the Comp of C)|[:the Morphisms of A, the Morphisms of A:] by Th8
     .= the Comp of C by A1,A3,RELAT_1:97;
    thus the Id of A = (the Id of C)|the Objects of A by Th8
     .= the Id of C by A1,A2,RELAT_1:97;
   end;
  hence A =C by A1;
 end;

begin :: Application of a functor to a morphism

definition let A,B,F; let a,b be Object of A such that
A1: Hom(a,b) <> {};
 let f be Morphism of a,b;
  func F.f -> Morphism of F.a, F.b equals
:Def1:  F.f;
 coherence by A1,CAT_1:125;
end;

theorem
   for a,b being Object of A st Hom(a,b) <> {}
  for f being Morphism of a,b holds (G*F).f = G.(F.f)
 proof let a,b be Object of A;
  assume
A1: Hom(a,b) <> {};
then A2: Hom(F.a,F.b) <> {} by CAT_1:126;
  let f be Morphism of a,b;
  thus (G*F).f = (G*F).(f qua Morphism of A) by A1,Def1
    .= G.(F.(f qua Morphism of A)) by FUNCT_2:21
    .= G.(F.f qua Morphism of B) by A1,Def1
    .= G.(F.f) by A2,Def1;
 end;

:: The following theorems are analogues of theorems from CAT_1.MIZ, with
:: the new concept of the application of a functor to a morphism

theorem :: CAT_1:95
     for F1,F2 being Functor of A,B
     st for a,b being Object of A st Hom(a,b) <> {}
      for f being Morphism of a,b holds F1.f = F2.f
    holds F1 = F2
 proof let F1,F2 be Functor of A,B;
  assume
A1: for a,b being Object of A st Hom(a,b) <> {}
    for f being Morphism of a,b holds F1.f = F2.f;
     now let f be Morphism of A;
    reconsider f' = f as Morphism of dom f, cod f by CAT_1:22;
A2:   Hom(dom f, cod f) <> {} by CAT_1:19;
    hence F1.f = F1.f' by Def1 .= F2.f' by A1,A2 .= F2.f by A2,Def1;
   end;
  hence F1 = F2 by FUNCT_2:113;
 end;

theorem Th13: :: CAT_1:99
 for a,b,c being Object of A st Hom(a,b) <> {} & Hom(b,c) <> {}
  for f being Morphism of a,b, g being Morphism of b,c
  holds F.(g*f) = F.g*F.f
proof let a,b,c be Object of A; assume
A1: Hom(a,b) <> {} & Hom(b,c) <> {};
then A2: Hom(a,c) <> {} by CAT_1:52;
A3: Hom(F.a,F.b) <> {} & Hom(F.b,F.c) <> {} by A1,CAT_1:126;
 let f be Morphism of a,b, g be Morphism of b,c;
A4: dom g = b & cod f = b by A1,CAT_1:23;
A5: F.g = F.(g qua Morphism of A) & F.f = F.(f qua Morphism of A) by A1,Def1;
 thus
    F.(g*f) = F.(g*f qua Morphism of A) by A2,Def1
    .= F.((g qua Morphism of A)*(f qua Morphism of A)) by A1,CAT_1:def 13
    .= (F.(g qua Morphism of A))*(F.(f qua Morphism of A)) by A4,CAT_1:99
    .= (F.g)*(F.f) by A3,A5,CAT_1:def 13;
end;

theorem :: CAT_1:107
    for c being Object of A, d being Object of B st F.(id c) = id d
   holds F.c = d
 proof let c be Object of A, d be Object of B;
  assume
A1: F.(id c) = id d;
     Hom(c,c) <> {} by CAT_1:56;
   then F.(id c qua Morphism of A) = id d by A1,Def1;
  hence F.c = d by CAT_1:107;
 end;

theorem Th15: :: CAT_1:108
 for a being Object of A holds F.id a = id (F.a)
 proof let a be Object of A;
     Hom(a,a) <> {} by CAT_1:56;
  hence F.id a = F.((id a) qua Morphism of A) by Def1 .= id (F.a) by CAT_1:108
;
 end;

theorem :: CAT_1:115
   for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds (id A).f = f
 proof let a,b be Object of A such that
A1: Hom(a,b) <> {};
  let f be Morphism of a,b;
  thus (id A).f = (id A).(f qua Morphism of A) by A1,Def1 .= f by CAT_1:115;
 end;

theorem
 Th17: for a,b,c,d being Object of A st Hom(a,b) meets Hom(c,d)
  holds a = c & b = d
 proof let a,b,c,d be Object of A;
  assume Hom(a,b) meets Hom(c,d);
   then consider x being set such that
A1:  x in Hom(a,b) & x in Hom(c,d) by XBOOLE_0:3;
   reconsider x as Morphism of A by A1;
     dom x = a & cod x = b & dom x = c & cod x = d by A1,CAT_1:18;
  hence a = c & b = d;
 end;

begin :: Transformations

definition let A,B,F1,F2;
 pred F1 is_transformable_to F2 means
:Def2: for a being Object of A holds Hom(F1.a,F2.a) <> {};
 reflexivity by CAT_1:56;
end;

canceled;

theorem Th19:
 F is_transformable_to F1 & F1 is_transformable_to F2 implies
   F is_transformable_to F2
proof assume
A1: F is_transformable_to F1 & F1 is_transformable_to F2;
 let a be Object of A;
    Hom(F.a,F1.a) <> {} & Hom(F1.a,F2.a) <> {} by A1,Def2;
 hence thesis by CAT_1:52;
end;

definition let A,B,F1,F2;
 assume A1: F1 is_transformable_to F2;
 mode transformation of F1,F2 ->
         Function of the Objects of A, the Morphisms of B means
:Def3: for a being Object of A holds it.a is Morphism of F1.a,F2.a;
 existence
  proof
     deffunc F(Object of A) = Hom(F1.$1,F2.$1);
A2: for a being Object of A holds the Morphisms of B meets F(a)
   proof let a be Object of A;
A3:   Hom(F1.a,F2.a) <> {} by A1,Def2;
     consider x being Element of Hom(F1.a,F2.a);
      now take x;
     thus x in the Morphisms of B & x in Hom(F1.a,F2.a) by A3,TARSKI:def 3;
    end;
    hence thesis by XBOOLE_0:3;
   end;
    consider t being Function of the Objects of A, the Morphisms of B such
    that
A4:   for a being Object of A holds t.a in F(a) from M_Choice(A2);
   take t; let a be Object of A;
      t.a in Hom(F1.a,F2.a) & Hom(F1.a,F2.a) <> {} by A4;
   hence thesis by CAT_1:def 7;
  end;
end;

definition let A,B; let F be Functor of A,B;
 func id F ->transformation of F,F means
:Def4: for a being Object of A holds it.a = id (F.a);
 existence
  proof
   deffunc _F(Object of A) = id (F.$1);
   consider t being Function of the Objects of A, the Morphisms of B such that
A1:  for a being Object of A holds t.a = _F(a) from LambdaD;
      for a being Object of A holds t.a is Morphism of F.a,F.a
    proof let a be Object of A;
        t.a = id (F.a) by A1;
     hence t.a is Morphism of F.a,F.a;
    end;
   then reconsider t as transformation of F,F by Def3;
   take t; let a be Object of A;
   thus t.a = id (F.a) by A1;
  end;
 uniqueness
  proof let it1,it2 be transformation of F,F such that
A2:  for a being Object of A holds it1.a = id (F.a) and
A3:  for a being Object of A holds it2.a = id (F.a);
      now let a be Object of A;
     thus it1.a = id (F.a) by A2 .= it2.a by A3;
    end;
   hence it1 = it2 by FUNCT_2:113;
  end;
end;

definition let A,B,F1,F2;
 assume A1: F1 is_transformable_to F2;
 let t be transformation of F1,F2; let a be Object of A;
 func t.a -> Morphism of F1.a, F2.a equals
:Def5:  t.a;
 coherence by A1,Def3;
end;

definition let A,B,F,F1,F2;
 assume that
A1: F is_transformable_to F1 and
A2: F1 is_transformable_to F2;
 let t1 be transformation of F,F1;
 let t2 be transformation of F1,F2;
 func t2`*`t1 -> transformation of F,F2 means
:Def6: for a being Object of A holds it.a = (t2.a)*(t1.a);
 existence
  proof
    deffunc _F(Object of A) = (t2.$1)*(t1.$1);
    consider t being Function of the Objects of A, the Morphisms of B such that
A3:   for a being Object of A holds t.a = _F(a) from LambdaD;
A4: F is_transformable_to F2 by A1,A2,Th19;
       for a being Object of A holds t.a is Morphism of F.a,F2.a
      proof let a be Object of A;
          t.a = (t2.a)*(t1.a) by A3;
       hence thesis;
      end;
    then reconsider t' = t as transformation of F,F2 by A4,Def3;
   take t'; let a be Object of A;
   thus t'.a = t.a by A4,Def5 .= (t2.a)*(t1.a) by A3;
  end;
 uniqueness
  proof let it1,it2 be transformation of F,F2 such that
A5: for a being Object of A holds it1.a = (t2.a)*(t1.a) and
A6: for a being Object of A holds it2.a = (t2.a)*(t1.a);
A7: F is_transformable_to F2 by A1,A2,Th19;
      now let a be Object of A;
     thus (it1 qua Function of the Objects of A, the Morphisms of B).a
        = it1.a by A7,Def5 .= (t2.a)*(t1.a) by A5 .= it2.a by A6
       .= (it2 qua Function of the Objects of A, the Morphisms of B).a
                                                                by A7,Def5;
    end;
   hence it1 = it2 by FUNCT_2:113;
  end;
end;

theorem Th20:
 F1 is_transformable_to F2 implies
 for t1,t2 being transformation of F1,F2 st
   for a being Object of A holds t1.a = t2.a
  holds t1 = t2
 proof assume
A1: F1 is_transformable_to F2;
  let t1,t2 be transformation of F1,F2;
  assume A2:for a being Object of A holds t1.a = t2.a;
     now let a be Object of A;
    thus (t1 qua Function of the Objects of A, the Morphisms of B).a
      = t1.a by A1,Def5 .= t2.a by A2
    .= (t2 qua Function of the Objects of A, the Morphisms of B).a by A1,Def5;
   end;
  hence t1 = t2 by FUNCT_2:113;
 end;

theorem Th21:
 for a being Object of A holds id F.a = id(F.a)
  proof let a be Object of A;
   thus id F.a = (id F qua Function of the Objects of A, the Morphisms of B).a
        by Def5 .= id (F.a) by Def4;
  end;

theorem Th22:
 F1 is_transformable_to F2 implies
 for t being transformation of F1,F2 holds (id F2)`*`t = t & t`*`(id F1) = t
proof assume
A1: F1 is_transformable_to F2;
 let t be transformation of F1,F2;
    now let a be Object of A;
A2: Hom(F1.a,F2.a) <> {} & Hom(F2.a,F2.a) <> {} by A1,Def2;
   thus ((id F2)`*`t).a = ((id F2).a)*(t.a) by A1,Def6
    .= (id(F2.a))*(t.a) by Th21 .= t.a by A2,CAT_1:57;
  end;
 hence (id F2)`*`t = t by A1,Th20;
    now let a be Object of A;
A3: Hom(F1.a,F1.a) <> {} & Hom(F1.a,F2.a) <> {} by A1,Def2;
   thus (t`*`(id F1)).a = (t.a)*((id F1).a) by A1,Def6
    .= (t.a)*(id(F1.a)) by Th21 .= t.a by A3,CAT_1:58;
  end;
 hence t`*`(id F1) = t by A1,Th20;
end;

theorem Th23:
 F is_transformable_to F1 & F1 is_transformable_to F2 &
 F2 is_transformable_to F3 implies
 for t1 being transformation of F,F1, t2 being transformation of F1,F2,
     t3 being transformation of F2,F3
  holds t3`*`t2`*`t1 = t3`*`(t2`*`t1)
proof assume
A1: F is_transformable_to F1 & F1 is_transformable_to F2 &
   F2 is_transformable_to F3;
 let t1 be transformation of F,F1, t2 be transformation of F1,F2,
     t3 be transformation of F2,F3;
A2: F is_transformable_to F2 & F1 is_transformable_to F3 by A1,Th19;
then A3: F is_transformable_to F3 by A1,Th19;
    now let a be Object of A;
A4: Hom(F.a,F1.a) <> {} & Hom(F1.a,F2.a) <> {} & Hom(F2.a,F3.a) <> {}
 by A1,Def2;
   thus (t3`*`t2`*`t1).a = ((t3`*`t2).a)*(t1.a) by A1,A2,Def6
      .= (t3.a)*(t2.a)*(t1.a) by A1,Def6
      .= (t3.a)*((t2.a)*(t1.a)) by A4,CAT_1:54
      .= (t3.a)*((t2`*`t1).a) by A1,Def6
      .= (t3`*`(t2`*`t1)).a by A1,A2,Def6;
  end;
 hence t3`*`t2`*`t1 = t3`*`(t2`*`t1) by A3,Th20;
end;

begin :: Natural transformations

Lm1: for a,b being Object of A st Hom(a,b) <> {}
       for f being Morphism of a,b holds
   id F.b*F.f = F.f*id F.a
 proof
  let a,b be Object of A such that
A1: Hom(a,b) <> {};
A2: Hom(a,a) <> {} & Hom(b,b) <> {} by CAT_1:56;
  let f be Morphism of a,b;
  thus id F.b*F.f = id(F.b)*F.f by Th21 .= F.id b*F.f by Th15
          .= F.(id b*f) by A1,A2,Th13 .= F.f by A1,CAT_1:57
          .= F.(f*id a) by A1,CAT_1:58 .= F.f*F.id a by A1,A2,Th13
          .= F.f*id(F.a) by Th15 .= F.f*id F.a by Th21;
 end;

definition let A,B,F1,F2;
 pred F1 is_naturally_transformable_to F2 means
:Def7: F1 is_transformable_to F2 &
 ex t being transformation of F1,F2 st
  for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds t.b*F1.f = F2.f*t.a;
 reflexivity
 proof
 let F;
   ex t being transformation of F,F st
  for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds t.b*F.f = F.f*t.a
 proof
  take id F; thus thesis by Lm1;
 end;
  hence thesis;
 end;
end;

Lm2: F is_transformable_to F1 & F1 is_transformable_to F2 implies
  for t1 being transformation of F,F1 st
   for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds t1.b*F.f = F1.f*t1.a
  for t2 being transformation of F1,F2 st
   for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds t2.b*F1.f = F2.f*t2.a
  for a,b being Object of A st Hom(a,b)<>{}
  for f being Morphism of a,b holds (t2`*`t1).b*F.f = F2.f*(t2`*`t1).a
 proof
  assume that A1:F is_transformable_to F1 and
              A2:F1 is_transformable_to F2;
  let t1 be transformation of F,F1 such that
A3: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t1.b*F.f = F1.f*t1.a;
  let t2 be transformation of F1,F2 such that
A4: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t2.b*F1.f = F2.f*t2.a;
  let a,b be Object of A; assume
A5: Hom(a,b)<>{};
then A6: Hom(F.a,F.b) <> {} & Hom(F.b,F1.b) <> {} by A1,Def2,CAT_1:126;
A7: Hom(F.a,F1.a) <> {} & Hom(F1.a,F2.a) <> {} by A1,A2,Def2;
A8: Hom(F1.b,F2.b) <> {} by A2,Def2;
A9: Hom(F2.a,F2.b) <> {} by A5,CAT_1:126;
A10: Hom(F1.a,F1.b) <> {} by A5,CAT_1:126;
  let f be Morphism of a,b;
  thus (t2`*`t1).b*F.f = t2.b*t1.b*F.f by A1,A2,Def6
          .= t2.b*(t1.b*F.f) by A6,A8,CAT_1:54
          .= t2.b*(F1.f*t1.a) by A3,A5
          .= t2.b*F1.f*t1.a by A7,A8,A10,CAT_1:54
          .= F2.f*t2.a*t1.a by A4,A5
          .= F2.f*(t2.a*t1.a) by A7,A9,CAT_1:54
          .= F2.f*(t2`*`t1).a by A1,A2,Def6;
 end;

canceled;

theorem Th25:
 F is_naturally_transformable_to F1 & F1 is_naturally_transformable_to F2
  implies F is_naturally_transformable_to F2
 proof
  assume A1:F is_transformable_to F1;
  given t1 being transformation of F,F1 such that
A2: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t1.b*F.f = F1.f*t1.a;
  assume A3:F1 is_transformable_to F2;
  given t2 being transformation of F1,F2 such that
A4: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t2.b*F1.f = F2.f*t2.a;
  thus F is_transformable_to F2 by A1,A3,Th19;
  take t2`*`t1;
  thus thesis by A1,A2,A3,A4,Lm2;
 end;

definition let A,B,F1,F2;
 assume A1:F1 is_naturally_transformable_to F2;
 mode natural_transformation of F1,F2 -> transformation of F1,F2 means
:Def8:
  for a,b being Object of A st Hom(a,b) <> {}
   for f being Morphism of a,b holds it.b*F1.f = F2.f*it.a;
 existence by A1,Def7;
end;

definition let A,B,F;
 redefine func id F -> natural_transformation of F,F;
 coherence
  proof thus F is_naturally_transformable_to F;
   thus thesis by Lm1;
  end;
end;

definition let A,B,F,F1,F2 such that
A1: F is_naturally_transformable_to F1 and
A2: F1 is_naturally_transformable_to F2;
 let t1 be natural_transformation of F,F1;
 let t2 be natural_transformation of F1,F2;
 func t2`*`t1 -> natural_transformation of F,F2 equals
:Def9:  t2`*`t1;
 coherence
 proof
A3: F is_transformable_to F1 & F1 is_transformable_to F2 by A1,A2,Def7;
A4: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t1.b*F.f = F1.f*t1.a by A1,Def8;
A5: for a,b being Object of A st Hom(a,b) <> {}
     for f being Morphism of a,b holds t2.b*F1.f = F2.f*t2.a by A2,Def8;
    t2`*`t1 is natural_transformation of F,F2
   proof thus F is_naturally_transformable_to F2 by A1,A2,Th25;
    thus thesis by A3,A4,A5,Lm2;
   end;
  hence thesis;
 end;
end;

theorem Th26:
 F1 is_naturally_transformable_to F2 implies
 for t being natural_transformation of F1,F2 holds
   (id F2)`*`t = t & t`*`(id F1) = t
 proof assume
A1: F1 is_naturally_transformable_to F2;
then A2: F1 is_transformable_to F2 by Def7;
  let t be natural_transformation of F1,F2;
  thus (id F2)`*`t = (id F2)`*`(t qua transformation of F1,F2) by A1,Def9
   .= t by A2,Th22;
  thus t`*`(id F1) = (t qua transformation of F1,F2)`*`(id F1) by A1,Def9
   .= t by A2,Th22;
 end;

reserve t for natural_transformation of F,F1,
        t1 for natural_transformation of F1,F2;

theorem Th27:
 F is_naturally_transformable_to F1 &
 F1 is_naturally_transformable_to F2 implies
 for t1 being natural_transformation of F,F1
 for t2 being natural_transformation of F1,F2
  for a being Object of A
 holds (t2`*`t1).a = (t2.a)*(t1.a)
proof assume that
A1: F is_naturally_transformable_to F1 and
A2: F1 is_naturally_transformable_to F2;
 let t1 be natural_transformation of F,F1;
 let t2 be natural_transformation of F1,F2;
 let a be Object of A;
  reconsider t1' = t1 as transformation of F,F1;
  reconsider t2' = t2 as transformation of F1,F2;
A3: F is_transformable_to F1 & F1 is_transformable_to F2 by A1,A2,Def7;
 thus (t2`*`t1).a = (t2'`*`t1').a by A1,A2,Def9 .= (t2.a)*(t1.a) by A3,Def6;
end;

theorem Th28:
 F is_naturally_transformable_to F1 &
 F1 is_naturally_transformable_to F2 &
 F2 is_naturally_transformable_to F3 implies
 for t3 being natural_transformation of F2,F3 holds t3`*`t1`*`t = t3`*`(t1`*`t)
  proof assume that
A1: F is_naturally_transformable_to F1 and
A2: F1 is_naturally_transformable_to F2 and
A3: F2 is_naturally_transformable_to F3;
A4: F1 is_naturally_transformable_to F3 by A2,A3,Th25;
A5: F is_naturally_transformable_to F2 by A1,A2,Th25;
A6: F is_transformable_to F1 & F1 is_transformable_to F2 &
    F2 is_transformable_to F3 by A1,A2,A3,Def7;
   let t3 be natural_transformation of F2,F3;
   thus t3`*`t1`*`t = t3`*`t1`*`(t qua transformation of F,F1) by A1,A4,Def9
     .= (t3 qua transformation of F2,F3)`*`t1`*`t by A2,A3,Def9
     .= t3`*`(t1`*`(t qua transformation of F,F1)) by A6,Th23
     .= (t3 qua transformation of F2,F3)`*`(t1`*`t) by A1,A2,Def9
     .= t3 `*`(t1`*`t) by A3,A5,Def9;
  end;

:: Natural equivalences

definition let A,B,F1,F2;
 let IT be transformation of F1,F2;
 attr IT is invertible means
:Def10: for a being Object of A holds IT.a is invertible;
end;

definition let A,B,F1,F2;
 pred F1,F2 are_naturally_equivalent means
:Def11: F1 is_naturally_transformable_to F2 &
  ex t being natural_transformation of F1,F2 st t is invertible;
 reflexivity
 proof
 let F;
  thus F is_naturally_transformable_to F;
  take id F; let a be Object of A;
     (id F).a = id(F.a) by Th21;
  hence (id F).a is invertible by CAT_1:74;
 end;
 synonym F1 ~= F2;
end;

Lm3:
 for t being transformation of F1,F2 st
  F1 is_transformable_to F2 & t is invertible
 holds F2 is_transformable_to F1
proof let t be transformation of F1,F2 such that
A1: F1 is_transformable_to F2 and
A2: for a being Object of A holds t.a is invertible;
 let a be Object of A;
A3:t.a is invertible by A2;
    Hom(F1.a,F2.a) <> {} by A1,Def2;
 hence Hom(F2.a,F1.a) <> {} by A3,CAT_1:70;
end;

definition let A,B,F1,F2 such that
A1: F1 is_transformable_to F2;
 let t1 be transformation of F1,F2 such that
A2: t1 is invertible;
 func t1" -> transformation of F2,F1 means
:Def12: for a being Object of A holds it.a = (t1.a)";
 existence
  proof
   deffunc _F(Object of A) = (t1.$1)";
   consider t being Function of the Objects of A, the Morphisms of B such that
A3:  for a being Object of A holds t.a = _F(a) from LambdaD;
A4: F2 is_transformable_to F1 by A1,A2,Lm3;
     now let a be Object of A; t.a = (t1.a)" by A3;
    hence t.a is Morphism of F2.a,F1.a;
   end;
   then reconsider t as transformation of F2,F1 by A4,Def3;
   take t; let a be Object of A;
   thus t.a = (t qua Function of the Objects of A, the Morphisms of B).a
     by A4,Def5 .= (t1.a)" by A3;
  end;
 uniqueness
  proof let t,t' be transformation of F2,F1 such that
A5: for a being Object of A holds t.a = (t1.a)" and
A6: for a being Object of A holds t'.a = (t1.a)";
A7: F2 is_transformable_to F1 by A1,A2,Lm3;
      now let a be Object of A;
     thus t.a = (t1.a)" by A5 .= t'.a by A6;
    end;
   hence thesis by A7,Th20;
  end;
end;

Lm4: now let A,B,F1,F2,t1 such that
A1: F1 is_naturally_transformable_to F2 and
A2: t1 is invertible;
A3: F1 is_transformable_to F2 by A1,Def7;
    let a,b be Object of A such that
A4:    Hom(a,b) <> {};
A5:    t1.b is invertible by A2,Def10;
A6:    t1.a is invertible by A2,Def10;
A7:    Hom(F1.a,F1.b) <> {} by A4,CAT_1:126;
A8:    Hom(F1.a,F2.a) <> {} by A3,Def2;
A9:    Hom(F1.b,F2.b) <> {} by A3,Def2;
then A10:    Hom(F2.b,F1.b) <> {} by A5,CAT_1:70;
A11:    Hom(F2.a,F2.b) <> {} by A4,CAT_1:126;
A12:    Hom(F2.a,F1.a) <> {} by A6,A8,CAT_1:70;
then A13:    Hom(F2.a,F1.b) <> {} by A7,CAT_1:52;
    let f be Morphism of a,b;
        F2.f*t1.a = t1.b*F1.f by A1,A4,Def8;
then A14:     (t1.b)"*F2.f*t1.a = (t1.b)"*(t1.b*F1.f) by A8,A10,A11,CAT_1:54
        .= (t1.b)"*t1.b*F1.f by A7,A9,A10,CAT_1:54
        .= id(F1.b)*F1.f by A5,A9,CAT_1:def 14
        .= F1.f by A7,CAT_1:57;
        (t1.b)"*F2.f = (t1.b)"*F2.f*id(F2.a) by A13,CAT_1:58
        .= (t1.b)"*F2.f*(t1.a*(t1.a)") by A6,A8,CAT_1:def 14
        .= F1.f*(t1.a)" by A8,A12,A13,A14,CAT_1:54;
    hence t1".b*F2.f = F1.f*(t1.a)" by A2,A3,Def12
        .= F1.f*t1".a by A2,A3,Def12;
end;

Lm5:
 F1 is_naturally_transformable_to F2 & t1 is invertible
 implies F2 is_naturally_transformable_to F1
proof assume
A1: F1 is_naturally_transformable_to F2;
then A2: F1 is_transformable_to F2 by Def7;
 assume
A3: t1 is invertible;
 hence F2 is_transformable_to F1 by A2,Lm3;
 take t1";
 thus thesis by A1,A3,Lm4;
end;

definition let A,B,F1,F2,t1 such that
A1: F1 is_naturally_transformable_to F2 and
A2: t1 is invertible;
 func t1" -> natural_transformation of F2,F1 equals
:Def13:  (t1 qua transformation of F1,F2)";
 coherence
  proof
      t1" is natural_transformation of F2,F1
     proof thus F2 is_naturally_transformable_to F1 by A1,A2,Lm5;
      thus thesis by A1,A2,Lm4;
     end;
   hence thesis;
  end;
end;

canceled;

theorem Th30:
 for A,B,F1,F2,t1 st F1 is_naturally_transformable_to F2 & t1 is invertible
 for a being Object of A holds t1".a = (t1.a)"
 proof let A,B,F1,F2,t1 such that
A1: F1 is_naturally_transformable_to F2 and
A2: t1 is invertible;
A3: F1 is_transformable_to F2 by A1,Def7;
  let a be Object of A;
  thus t1".a = (t1 qua transformation of F1,F2)".a by A1,A2,Def13
    .= ((t1 qua transformation of F1,F2).a)" by A2,A3,Def12;
 end;

theorem
   F1 ~= F2 implies F2 ~= F1
 proof
  assume
A1: F1 is_naturally_transformable_to F2;
  given t being natural_transformation of F1,F2 such that
A2: t is invertible;
  thus F2 is_naturally_transformable_to F1 by A1,A2,Lm5;
  take t"; let a be Object of A;
     F1 is_transformable_to F2 by A1,Def7;
then A3: Hom(F1.a,F2.a) <> {} by Def2;
     t.a is invertible & t".a = (t.a)" by A1,A2,Def10,Th30;
  hence t".a is invertible by A3,CAT_1:76;
 end;

theorem Th32:
 F1 ~= F2 & F2 ~= F3 implies F1 ~= F3
 proof
  assume
A1: F1 is_naturally_transformable_to F2;
  given t being natural_transformation of F1,F2 such that
A2: t is invertible;
  assume
A3: F2 is_naturally_transformable_to F3;
  given t' being natural_transformation of F2,F3 such that
A4: t' is invertible;
  thus F1 is_naturally_transformable_to F3 by A1,A3,Th25;
  take t'`*`t; let a be Object of A;
A5: (t'`*`t).a = (t'.a)*(t.a) by A1,A3,Th27;
     F1 is_transformable_to F2 & F2 is_transformable_to F3 by A1,A3,Def7;
then A6: Hom(F1.a,F2.a) <> {} & Hom(F2.a,F3.a) <> {} by Def2;
     t'.a is invertible & t.a is invertible by A2,A4,Def10;
  hence (t'`*`t).a is invertible by A5,A6,CAT_1:75;
 end;

definition let A,B,F1,F2;
 assume
A1:F1,F2 are_naturally_equivalent;
 mode natural_equivalence of F1,F2 -> natural_transformation of F1,F2 means
:Def14: it is invertible;
 existence by A1,Def11;
end;

theorem
   id F is natural_equivalence of F,F
  proof thus F ~= F;
   let a be Object of A;
      (id F).a = id(F.a) by Th21;
   hence (id F).a is invertible by CAT_1:74;
  end;

theorem
   F1 ~= F2 & F2 ~= F3 implies
  for t being natural_equivalence of F1,F2,
      t' being natural_equivalence of F2,F3 holds
   t'`*`t is natural_equivalence of F1,F3
 proof assume that
A1: F1,F2 are_naturally_equivalent and
A2: F2,F3 are_naturally_equivalent;
  let t be natural_equivalence of F1,F2,
     t' be natural_equivalence of F2,F3;
  thus F1,F3 are_naturally_equivalent by A1,A2,Th32;
  let a be Object of A;
A3:F1 is_naturally_transformable_to F2 &
   F2 is_naturally_transformable_to F3 by A1,A2,Def11;
then A4: (t'`*`t).a = (t'.a)*(t.a) by Th27;
     F1 is_transformable_to F2 & F2 is_transformable_to F3 by A3,Def7;
then A5: Hom(F1.a,F2.a) <> {} & Hom(F2.a,F3.a) <> {} by Def2;
     t' is invertible & t is invertible by A1,A2,Def14;
   then t'.a is invertible & t.a is invertible by Def10;
  hence (t'`*`t).a is invertible by A4,A5,CAT_1:75;
 end;

begin :: Functor category

definition let A,B;
 mode NatTrans-DOMAIN of A,B -> non empty set means
:Def15: for x being set holds x in it implies
  ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
   st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2;
 existence
  proof consider F being Functor of A,B;
   take {[[F,F],id F]};
   let x be set such that
A1:  x in {[[F,F],id F]};
   take F,F, id F;
   thus thesis by A1,TARSKI:def 1;
  end;
end;

definition let A,B;
 func NatTrans(A,B) -> NatTrans-DOMAIN of A,B means
:Def16: for x being set holds x in it iff
  ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
   st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2;
 existence
  proof
   defpred _P[set] means
   ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
       st $1 = [[F1,F2],t] & F1 is_naturally_transformable_to F2;
   consider T being set such that
A1:  for x being set holds x in T iff
       x in [:[:Funct(A,B),Funct(A,B):],
         Funcs(the Objects of A, the Morphisms of B):] & _P[x] from Separation;
    consider F being Functor of A,B;
      F in Funct(A,B) by CAT_2:def 2;
then A2:  [F,F] in [:Funct(A,B),Funct(A,B):] by ZFMISC_1:106;
      id F in Funcs(the Objects of A, the Morphisms of B) by FUNCT_2:11;
    then [[F,F],id F] in [:[:Funct(A,B),Funct(A,B):],
         Funcs(the Objects of A, the Morphisms of B):] by A2,ZFMISC_1:106;
    then reconsider T as non empty set by A1;
      for x being set st x in T holds
     ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
     st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by A1;
    then reconsider T as NatTrans-DOMAIN of A,B by Def15;
   take T;
   let x be set;
   thus x in T implies
    ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
     st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by A1;
   given F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
   such that
A3: x = [[F1,F2],t] & F1 is_naturally_transformable_to F2;
      F1 in Funct(A,B) & F2 in Funct(A,B) by CAT_2:def 2;
    then [F1,F2] in [:Funct(A,B),Funct(A,B):] &
    t in
 Funcs(the Objects of A, the Morphisms of B) by FUNCT_2:11,ZFMISC_1:106;
    then x in [:[:Funct(A,B),Funct(A,B):],
            Funcs(the Objects of A, the Morphisms of B):] by A3,ZFMISC_1:106;
   hence x in T by A1,A3;
  end;
 uniqueness
  proof let S,T be NatTrans-DOMAIN of A,B such that
A4: for x being set holds x in S iff
  ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
   st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2
    and
A5: for x being set holds x in T iff
  ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
   st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2;
      now let x be set;
       x in S iff
       ex F1,F2 being Functor of A,B, t being natural_transformation of F1,F2
           st x = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by A4;
     hence x in S iff x in T by A5;
    end;
   hence thesis by TARSKI:2;
  end;
end;

definition let A1,B1,A2,B2 be non empty set,
     f1 be Function of A1,B1,
     f2 be Function of A2,B2;
 redefine pred f1 = f2 means
     A1 = A2 & for a being Element of A1 holds f1.a = f2.a;
 compatibility
  proof
A1:  dom f1 = A1 & dom f2 = A2 by FUNCT_2:def 1;
   hence f1 = f2 implies
    A1 = A2 & for a being Element of A1 holds f1.a = f2.a;
   assume that
A2: A1 = A2 and
A3: for a being Element of A1 holds f1.a = f2.a;
      for a being set st a in A1 holds f1.a = f2.a by A3;
   hence f1 = f2 by A1,A2,FUNCT_1:9;
  end;
end;

theorem Th35:
 F1 is_naturally_transformable_to F2 iff [[F1,F2],t1] in NatTrans(A,B)
 proof
  thus F1 is_naturally_transformable_to F2 implies [[F1,F2],t1] in
 NatTrans(A,B)
   by Def16;
  assume [[F1,F2],t1] in NatTrans(A,B);
   then consider F1',F2' being Functor of A,B,
         t being natural_transformation of F1',F2' such that
A1: [[F1,F2],t1] = [[F1',F2'],t] & F1' is_naturally_transformable_to F2' by
Def16;
     [F1,F2] = [F1',F2'] by A1,ZFMISC_1:33;
   then F1 = F1' & F2 = F2' by ZFMISC_1:33;
  hence F1 is_naturally_transformable_to F2 by A1;
 end;

definition let A,B;
 func Functors(A,B) -> strict Category means
:Def18: the Objects of it = Funct(A,B) &
   the Morphisms of it = NatTrans(A,B) &
   (for f being Morphism of it holds dom f = f`1`1 & cod f = f`1`2) &
   (for f,g being Morphism of it st dom g = cod f
     holds [g,f] in dom the Comp of it) &
   (for f,g being Morphism of it st [g,f] in dom (the Comp of it)
     ex F,F1,F2,t,t1 st f = [[F,F1],t] & g = [[F1,F2],t1] &
      (the Comp of it).[g,f] = [[F,F2],t1`*`t]) &
   for a being Object of it, F st F = a holds id a = [[F,F],id F];
 existence
  proof
    deffunc _F(set) = $1`1`1;
A1: now let t be Element of NatTrans(A,B);
     consider F1,F2 being Functor of A,B,
              s being natural_transformation of F1,F2 such that
A2:    t = [[F1,F2],s] and F1 is_naturally_transformable_to F2 by Def16;
       t`1`1 = [F1,F2]`1 by A2,MCART_1:7 .= F1 by MCART_1:7;
    hence _F(t) in Funct(A,B) by CAT_2:def 2;
   end;
   consider d being Function of NatTrans(A,B), Funct(A,B) such that
A3: for t being Element of NatTrans(A,B) holds d.t = _F(t)
     from FunctR_ealEx(A1);
    deffunc _F(set) = $1`1`2;
A4: now let t be Element of NatTrans(A,B);
     consider F1,F2 being Functor of A,B,
              s being natural_transformation of F1,F2 such that
A5:    t = [[F1,F2],s] and F1 is_naturally_transformable_to F2 by Def16;
       t`1`2 = [F1,F2]`2 by A5,MCART_1:7 .= F2 by MCART_1:7;
    hence _F(t) in Funct(A,B) by CAT_2:def 2;
   end;
   consider c being Function of NatTrans(A,B), Funct(A,B) such that
A6: for t being Element of NatTrans(A,B) holds c.t = _F(t)
     from FunctR_ealEx(A4);
   defpred P[set,set,set] means
    ex F,F1,F2,t,t1 st $2 = [[F,F1],t] & $1 = [[F1,F2],t1] &
       $3 = [[F,F2],t1`*`t];
A7: now let x,y,z be set;
    assume
A8:   x in NatTrans(A,B) & y in NatTrans(A,B);
    assume  P[x,y,z];
    then consider F,F1,F2,t,t1 such that
A9:   y = [[F,F1],t] & x = [[F1,F2],t1] & z = [[F,F2],t1`*`t];
       F is_naturally_transformable_to F1 &
     F1 is_naturally_transformable_to F2 by A8,A9,Th35;
     then F is_naturally_transformable_to F2 by Th25;
    hence z in NatTrans(A,B) by A9,Th35;
   end;
A10: now let x,y,z1,z2 be set;
    assume x in NatTrans(A,B) & y in NatTrans(A,B);
    assume  P[x,y,z1];
    then consider F,F1,F2,t,t1 such that
A11:  y = [[F,F1],t] & x = [[F1,F2],t1] & z1 = [[F,F2],t1`*`t];
    assume  P[x,y,z2];
    then consider F',F1',F2' being Functor of A,B,
        t' being natural_transformation of F',F1',
        t1' being natural_transformation of F1',F2' such that
A12:    y = [[F',F1'],t'] & x = [[F1',F2'],t1'] & z2 = [[F',F2'],t1'`*`t'];
A13:  [F,F1]=[F',F1'] & t=t' & [F1,F2]=[F1',F2'] & t1=t1' by A11,A12,ZFMISC_1:
33;
     then F = F' & F1 = F1' & F2 = F2' by ZFMISC_1:33;
    hence z1 = z2 by A11,A12,A13;
   end;
   consider m being PartFunc of [:NatTrans(A,B),NatTrans(A,B):],NatTrans(A,B)
   such that
A14: for x,y being set holds [x,y] in dom m iff x in NatTrans(A,B) &
      y in NatTrans(A,B) & ex z being set st P[x,y,z]
   and
A15: for x,y being set st [x,y] in dom m holds P[x,y,m.[x,y]]
                                                  from PartFuncEx2(A7,A10);
   deffunc _F(Element of Funct(A,B)) = [[$1,$1],id $1];
A16: for F be Element of Funct(A,B) holds _F(F) in NatTrans(A,B) by Def16;
   consider i being Function of Funct(A,B), NatTrans(A,B) such that
A17: for F being Element of Funct(A,B) holds i.F = _F(F)
                                           from FunctR_ealEx(A16);
   set C = CatStr(#Funct(A,B),NatTrans(A,B),d,c,m,i#);
A18: now let F,F1,F2,t,t1;
    assume F1 is_naturally_transformable_to F2
         & F is_naturally_transformable_to F1;
then A19:  [[F1,F2],t1] in NatTrans(A,B) & [[F,F1],t] in NatTrans(A,B) by Th35;
       P[[[F1,F2],t1],[[F,F1],t],[[F,F2],t1`*`t]];
     then [[[F1,F2],t1],[[F,F1],t]] in dom m by A14,A19;
     then consider F',F1',F2' being Functor of A,B,
         t' being natural_transformation of F',F1',
         t1' being natural_transformation of F1',F2' such that
A20:   [[F,F1],t] = [[F',F1'],t'] & [[F1,F2],t1] = [[F1',F2'],t1'] and
A21:   m.[[[F1,F2],t1],[[F,F1],t]] = [[F',F2'],t1'`*`t'] by A15;
A22:   [F,F1] = [F',F1'] & t = t' & [F1,F2] = [F1',F2'] & t1 = t1'
     by A20,ZFMISC_1:33;
     then F = F' & F1 = F1' & F2 = F2' by ZFMISC_1:33;
    hence m.[[[F1,F2],t1],[[F,F1],t]] = [[F,F2],t1`*`t] by A21,A22;
   end;
     now
    thus
A23:  for f,g being Element of the Morphisms of C holds
      [g,f] in dom(the Comp of C) iff (the Dom of C).g=(the Cod of C).f
     proof let f,g be Element of the Morphisms of C;
      thus [g,f] in
 dom(the Comp of C) implies (the Dom of C).g=(the Cod of C).f
       proof assume [g,f] in dom(the Comp of C);
         then consider F,F1,F2,t,t1 such that
A24:        f = [[F,F1],t] & g = [[F1,F2],t1] and m.[g,f] = [[F,F2],t1`*`t]
by A15;
        thus (the Dom of C).g= g`1`1 by A3 .= [F1,F2]`1 by A24,MCART_1:7
          .= F1 by MCART_1:7 .= [F,F1]`2 by MCART_1:7 .= f`1`2 by A24,MCART_1:7
          .= (the Cod of C).f by A6;
       end;
       consider F1,F2 being Functor of A,B,
                     t being natural_transformation of F1,F2 such that
A25:     g = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by Def16;
       consider F1',F2' being Functor of A,B,
                     t' being natural_transformation of F1',F2' such that
A26:     f = [[F1',F2'],t'] & F1' is_naturally_transformable_to F2' by Def16;
      assume
A27:     (the Dom of C).g=(the Cod of C).f;
A28:    F1 = [F1,F2]`1 by MCART_1:7 .= g`1`1 by A25,MCART_1:7 .= c.f by A3,A27
.= f`1`2 by A6 .= [F1',F2']`2 by A26,MCART_1:7
         .= F2' by MCART_1:7;
       then reconsider t as natural_transformation of F2',F2;
         m.[g,f] = [[F1',F2],t`*`t'] by A18,A25,A26,A28;
      hence [g,f] in dom(the Comp of C) by A14,A25,A26,A28;
     end;
    thus for f,g being Element of the Morphisms of C
       st (the Dom of C).g=(the Cod of C).f holds
         (the Dom of C).((the Comp of C).[g,f]) = (the Dom of C).f &
         (the Cod of C).((the Comp of C).[g,f]) = (the Cod of C).g
     proof let f,g be Element of the Morphisms of C;
      assume (the Dom of C).g=(the Cod of C).f;
       then [g,f] in dom m by A23;
       then consider F,F1,F2,t,t1 such that
A29:     f = [[F,F1],t] & g = [[F1,F2],t1] & m.[g,f] = [[F,F2],t1`*`t] by A15;
       consider F1',F2' being Functor of A,B,
           t' being natural_transformation of F1',F2' such that
A30:    f = [[F1',F2'],t'] & F1' is_naturally_transformable_to F2' by Def16;
         [F,F1] = [F1',F2'] by A29,A30,ZFMISC_1:33;
       then A31: F = F1' & F1 = F2' by ZFMISC_1:33;
       consider F1',F2' being Functor of A,B,
           t' being natural_transformation of F1',F2' such that
A32:    g = [[F1',F2'],t'] & F1' is_naturally_transformable_to F2' by Def16;
         [F1,F2] = [F1',F2'] by A29,A32,ZFMISC_1:33;
       then F1 = F1' & F2 = F2' by ZFMISC_1:33;
       then F is_naturally_transformable_to F2 by A30,A31,A32,Th25;
       then reconsider x = [[F,F2],t1`*`t] as Element of NatTrans(A,B) by Th35;
      thus (the Dom of C).((the Comp of C).[g,f]) = x`1`1 by A3,A29
         .= [F,F2]`1 by MCART_1:7
         .= F by MCART_1:7
         .= [F,F1]`1 by MCART_1:7
         .= [[F,F1],t]`1`1 by MCART_1:7
         .= (the Dom of C).f by A3,A29;
      thus (the Cod of C).((the Comp of C).[g,f]) = x`1`2 by A6,A29
         .= [F,F2]`2 by MCART_1:7
         .= F2 by MCART_1:7
         .= [F1,F2]`2 by MCART_1:7
         .= [[F1,F2],t1]`1`2 by MCART_1:7
         .= (the Cod of C).g by A6,A29;
     end;
    thus for f,g,h being Element of the Morphisms of C
         st (the Dom of C).h = (the Cod of C).g &
            (the Dom of C).g = (the Cod of C).f
        holds (the Comp of C).[h,(the Comp of C).[g,f]]
            = (the Comp of C).[(the Comp of C).[h,g],f]
     proof let f,g,h be Element of the Morphisms of C;
      reconsider f'=f, g'=g, h'=h as Element of NatTrans(A,B);
      assume
A33:     (the Dom of C).h = (the Cod of C).g &
       (the Dom of C).g = (the Cod of C).f;
      then [g',f'] in dom m by A23;
      then consider F1,F1',F2 being Functor of A,B,
            t1 being natural_transformation of F1,F1',
            t2 being natural_transformation of F1',F2 such that
A34:    f' = [[F1,F1'],t1] & g' = [[F1',F2],t2] &
       m.[g',f'] = [[F1,F2],t2`*`t1] by A15;
        [h',g'] in dom m by A23,A33;
      then consider F2',F3,F3' being Functor of A,B,
            t2' being natural_transformation of F2',F3,
            t3 being natural_transformation of F3,F3' such that
A35:    g' = [[F2',F3],t2'] & h' = [[F3,F3'],t3] &
       m.[h',g'] = [[F2',F3'],t3`*`t2'] by A15;
A36:       [F2',F3] = [F1',F2] by A34,A35,ZFMISC_1:33;
then A37:    F2 = F3 by ZFMISC_1:33;
A38:    g' = [[F1',F3],t2] by A34,A36,ZFMISC_1:33;
A39:    F1 is_naturally_transformable_to F1' by A34,Th35;
A40:    F1' is_naturally_transformable_to F3 by A34,A37,Th35;
A41:    F3 is_naturally_transformable_to F3' by A35,Th35;
A42:    F1 is_naturally_transformable_to F3 by A39,A40,Th25;
A43:    F1' is_naturally_transformable_to F3' by A40,A41,Th25;
       reconsider t2 as natural_transformation of F1',F3 by A36,ZFMISC_1:33;
      thus (the Comp of C).[h,(the Comp of C).[g,f]]
         = [[F1,F3'],t3`*`(t2`*`t1)] by A18,A34,A35,A37,A41,A42
        .= [[F1,F3'],t3`*`t2`*`t1] by A39,A40,A41,Th28
        .= m.[[[F1',F3'],t3`*`t2],f'] by A18,A34,A39,A43
        .= (the Comp of C).[(the Comp of C).[h,g],f] by A18,A35,A38,A40,A41;
     end;
    let b be Element of the Objects of C;
     reconsider F = b as Functor of A,B by CAT_2:def 2;
     reconsider s = [[F,F], id F] as Element of NatTrans(A,B) by Def16;
A44:   (the Id of C).b = [[F,F],id F] by A17;
    hence (the Dom of C).((the Id of C).b) =s`1`1 by A3 .= [F,F]`1 by MCART_1:7
 .= b by MCART_1:7;
    thus (the Cod of C).((the Id of C).b) =s`1`2 by A6,A44 .= [F,F]`2 by
MCART_1:7 .= b by MCART_1:7;
    thus for f being Element of the Morphisms of C st (the Cod of C).f = b
           holds (the Comp of C).[(the Id of C).b,f] = f
     proof let f be Element of the Morphisms of C;
      reconsider f' = f as Element of NatTrans(A,B);
      consider F1,F2 being Functor of A,B,
                t being natural_transformation of F1,F2
      such that
  A45:   f' = [[F1,F2],t] and F1 is_naturally_transformable_to F2 by Def16;
      assume
  A46:   (the Cod of C).f = b;
  A47:  F2 = [F1,F2]`2 by MCART_1:7 .= f'`1`2 by A45,MCART_1:7 .= F by A6,A46;
      then reconsider t as natural_transformation of F1,F;
        P[s,f',[[F1,F],(id F)`*`t]] by A45,A47;
      then [s,f'] in dom m by A14;
      then [i.F,f'] in dom m by A17;
      then consider F',F1',F2' being Functor of A,B,
                t' being natural_transformation of F',F1',
                t1' being natural_transformation of F1',F2' such that
  A48:   f' = [[F',F1'],t'] & i.F = [[F1',F2'],t1'] and
  A49:   m.[i.F,f'] = [[F',F2'],t1'`*`t'] by A15;
  A50:   F' is_naturally_transformable_to F1' by A48,Th35;
         i.F = [[F,F], id F] by A17;
  then A51:  [F1',F2'] = [F,F] & t1' = id F by A48,ZFMISC_1:33;
    then F1' = F & F2' = F by ZFMISC_1:33;

      hence (the Comp of C).[(the Id of C).b,f] = f by A48,A49,A50,A51,Th26;
     end;
    let g be Element of the Morphisms of C;
     reconsider g' = g as Element of NatTrans(A,B);
     consider F1,F2 being Functor of A,B,
              t being natural_transformation of F1,F2
     such that
A52:   g' = [[F1,F2],t] and F1 is_naturally_transformable_to F2 by Def16;
    assume
A53:   (the Dom of C).g = b;
A54:  F1 = [F1,F2]`1 by MCART_1:7 .= g'`1`1 by A52,MCART_1:7 .= F by A3,A53;
     then reconsider t as natural_transformation of F,F2;
       P[g',s,[[F,F2],t`*`(id F)]] by A52,A54;
     then [g',s] in dom m by A14;
     then [g',i.F] in dom m by A17;
     then consider F',F1',F2' being Functor of A,B,
              t' being natural_transformation of F',F1',
              t1' being natural_transformation of F1',F2' such that
A55:   i.F = [[F',F1'],t'] & g' = [[F1',F2'],t1'] and
A56:   m.[g',i.F] = [[F',F2'],t1'`*`t'] by A15;
A57:   F1' is_naturally_transformable_to F2' by A55,Th35;
       i.F = [[F,F], id F] by A17;
then A58:  [F',F1'] = [F,F] & t' = id F by A55,ZFMISC_1:33;
  then F1' = F & F' = F by ZFMISC_1:33;

    hence (the Comp of C).[g,(the Id of C).b] = g by A55,A56,A57,A58,Th26;
   end;
   then reconsider C as strict Category by CAT_1:def 8;
   take C;
   thus the Objects of C = Funct(A,B) &
        the Morphisms of C = NatTrans(A,B);
   thus
A59: for f being Morphism of C holds dom f = f`1`1 & cod f = f`1`2
     proof let f be Morphism of C;
       reconsider t = f as Element of NatTrans(A,B);
      thus dom f = d.t by CAT_1:def 2 .= f`1`1 by A3;
      thus cod f = c.t by CAT_1:def 3 .= f`1`2 by A6;
     end;
   thus for f,g being Morphism of C st dom g = cod f
     holds [g,f] in dom the Comp of C
    proof let f,g be Morphism of C;
      consider F1,F2 being Functor of A,B,
               t being natural_transformation of F1,F2
      such that
A60:     f = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by Def16;
      consider F1',F2' being Functor of A,B,
               t' being natural_transformation of F1',F2'
      such that
A61:    g = [[F1',F2'],t'] & F1' is_naturally_transformable_to F2' by Def16;
     assume
A62:    dom g = cod f;
A63:    F2 = [F1,F2]`2 by MCART_1:7 .= [[F1,F2],t]`1`2 by MCART_1:7
         .= cod f by A59,A60 .= [[F1',F2'],t']`1`1 by A59,A61,A62
         .= [F1',F2']`1 by MCART_1:7 .= F1' by MCART_1:7;
      then reconsider t' as natural_transformation of F2,F2';
        P[g,f,[[F1,F2'],t'`*`t]] by A60,A61,A63;
     hence [g,f] in dom the Comp of C by A14;
    end;
   thus for f,g being Morphism of C st [g,f] in dom (the Comp of C)
     ex F,F1,F2,t,t1 st f = [[F,F1],t] & g = [[F1,F2],t1] &
      (the Comp of C).[g,f] = [[F,F2],t1`*`t] by A15;
   let a be Object of C, F such that A64: F = a;
    reconsider F' = F as Element of Funct(A,B) by CAT_2:def 2;
   thus id a = i.F' by A64,CAT_1:def 5
     .= [[F,F],id F] by A17;
  end;
 uniqueness
  proof let C1,C2 be strict Category such that
A65: the Objects of C1 = Funct(A,B) and
A66: the Morphisms of C1 = NatTrans(A,B) and
A67: for f being Morphism of C1 holds dom f = f`1`1 & cod f = f`1`2 and
A68: for f,g being Morphism of C1 st dom g = cod f
     holds [g,f] in dom the Comp of C1 and
A69: for f,g being Morphism of C1 st [g,f] in dom (the Comp of C1)
     ex F,F1,F2,t,t1 st f = [[F,F1],t] & g = [[F1,F2],t1] &
      (the Comp of C1).[g,f] = [[F,F2],t1`*`t] and
A70: for a being Object of C1, F st F = a holds id a = [[F,F],id F] and
A71: the Objects of C2 = Funct(A,B) and
A72: the Morphisms of C2 = NatTrans(A,B) and
A73: for f being Morphism of C2 holds dom f = f`1`1 & cod f = f`1`2 and
A74: for f,g being Morphism of C2 st dom g = cod f
     holds [g,f] in dom the Comp of C2 and
A75: for f,g being Morphism of C2 st [g,f] in dom (the Comp of C2)
     ex F,F1,F2,t,t1 st f = [[F,F1],t] & g = [[F1,F2],t1] &
      (the Comp of C2).[g,f] = [[F,F2],t1`*`t] and
A76:  for a being Object of C2, F st F = a holds id a = [[F,F],id F];
      now
     thus
     the Morphisms of C1 = the Morphisms of C2 by A66,A72;
     thus the Dom of C1 = the Dom of C2
      proof thus the Morphisms of C1 = the Morphisms of C2 by A66,A72;
       let a be Morphism of C1;
        reconsider b = a as Morphism of C2 by A66,A72;
       thus (the Dom of C1).a = dom a by CAT_1:def 2 .= a`1`1 by A67
               .= dom b by A73 .= (the Dom of C2).a by CAT_1:def 2;
      end;
     thus the Cod of C1 = the Cod of C2
      proof thus the Morphisms of C1 = the Morphisms of C2 by A66,A72;
       let a be Morphism of C1;
        reconsider b = a as Morphism of C2 by A66,A72;
       thus (the Cod of C1).a = cod a by CAT_1:def 3 .= a`1`2 by A67
               .= cod b by A73 .= (the Cod of C2).a by CAT_1:def 3;
      end;
        now
A77:    dom the Comp of C1 c= [:the Morphisms of C1, the Morphisms of C1:]
                                                    by RELSET_1:12;
       reconsider S1 = dom the Comp of C1, S2 = dom the Comp of C2
        as Subset of [:the Morphisms of C1, the Morphisms of C1:]
         by A66,A72,RELSET_1:12;
         now let x be Element of [:the Morphisms of C1, the Morphisms of C1:];
A78:     x = [x`1,x`2] by MCART_1:23;
         then reconsider f1 = x`2, g1 = x`1 as Morphism of C1 by ZFMISC_1:106;
         reconsider f2 = x`2, g2 = x`1 as Morphism of C2 by A66,A72,A78,
ZFMISC_1:106;
A79:      now assume [g1,f1] in S1;
           then consider F,F1,F2,t,t1 such that
A80:          f1 = [[F,F1],t] & g1 = [[F1,F2],t1] and
               (the Comp of C1).[g1,f1] = [[F,F2],t1`*`t] by A69;
             dom g2 = g2`1`1 by A73 .= [F1,F2]`1 by A80,MCART_1:7 .= F1 by
MCART_1:7
           .= [F,F1]`2 by MCART_1:7 .= f1`1`2 by A80,MCART_1:7 .= cod f2 by A73
;
          hence [g2,f2] in S2 by A74;
         end;
           now assume [g2,f2] in S2;
           then consider F,F1,F2,t,t1 such that
A81:          f2 = [[F,F1],t] & g2 = [[F1,F2],t1] and
               (the Comp of C2).[g2,f2] = [[F,F2],t1`*`t] by A75;
             dom g1 = g1`1`1 by A67 .= [F1,F2]`1 by A81,MCART_1:7 .= F1 by
MCART_1:7
           .= [F,F1]`2 by MCART_1:7 .= f2`1`2 by A81,MCART_1:7 .= cod f1 by A67
;
          hence [g1,f1] in S1 by A68;
         end;
        hence x in S1 iff x in S2 by A79,MCART_1:23;
       end;
       hence
A82:      dom the Comp of C1 = dom the Comp of C2 by SUBSET_1:8;
       let x be set;
       assume
A83:      x in dom the Comp of C1;
        then reconsider f=x`2, g=x`1 as Morphism of C1 by A77,MCART_1:10;
A84:      [g,f] = x by A77,A83,MCART_1:23;
        then consider F,F1,F2,t,t1 such that
A85:      f = [[F,F1],t] & g = [[F1,F2],t1] &
        (the Comp of C1).[g,f] = [[F,F2],t1`*`t] by A69,A83;
        consider F',F1',F2' being Functor of A,B,
           t' being natural_transformation of F',F1',
           t1' being natural_transformation of F1',F2' such that
A86:      f = [[F',F1'],t'] & g = [[F1',F2'],t1'] &
        (the Comp of C2).[g,f] = [[F',F2'],t1'`*`t'] by A66,A72,A75,A82,A83,A84
;
          [F,F1] = [F',F1'] & [F1,F2] = [F1',F2'] by A85,A86,ZFMISC_1:33;
      then F = F' & F1 = F1' & F2 = F2' & t = t' & t1 = t1'
                                                     by A85,A86,ZFMISC_1:33;
       hence (the Comp of C1).x = (the Comp of C2).x by A84,A85,A86;
      end;
     hence the Comp of C1 = the Comp of C2 by FUNCT_1:9;
     thus the Id of C1 = the Id of C2
      proof thus the Objects of C1 = the Objects of C2 by A65,A71;
       let a be Object of C1;
        reconsider F=a as Functor of A,B by A65,CAT_2:def 3;
        reconsider b=a as Object of C2 by A65,A71;
       thus (the Id of C1).a = id a by CAT_1:def 5 .= [[F,F],id F] by A70
              .= id b by A76 .= (the Id of C2).a by CAT_1:def 5;
      end;
    end;
   hence thesis by A65,A71;
  end;
end;

:: As immediate consequences of the definition we get

canceled 3;

theorem Th39:
 for f being Morphism of Functors(A,B) st f = [[F,F1],t] holds
   dom f = F & cod f = F1
 proof let f be Morphism of Functors(A,B) such that
A1: f = [[F,F1],t];
  thus dom f = f`1`1 by Def18 .= [F,F1]`1 by A1,MCART_1:7 .= F by MCART_1:7;
  thus cod f = f`1`2 by Def18 .= [F,F1]`2 by A1,MCART_1:7 .= F1 by MCART_1:7;
 end;

theorem
   for a,b being Object of Functors(A,B), f being Morphism of a,b
   st Hom(a,b) <> {}
  ex F,F1,t st a = F & b = F1 & f = [[F,F1],t]
 proof let a,b be Object of Functors(A,B), f be Morphism of a,b such that
A1: Hom(a,b) <> {};
     the Morphisms of Functors(A,B) = NatTrans(A,B) by Def18;
   then consider F1,F2 being Functor of A,B,
       t being natural_transformation of F1,F2 such that
A2:    f = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by Def15;
  take F1,F2,t;
  thus a = dom f by A1,CAT_1:23 .= F1 by A2,Th39;
  thus b = cod f by A1,CAT_1:23 .= F2 by A2,Th39;
  thus f = [[F1,F2],t] by A2;
 end;

theorem Th41:
 for t' being natural_transformation of F2,F3
 for f,g being Morphism of Functors(A,B) st
  f = [[F,F1],t] & g = [[F2,F3],t'] holds
  [g,f] in dom the Comp of Functors(A,B) iff F1 = F2
 proof let t' be natural_transformation of F2,F3;
  let f,g be Morphism of Functors(A,B);
  assume that
A1: f = [[F,F1],t] and
A2: g = [[F2,F3],t'];
  thus [g,f] in dom the Comp of Functors(A,B) implies F1 = F2
   proof assume [g,f] in dom the Comp of Functors(A,B);
     then consider F',F1',F2' being Functor of A,B,
       t' being natural_transformation of F',F1',
       t1' being natural_transformation of F1',F2' such that
A3:    f = [[F',F1'],t'] & g = [[F1',F2'],t1'] and
        (the Comp of Functors(A,B)).[g,f] = [[F',F2'],t1'`*`t'] by Def18;
    thus F1 = [F,F1]`2 by MCART_1:7 .= [[F,F1],t]`1`2 by MCART_1:7
     .= [F',F1']`2 by A1,A3,MCART_1:7 .= F1' by MCART_1:7 .= [F1',F2']`1
     by MCART_1:7 .= [[F1',F2'],t1']`1`1 by MCART_1:7 .= [F2,F3]`1
     by A2,A3,MCART_1:7 .= F2 by MCART_1:7;
   end;
     dom g = F2 & cod f = F1 by A1,A2,Th39;
  hence thesis by Def18;
 end;

theorem
   for f,g being Morphism of Functors(A,B) st
  f = [[F,F1],t] & g = [[F1,F2],t1]
  holds g*f = [[F,F2],t1`*`t]
 proof let f,g be Morphism of Functors(A,B);
  assume that
A1: f = [[F,F1],t] and
A2: g = [[F1,F2],t1];
A3: [g,f] in dom the Comp of Functors(A,B) by A1,A2,Th41;
   then consider F',F1',F2' being Functor of A,B,
     t' being natural_transformation of F',F1',
     t1' being natural_transformation of F1',F2' such that
A4:    f = [[F',F1'],t'] & g = [[F1',F2'],t1'] and
A5:    (the Comp of Functors(A,B)).[g,f] = [[F',F2'],t1'`*`t'] by Def18;
A6: [F',F1'] = [F,F1] & [F1',F2'] = [F1,F2] & t = t' & t1 = t1'
                          by A1,A2,A4,ZFMISC_1:33;
   then F = F' & F1 = F1' & F2 = F2' by ZFMISC_1:33;
  hence g*f = [[F,F2],t1`*`t] by A3,A5,A6,CAT_1:def 4;
 end;

begin ::  Discrete categories

definition let C be Category;
 attr C is discrete means
:Def19: for f being Morphism of C ex a being Object of C st f = id a;
end;

definition
 cluster discrete Category;
existence
  proof consider o,m;
   take 1Cat(o,m);
   let f be Morphism of 1Cat(o,m);
    consider a being Object of 1Cat(o,m);
   take a;
   thus f = m by CAT_1:35 .= id a by CAT_1:35;
  end;
end;

canceled;

theorem Th44:
 for A being discrete Category, a being Object of A holds Hom(a,a) = { id a}
  proof let A be discrete Category, a be Object of A;
A1: Hom(a,a) <> {} by CAT_1:56;
      now let g be Morphism of a,a;
      consider a2 being Object of A such that
A2:   g = id a2 by Def19;
        a = dom g by A1,CAT_1:23 .= a2 by A2,CAT_1:44;
     hence id a = g by A2;
    end;
   hence Hom(a,a) = { id a} by A1,CAT_1:26;
  end;

theorem Th45:
 A is discrete iff
  (for a being Object of A
   ex B being finite set st B = Hom(a,a) & card B = 1) &
  for a,b being Object of A st a <> b holds Hom(a,b) = {}
 proof
  thus A is discrete implies
   (for a being Object of A
    ex B being finite set st B = Hom(a,a) & card B = 1) &
   for a,b being Object of A st a <> b holds Hom(a,b) = {}
   proof assume
A1:   A is discrete;
    hereby let a be Object of A;
A2:   Hom(a,a) = { id a } by A1,Th44;
    then reconsider B = Hom(a,a) as finite set;
    take B;
    thus B = Hom(a,a);
    thus card B = 1 by A2,CARD_1:79;
    end;
    let a,b be Object of A;
    assume
A3:  a <> b;
    assume
A4:   Hom(a,b) <> {};
     consider m being Element of Hom(a,b);
     reconsider m as Morphism of A by A4,TARSKI:def 3;
     consider c being Object of A such that
A5:   m = id c by A1,Def19;
       id c in Hom(c,c) by CAT_1:55;
     then Hom(c,c) meets Hom(a,b) by A4,A5,XBOOLE_0:3;
     then c = a & c = b by Th17;
    hence contradiction by A3;
   end;
  assume
A6: (for a being Object of A
    ex B being finite set st B = Hom(a,a) & card B = 1) &
   for a,b being Object of A st a <> b holds Hom(a,b) = {};
  let f be Morphism of A;
  take dom f;
  consider B being finite set such that
A7:  B = Hom(dom f,dom f) & card B = 1 by A6;
     Hom(dom f, cod f) <> {} by CAT_1:19;
then A8: dom f = cod f by A6;
   consider x being set such that
A9: Hom(dom f,dom f) = {x} by A7,CARD_2:60;
     f in Hom(dom f, dom f) & id dom f in Hom(dom f, dom f) by A8,CAT_1:18,55;
   then f = x & id dom f = x by A9,TARSKI:def 1;
  hence f = id dom f;
 end;

theorem Th46:
 1Cat(o,m) is discrete
  proof let f be Morphism of 1Cat(o,m);
    consider a being Object of 1Cat(o,m);
      f = m by CAT_1:35 .= id a by CAT_1:35;
   hence thesis;
  end;

theorem
   for A being discrete Category, C being Subcategory of A holds C is discrete
  proof let A be discrete Category, C be Subcategory of A;
   let f be Morphism of C;
    reconsider f'=f as Morphism of A by CAT_2:14;
    consider a' being Object of A such that
A1:   f' = id a' by Def19;
   take dom f;
      dom f' = a' by A1,CAT_1:44; then dom f = a' by CAT_2:15;
   hence thesis by A1,CAT_2:def 4;
  end;

theorem
   A is discrete & B is discrete implies [:A,B:] is discrete
  proof assume that
A1: A is discrete and
A2: B is discrete;
   let f be Morphism of [:A,B:];
    consider f1 being (Morphism of A), f2 being Morphism of B such that
A3:   f = [f1,f2] by CAT_2:37;
    consider a being Object of A such that
A4:  f1 = id a by A1,Def19;
    consider b being Object of B such that
A5:  f2 = id b by A2,Def19;
   take [a,b];
   thus f = id [a,b] by A3,A4,A5,CAT_2:41;
  end;

theorem Th49:
for A being discrete Category, B being Category, F1,F2 being Functor of B,A
  st F1 is_transformable_to F2 holds F1 = F2
  proof let A be discrete Category, B be Category, F1,F2 be Functor of B,A;
   assume
A1:  F1 is_transformable_to F2;
      now let m be Morphism of B;
A2:   m in Hom(dom m,cod m) by CAT_1:18;
        Hom(F1.dom m,F2.dom m) <> {} by A1,Def2;
then A3:     F1.dom m = F2.dom m by Th45;
A4:   F1.m in Hom(F1.dom m, F1.cod m) by A2,CAT_1:123;
        Hom(F1.dom m, F1.cod m) <> {} by A2,CAT_1:123;
      then F1.dom m = F1.cod m by Th45;
      then Hom(F1.dom m, F1.cod m) = { id(F1.dom m) } by Th44;
then A5:    F1.m = id(F1.dom m) by A4,TARSKI:def 1;
A6:   F2.m in Hom(F2.dom m,F2.cod m) by A2,CAT_1:123;
        Hom(F2.dom m, F2.cod m) <> {} by A2,CAT_1:123;
      then F2.dom m = F2.cod m by Th45;
      then Hom(F2.dom m, F2.cod m) = { id(F2.dom m) } by Th44;
     hence F1.m = F2.m by A3,A5,A6,TARSKI:def 1;
    end;
   hence F1 = F2 by FUNCT_2:113;
  end;

theorem Th50:
for A being discrete Category, B being Category, F being Functor of B,A,
   t being transformation of F,F holds t = id F
  proof let A be discrete Category, B be Category, F be Functor of B,A,
    t be transformation of F,F;
      now let a be Object of B;
        t.a in Hom(F.a, F.a) & Hom(F.a,F.a) = { id(F.a) } by Th3,Th44;
     hence t.a = id(F.a) by TARSKI:def 1 .= (id F).a by Th21;
    end;
   hence t = id F by Th20;
  end;

theorem
   A is discrete implies Functors(B,A) is discrete
  proof assume
A1:  A is discrete;
   let f be Morphism of Functors(B,A);
      f in the Morphisms of Functors(B,A);
    then f in NatTrans(B,A) by Def18; then consider F1,F2 being Functor of B,A
,
      t being natural_transformation of F1,F2 such that
A2:  f = [[F1,F2],t] & F1 is_naturally_transformable_to F2 by Def16;
      F1 in Funct(B,A) by CAT_2:def 2;
    then reconsider a = F1 as Object of Functors(B,A) by Def18;
   take a;
      F1 is_transformable_to F2 by A2,Def7;
then A3: F1 = F2 by A1,Th49;
    then t = id F1 by A1,Th50;
   hence f = id a by A2,A3,Def18;
  end;

definition let C be Category;
 cluster strict discrete Subcategory of C;
 existence
  proof consider c being Object of C;
    reconsider A =1Cat(c,id c) as Subcategory of C by Th7;
   take A; thus thesis by Th46;
  end;
end;

definition let C;
 func IdCat(C) -> strict discrete Subcategory of C means
:Def20: the Objects of it = the Objects of C &
  the Morphisms of it = { id a where a is Object of C: not contradiction};
 existence
  proof
    deffunc F(Object of C) = id $1;
    defpred P[Object of C] means not contradiction;
    defpred Q[Object of C] means F($1) in the Morphisms of C;
    set M = { F(a) where a is Object of C: P[a]};
    set N = { F(a) where a is Object of C: Q[a]};
A1:  for a being Object of C holds Q[a] iff P[a];
A2:  N = M from Fraenkel6'(A1);
    set N' = { F(a) where a is Object of C: F(a) in the Morphisms of C & P[a]};
A3: N' c= the Morphisms of C from FrSet_1;
    defpred R[Object of C] means F($1) in the Morphisms of C & P[$1];
    set N'' = { F(a) where a is Object of C: R[a]};
A4: for a being Object of C holds Q[a] iff R[a];
    N = N'' from Fraenkel6'(A4);  then
A5:    N c= the Morphisms of C by A3;
     consider a being Object of C;
       id a in M;
    then reconsider M as non empty Subset of the Morphisms of C by A2,A5;
A6:  (the Comp of C)|([:M,M:] qua set) is
     PartFunc of [:M,M qua non empty set:], the Morphisms of C by PARTFUN1:43;
      rng ((the Comp of C)|([:M,M:] qua set)) c= M
     proof let x be set;
      assume x in rng ((the Comp of C)|([:M,M:] qua set));
       then consider y being set such that
A7:     y in dom ((the Comp of C)|([:M,M:] qua set)) and
A8:     x = ((the Comp of C)|([:M,M:] qua set)).y by FUNCT_1:def 5;
A9:     y in dom (the Comp of C) /\ [:M,M:] by A7,RELAT_1:90;
       then y in [:M,M:] by XBOOLE_0:def 3;
       then consider y1,y2 being set such that
A10:     y1 in M & y2 in M and
A11:     y = [y1,y2] by ZFMISC_1:103;
       consider a1 being Object of C such that
A12:     y1 = id a1 by A10;
       consider a2 being Object of C such that
A13:     y2 = id a2 by A10;
A14:    y in dom (the Comp of C) by A9,XBOOLE_0:def 3;
A15:    Hom(a1,a1) <> {} by CAT_1:56;
A16:    a1 = dom id a1 by CAT_1:44 .= cod id a2 by A11,A12,A13,A14,CAT_1:40
        .= a2 by CAT_1:44;
         id a1 = (id a1)*(id a1) by CAT_1:59
         .= (id a1)*(id a2) by A15,A16,CAT_1:def 13
         .= (the Comp of C).[id a1, id a2] by A11,A12,A13,A14,CAT_1:def 4
         .= x by A8,A9,A11,A12,A13,FUNCT_1:71;
      hence x in M;
     end;
    then reconsider COMP = (the Comp of C)|([:M,M:] qua set) as
      PartFunc of [:M,M qua non empty set:],M by A6,PARTFUN1:29;
A17:  dom the Id of C = the Objects of C by FUNCT_2:def 1;
      rng the Id of C c= M
     proof let x be set;
      assume x in rng the Id of C;
       then consider y being set such that
A18:     y in dom the Id of C and
A19:     x = (the Id of C).y by FUNCT_1:def 5;
       reconsider y as Object of C by A18,FUNCT_2:def 1;
         x = id y by A19,CAT_1:def 5;
      hence thesis;
     end;
    then reconsider ID = the Id of C as Function of the Objects of C, M
     by A17,FUNCT_2:4;
      dom the Id of C = the Objects of C by FUNCT_2:def 1;
then A20:  (the Id of C)|the Objects of C = the Id of C by RELAT_1:97;
      the Objects of C c= the Objects of C;
then reconsider A = CatStr(#the Objects of C,M,((the Dom of C)|M),
((the Cod of C)|M),COMP,ID#)
      as Subcategory of C by A20,Th9;
       now let f be Morphism of A;
         f in M; then consider a being Object of C such that
A21:     f = id a;
       reconsider a as Object of A;
      take a;
      thus f = (the Id of C).a by A21,CAT_1:def 5 .= id a by CAT_1:def 5;
     end;
    then reconsider A as strict discrete Subcategory of C by Def19;
   take A;
   thus thesis;
  end;
 uniqueness
  proof let It1,It2 be strict discrete Subcategory of C such that
A22: the Objects of It1 = the Objects of C &
    the Morphisms of It1 = { id a where a is Object of C: not contradiction}
   and
A23: the Objects of It2 = the Objects of C &
  the Morphisms of It2 = { id a where a is Object of C: not contradiction};
  set M = the Morphisms of It1;
A24: the Dom of It1 = (the Dom of C)|M & the Dom of It2 = (the Dom of C)|M
    by A22,A23,Th8;
A25: the Cod of It1 = (the Cod of C)|M & the Cod of It2 = (the Cod of C)|M
    by A22,A23,Th8;
A26: the Comp of It1 = (the Comp of C)|[:M,M:]
  & the Comp of It2 = (the Comp of C)|[:M,M:] by A22,A23,Th8;
    the Id of It1 = (the Id of C)| the Objects of It1 &
  the Id of It2 = (the Id of C)| the Objects of It2 by Th8;
   hence thesis by A22,A23,A24,A25,A26;
  end;
end;

theorem Th52:
 for C being strict Category holds C is discrete implies IdCat(C) = C
  proof let C be strict Category;
   assume
A1:  C is discrete;
     the Morphisms of C c= { id a where a is Object of C: not contradiction}
    proof let x be set;
     assume x in the Morphisms of C;
      then ex a being Object of C st x = id a by A1,Def19;
     hence thesis;
    end;
then A2:  the Morphisms of C c= the Morphisms of IdCat(C) by Def20;
      the Morphisms of IdCat(C) c= the Morphisms of C by CAT_2:13;
then A3:  the Morphisms of IdCat(C) = the Morphisms of C by A2,XBOOLE_0:def 10;
      the Objects of IdCat(C) = the Objects of C by Def20;
   hence IdCat(C) = C by A3,Th10;
  end;

theorem
   IdCat(IdCat(C)) = IdCat(C) by Th52;

theorem
   IdCat(1Cat(o,m)) = 1Cat(o,m)
  proof 1Cat(o,m) is discrete by Th46; hence thesis by Th52; end;

theorem
   IdCat([:A,B:]) = [:IdCat(A), IdCat(B):]
 proof
     now
       the Objects of IdCat A = the Objects of A &
     the Objects of IdCat B = the Objects of B by Def20;
    hence
A1:  [:the Objects of IdCat A,the Objects of IdCat B:]
          = the Objects of [:A,B:] by CAT_2:33
         .= the Objects of IdCat [:A,B:] by Def20;
     set AB = { id c where c is Object of [:A,B:]: not contradiction},
         MA = { id a where a is Object of A: not contradiction},
         MB = { id b where b is Object of B: not contradiction};
A2:   AB = [:MA,MB:]
      proof
       thus AB c= [:MA,MB:]
        proof let x be set;
         assume x in AB;
          then consider c being Object of [:A,B:] such that
A3:        x = id c;
          consider c1 being Object of A, c2 being Object of B such that
A4:        c = [c1,c2] by CAT_2:35;
A5:        id c = [id c1, id c2] by A4,CAT_2:41;
            id c1 in MA & id c2 in MB;
         hence x in [:MA,MB:] by A3,A5,ZFMISC_1:106;
        end;
       let x be set;
       assume x in [:MA,MB:];
        then consider x1,x2 being set such that
A6:      x1 in MA & x2 in MB and
A7:      x = [x1,x2] by ZFMISC_1:103;
        consider a being Object of A such that
A8:      x1 = id a by A6;
        consider b being Object of B such that
A9:      x2 = id b by A6;
          id [a,b] = [id a, id b] by CAT_2:41;
       hence x in AB by A7,A8,A9;
      end;
       the Morphisms of IdCat A =
       { id a where a is Object of A: not contradiction} &
     the Morphisms of IdCat B =
       { id b where b is Object of B: not contradiction} by Def20;
    hence
A10:  the Morphisms of IdCat [:A,B:]
          = [:the Morphisms of IdCat A,the Morphisms of IdCat B:] by A2,Def20;
     reconsider MA = the Morphisms of IdCat A as
      non empty Subset of the Morphisms of A by CAT_2:13;
     reconsider MB = the Morphisms of IdCat B as
      non empty Subset of the Morphisms of B by CAT_2:13;
       the Dom of IdCat A = (the Dom of A)|the Morphisms of IdCat A &
     the Dom of IdCat B = (the Dom of B)|the Morphisms of IdCat B by Th8;
    hence [:the Dom of IdCat A,the Dom of IdCat B:]
          = [:the Dom of A,the Dom of B:]|[:MA,MB:] by Th1
         .= (the Dom of [:A,B:])|the Morphisms of IdCat [:A,B:] by A10,CAT_2:33
         .= the Dom of IdCat [:A,B:] by Th8;
       the Cod of IdCat A = (the Cod of A)|the Morphisms of IdCat A &
     the Cod of IdCat B = (the Cod of B)|the Morphisms of IdCat B by Th8;
    hence [:the Cod of IdCat A,the Cod of IdCat B:]
          = [:the Cod of A,the Cod of B:]|[:MA,MB:] by Th1
         .= (the Cod of [:A,B:])|the Morphisms of IdCat [:A,B:] by A10,CAT_2:33
         .= the Cod of IdCat [:A,B:] by Th8;
A11:  |:the Comp of A,the Comp of B:| |([:[:MA,MB:],[:MA,MB:]:] qua set)
          = (the Comp of [:A,B:])|
            ([:the Morphisms of IdCat [:A,B:] ,the Morphisms of IdCat [:A,B:]:]
                qua set) by A10,CAT_2:33
         .= the Comp of IdCat [:A,B:] by Th8;
    the Comp of IdCat A = (the Comp of A)|([:MA,MA:] qua set) &
     the Comp of IdCat B = (the Comp of B)|([:MB,MB:] qua set) by Th8;
    hence |:the Comp of IdCat A,the Comp of IdCat B:|
          = the Comp of IdCat [:A,B:] by A11,Th2;
     reconsider OA = the Objects of IdCat A as
      non empty Subset of the Objects of A by CAT_2:def 4;
     reconsider OB = the Objects of IdCat B as
      non empty Subset of the Objects of B by CAT_2:def 4;
       the Id of IdCat A = (the Id of A)|the Objects of IdCat A &
     the Id of IdCat B = (the Id of B)|the Objects of IdCat B by Th8;
    hence [:the Id of IdCat A,the Id of IdCat B:]
          = [:the Id of A,the Id of B:]|[:OA,OB:] by Th1
         .= (the Id of [:A,B:])|the Objects of IdCat [:A,B:] by A1,CAT_2:33
         .= the Id of IdCat [:A,B:] by Th8;
   end;
  hence IdCat [:A,B:] =[:IdCat A, IdCat B:] by CAT_2:def 7;
 end;

Back to top