functor3.miz



    begin

    registration

      cluster transitive associative with_units strict for non empty AltCatStr;

      existence

      proof

        set A = the transitive associative with_units strict non empty AltCatStr;

        take A;

        thus thesis;

      end;

    end

    registration

      let A be non empty transitive AltCatStr, B be with_units non empty AltCatStr;

      cluster strict comp-preserving comp-reversing Covariant Contravariant feasible for FunctorStr over A, B;

      existence

      proof

        set o = the Object of B;

        take (A --> ( idm o));

        thus thesis;

      end;

    end

    registration

      let A be with_units transitive non empty AltCatStr, B be with_units non empty AltCatStr;

      cluster strict comp-preserving comp-reversing Covariant Contravariant feasible id-preserving for FunctorStr over A, B;

      existence

      proof

        set o = the Object of B;

        take (A --> ( idm o));

        thus thesis;

      end;

    end

    registration

      let A be with_units transitive non empty AltCatStr, B be with_units non empty AltCatStr;

      cluster strict feasible covariant contravariant for Functor of A, B;

      existence

      proof

        set o = the Object of B;

        set I = (A --> ( idm o));

        reconsider I as Functor of A, B by FUNCTOR0:def 25;

        take I;

        thus I is strict feasible;

        thus I is covariant;

        thus thesis;

      end;

    end

    theorem :: FUNCTOR3:1

    for C be category, o1,o2,o3,o4 be Object of C holds for a be Morphism of o1, o2, b be Morphism of o2, o3 holds for c be Morphism of o1, o4, d be Morphism of o4, o3 st (b * a) = (d * c) & (a * (a " )) = ( idm o2) & ((d " ) * d) = ( idm o4) & <^o1, o2^> <> {} & <^o2, o1^> <> {} & <^o2, o3^> <> {} & <^o3, o4^> <> {} & <^o4, o3^> <> {} holds (c * (a " )) = ((d " ) * b)

    proof

      let C be category, o1,o2,o3,o4 be Object of C, a be Morphism of o1, o2, b be Morphism of o2, o3, c be Morphism of o1, o4, d be Morphism of o4, o3 such that

       A1: (b * a) = (d * c) and

       A2: (a * (a " )) = ( idm o2) and

       A3: ((d " ) * d) = ( idm o4) and

       A4: <^o1, o2^> <> {} and

       A5: <^o2, o1^> <> {} and

       A6: <^o2, o3^> <> {} and

       A7: <^o3, o4^> <> {} and

       A8: <^o4, o3^> <> {} ;

      

       A9: <^o2, o4^> <> {} by A6, A7, ALTCAT_1:def 2;

       <^o1, o3^> <> {} by A4, A6, ALTCAT_1:def 2;

      then

       A10: <^o1, o4^> <> {} by A7, ALTCAT_1:def 2;

      b = (b * ( idm o2)) by A6, ALTCAT_1:def 17

      .= ((b * a) * (a " )) by A2, A4, A5, A6, ALTCAT_1: 21;

      

      hence ((d " ) * b) = ((d " ) * (d * (c * (a " )))) by A1, A5, A8, A10, ALTCAT_1: 21

      .= (((d " ) * d) * (c * (a " ))) by A7, A8, A9, ALTCAT_1: 21

      .= (c * (a " )) by A3, A9, ALTCAT_1: 20;

    end;

    theorem :: FUNCTOR3:2

    for A be non empty transitive AltCatStr holds for B,C be with_units non empty AltCatStr holds for F be feasible Covariant FunctorStr over A, B holds for G be FunctorStr over B, C, o,o1 be Object of A holds ( Morph-Map ((G * F),o,o1)) = (( Morph-Map (G,(F . o),(F . o1))) * ( Morph-Map (F,o,o1)))

    proof

      let A be non empty transitive AltCatStr, B,C be with_units non empty AltCatStr, F be feasible Covariant FunctorStr over A, B, G be FunctorStr over B, C, o,o1 be Object of A;

      ( dom the MorphMap of G) = [:the carrier of B, the carrier of B:] & ( rng the ObjectMap of F) c= [:the carrier of B, the carrier of B:] by PARTFUN1:def 2;

      

      then ( dom (the MorphMap of G * the ObjectMap of F)) = ( dom the ObjectMap of F) by RELAT_1: 27

      .= [:the carrier of A, the carrier of A:] by FUNCT_2:def 1;

      then

       A1: [o, o1] in ( dom (the MorphMap of G * the ObjectMap of F)) by ZFMISC_1: 87;

      

      then

       A2: ((the MorphMap of G * the ObjectMap of F) . [o, o1]) = (the MorphMap of G . (the ObjectMap of F . (o,o1))) by FUNCT_1: 12

      .= ( Morph-Map (G,(F . o),(F . o1))) by FUNCTOR0: 22;

      ( dom the MorphMap of F) = [:the carrier of A, the carrier of A:] by PARTFUN1:def 2;

      then [o, o1] in ( dom the MorphMap of F) by ZFMISC_1: 87;

      then [o, o1] in (( dom (the MorphMap of G * the ObjectMap of F)) /\ ( dom the MorphMap of F)) by A1, XBOOLE_0:def 4;

      then

       A3: [o, o1] in ( dom ((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F)) by PBOOLE:def 19;

      

      thus ( Morph-Map ((G * F),o,o1)) = (((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F) . (o,o1)) by FUNCTOR0:def 36

      .= (( Morph-Map (G,(F . o),(F . o1))) * ( Morph-Map (F,o,o1))) by A3, A2, PBOOLE:def 19;

    end;

    theorem :: FUNCTOR3:3

    for A be non empty transitive AltCatStr holds for B,C be with_units non empty AltCatStr holds for F be feasible Contravariant FunctorStr over A, B holds for G be FunctorStr over B, C, o,o1 be Object of A holds ( Morph-Map ((G * F),o,o1)) = (( Morph-Map (G,(F . o1),(F . o))) * ( Morph-Map (F,o,o1)))

    proof

      let A be non empty transitive AltCatStr, B,C be with_units non empty AltCatStr, F be feasible Contravariant FunctorStr over A, B, G be FunctorStr over B, C, o,o1 be Object of A;

      ( dom the MorphMap of G) = [:the carrier of B, the carrier of B:] & ( rng the ObjectMap of F) c= [:the carrier of B, the carrier of B:] by PARTFUN1:def 2;

      

      then ( dom (the MorphMap of G * the ObjectMap of F)) = ( dom the ObjectMap of F) by RELAT_1: 27

      .= [:the carrier of A, the carrier of A:] by FUNCT_2:def 1;

      then

       A1: [o, o1] in ( dom (the MorphMap of G * the ObjectMap of F)) by ZFMISC_1: 87;

      

      then

       A2: ((the MorphMap of G * the ObjectMap of F) . [o, o1]) = (the MorphMap of G . (the ObjectMap of F . (o,o1))) by FUNCT_1: 12

      .= ( Morph-Map (G,(F . o1),(F . o))) by FUNCTOR0: 23;

      ( dom the MorphMap of F) = [:the carrier of A, the carrier of A:] by PARTFUN1:def 2;

      then [o, o1] in ( dom the MorphMap of F) by ZFMISC_1: 87;

      then [o, o1] in (( dom (the MorphMap of G * the ObjectMap of F)) /\ ( dom the MorphMap of F)) by A1, XBOOLE_0:def 4;

      then

       A3: [o, o1] in ( dom ((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F)) by PBOOLE:def 19;

      

      thus ( Morph-Map ((G * F),o,o1)) = (((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F) . (o,o1)) by FUNCTOR0:def 36

      .= (( Morph-Map (G,(F . o1),(F . o))) * ( Morph-Map (F,o,o1))) by A3, A2, PBOOLE:def 19;

    end;

    

     Lm1: for I1 be set, I2 be non empty set, f be Function of I1, I2 holds for A be ManySortedSet of I1, B be ManySortedSet of I2 holds for M be ManySortedFunction of A, (B * f) holds ((( id B) * f) ** M) = M

    proof

      let I1 be set, I2 be non empty set, f be Function of I1, I2;

      let A be ManySortedSet of I1, B be ManySortedSet of I2;

      let M be ManySortedFunction of A, (B * f);

       A1:

      now

        let i be object;

        assume

         A2: i in I1;

        hence

         A3: ((B * f) . i) = (B . (f . i)) by FUNCT_2: 15;

        ((( id B) * f) . i) = (( id B) . (f . i)) & (f . i) in I2 by A2, FUNCT_2: 5, FUNCT_2: 15;

        hence ((( id B) * f) . i) = ( id ((B * f) . i)) by A3, MSUALG_3:def 1;

      end;

      now

        

         A4: (( id B) * f) is ManySortedFunction of (B * f), (B * f)

        proof

          let i be object;

          assume i in I1;

          then ((( id B) * f) . i) = ( id ((B * f) . i)) by A1;

          hence thesis;

        end;

        let i be object;

        assume

         A5: i in I1;

        then

         A6: (M . i) is Function of (A . i), ((B * f) . i) by PBOOLE:def 15;

        ((( id B) * f) . i) = (( id B) . (f . i)) & (f . i) in I2 by A5, FUNCT_2: 5, FUNCT_2: 15;

        then

         A7: ((( id B) * f) . i) = ( id (B . (f . i))) by MSUALG_3:def 1;

        ((B * f) . i) = (B . (f . i)) by A1, A5;

        

        hence (((( id B) * f) ** M) . i) = (( id ((B * f) . i)) * (M . i)) by A5, A4, A7, MSUALG_3: 2

        .= (M . i) by A6, FUNCT_2: 17;

      end;

      hence thesis;

    end;

    theorem :: FUNCTOR3:4

    for A be non empty transitive AltCatStr holds for B be with_units non empty AltCatStr holds for F be feasible FunctorStr over A, B holds (( id B) * F) = the FunctorStr of F

    proof

      let A be non empty transitive AltCatStr, B be with_units non empty AltCatStr, F be feasible FunctorStr over A, B;

      

       A1: the ObjectMap of (( id B) * F) = (the ObjectMap of ( id B) * the ObjectMap of F) by FUNCTOR0:def 36

      .= (( id [:the carrier of B, the carrier of B:]) * the ObjectMap of F) by FUNCTOR0:def 29

      .= the ObjectMap of F by FUNCT_2: 17;

      

       A2: the MorphMap of F is ManySortedFunction of the Arrows of A, (the Arrows of B * the ObjectMap of F) by FUNCTOR0:def 4;

      the MorphMap of (( id B) * F) = ((the MorphMap of ( id B) * the ObjectMap of F) ** the MorphMap of F) by FUNCTOR0:def 36

      .= ((( id the Arrows of B) * the ObjectMap of F) ** the MorphMap of F) by FUNCTOR0:def 29

      .= the MorphMap of F by A2, Lm1;

      hence thesis by A1;

    end;

    theorem :: FUNCTOR3:5

    for A be with_units transitive non empty AltCatStr holds for B be with_units non empty AltCatStr holds for F be feasible FunctorStr over A, B holds (F * ( id A)) = the FunctorStr of F

    proof

      let A be with_units transitive non empty AltCatStr, B be with_units non empty AltCatStr, F be feasible FunctorStr over A, B;

      

       A1: the ObjectMap of (F * ( id A)) = (the ObjectMap of F * the ObjectMap of ( id A)) by FUNCTOR0:def 36

      .= (the ObjectMap of F * ( id [:the carrier of A, the carrier of A:])) by FUNCTOR0:def 29

      .= the ObjectMap of F by FUNCT_2: 17;

      

       A2: the MorphMap of F is ManySortedFunction of the Arrows of A, (the Arrows of B * the ObjectMap of F) by FUNCTOR0:def 4;

      the MorphMap of (F * ( id A)) = ((the MorphMap of F * the ObjectMap of ( id A)) ** the MorphMap of ( id A)) by FUNCTOR0:def 36

      .= ((the MorphMap of F * ( id [:the carrier of A, the carrier of A:])) ** the MorphMap of ( id A)) by FUNCTOR0:def 29

      .= (the MorphMap of F ** the MorphMap of ( id A)) by FUNCTOR0: 2

      .= (the MorphMap of F ** ( id the Arrows of A)) by FUNCTOR0:def 29

      .= the MorphMap of F by A2, MSUALG_3: 3;

      hence thesis by A1;

    end;

    reserve A for non empty AltCatStr,

B,C for non empty reflexive AltCatStr,

F for feasible Covariant FunctorStr over A, B,

G for feasible Covariant FunctorStr over B, C,

M for feasible Contravariant FunctorStr over A, B,

N for feasible Contravariant FunctorStr over B, C,

o1,o2 for Object of A,

m for Morphism of o1, o2;

    theorem :: FUNCTOR3:6

    

     Th6: <^o1, o2^> <> {} implies ((G * F) . m) = (G . (F . m))

    proof

      set I = the carrier of A;

      reconsider s = (the MorphMap of F . (o1,o2)) as Function;

      reconsider r = (((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F) . (o1,o2)) as Function;

      reconsider t = ((the MorphMap of G * the ObjectMap of F) . (o1,o2)) as Function;

      

       A1: ( dom ((the MorphMap of G * the ObjectMap of F) ** the MorphMap of F)) = (( dom (the MorphMap of G * the ObjectMap of F)) /\ ( dom the MorphMap of F)) by PBOOLE:def 19

      .= ( [:I, I:] /\ ( dom the MorphMap of F)) by PARTFUN1:def 2

      .= ( [:I, I:] /\ [:I, I:]) by PARTFUN1:def 2

      .= [:I, I:];

      

       A2: ( dom the ObjectMap of F) = [:I, I:] by FUNCT_2:def 1;

      

       A3: [o1, o2] in [:I, I:] by ZFMISC_1:def 2;

      assume

       A4: <^o1, o2^> <> {} ;

      then

       A5: <^(F . o1), (F . o2)^> <> {} by FUNCTOR0:def 18;

      then

       A6: ( dom ( Morph-Map (F,o1,o2))) = <^o1, o2^> by FUNCT_2:def 1;

      

       A7: <^(G . (F . o1)), (G . (F . o2))^> <> {} by A5, FUNCTOR0:def 18;

      ((G * F) . o1) = (G . (F . o1)) & ((G * F) . o2) = (G . (F . o2)) by FUNCTOR0: 33;

      

      hence ((G * F) . m) = (( Morph-Map ((G * F),o1,o2)) . m) by A4, A7, FUNCTOR0:def 15

      .= (r . m) by FUNCTOR0:def 36

      .= ((t * s) . m) by A1, A3, PBOOLE:def 19

      .= (t . (( Morph-Map (F,o1,o2)) . m)) by A4, A6, FUNCT_1: 13

      .= (t . (F . m)) by A4, A5, FUNCTOR0:def 15

      .= ((the MorphMap of G . (the ObjectMap of F . (o1,o2))) . (F . m)) by A2, A3, FUNCT_1: 13

      .= (( Morph-Map (G,(F . o1),(F . o2))) . (F . m)) by FUNCTOR0: 22

      .= (G . (F . m)) by A5, A7, FUNCTOR0:def 15;

    end;

    theorem :: FUNCTOR3:7

    

     Th7: <^o1, o2^> <> {} implies ((N * M) . m) = (N . (M . m))

    proof

      set I = the carrier of A;

      reconsider s = (the MorphMap of M . (o1,o2)) as Function;

      reconsider r = (((the MorphMap of N * the ObjectMap of M) ** the MorphMap of M) . (o1,o2)) as Function;

      reconsider t = ((the MorphMap of N * the ObjectMap of M) . (o1,o2)) as Function;

      

       A1: ( dom ((the MorphMap of N * the ObjectMap of M) ** the MorphMap of M)) = (( dom (the MorphMap of N * the ObjectMap of M)) /\ ( dom the MorphMap of M)) by PBOOLE:def 19

      .= ( [:I, I:] /\ ( dom the MorphMap of M)) by PARTFUN1:def 2

      .= ( [:I, I:] /\ [:I, I:]) by PARTFUN1:def 2

      .= [:I, I:];

      

       A2: ( dom the ObjectMap of M) = [:I, I:] by FUNCT_2:def 1;

      

       A3: [o1, o2] in [:I, I:] by ZFMISC_1:def 2;

      assume

       A4: <^o1, o2^> <> {} ;

      then

       A5: <^(M . o2), (M . o1)^> <> {} by FUNCTOR0:def 19;

      then

       A6: ( dom ( Morph-Map (M,o1,o2))) = <^o1, o2^> by FUNCT_2:def 1;

      

       A7: <^(N . (M . o1)), (N . (M . o2))^> <> {} by A5, FUNCTOR0:def 19;

      ((N * M) . o1) = (N . (M . o1)) & ((N * M) . o2) = (N . (M . o2)) by FUNCTOR0: 33;

      

      hence ((N * M) . m) = (( Morph-Map ((N * M),o1,o2)) . m) by A4, A7, FUNCTOR0:def 15

      .= (r . m) by FUNCTOR0:def 36

      .= ((t * s) . m) by A1, A3, PBOOLE:def 19

      .= (t . (( Morph-Map (M,o1,o2)) . m)) by A4, A6, FUNCT_1: 13

      .= (t . (M . m)) by A4, A5, FUNCTOR0:def 16

      .= ((the MorphMap of N . (the ObjectMap of M . (o1,o2))) . (M . m)) by A2, A3, FUNCT_1: 13

      .= (( Morph-Map (N,(M . o2),(M . o1))) . (M . m)) by FUNCTOR0: 23

      .= (N . (M . m)) by A5, A7, FUNCTOR0:def 16;

    end;

    theorem :: FUNCTOR3:8

    

     Th8: <^o1, o2^> <> {} implies ((N * F) . m) = (N . (F . m))

    proof

      set I = the carrier of A;

      reconsider s = (the MorphMap of F . (o1,o2)) as Function;

      reconsider r = (((the MorphMap of N * the ObjectMap of F) ** the MorphMap of F) . (o1,o2)) as Function;

      reconsider t = ((the MorphMap of N * the ObjectMap of F) . (o1,o2)) as Function;

      

       A1: ( dom ((the MorphMap of N * the ObjectMap of F) ** the MorphMap of F)) = (( dom (the MorphMap of N * the ObjectMap of F)) /\ ( dom the MorphMap of F)) by PBOOLE:def 19

      .= ( [:I, I:] /\ ( dom the MorphMap of F)) by PARTFUN1:def 2

      .= ( [:I, I:] /\ [:I, I:]) by PARTFUN1:def 2

      .= [:I, I:];

      

       A2: ( dom the ObjectMap of F) = [:I, I:] by FUNCT_2:def 1;

      

       A3: [o1, o2] in [:I, I:] by ZFMISC_1:def 2;

      assume

       A4: <^o1, o2^> <> {} ;

      then

       A5: <^(F . o1), (F . o2)^> <> {} by FUNCTOR0:def 18;

      then

       A6: ( dom ( Morph-Map (F,o1,o2))) = <^o1, o2^> by FUNCT_2:def 1;

      

       A7: <^(N . (F . o2)), (N . (F . o1))^> <> {} by A5, FUNCTOR0:def 19;

      ((N * F) . o1) = (N . (F . o1)) & ((N * F) . o2) = (N . (F . o2)) by FUNCTOR0: 33;

      

      hence ((N * F) . m) = (( Morph-Map ((N * F),o1,o2)) . m) by A4, A7, FUNCTOR0:def 16

      .= (r . m) by FUNCTOR0:def 36

      .= ((t * s) . m) by A1, A3, PBOOLE:def 19

      .= (t . (( Morph-Map (F,o1,o2)) . m)) by A4, A6, FUNCT_1: 13

      .= (t . (F . m)) by A4, A5, FUNCTOR0:def 15

      .= ((the MorphMap of N . (the ObjectMap of F . (o1,o2))) . (F . m)) by A2, A3, FUNCT_1: 13

      .= (( Morph-Map (N,(F . o1),(F . o2))) . (F . m)) by FUNCTOR0: 22

      .= (N . (F . m)) by A5, A7, FUNCTOR0:def 16;

    end;

    theorem :: FUNCTOR3:9

    

     Th9: <^o1, o2^> <> {} implies ((G * M) . m) = (G . (M . m))

    proof

      set I = the carrier of A;

      reconsider s = (the MorphMap of M . (o1,o2)) as Function;

      reconsider r = (((the MorphMap of G * the ObjectMap of M) ** the MorphMap of M) . (o1,o2)) as Function;

      reconsider t = ((the MorphMap of G * the ObjectMap of M) . (o1,o2)) as Function;

      

       A1: ( dom ((the MorphMap of G * the ObjectMap of M) ** the MorphMap of M)) = (( dom (the MorphMap of G * the ObjectMap of M)) /\ ( dom the MorphMap of M)) by PBOOLE:def 19

      .= ( [:I, I:] /\ ( dom the MorphMap of M)) by PARTFUN1:def 2

      .= ( [:I, I:] /\ [:I, I:]) by PARTFUN1:def 2

      .= [:I, I:];

      

       A2: ( dom the ObjectMap of M) = [:I, I:] by FUNCT_2:def 1;

      

       A3: [o1, o2] in [:I, I:] by ZFMISC_1:def 2;

      assume

       A4: <^o1, o2^> <> {} ;

      then

       A5: <^(M . o2), (M . o1)^> <> {} by FUNCTOR0:def 19;

      then

       A6: ( dom ( Morph-Map (M,o1,o2))) = <^o1, o2^> by FUNCT_2:def 1;

      

       A7: <^(G . (M . o2)), (G . (M . o1))^> <> {} by A5, FUNCTOR0:def 18;

      ((G * M) . o1) = (G . (M . o1)) & ((G * M) . o2) = (G . (M . o2)) by FUNCTOR0: 33;

      

      hence ((G * M) . m) = (( Morph-Map ((G * M),o1,o2)) . m) by A4, A7, FUNCTOR0:def 16

      .= (r . m) by FUNCTOR0:def 36

      .= ((t * s) . m) by A1, A3, PBOOLE:def 19

      .= (t . (( Morph-Map (M,o1,o2)) . m)) by A4, A6, FUNCT_1: 13

      .= (t . (M . m)) by A4, A5, FUNCTOR0:def 16

      .= ((the MorphMap of G . (the ObjectMap of M . (o1,o2))) . (M . m)) by A2, A3, FUNCT_1: 13

      .= (( Morph-Map (G,(M . o2),(M . o1))) . (M . m)) by FUNCTOR0: 23

      .= (G . (M . m)) by A5, A7, FUNCTOR0:def 15;

    end;

    registration

      let A be non empty transitive AltCatStr, B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be feasible Covariant comp-preserving FunctorStr over A, B, G be feasible Covariant comp-preserving FunctorStr over B, C;

      cluster (G * F) -> comp-preserving;

      coherence

      proof

        let o1,o2,o3 be Object of A such that

         A1: <^o1, o2^> <> {} and

         A2: <^o2, o3^> <> {} ;

        

         A3: <^(F . o1), (F . o2)^> <> {} & <^(F . o2), (F . o3)^> <> {} by A1, A2, FUNCTOR0:def 18;

        let f be Morphism of o1, o2, g be Morphism of o2, o3;

        

         A4: ((G * F) . o1) = (G . (F . o1)) & ((G * F) . o3) = (G . (F . o3)) by FUNCTOR0: 33;

        

         A5: ((G * F) . o2) = (G . (F . o2)) by FUNCTOR0: 33;

        then

        reconsider GFg = ((G * F) . g) as Morphism of (G . (F . o2)), (G . (F . o3)) by FUNCTOR0: 33;

         <^o1, o3^> <> {} by A1, A2, ALTCAT_1:def 2;

        

        hence ((G * F) . (g * f)) = (G . (F . (g * f))) by Th6

        .= (G . ((F . g) * (F . f))) by A1, A2, FUNCTOR0:def 23

        .= ((G . (F . g)) * (G . (F . f))) by A3, FUNCTOR0:def 23

        .= (GFg * (G . (F . f))) by A2, Th6

        .= (((G * F) . g) * ((G * F) . f)) by A1, A5, A4, Th6;

      end;

    end

    registration

      let A be non empty transitive AltCatStr, B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be feasible Contravariant comp-reversing FunctorStr over A, B, G be feasible Contravariant comp-reversing FunctorStr over B, C;

      cluster (G * F) -> comp-preserving;

      coherence

      proof

        let o1,o2,o3 be Object of A such that

         A1: <^o1, o2^> <> {} and

         A2: <^o2, o3^> <> {} ;

        

         A3: <^(F . o2), (F . o1)^> <> {} & <^(F . o3), (F . o2)^> <> {} by A1, A2, FUNCTOR0:def 19;

        let f be Morphism of o1, o2, g be Morphism of o2, o3;

        

         A4: ((G * F) . o1) = (G . (F . o1)) & ((G * F) . o3) = (G . (F . o3)) by FUNCTOR0: 33;

        

         A5: ((G * F) . o2) = (G . (F . o2)) by FUNCTOR0: 33;

        then

        reconsider GFg = ((G * F) . g) as Morphism of (G . (F . o2)), (G . (F . o3)) by FUNCTOR0: 33;

         <^o1, o3^> <> {} by A1, A2, ALTCAT_1:def 2;

        

        hence ((G * F) . (g * f)) = (G . (F . (g * f))) by Th7

        .= (G . ((F . f) * (F . g))) by A1, A2, FUNCTOR0:def 24

        .= ((G . (F . g)) * (G . (F . f))) by A3, FUNCTOR0:def 24

        .= (GFg * (G . (F . f))) by A2, Th7

        .= (((G * F) . g) * ((G * F) . f)) by A1, A5, A4, Th7;

      end;

    end

    registration

      let A be non empty transitive AltCatStr, B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be feasible Covariant comp-preserving FunctorStr over A, B, G be feasible Contravariant comp-reversing FunctorStr over B, C;

      cluster (G * F) -> comp-reversing;

      coherence

      proof

        let o1,o2,o3 be Object of A such that

         A1: <^o1, o2^> <> {} and

         A2: <^o2, o3^> <> {} ;

        

         A3: <^(F . o1), (F . o2)^> <> {} & <^(F . o2), (F . o3)^> <> {} by A1, A2, FUNCTOR0:def 18;

        let f be Morphism of o1, o2, g be Morphism of o2, o3;

        

         A4: ((G * F) . o2) = (G . (F . o2)) & ((G * F) . o3) = (G . (F . o3)) by FUNCTOR0: 33;

        

         A5: ((G * F) . o1) = (G . (F . o1)) by FUNCTOR0: 33;

        then

        reconsider GFf = ((G * F) . f) as Morphism of (G . (F . o2)), (G . (F . o1)) by FUNCTOR0: 33;

         <^o1, o3^> <> {} by A1, A2, ALTCAT_1:def 2;

        

        hence ((G * F) . (g * f)) = (G . (F . (g * f))) by Th8

        .= (G . ((F . g) * (F . f))) by A1, A2, FUNCTOR0:def 23

        .= ((G . (F . f)) * (G . (F . g))) by A3, FUNCTOR0:def 24

        .= (GFf * (G . (F . g))) by A1, Th8

        .= (((G * F) . f) * ((G * F) . g)) by A2, A5, A4, Th8;

      end;

    end

    registration

      let A be non empty transitive AltCatStr, B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be feasible Contravariant comp-reversing FunctorStr over A, B, G be feasible Covariant comp-preserving FunctorStr over B, C;

      cluster (G * F) -> comp-reversing;

      coherence

      proof

        let o1,o2,o3 be Object of A such that

         A1: <^o1, o2^> <> {} and

         A2: <^o2, o3^> <> {} ;

        

         A3: <^(F . o2), (F . o1)^> <> {} & <^(F . o3), (F . o2)^> <> {} by A1, A2, FUNCTOR0:def 19;

        let f be Morphism of o1, o2, g be Morphism of o2, o3;

        

         A4: ((G * F) . o2) = (G . (F . o2)) & ((G * F) . o3) = (G . (F . o3)) by FUNCTOR0: 33;

        

         A5: ((G * F) . o1) = (G . (F . o1)) by FUNCTOR0: 33;

        then

        reconsider GFf = ((G * F) . f) as Morphism of (G . (F . o2)), (G . (F . o1)) by FUNCTOR0: 33;

         <^o1, o3^> <> {} by A1, A2, ALTCAT_1:def 2;

        

        hence ((G * F) . (g * f)) = (G . (F . (g * f))) by Th9

        .= (G . ((F . f) * (F . g))) by A1, A2, FUNCTOR0:def 24

        .= ((G . (F . f)) * (G . (F . g))) by A3, FUNCTOR0:def 23

        .= (GFf * (G . (F . g))) by A1, Th9

        .= (((G * F) . f) * ((G * F) . g)) by A2, A5, A4, Th9;

      end;

    end

    definition

      let A,B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be covariant Functor of A, B, G be covariant Functor of B, C;

      :: original: *

      redefine

      func G * F -> strict covariant Functor of A, C ;

      coherence by FUNCTOR0:def 25;

    end

    definition

      let A,B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be contravariant Functor of A, B, G be contravariant Functor of B, C;

      :: original: *

      redefine

      func G * F -> strict covariant Functor of A, C ;

      coherence by FUNCTOR0:def 25;

    end

    definition

      let A,B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be covariant Functor of A, B, G be contravariant Functor of B, C;

      :: original: *

      redefine

      func G * F -> strict contravariant Functor of A, C ;

      coherence by FUNCTOR0:def 25;

    end

    definition

      let A,B be transitive with_units non empty AltCatStr, C be with_units non empty AltCatStr, F be contravariant Functor of A, B, G be covariant Functor of B, C;

      :: original: *

      redefine

      func G * F -> strict contravariant Functor of A, C ;

      coherence by FUNCTOR0:def 25;

    end

    reserve A,B,C,D for transitive with_units non empty AltCatStr,

F1,F2,F3 for covariant Functor of A, B,

G1,G2,G3 for covariant Functor of B, C,

H1,H2 for covariant Functor of C, D,

p for transformation of F1, F2,

p1 for transformation of F2, F3,

q for transformation of G1, G2,

q1 for transformation of G2, G3,

r for transformation of H1, H2;

    theorem :: FUNCTOR3:10

    

     Th10: F1 is_transformable_to F2 & G1 is_transformable_to G2 implies (G1 * F1) is_transformable_to (G2 * F2)

    proof

      assume

       A1: for a be Object of A holds <^(F1 . a), (F2 . a)^> <> {} ;

      assume

       A2: for a be Object of B holds <^(G1 . a), (G2 . a)^> <> {} ;

      let a be Object of A;

       <^(F1 . a), (F2 . a)^> <> {} by A1;

      then

       A3: <^(G1 . (F1 . a)), (G1 . (F2 . a))^> <> {} by FUNCTOR0:def 18;

      

       A4: ((G1 * F1) . a) = (G1 . (F1 . a)) & ((G2 * F2) . a) = (G2 . (F2 . a)) by FUNCTOR0: 33;

       <^(G1 . (F2 . a)), (G2 . (F2 . a))^> <> {} by A2;

      hence thesis by A4, A3, ALTCAT_1:def 2;

    end;

    begin

    definition

      let A,B,C be transitive with_units non empty AltCatStr, F1,F2 be covariant Functor of A, B, t be transformation of F1, F2, G be covariant Functor of B, C;

      :: FUNCTOR3:def1

      func G * t -> transformation of (G * F1), (G * F2) means

      : Def1: for o be Object of A holds (it . o) = (G . (t ! o));

      existence

      proof

        defpred P[ object, object] means ex o be Object of A st $1 = o & $2 = (G . (t ! o));

        set I = the carrier of A;

        

         A2: for i be object st i in I holds ex j be object st P[i, j]

        proof

          let i be object;

          assume i in I;

          then

          reconsider o = i as Object of A;

          take (G . (t ! o));

          thus thesis;

        end;

        consider IT be ManySortedSet of I such that

         A3: for o be object st o in I holds P[o, (IT . o)] from PBOOLE:sch 3( A2);

        IT is transformation of (G * F1), (G * F2)

        proof

          thus (G * F1) is_transformable_to (G * F2) by A1, Th10;

          let o be Object of A;

           P[o, (IT . o)] & (G . (F1 . o)) = ((G * F1) . o) by A3, FUNCTOR0: 33;

          hence thesis by FUNCTOR0: 33;

        end;

        then

        reconsider IT as transformation of (G * F1), (G * F2);

        take IT;

        let o be Object of A;

         P[o, (IT . o)] by A3;

        hence thesis;

      end;

      uniqueness

      proof

        let X,Y be transformation of (G * F1), (G * F2) such that

         A4: for o be Object of A holds (X . o) = (G . (t ! o)) and

         A5: for o be Object of A holds (Y . o) = (G . (t ! o));

        

         A6: (G * F1) is_transformable_to (G * F2) by A1, Th10;

        now

          let o be Object of A;

          

          thus (X ! o) = (X . o) by A6, FUNCTOR2:def 4

          .= (G . (t ! o)) by A4

          .= (Y . o) by A5

          .= (Y ! o) by A6, FUNCTOR2:def 4;

        end;

        hence thesis by A1, Th10, FUNCTOR2: 3;

      end;

    end

    theorem :: FUNCTOR3:11

    

     Th11: for o be Object of A st F1 is_transformable_to F2 holds ((G1 * p) ! o) = (G1 . (p ! o))

    proof

      let o be Object of A;

      assume

       A1: F1 is_transformable_to F2;

      then (G1 * F1) is_transformable_to (G1 * F2) by Th10;

      

      hence ((G1 * p) ! o) = ((G1 * p) . o) by FUNCTOR2:def 4

      .= (G1 . (p ! o)) by A1, Def1;

    end;

    definition

      let A,B,C be transitive with_units non empty AltCatStr, G1,G2 be covariant Functor of B, C, F be covariant Functor of A, B, s be transformation of G1, G2;

      :: FUNCTOR3:def2

      func s * F -> transformation of (G1 * F), (G2 * F) means

      : Def2: for o be Object of A holds (it . o) = (s ! (F . o));

      existence

      proof

        defpred P[ object, object] means ex o be Object of A st $1 = o & $2 = (s ! (F . o));

        set I = the carrier of A;

        

         A2: for i be object st i in I holds ex j be object st P[i, j]

        proof

          let i be object;

          assume i in I;

          then

          reconsider o = i as Object of A;

          take (s ! (F . o));

          thus thesis;

        end;

        consider IT be ManySortedSet of I such that

         A3: for o be object st o in I holds P[o, (IT . o)] from PBOOLE:sch 3( A2);

        IT is transformation of (G1 * F), (G2 * F)

        proof

          thus (G1 * F) is_transformable_to (G2 * F) by A1, Th10;

          let o be Object of A;

           P[o, (IT . o)] & (G1 . (F . o)) = ((G1 * F) . o) by A3, FUNCTOR0: 33;

          hence thesis by FUNCTOR0: 33;

        end;

        then

        reconsider IT as transformation of (G1 * F), (G2 * F);

        take IT;

        let o be Object of A;

         P[o, (IT . o)] by A3;

        hence thesis;

      end;

      uniqueness

      proof

        let X,Y be transformation of (G1 * F), (G2 * F) such that

         A4: for o be Object of A holds (X . o) = (s ! (F . o)) and

         A5: for o be Object of A holds (Y . o) = (s ! (F . o));

        

         A6: (G1 * F) is_transformable_to (G2 * F) by A1, Th10;

        now

          let o be Object of A;

          

          thus (X ! o) = (X . o) by A6, FUNCTOR2:def 4

          .= (s ! (F . o)) by A4

          .= (Y . o) by A5

          .= (Y ! o) by A6, FUNCTOR2:def 4;

        end;

        hence thesis by A1, Th10, FUNCTOR2: 3;

      end;

    end

    theorem :: FUNCTOR3:12

    

     Th12: for o be Object of A st G1 is_transformable_to G2 holds ((q * F1) ! o) = (q ! (F1 . o))

    proof

      let o be Object of A;

      assume

       A1: G1 is_transformable_to G2;

      then (G1 * F1) is_transformable_to (G2 * F1) by Th10;

      

      hence ((q * F1) ! o) = ((q * F1) . o) by FUNCTOR2:def 4

      .= (q ! (F1 . o)) by A1, Def2;

    end;

    theorem :: FUNCTOR3:13

    

     Th13: F1 is_transformable_to F2 & F2 is_transformable_to F3 implies (G1 * (p1 `*` p)) = ((G1 * p1) `*` (G1 * p))

    proof

      assume that

       A1: F1 is_transformable_to F2 and

       A2: F2 is_transformable_to F3;

      

       A3: (G1 * F1) is_transformable_to (G1 * F2) & (G1 * F2) is_transformable_to (G1 * F3) by A1, A2, Th10;

       A4:

      now

        let a be Object of A;

        

         A5: (G1 . (F2 . a)) = ((G1 * F2) . a) & (G1 . (F3 . a)) = ((G1 * F3) . a) by FUNCTOR0: 33;

        

         A6: (G1 . (F1 . a)) = ((G1 * F1) . a) by FUNCTOR0: 33;

        then

        reconsider G1ta = ((G1 * p) ! a) as Morphism of (G1 . (F1 . a)), (G1 . (F2 . a)) by FUNCTOR0: 33;

        

         A7: <^(F1 . a), (F2 . a)^> <> {} & <^(F2 . a), (F3 . a)^> <> {} by A1, A2;

        

        thus ((G1 * (p1 `*` p)) ! a) = (G1 . ((p1 `*` p) ! a)) by A1, A2, Th11, FUNCTOR2: 2

        .= (G1 . ((p1 ! a) * (p ! a))) by A1, A2, FUNCTOR2:def 5

        .= ((G1 . (p1 ! a)) * (G1 . (p ! a))) by A7, FUNCTOR0:def 23

        .= ((G1 . (p1 ! a)) * G1ta) by A1, Th11

        .= (((G1 * p1) ! a) * ((G1 * p) ! a)) by A2, A6, A5, Th11

        .= (((G1 * p1) `*` (G1 * p)) ! a) by A3, FUNCTOR2:def 5;

      end;

      F1 is_transformable_to F3 by A1, A2, FUNCTOR2: 2;

      hence thesis by A4, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:14

    

     Th14: G1 is_transformable_to G2 & G2 is_transformable_to G3 implies ((q1 `*` q) * F1) = ((q1 * F1) `*` (q * F1))

    proof

      assume that

       A1: G1 is_transformable_to G2 and

       A2: G2 is_transformable_to G3;

      

       A3: (G1 * F1) is_transformable_to (G2 * F1) & (G2 * F1) is_transformable_to (G3 * F1) by A1, A2, Th10;

       A4:

      now

        let a be Object of A;

        

         A5: (G1 . (F1 . a)) = ((G1 * F1) . a) & (G3 . (F1 . a)) = ((G3 * F1) . a) by FUNCTOR0: 33;

        

         A6: (G2 . (F1 . a)) = ((G2 * F1) . a) by FUNCTOR0: 33;

        then

        reconsider s1F1a = ((q1 * F1) ! a) as Morphism of (G2 . (F1 . a)), (G3 . (F1 . a)) by FUNCTOR0: 33;

        

        thus (((q1 `*` q) * F1) ! a) = ((q1 `*` q) ! (F1 . a)) by A1, A2, Th12, FUNCTOR2: 2

        .= ((q1 ! (F1 . a)) * (q ! (F1 . a))) by A1, A2, FUNCTOR2:def 5

        .= (s1F1a * (q ! (F1 . a))) by A2, Th12

        .= (((q1 * F1) ! a) * ((q * F1) ! a)) by A1, A6, A5, Th12

        .= (((q1 * F1) `*` (q * F1)) ! a) by A3, FUNCTOR2:def 5;

      end;

      G1 is_transformable_to G3 by A1, A2, FUNCTOR2: 2;

      hence thesis by A4, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:15

    

     Th15: H1 is_transformable_to H2 implies ((r * G1) * F1) = (r * (G1 * F1))

    proof

      

       A1: ((H2 * G1) * F1) = (H2 * (G1 * F1)) by FUNCTOR0: 32;

      then

      reconsider m = (r * (G1 * F1)) as transformation of ((H1 * G1) * F1), ((H2 * G1) * F1) by FUNCTOR0: 32;

      assume

       A2: H1 is_transformable_to H2;

       A3:

      now

        let a be Object of A;

        

        thus (((r * G1) * F1) ! a) = ((r * G1) ! (F1 . a)) by A2, Th10, Th12

        .= (r ! (G1 . (F1 . a))) by A2, Th12

        .= (r ! ((G1 * F1) . a)) by FUNCTOR0: 33

        .= ((r * (G1 * F1)) ! a) by A2, Th12

        .= (m ! a) by A1, FUNCTOR0: 32;

      end;

      (H1 * G1) is_transformable_to (H2 * G1) by A2, Th10;

      hence thesis by A3, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:16

    

     Th16: G1 is_transformable_to G2 implies ((H1 * q) * F1) = (H1 * (q * F1))

    proof

      

       A1: ((H1 * G2) * F1) = (H1 * (G2 * F1)) by FUNCTOR0: 32;

      then

      reconsider m = (H1 * (q * F1)) as transformation of ((H1 * G1) * F1), ((H1 * G2) * F1) by FUNCTOR0: 32;

      assume

       A2: G1 is_transformable_to G2;

       A3:

      now

        let a be Object of A;

        

         A4: ((G1 * F1) . a) = (G1 . (F1 . a)) & ((G2 * F1) . a) = (G2 . (F1 . a)) by FUNCTOR0: 33;

        

        thus (((H1 * q) * F1) ! a) = ((H1 * q) ! (F1 . a)) by A2, Th10, Th12

        .= (H1 . (q ! (F1 . a))) by A2, Th11

        .= (H1 . ((q * F1) ! a)) by A2, A4, Th12

        .= ((H1 * (q * F1)) ! a) by A2, Th10, Th11

        .= (m ! a) by A1, FUNCTOR0: 32;

      end;

      (H1 * G1) is_transformable_to (H1 * G2) by A2, Th10;

      hence thesis by A3, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:17

    

     Th17: F1 is_transformable_to F2 implies ((H1 * G1) * p) = (H1 * (G1 * p))

    proof

      

       A1: ((H1 * G1) * F2) = (H1 * (G1 * F2)) by FUNCTOR0: 32;

      then

      reconsider m = (H1 * (G1 * p)) as transformation of ((H1 * G1) * F1), ((H1 * G1) * F2) by FUNCTOR0: 32;

      assume

       A2: F1 is_transformable_to F2;

      now

        let a be Object of A;

        

         A3: ((G1 * F1) . a) = (G1 . (F1 . a)) & ((G1 * F2) . a) = (G1 . (F2 . a)) by FUNCTOR0: 33;

        

         A4: <^(F1 . a), (F2 . a)^> <> {} by A2;

        

        thus (((H1 * G1) * p) ! a) = ((H1 * G1) . (p ! a)) by A2, Th11

        .= (H1 . (G1 . (p ! a))) by A4, Th6

        .= (H1 . ((G1 * p) ! a)) by A2, A3, Th11

        .= ((H1 * (G1 * p)) ! a) by A2, Th10, Th11

        .= (m ! a) by A1, FUNCTOR0: 32;

      end;

      hence thesis by A2, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:18

    

     Th18: (( idt G1) * F1) = ( idt (G1 * F1))

    proof

      now

        let a be Object of A;

        

        thus ((( idt G1) * F1) ! a) = (( idt G1) ! (F1 . a)) by Th12

        .= ( idm (G1 . (F1 . a))) by FUNCTOR2: 4

        .= ( idm ((G1 * F1) . a)) by FUNCTOR0: 33

        .= (( idt (G1 * F1)) ! a) by FUNCTOR2: 4;

      end;

      hence thesis by FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:19

    

     Th19: (G1 * ( idt F1)) = ( idt (G1 * F1))

    proof

      now

        let a be Object of A;

        

        thus ((G1 * ( idt F1)) ! a) = (G1 . (( idt F1) ! a)) by Th11

        .= (G1 . ( idm (F1 . a))) by FUNCTOR2: 4

        .= ( idm (G1 . (F1 . a))) by FUNCTOR2: 1

        .= ( idm ((G1 * F1) . a)) by FUNCTOR0: 33

        .= (( idt (G1 * F1)) ! a) by FUNCTOR2: 4;

      end;

      hence thesis by FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:20

    

     Th20: F1 is_transformable_to F2 implies (( id B) * p) = p

    proof

      assume

       A1: F1 is_transformable_to F2;

      now

        let i be object;

        assume i in the carrier of A;

        then

        reconsider a = i as Object of A;

        

         A2: <^(F1 . a), (F2 . a)^> <> {} by A1;

        

        thus ((( id B) * p) . i) = (( id B) . (p ! a)) by A1, Def1

        .= (p ! a) by A2, FUNCTOR0: 31

        .= (p . i) by A1, FUNCTOR2:def 4;

      end;

      hence thesis;

    end;

    theorem :: FUNCTOR3:21

    

     Th21: G1 is_transformable_to G2 implies (q * ( id B)) = q

    proof

      assume

       A1: G1 is_transformable_to G2;

      now

        let i be object;

        assume i in the carrier of B;

        then

        reconsider a = i as Object of B;

        

        thus ((q * ( id B)) . i) = (q ! (( id B) . a)) by A1, Def2

        .= (q ! a) by FUNCTOR0: 29

        .= (q . i) by A1, FUNCTOR2:def 4;

      end;

      hence thesis;

    end;

    begin

    definition

      let A,B,C be transitive with_units non empty AltCatStr, F1,F2 be covariant Functor of A, B, G1,G2 be covariant Functor of B, C, t be transformation of F1, F2, s be transformation of G1, G2;

      :: FUNCTOR3:def3

      func s (#) t -> transformation of (G1 * F1), (G2 * F2) equals ((s * F2) `*` (G1 * t));

      coherence ;

    end

    theorem :: FUNCTOR3:22

    

     Th22: for q be natural_transformation of G1, G2 st F1 is_transformable_to F2 & G1 is_naturally_transformable_to G2 holds (q (#) p) = ((G2 * p) `*` (q * F1))

    proof

      let q be natural_transformation of G1, G2;

      assume that

       A1: F1 is_transformable_to F2 and

       A2: G1 is_naturally_transformable_to G2;

      

       A3: (G1 * F1) is_transformable_to (G1 * F2) by A1, Th10;

      

       A4: (G2 * F1) is_transformable_to (G2 * F2) by A1, Th10;

      

       A5: G1 is_transformable_to G2 by A2;

      then

       A6: (G1 * F1) is_transformable_to (G2 * F1) by Th10;

      

       A7: (G1 * F2) is_transformable_to (G2 * F2) by A5, Th10;

      now

        let a be Object of A;

        

         A8: (G1 . (F1 . a)) = ((G1 * F1) . a) by FUNCTOR0: 33;

        

         A9: (G2 . (F2 . a)) = ((G2 * F2) . a) by FUNCTOR0: 33;

        then

        reconsider sF2a = (q ! (F2 . a)) as Morphism of ((G1 * F2) . a), ((G2 * F2) . a) by FUNCTOR0: 33;

        reconsider G2ta = ((G2 * p) ! a) as Morphism of (G2 . (F1 . a)), (G2 . (F2 . a)) by A9, FUNCTOR0: 33;

        

         A10: (G1 . (F2 . a)) = ((G1 * F2) . a) by FUNCTOR0: 33;

        

         A11: <^(F1 . a), (F2 . a)^> <> {} by A1;

        

         A12: (G2 . (F1 . a)) = ((G2 * F1) . a) by FUNCTOR0: 33;

        

        thus (((q * F2) `*` (G1 * p)) ! a) = (((q * F2) ! a) * ((G1 * p) ! a)) by A7, A3, FUNCTOR2:def 5

        .= (sF2a * ((G1 * p) ! a)) by A5, Th12

        .= ((q ! (F2 . a)) * (G1 . (p ! a))) by A1, A8, A10, A9, Th11

        .= ((G2 . (p ! a)) * (q ! (F1 . a))) by A2, A11, FUNCTOR2:def 7

        .= (G2ta * (q ! (F1 . a))) by A1, Th11

        .= (((G2 * p) ! a) * ((q * F1) ! a)) by A5, A8, A12, A9, Th12

        .= (((G2 * p) `*` (q * F1)) ! a) by A6, A4, FUNCTOR2:def 5;

      end;

      hence thesis by A1, A5, Th10, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:23

    F1 is_transformable_to F2 implies (( idt ( id B)) (#) p) = p

    proof

      assume

       A1: F1 is_transformable_to F2;

      then

       A2: (( id B) * F1) is_transformable_to (( id B) * F2) by Th10;

      

      thus (( idt ( id B)) (#) p) = (( idt (( id B) * F2)) `*` (( id B) * p)) by Th18

      .= (( id B) * p) by A2, FUNCTOR2: 5

      .= p by A1, Th20;

    end;

    theorem :: FUNCTOR3:24

    G1 is_transformable_to G2 implies (q (#) ( idt ( id B))) = q

    proof

      assume

       A1: G1 is_transformable_to G2;

      then

       A2: (G1 * ( id B)) is_transformable_to (G2 * ( id B)) by Th10;

      

      thus (q (#) ( idt ( id B))) = ((q * ( id B)) `*` ( idt (G1 * ( id B)))) by Th19

      .= (q * ( id B)) by A2, FUNCTOR2: 5

      .= q by A1, Th21;

    end;

    theorem :: FUNCTOR3:25

    F1 is_transformable_to F2 implies (G1 * p) = (( idt G1) (#) p)

    proof

      assume F1 is_transformable_to F2;

      then (G1 * F1) is_transformable_to (G1 * F2) by Th10;

      

      hence (G1 * p) = (( idt (G1 * F2)) `*` (G1 * p)) by FUNCTOR2: 5

      .= (( idt G1) (#) p) by Th18;

    end;

    theorem :: FUNCTOR3:26

    G1 is_transformable_to G2 implies (q * F1) = (q (#) ( idt F1))

    proof

      assume G1 is_transformable_to G2;

      then (G1 * F1) is_transformable_to (G2 * F1) by Th10;

      

      hence (q * F1) = ((q * F1) `*` ( idt (G1 * F1))) by FUNCTOR2: 5

      .= (q (#) ( idt F1)) by Th19;

    end;

    reserve A,B,C,D for category,

F1,F2,F3 for covariant Functor of A, B,

G1,G2,G3 for covariant Functor of B, C;

    theorem :: FUNCTOR3:27

    for H1,H2 be covariant Functor of C, D holds for t be transformation of F1, F2, s be transformation of G1, G2 holds for u be transformation of H1, H2 st F1 is_transformable_to F2 & G1 is_transformable_to G2 & H1 is_transformable_to H2 holds ((u (#) s) (#) t) = (u (#) (s (#) t))

    proof

      let H1,H2 be covariant Functor of C, D, t be transformation of F1, F2, s be transformation of G1, G2, u be transformation of H1, H2;

      assume that

       A1: F1 is_transformable_to F2 and

       A2: G1 is_transformable_to G2 and

       A3: H1 is_transformable_to H2;

      

       A4: (G1 * F2) is_transformable_to (G2 * F2) & (G1 * F1) is_transformable_to (G1 * F2) by A1, A2, Th10;

      

       A5: ((H1 * s) * F2) = (H1 * (s * F2)) & ((H1 * G1) * t) = (H1 * (G1 * t)) by A1, A2, Th16, Th17;

      

       A6: ((H1 * G2) * F2) = (H1 * (G2 * F2)) & ((H2 * G2) * F2) = (H2 * (G2 * F2)) by FUNCTOR0: 32;

      

       A7: ((H1 * G1) * F1) is_transformable_to ((H1 * G1) * F2) & ((u * G2) * F2) = (u * (G2 * F2)) by A1, A3, Th10, Th15;

      

       A8: ((H1 * G1) * F1) = (H1 * (G1 * F1)) & ((H1 * G1) * F2) = (H1 * (G1 * F2)) by FUNCTOR0: 32;

      

       A9: (H1 * G1) is_transformable_to (H1 * G2) by A2, Th10;

      then

       A10: ((H1 * G1) * F2) is_transformable_to ((H1 * G2) * F2) by Th10;

      

       A11: (H1 * G2) is_transformable_to (H2 * G2) by A3, Th10;

      then

       A12: ((H1 * G2) * F2) is_transformable_to ((H2 * G2) * F2) by Th10;

      

      thus ((u (#) s) (#) t) = ((((u * G2) * F2) `*` ((H1 * s) * F2)) `*` ((H1 * G1) * t)) by A11, A9, Th14

      .= ((u * (G2 * F2)) `*` ((H1 * (s * F2)) `*` (H1 * (G1 * t)))) by A12, A10, A7, A5, A8, A6, FUNCTOR2: 6

      .= (u (#) (s (#) t)) by A4, Th13;

    end;

    reserve t for natural_transformation of F1, F2,

s for natural_transformation of G1, G2,

s1 for natural_transformation of G2, G3;

     Lm2:

    now

      let A, B, C, F1, F2, G1, G2, s, t;

      set k = (s (#) t);

      assume

       A1: F1 is_naturally_transformable_to F2;

      then

       A2: F1 is_transformable_to F2;

      assume

       A3: G1 is_naturally_transformable_to G2;

      then

       A4: G1 is_transformable_to G2;

       A5:

      now

        let a,b be Object of A such that

         A6: <^a, b^> <> {} ;

        

         A7: <^((G1 * F1) . a), ((G1 * F1) . b)^> <> {} by A6, FUNCTOR0:def 18;

        

         A8: ((G2 * F2) . a) = (G2 . (F2 . a)) by FUNCTOR0: 33;

        then

        reconsider sF2a = (s ! (F2 . a)) as Morphism of ((G1 * F2) . a), ((G2 * F2) . a) by FUNCTOR0: 33;

        

         A9: ((G2 * F2) . b) = (G2 . (F2 . b)) by FUNCTOR0: 33;

        then

        reconsider sF2b = (s ! (F2 . b)) as Morphism of ((G1 * F2) . b), ((G2 * F2) . b) by FUNCTOR0: 33;

         <^(G1 . (F2 . b)), (G2 . (F2 . b))^> <> {} by A4;

        then

         A10: <^((G1 * F2) . b), ((G2 * F2) . b)^> <> {} by A9, FUNCTOR0: 33;

        let f be Morphism of a, b;

        

         A11: ((G1 * F1) . a) = (G1 . (F1 . a)) by FUNCTOR0: 33;

        then

        reconsider G1tbF1f = (G1 . ((t ! b) * (F1 . f))) as Morphism of ((G1 * F1) . a), ((G1 * F2) . b) by FUNCTOR0: 33;

        reconsider G1ta = (G1 . (t ! a)) as Morphism of ((G1 * F1) . a), ((G1 * F2) . a) by A11, FUNCTOR0: 33;

        

         A12: <^(G1 . (F1 . a)), (G2 . (F1 . a))^> <> {} by A4;

        

         A13: ((G1 * F1) . b) = (G1 . (F1 . b)) by FUNCTOR0: 33;

        then

        reconsider G1tb = (G1 . (t ! b)) as Morphism of ((G1 * F1) . b), ((G1 * F2) . b) by FUNCTOR0: 33;

        

         A14: <^(F1 . b), (F2 . b)^> <> {} by A2;

        then <^(G1 . (F1 . b)), (G1 . (F2 . b))^> <> {} by FUNCTOR0:def 18;

        then

         A15: <^((G1 * F1) . b), ((G1 * F2) . b)^> <> {} by A13, FUNCTOR0: 33;

        

         A16: <^(F1 . a), (F1 . b)^> <> {} by A6, FUNCTOR0:def 18;

        then

         A17: <^(F1 . a), (F2 . b)^> <> {} by A14, ALTCAT_1:def 2;

        reconsider G1F1f = (G1 . (F1 . f)) as Morphism of ((G1 * F1) . a), ((G1 * F1) . b) by A13, FUNCTOR0: 33;

        

         A18: (s ! (F2 . a)) = ((s * F2) . a) by A4, Def2;

        

         A19: (G1 . ((t ! b) * (F1 . f))) = ((G1 . (t ! b)) * (G1 . (F1 . f))) by A14, A16, FUNCTOR0:def 23

        .= (G1tb * G1F1f) by A11, A13, FUNCTOR0: 33;

        reconsider G2F2f = (G2 . (F2 . f)) as Morphism of ((G2 * F2) . a), ((G2 * F2) . b) by A8, FUNCTOR0: 33;

        

         A20: (s ! (F2 . b)) = ((s * F2) . b) by A4, Def2;

        

         A21: (G1 * F2) is_transformable_to (G2 * F2) by A4, Th10;

        

         A22: <^(F2 . a), (F2 . b)^> <> {} by A6, FUNCTOR0:def 18;

        then

         A23: <^(G2 . (F2 . a)), (G2 . (F2 . b))^> <> {} by FUNCTOR0:def 18;

        

         A24: <^(F1 . a), (F2 . a)^> <> {} by A2;

        then

         A25: <^(G2 . (F1 . a)), (G2 . (F2 . a))^> <> {} by FUNCTOR0:def 18;

        

         A26: (G1 * F1) is_transformable_to (G1 * F2) by A2, Th10;

        

        hence ((k ! b) * ((G1 * F1) . f)) = ((((s * F2) ! b) * ((G1 * t) ! b)) * ((G1 * F1) . f)) by A21, FUNCTOR2:def 5

        .= ((sF2b * ((G1 * t) ! b)) * ((G1 * F1) . f)) by A21, A20, FUNCTOR2:def 4

        .= ((sF2b * G1tb) * ((G1 * F1) . f)) by A2, Th11

        .= ((sF2b * G1tb) * G1F1f) by A6, Th6

        .= (sF2b * G1tbF1f) by A7, A15, A10, A19, ALTCAT_1: 21

        .= ((s ! (F2 . b)) * (G1 . ((t ! b) * (F1 . f)))) by A11, A9, FUNCTOR0: 33

        .= ((G2 . ((t ! b) * (F1 . f))) * (s ! (F1 . a))) by A3, A17, FUNCTOR2:def 7

        .= ((G2 . ((F2 . f) * (t ! a))) * (s ! (F1 . a))) by A1, A6, FUNCTOR2:def 7

        .= (((G2 . (F2 . f)) * (G2 . (t ! a))) * (s ! (F1 . a))) by A22, A24, FUNCTOR0:def 23

        .= ((G2 . (F2 . f)) * ((G2 . (t ! a)) * (s ! (F1 . a)))) by A12, A25, A23, ALTCAT_1: 21

        .= ((G2 . (F2 . f)) * ((s ! (F2 . a)) * (G1 . (t ! a)))) by A3, A24, FUNCTOR2:def 7

        .= (G2F2f * (sF2a * G1ta)) by A11, A8, A9, FUNCTOR0: 33

        .= (((G2 * F2) . f) * (sF2a * G1ta)) by A6, Th6

        .= (((G2 * F2) . f) * (((s * F2) ! a) * G1ta)) by A21, A18, FUNCTOR2:def 4

        .= (((G2 * F2) . f) * (((s * F2) ! a) * ((G1 * t) ! a))) by A2, Th11

        .= (((G2 * F2) . f) * (k ! a)) by A21, A26, FUNCTOR2:def 5;

      end;

      thus (G1 * F1) is_naturally_transformable_to (G2 * F2) by A2, A4, Th10, A5;

      hence (s (#) t) is natural_transformation of (G1 * F1), (G2 * F2) by A5, FUNCTOR2:def 7;

    end;

    theorem :: FUNCTOR3:28

    

     Th28: F1 is_naturally_transformable_to F2 implies (G1 * t) is natural_transformation of (G1 * F1), (G1 * F2)

    proof

      assume

       A1: F1 is_naturally_transformable_to F2;

      then

       A2: F1 is_transformable_to F2;

      thus (G1 * F1) is_naturally_transformable_to (G1 * F2) by A1, Lm2;

      let a,b be Object of A such that

       A3: <^a, b^> <> {} ;

      

       A4: ((G1 * F1) . b) = (G1 . (F1 . b)) & <^(F1 . a), (F1 . b)^> <> {} by A3, FUNCTOR0: 33, FUNCTOR0:def 18;

      

       A5: <^(F1 . b), (F2 . b)^> <> {} by A2;

      

       A6: <^(F1 . a), (F2 . a)^> <> {} by A2;

      reconsider G1ta = (G1 . (t ! a)) as Morphism of (G1 . (F1 . a)), ((G1 * F2) . a) by FUNCTOR0: 33;

      reconsider G1tb = (G1 . (t ! b)) as Morphism of ((G1 * F1) . b), (G1 . (F2 . b)) by FUNCTOR0: 33;

      let f be Morphism of a, b;

      

       A7: ((G1 * F2) . a) = (G1 . (F2 . a)) by FUNCTOR0: 33;

      

       A8: <^(F2 . a), (F2 . b)^> <> {} by A3, FUNCTOR0:def 18;

      

       A9: ((G1 * F1) . a) = (G1 . (F1 . a)) by FUNCTOR0: 33;

      then

      reconsider G1F1f = (G1 . (F1 . f)) as Morphism of ((G1 * F1) . a), ((G1 * F1) . b) by FUNCTOR0: 33;

      

       A10: ((G1 * F2) . b) = (G1 . (F2 . b)) by FUNCTOR0: 33;

      

      hence (((G1 * t) ! b) * ((G1 * F1) . f)) = (G1tb * ((G1 * F1) . f)) by A2, Th11

      .= (G1tb * G1F1f) by A3, Th6

      .= (G1 . ((t ! b) * (F1 . f))) by A9, A4, A5, FUNCTOR0:def 23

      .= (G1 . ((F2 . f) * (t ! a))) by A1, A3, FUNCTOR2:def 7

      .= ((G1 . (F2 . f)) * (G1 . (t ! a))) by A6, A8, FUNCTOR0:def 23

      .= (((G1 * F2) . f) * G1ta) by A3, A7, A10, Th6

      .= (((G1 * F2) . f) * ((G1 * t) ! a)) by A2, A9, Th11;

    end;

    theorem :: FUNCTOR3:29

    

     Th29: G1 is_naturally_transformable_to G2 implies (s * F1) is natural_transformation of (G1 * F1), (G2 * F1)

    proof

      assume

       A1: G1 is_naturally_transformable_to G2;

      thus (G1 * F1) is_naturally_transformable_to (G2 * F1) by A1, Lm2;

      let a,b be Object of A such that

       A2: <^a, b^> <> {} ;

      

       A3: <^(F1 . a), (F1 . b)^> <> {} by A2, FUNCTOR0:def 18;

      reconsider sF1a = (s ! (F1 . a)) as Morphism of (G1 . (F1 . a)), ((G2 * F1) . a) by FUNCTOR0: 33;

      let f be Morphism of a, b;

      

       A4: ((G2 * F1) . a) = (G2 . (F1 . a)) by FUNCTOR0: 33;

      

       A5: ((G2 * F1) . b) = (G2 . (F1 . b)) by FUNCTOR0: 33;

      then

      reconsider sF1b = (s ! (F1 . b)) as Morphism of ((G1 * F1) . b), ((G2 * F1) . b) by FUNCTOR0: 33;

      

       A6: ((G1 * F1) . b) = (G1 . (F1 . b)) & ((G2 * F1) . b) = (G2 . (F1 . b)) by FUNCTOR0: 33;

      

       A7: ((G1 * F1) . a) = (G1 . (F1 . a)) by FUNCTOR0: 33;

      then

      reconsider G1F1f = (G1 . (F1 . f)) as Morphism of ((G1 * F1) . a), ((G1 * F1) . b) by FUNCTOR0: 33;

      

       A8: G1 is_transformable_to G2 by A1;

      

      hence (((s * F1) ! b) * ((G1 * F1) . f)) = (sF1b * ((G1 * F1) . f)) by Th12

      .= (sF1b * G1F1f) by A2, Th6

      .= ((G2 . (F1 . f)) * (s ! (F1 . a))) by A1, A7, A6, A3, FUNCTOR2:def 7

      .= (((G2 * F1) . f) * sF1a) by A2, A4, A5, Th6

      .= (((G2 * F1) . f) * ((s * F1) ! a)) by A8, A7, Th12;

    end;

    theorem :: FUNCTOR3:30

    F1 is_naturally_transformable_to F2 & G1 is_naturally_transformable_to G2 implies (G1 * F1) is_naturally_transformable_to (G2 * F2) & (s (#) t) is natural_transformation of (G1 * F1), (G2 * F2) by Lm2;

    theorem :: FUNCTOR3:31

    for t be transformation of F1, F2, t1 be transformation of F2, F3 st F1 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F3 & G1 is_naturally_transformable_to G2 & G2 is_naturally_transformable_to G3 holds ((s1 `*` s) (#) (t1 `*` t)) = ((s1 (#) t1) `*` (s (#) t))

    proof

      let t be transformation of F1, F2, t1 be transformation of F2, F3 such that

       A1: F1 is_naturally_transformable_to F2 and

       A2: F2 is_naturally_transformable_to F3 and

       A3: G1 is_naturally_transformable_to G2 and

       A4: G2 is_naturally_transformable_to G3;

      

       A5: F1 is_transformable_to F2 by A1;

      then

       A6: (s (#) t) = ((G2 * t) `*` (s * F1)) by A3, Th22;

      

       A7: (G2 * F1) is_transformable_to (G2 * F2) by A5, Th10;

      

       A8: (G3 * F1) is_transformable_to (G3 * F2) by A5, Th10;

      (G1 * F1) is_naturally_transformable_to (G2 * F2) by A1, A3, Lm2;

      then

       A9: (G1 * F1) is_transformable_to (G2 * F2);

      

       A10: G1 is_transformable_to G2 by A3;

      then

       A11: (G1 * F1) is_transformable_to (G2 * F1) by Th10;

      

       A12: F2 is_transformable_to F3 by A2;

      then

       A13: (s1 (#) t1) = ((G3 * t1) `*` (s1 * F2)) by A4, Th22;

      

       A14: (G3 * F2) is_transformable_to (G3 * F3) by A12, Th10;

      

       A15: G2 is_transformable_to G3 by A4;

      then

       A16: (G2 * F1) is_transformable_to (G3 * F1) by Th10;

      G1 is_transformable_to G3 by A10, A15, FUNCTOR2: 2;

      then

       A17: (G1 * F1) is_transformable_to (G3 * F1) by Th10;

      

       A18: (G2 * F2) is_transformable_to (G3 * F2) by A15, Th10;

      F1 is_transformable_to F3 by A5, A12, FUNCTOR2: 2;

      

      hence ((s1 `*` s) (#) (t1 `*` t)) = ((G3 * (t1 `*` t)) `*` ((s1 `*` s) * F1)) by A3, A4, Th22, FUNCTOR2: 8

      .= (((G3 * t1) `*` (G3 * t)) `*` ((s1 `*` s) * F1)) by A5, A12, Th13

      .= (((G3 * t1) `*` (G3 * t)) `*` ((s1 qua transformation of G2, G3 `*` s) * F1)) by A3, A4, FUNCTOR2:def 8

      .= (((G3 * t1) `*` (G3 * t)) `*` ((s1 * F1) `*` (s * F1))) by A10, A15, Th14

      .= ((G3 * t1) `*` ((G3 * t) `*` ((s1 * F1) `*` (s * F1)))) by A14, A8, A17, FUNCTOR2: 6

      .= ((G3 * t1) `*` (((G3 * t) `*` (s1 * F1)) `*` (s * F1))) by A8, A11, A16, FUNCTOR2: 6

      .= ((G3 * t1) `*` ((s1 (#) t) `*` (s * F1))) by A4, A5, Th22

      .= ((G3 * t1) `*` ((s1 * F2) `*` ((G2 * t) `*` (s * F1)))) by A11, A18, A7, FUNCTOR2: 6

      .= ((s1 (#) t1) `*` (s (#) t)) by A14, A18, A9, A13, A6, FUNCTOR2: 6;

    end;

    begin

    theorem :: FUNCTOR3:32

    

     Th32: F1 is_naturally_transformable_to F2 & F2 is_transformable_to F1 & (for a be Object of A holds (t ! a) is iso) implies F2 is_naturally_transformable_to F1 & ex f be natural_transformation of F2, F1 st for a be Object of A holds (f . a) = ((t ! a) " ) & (f ! a) is iso

    proof

      assume that

       A1: F1 is_naturally_transformable_to F2 and

       A2: F2 is_transformable_to F1 and

       A3: for a be Object of A holds (t ! a) is iso;

      defpred P[ object, object] means ex a be Object of A st a = $1 & $2 = ((t ! a) " );

      set I = the carrier of A;

      

       A4: for i be object st i in I holds ex j be object st P[i, j]

      proof

        let i be object;

        assume i in I;

        then

        reconsider o = i as Object of A;

        take ((t ! o) " );

        thus thesis;

      end;

      consider f be ManySortedSet of I such that

       A5: for i be object st i in I holds P[i, (f . i)] from PBOOLE:sch 3( A4);

      f is transformation of F2, F1

      proof

        thus F2 is_transformable_to F1 by A2;

        let a be Object of A;

        ex b be Object of A st b = a & (f . a) = ((t ! b) " ) by A5;

        hence thesis;

      end;

      then

      reconsider f as transformation of F2, F1;

      

       A6: F1 is_transformable_to F2 by A1;

       A7:

      now

        let a,b be Object of A such that

         A8: <^a, b^> <> {} ;

        

         A9: <^(F1 . a), (F1 . b)^> <> {} by A8, FUNCTOR0:def 18;

        let g be Morphism of a, b;

        

         A10: ex bb be Object of A st bb = b & (f . b) = ((t ! bb) " ) by A5;

        

         A11: (t ! b) is iso by A3;

        

         A12: <^(F2 . a), (F1 . a)^> <> {} by A2;

        

         A13: <^(F1 . a), (F2 . a)^> <> {} by A6;

        

         A14: ex aa be Object of A st aa = a & (f . a) = ((t ! aa) " ) by A5;

        then

        reconsider fa = (f . a) as Morphism of (F2 . a), (F1 . a);

        

         A15: (t ! a) is iso by A3;

        

         A16: <^(F1 . b), (F2 . b)^> <> {} by A6;

        

         A17: <^(F2 . b), (F1 . b)^> <> {} by A2;

        

         A18: <^(F2 . a), (F2 . b)^> <> {} by A8, FUNCTOR0:def 18;

        then

         A19: <^(F2 . a), (F1 . b)^> <> {} by A17, ALTCAT_1:def 2;

        

        hence ((f ! b) * (F2 . g)) = (((f ! b) * (F2 . g)) * ( idm (F2 . a))) by ALTCAT_1:def 17

        .= (((f ! b) * (F2 . g)) * ((t ! a) * fa)) by A14, A15, ALTCAT_3:def 5

        .= (((f ! b) * (F2 . g)) * ((t ! a) * (f ! a))) by A2, FUNCTOR2:def 4

        .= ((((f ! b) * (F2 . g)) * (t ! a)) * (f ! a)) by A13, A12, A19, ALTCAT_1: 21

        .= (((f ! b) * ((F2 . g) * (t ! a))) * (f ! a)) by A13, A17, A18, ALTCAT_1: 21

        .= (((f ! b) * ((t ! b) * (F1 . g))) * (f ! a)) by A1, A8, FUNCTOR2:def 7

        .= ((((f ! b) * (t ! b)) * (F1 . g)) * (f ! a)) by A17, A16, A9, ALTCAT_1: 21

        .= (((((t ! b) " ) * (t ! b)) * (F1 . g)) * (f ! a)) by A2, A10, FUNCTOR2:def 4

        .= ((( idm (F1 . b)) * (F1 . g)) * (f ! a)) by A11, ALTCAT_3:def 5

        .= ((F1 . g) * (f ! a)) by A9, ALTCAT_1: 20;

      end;

      hence F2 is_naturally_transformable_to F1 by A2;

      F2 is_naturally_transformable_to F1 by A2, A7;

      then

      reconsider f as natural_transformation of F2, F1 by A7, FUNCTOR2:def 7;

      take f;

      let a be Object of A;

      consider b be Object of A such that

       A20: b = a and

       A21: (f . a) = ((t ! b) " ) by A5;

      thus (f . a) = ((t ! a) " ) by A20, A21;

      

       A22: <^(F1 . a), (F2 . a)^> <> {} by A6;

      

       A23: <^(F2 . a), (F1 . a)^> <> {} by A2;

      (f ! a) = ((t ! b) " ) by A2, A21, FUNCTOR2:def 4;

      hence thesis by A3, A20, A22, A23, ALTCAT_4: 3;

    end;

    definition

      let A,B be category, F1,F2 be covariant Functor of A, B;

      :: FUNCTOR3:def4

      pred F1,F2 are_naturally_equivalent means

      : Def4: F1 is_naturally_transformable_to F2 & F2 is_transformable_to F1 & ex t be natural_transformation of F1, F2 st for a be Object of A holds (t ! a) is iso;

      reflexivity

      proof

        let F be covariant Functor of A, B;

        thus F is_naturally_transformable_to F & F is_transformable_to F;

        take ( idt F);

        let a be Object of A;

        (( idt F) ! a) = ( idm (F . a)) by FUNCTOR2: 4;

        hence thesis;

      end;

      symmetry

      proof

        let F1,F2 be covariant Functor of A, B such that

         A1: F1 is_naturally_transformable_to F2 and

         A2: F2 is_transformable_to F1;

        given t be natural_transformation of F1, F2 such that

         A3: for a be Object of A holds (t ! a) is iso;

        consider f be natural_transformation of F2, F1 such that

         A4: for a be Object of A holds (f . a) = ((t ! a) " ) & (f ! a) is iso by A1, A2, A3, Th32;

        thus F2 is_naturally_transformable_to F1 by A1, A2, A3, Th32;

        thus F1 is_transformable_to F2 by A1;

        take f;

        thus thesis by A4;

      end;

    end

    definition

      let A,B be category, F1,F2 be covariant Functor of A, B;

      :: FUNCTOR3:def5

      mode natural_equivalence of F1,F2 -> natural_transformation of F1, F2 means

      : Def5: for a be Object of A holds (it ! a) is iso;

      existence by A1;

    end

    reserve e for natural_equivalence of F1, F2,

e1 for natural_equivalence of F2, F3,

f for natural_equivalence of G1, G2;

    theorem :: FUNCTOR3:33

    

     Th33: (F1,F2) are_naturally_equivalent & (F2,F3) are_naturally_equivalent implies (F1,F3) are_naturally_equivalent

    proof

      assume that

       A1: F1 is_naturally_transformable_to F2 and

       A2: F2 is_transformable_to F1;

      given t be natural_transformation of F1, F2 such that

       A3: for a be Object of A holds (t ! a) is iso;

      assume that

       A4: F2 is_naturally_transformable_to F3 and

       A5: F3 is_transformable_to F2;

      given t1 be natural_transformation of F2, F3 such that

       A6: for a be Object of A holds (t1 ! a) is iso;

      thus F1 is_naturally_transformable_to F3 & F3 is_transformable_to F1 by A1, A2, A4, A5, FUNCTOR2: 2, FUNCTOR2: 8;

      take (t1 `*` t);

      let a be Object of A;

      

       A7: (t1 ! a) is iso by A6;

      F3 is_transformable_to F1 by A2, A5, FUNCTOR2: 2;

      then

       A8: <^(F3 . a), (F1 . a)^> <> {} ;

      

       A9: (t ! a) is iso by A3;

      

       A10: F2 is_transformable_to F3 by A4;

      then

       A11: <^(F2 . a), (F3 . a)^> <> {} ;

      

       A12: F1 is_transformable_to F2 by A1;

      then

       A13: <^(F1 . a), (F2 . a)^> <> {} ;

      ((t1 `*` t) ! a) = ((t1 qua transformation of F2, F3 `*` t) ! a) by A1, A4, FUNCTOR2:def 8

      .= ((t1 ! a) * (t ! a)) by A12, A10, FUNCTOR2:def 5;

      hence thesis by A13, A11, A8, A7, A9, ALTCAT_3: 7;

    end;

    theorem :: FUNCTOR3:34

    

     Th34: (F1,F2) are_naturally_equivalent & (F2,F3) are_naturally_equivalent implies (e1 `*` e) is natural_equivalence of F1, F3

    proof

      assume that

       A1: (F1,F2) are_naturally_equivalent and

       A2: (F2,F3) are_naturally_equivalent ;

      thus

       A3: (F1,F3) are_naturally_equivalent by A1, A2, Th33;

      let a be Object of A;

      

       A4: F1 is_transformable_to F2 by A1, Def4;

      then

       A5: <^(F1 . a), (F2 . a)^> <> {} ;

      F3 is_transformable_to F1 by A3;

      then

       A6: <^(F3 . a), (F1 . a)^> <> {} ;

      

       A7: F2 is_transformable_to F3 by A2, Def4;

      then

       A8: <^(F2 . a), (F3 . a)^> <> {} ;

      F1 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F3 by A1, A2;

      

      then

       A9: ((e1 `*` e) ! a) = ((e1 qua transformation of F2, F3 `*` e) ! a) by FUNCTOR2:def 8

      .= ((e1 ! a) * (e ! a)) by A4, A7, FUNCTOR2:def 5;

      (e1 ! a) is iso & (e ! a) is iso by A1, A2, Def5;

      hence thesis by A9, A5, A8, A6, ALTCAT_3: 7;

    end;

    theorem :: FUNCTOR3:35

    

     Th35: (F1,F2) are_naturally_equivalent implies ((G1 * F1),(G1 * F2)) are_naturally_equivalent & (G1 * e) is natural_equivalence of (G1 * F1), (G1 * F2)

    proof

      assume

       A1: (F1,F2) are_naturally_equivalent ;

      then

       A2: F2 is_transformable_to F1;

      

       A3: F1 is_naturally_transformable_to F2 by A1;

      then

      reconsider k = (G1 * e) as natural_transformation of (G1 * F1), (G1 * F2) by Th28;

      

       A4: F1 is_transformable_to F2 by A1, Def4;

       A5:

      now

        let a be Object of A;

        

         A6: ((G1 * F1) . a) = (G1 . (F1 . a)) & ((G1 * F2) . a) = (G1 . (F2 . a)) by FUNCTOR0: 33;

        

         A7: <^(F2 . a), (F1 . a)^> <> {} by A2;

        (k ! a) = (G1 . (e ! a)) & <^(F1 . a), (F2 . a)^> <> {} by A4, Th11;

        hence (k ! a) is iso by A1, A6, A7, Def5, ALTCAT_4: 20;

      end;

      ((G1 * F1),(G1 * F2)) are_naturally_equivalent by A3, Lm2, A2, Th10, A5;

      hence thesis by A5, Def5;

    end;

    theorem :: FUNCTOR3:36

    

     Th36: (G1,G2) are_naturally_equivalent implies ((G1 * F1),(G2 * F1)) are_naturally_equivalent & (f * F1) is natural_equivalence of (G1 * F1), (G2 * F1)

    proof

      assume

       A1: (G1,G2) are_naturally_equivalent ;

      then G1 is_naturally_transformable_to G2;

      then

      reconsider k = (f * F1) as natural_transformation of (G1 * F1), (G2 * F1) by Th29;

       A2:

      now

        let a be Object of A;

        G1 is_transformable_to G2 by A1, Def4;

        then

         A3: (k ! a) = (f ! (F1 . a)) by Th12;

        ((G1 * F1) . a) = (G1 . (F1 . a)) & ((G2 * F1) . a) = (G2 . (F1 . a)) by FUNCTOR0: 33;

        hence (k ! a) is iso by A1, A3, Def5;

      end;

      ((G1 * F1),(G2 * F1)) are_naturally_equivalent by Lm2, A1, Th10, A2;

      hence thesis by A2, Def5;

    end;

    theorem :: FUNCTOR3:37

    (F1,F2) are_naturally_equivalent & (G1,G2) are_naturally_equivalent implies ((G1 * F1),(G2 * F2)) are_naturally_equivalent & (f (#) e) is natural_equivalence of (G1 * F1), (G2 * F2)

    proof

      assume that

       A1: (F1,F2) are_naturally_equivalent and

       A2: (G1,G2) are_naturally_equivalent ;

      

       A3: ((G1 * F1),(G1 * F2)) are_naturally_equivalent by A1, Th35;

      G1 is_naturally_transformable_to G2 by A2;

      then

      reconsider sF2 = (f * F2) as natural_transformation of (G1 * F2), (G2 * F2) by Th29;

      F1 is_naturally_transformable_to F2 by A1;

      then

      reconsider G1t = (G1 * e) as natural_transformation of (G1 * F1), (G1 * F2) by Th28;

      

       A4: ((G1 * F2),(G2 * F2)) are_naturally_equivalent by A2, Th36;

      (f * F2) is natural_equivalence of (G1 * F2), (G2 * F2) & (G1 * e) is natural_equivalence of (G1 * F1), (G1 * F2) by A1, A2, Th35, Th36;

      then (sF2 `*` G1t) is natural_equivalence of (G1 * F1), (G2 * F2) by A4, A3, Th34;

      hence thesis by A4, A3, Th33, FUNCTOR2:def 8;

    end;

    definition

      let A,B be category, F1,F2 be covariant Functor of A, B, e be natural_equivalence of F1, F2;

      :: FUNCTOR3:def6

      func e " -> natural_equivalence of F2, F1 means

      : Def6: for a be Object of A holds (it . a) = ((e ! a) " );

      existence

      proof

        

         A2: for a be Object of A holds (e ! a) is iso by A1, Def5;

        F1 is_naturally_transformable_to F2 & F2 is_transformable_to F1 by A1;

        then

        consider f be natural_transformation of F2, F1 such that

         A3: for a be Object of A holds (f . a) = ((e ! a) " ) & (f ! a) is iso by A2, Th32;

        f is natural_equivalence of F2, F1

        proof

          thus (F2,F1) are_naturally_equivalent by A1;

          let a be Object of A;

          thus thesis by A3;

        end;

        then

        reconsider f as natural_equivalence of F2, F1;

        take f;

        let a be Object of A;

        thus thesis by A3;

      end;

      uniqueness

      proof

        let P,R be natural_equivalence of F2, F1 such that

         A4: for a be Object of A holds (P . a) = ((e ! a) " ) and

         A5: for a be Object of A holds (R . a) = ((e ! a) " );

        

         A6: F2 is_transformable_to F1 by A1;

        now

          let a be Object of A;

          

          thus (P ! a) = (P . a) by A6, FUNCTOR2:def 4

          .= ((e ! a) " ) by A4

          .= (R . a) by A5

          .= (R ! a) by A6, FUNCTOR2:def 4;

        end;

        hence P = R by A6, FUNCTOR2: 3;

      end;

    end

    theorem :: FUNCTOR3:38

    

     Th38: for o be Object of A st (F1,F2) are_naturally_equivalent holds ((e " ) ! o) = ((e ! o) " )

    proof

      let o be Object of A;

      assume

       A1: (F1,F2) are_naturally_equivalent ;

      then F2 is_transformable_to F1;

      

      hence ((e " ) ! o) = ((e " ) . o) by FUNCTOR2:def 4

      .= ((e ! o) " ) by A1, Def6;

    end;

    theorem :: FUNCTOR3:39

    

     Th39: (F1,F2) are_naturally_equivalent implies (e `*` (e " )) = ( idt F2)

    proof

      assume

       A1: (F1,F2) are_naturally_equivalent ;

      then

       A2: F1 is_transformable_to F2 & F2 is_transformable_to F1 by Def4;

      

       A3: F1 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F1 by A1, Def4;

      now

        let a be Object of A;

        

         A4: (e ! a) is iso by A1, Def5;

        

        thus ((e `*` (e " )) ! a) = ((e qua transformation of F1, F2 `*` (e " )) ! a) by A3, FUNCTOR2:def 8

        .= ((e ! a) * ((e " ) ! a)) by A2, FUNCTOR2:def 5

        .= ((e ! a) * ((e ! a) " )) by A1, Th38

        .= ( idm (F2 . a)) by A4, ALTCAT_3:def 5

        .= (( idt F2) ! a) by FUNCTOR2: 4;

      end;

      hence thesis by FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:40

    (F1,F2) are_naturally_equivalent implies ((e " ) `*` e) = ( idt F1)

    proof

      assume

       A1: (F1,F2) are_naturally_equivalent ;

      then

       A2: F1 is_transformable_to F2 & F2 is_transformable_to F1 by Def4;

      

       A3: F1 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F1 by A1, Def4;

      now

        let a be Object of A;

        

         A4: (e ! a) is iso by A1, Def5;

        

        thus (((e " ) `*` e) ! a) = (((e " ) `*` e qua transformation of F1, F2) ! a) by A3, FUNCTOR2:def 8

        .= (((e " ) ! a) * (e ! a)) by A2, FUNCTOR2:def 5

        .= (((e ! a) " ) * (e ! a)) by A1, Th38

        .= ( idm (F1 . a)) by A4, ALTCAT_3:def 5

        .= (( idt F1) ! a) by FUNCTOR2: 4;

      end;

      hence thesis by FUNCTOR2: 3;

    end;

    definition

      let A,B be category, F be covariant Functor of A, B;

      :: original: idt

      redefine

      func idt F -> natural_equivalence of F, F ;

      coherence

      proof

        set e = the natural_equivalence of F, F;

        (e `*` (e " )) = ( idt F) by Th39;

        hence thesis by Th34;

      end;

    end

    theorem :: FUNCTOR3:41

    (F1,F2) are_naturally_equivalent implies ((e " ) " ) = e

    proof

      assume

       A1: (F1,F2) are_naturally_equivalent ;

      then

       A2: F1 is_transformable_to F2 by Def4;

      now

        let a be Object of A;

        

         A3: <^(F1 . a), (F2 . a)^> <> {} by A2;

        F2 is_transformable_to F1 by A1;

        then

         A4: <^(F2 . a), (F1 . a)^> <> {} ;

        (e ! a) is iso by A1, Def5;

        then

         A5: (e ! a) is retraction coretraction by ALTCAT_3: 5;

        

        thus (((e " ) " ) ! a) = (((e " ) ! a) " ) by A1, Th38

        .= (((e ! a) " ) " ) by A1, Th38

        .= (e ! a) by A3, A4, A5, ALTCAT_3: 3;

      end;

      hence thesis by A2, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:42

    for k be natural_equivalence of F1, F3 st k = (e1 `*` e) & (F1,F2) are_naturally_equivalent & (F2,F3) are_naturally_equivalent holds (k " ) = ((e " ) `*` (e1 " ))

    proof

      let k be natural_equivalence of F1, F3 such that

       A1: k = (e1 `*` e) and

       A2: (F1,F2) are_naturally_equivalent and

       A3: (F2,F3) are_naturally_equivalent ;

      

       A4: F3 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F1 by A2, A3, Def4;

      

       A5: F1 is_transformable_to F2 & F2 is_transformable_to F3 by A2, A3, Def4;

      

       A6: F1 is_naturally_transformable_to F2 & F2 is_naturally_transformable_to F3 by A2, A3;

      

       A7: F3 is_transformable_to F2 & F2 is_transformable_to F1 by A2, A3;

      then

       A8: F3 is_transformable_to F1 by FUNCTOR2: 2;

      now

        let a be Object of A;

        

         A9: <^(F1 . a), (F2 . a)^> <> {} & <^(F2 . a), (F3 . a)^> <> {} by A5;

        

         A10: <^(F3 . a), (F1 . a)^> <> {} by A8;

        

         A11: (e ! a) is iso & (e1 ! a) is iso by A2, A3, Def5;

        

        thus ((k " ) ! a) = (((e1 `*` e) ! a) " ) by A1, A2, A3, Th33, Th38

        .= (((e1 qua transformation of F2, F3 `*` e) ! a) " ) by A6, FUNCTOR2:def 8

        .= (((e1 ! a) * (e ! a)) " ) by A5, FUNCTOR2:def 5

        .= (((e ! a) " ) * ((e1 ! a) " )) by A11, A9, A10, ALTCAT_3: 7

        .= (((e ! a) " ) * ((e1 " ) ! a)) by A3, Th38

        .= (((e " ) ! a) * ((e1 " ) ! a)) by A2, Th38

        .= (((e " ) qua transformation of F2, F1 `*` (e1 " )) ! a) by A7, FUNCTOR2:def 5

        .= (((e " ) `*` (e1 " )) ! a) by A4, FUNCTOR2:def 8;

      end;

      hence thesis by A7, FUNCTOR2: 2, FUNCTOR2: 3;

    end;

    theorem :: FUNCTOR3:43

    (( idt F1) " ) = ( idt F1)

    proof

      now

        let a be Object of A;

        

        thus ((( idt F1) " ) ! a) = ((( idt F1) ! a) " ) by Th38

        .= (( idm (F1 . a)) " ) by FUNCTOR2: 4

        .= ( idm (F1 . a)) by ALTCAT_3: 4

        .= (( idt F1) ! a) by FUNCTOR2: 4;

      end;

      hence thesis by FUNCTOR2: 3;

    end;