Article FUNCTOR3, MML version 4.99.1005

:: FUNCTOR3:exreg 1
registration
  cluster non empty transitive strict associative with_units AltCatStr;
end;

:: FUNCTOR3:exreg 2
registration
  let a1 be non empty transitive AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster feasible strict Covariant Contravariant comp-preserving comp-reversing FunctorStr over a1,a2;
end;

:: FUNCTOR3:exreg 3
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster feasible strict Covariant Contravariant id-preserving comp-preserving comp-reversing FunctorStr over a1,a2;
end;

:: FUNCTOR3:exreg 4
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster feasible strict id-preserving covariant contravariant Functor of a1,a2;
end;

:: FUNCTOR3:th 1
theorem
for b1 being non empty transitive associative with_units AltCatStr
for b2, b3, b4, b5 being Element of the carrier of b1
for b6 being Element of <^b2,b3^>
for b7 being Element of <^b3,b4^>
for b8 being Element of <^b2,b5^>
for b9 being Element of <^b5,b4^>
      st b7 * b6 = b9 * b8 & b6 * (b6 ") = idm b3 & b9 " * b9 = idm b5 & <^b2,b3^> <> {} & <^b3,b2^> <> {} & <^b3,b4^> <> {} & <^b4,b5^> <> {} & <^b5,b4^> <> {}
   holds b8 * (b6 ") = b9 " * b7;

:: FUNCTOR3:th 2
theorem
for b1 being non empty transitive AltCatStr
for b2, b3 being non empty with_units AltCatStr
for b4 being feasible Covariant FunctorStr over b1,b2
for b5 being FunctorStr over b2,b3
for b6, b7 being Element of the carrier of b1 holds
Morph-Map(b5 * b4,b6,b7) = (Morph-Map(b4,b6,b7)) * Morph-Map(b5,b4 . b6,b4 . b7);

:: FUNCTOR3:th 3
theorem
for b1 being non empty transitive AltCatStr
for b2, b3 being non empty with_units AltCatStr
for b4 being feasible Contravariant FunctorStr over b1,b2
for b5 being FunctorStr over b2,b3
for b6, b7 being Element of the carrier of b1 holds
Morph-Map(b5 * b4,b6,b7) = (Morph-Map(b4,b6,b7)) * Morph-Map(b5,b4 . b7,b4 . b6);

:: FUNCTOR3:th 4
theorem
for b1 being non empty transitive AltCatStr
for b2 being non empty with_units AltCatStr
for b3 being feasible FunctorStr over b1,b2 holds
   (id b2) * b3 = FunctorStr(#the ObjectMap of b3,the MorphMap of b3#);

:: FUNCTOR3:th 5
theorem
for b1 being non empty transitive with_units AltCatStr
for b2 being non empty with_units AltCatStr
for b3 being feasible FunctorStr over b1,b2 holds
   b3 * id b1 = FunctorStr(#the ObjectMap of b3,the MorphMap of b3#);

:: FUNCTOR3:th 6
theorem
for b1 being non empty AltCatStr
for b2, b3 being non empty reflexive AltCatStr
for b4 being feasible Covariant FunctorStr over b1,b2
for b5 being feasible Covariant FunctorStr over b2,b3
for b6, b7 being Element of the carrier of b1
for b8 being Element of <^b6,b7^>
      st <^b6,b7^> <> {}
   holds (b5 * b4) . b8 = b5 . (b4 . b8);

:: FUNCTOR3:th 7
theorem
for b1 being non empty AltCatStr
for b2, b3 being non empty reflexive AltCatStr
for b4 being feasible Contravariant FunctorStr over b1,b2
for b5 being feasible Contravariant FunctorStr over b2,b3
for b6, b7 being Element of the carrier of b1
for b8 being Element of <^b6,b7^>
      st <^b6,b7^> <> {}
   holds (b5 * b4) . b8 = b5 . (b4 . b8);

:: FUNCTOR3:th 8
theorem
for b1 being non empty AltCatStr
for b2, b3 being non empty reflexive AltCatStr
for b4 being feasible Covariant FunctorStr over b1,b2
for b5 being feasible Contravariant FunctorStr over b2,b3
for b6, b7 being Element of the carrier of b1
for b8 being Element of <^b6,b7^>
      st <^b6,b7^> <> {}
   holds (b5 * b4) . b8 = b5 . (b4 . b8);

:: FUNCTOR3:th 9
theorem
for b1 being non empty AltCatStr
for b2, b3 being non empty reflexive AltCatStr
for b4 being feasible Covariant FunctorStr over b3,b2
for b5 being feasible Contravariant FunctorStr over b1,b3
for b6, b7 being Element of the carrier of b1
for b8 being Element of <^b6,b7^>
      st <^b6,b7^> <> {}
   holds (b4 * b5) . b8 = b4 . (b5 . b8);

:: FUNCTOR3:funcreg 1
registration
  let a1 be non empty transitive AltCatStr;
  let a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be feasible Covariant comp-preserving FunctorStr over a1,a2;
  let a5 be feasible Covariant comp-preserving FunctorStr over a2,a3;
  cluster a5 * a4 -> strict comp-preserving;
end;

:: FUNCTOR3:funcreg 2
registration
  let a1 be non empty transitive AltCatStr;
  let a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be feasible Contravariant comp-reversing FunctorStr over a1,a2;
  let a5 be feasible Contravariant comp-reversing FunctorStr over a2,a3;
  cluster a5 * a4 -> strict comp-preserving;
end;

:: FUNCTOR3:funcreg 3
registration
  let a1 be non empty transitive AltCatStr;
  let a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be feasible Covariant comp-preserving FunctorStr over a1,a2;
  let a5 be feasible Contravariant comp-reversing FunctorStr over a2,a3;
  cluster a5 * a4 -> strict comp-reversing;
end;

:: FUNCTOR3:funcreg 4
registration
  let a1 be non empty transitive AltCatStr;
  let a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be feasible Contravariant comp-reversing FunctorStr over a1,a2;
  let a5 be feasible Covariant comp-preserving FunctorStr over a2,a3;
  cluster a5 * a4 -> strict comp-reversing;
end;

:: FUNCTOR3:funcnot 1 => FUNCTOR3:func 1
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be covariant Functor of a1,a2;
  let a5 be covariant Functor of a2,a3;
  redefine func a5 * a4 -> strict covariant Functor of a1,a3;
end;

:: FUNCTOR3:funcnot 2 => FUNCTOR3:func 2
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be contravariant Functor of a1,a2;
  let a5 be contravariant Functor of a2,a3;
  redefine func a5 * a4 -> strict covariant Functor of a1,a3;
end;

:: FUNCTOR3:funcnot 3 => FUNCTOR3:func 3
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be covariant Functor of a1,a2;
  let a5 be contravariant Functor of a2,a3;
  redefine func a5 * a4 -> strict contravariant Functor of a1,a3;
end;

:: FUNCTOR3:funcnot 4 => FUNCTOR3:func 4
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be non empty with_units AltCatStr;
  let a4 be contravariant Functor of a1,a2;
  let a5 be covariant Functor of a2,a3;
  redefine func a5 * a4 -> strict contravariant Functor of a1,a3;
end;

:: FUNCTOR3:th 10
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b1,b2
for b6, b7 being covariant Functor of b2,b3
      st b4 is_transformable_to b5 & b6 is_transformable_to b7
   holds b6 * b4 is_transformable_to b7 * b5;

:: FUNCTOR3:funcnot 5 => FUNCTOR3:func 5
definition
  let a1, a2, a3 be non empty transitive with_units AltCatStr;
  let a4, a5 be covariant Functor of a1,a2;
  let a6 be transformation of a4,a5;
  let a7 be covariant Functor of a2,a3;
  assume a4 is_transformable_to a5;
  func A7 * A6 -> transformation of a7 * a4,a7 * a5 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = a7 . (a6 ! b1);
end;

:: FUNCTOR3:def 1
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b1,b2
for b6 being transformation of b4,b5
for b7 being covariant Functor of b2,b3
   st b4 is_transformable_to b5
for b8 being transformation of b7 * b4,b7 * b5 holds
      b8 = b7 * b6
   iff
      for b9 being Element of the carrier of b1 holds
         b8 . b9 = b7 . (b6 ! b9);

:: FUNCTOR3:th 11
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b3,b2
for b6 being covariant Functor of b2,b1
for b7 being transformation of b4,b5
for b8 being Element of the carrier of b3
      st b4 is_transformable_to b5
   holds (b6 * b7) ! b8 = b6 . (b7 ! b8);

:: FUNCTOR3:funcnot 6 => FUNCTOR3:func 6
definition
  let a1, a2, a3 be non empty transitive with_units AltCatStr;
  let a4, a5 be covariant Functor of a2,a3;
  let a6 be covariant Functor of a1,a2;
  let a7 be transformation of a4,a5;
  assume a4 is_transformable_to a5;
  func A7 * A6 -> transformation of a4 * a6,a5 * a6 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = a7 ! (a6 . b1);
end;

:: FUNCTOR3:def 2
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b2,b3
for b6 being covariant Functor of b1,b2
for b7 being transformation of b4,b5
   st b4 is_transformable_to b5
for b8 being transformation of b4 * b6,b5 * b6 holds
      b8 = b7 * b6
   iff
      for b9 being Element of the carrier of b1 holds
         b8 . b9 = b7 ! (b6 . b9);

:: FUNCTOR3:th 12
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4 being covariant Functor of b3,b1
for b5, b6 being covariant Functor of b1,b2
for b7 being transformation of b5,b6
for b8 being Element of the carrier of b3
      st b5 is_transformable_to b6
   holds (b7 * b4) ! b8 = b7 ! (b4 . b8);

:: FUNCTOR3:th 13
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5, b6 being covariant Functor of b2,b3
for b7 being covariant Functor of b3,b1
for b8 being transformation of b4,b5
for b9 being transformation of b5,b6
      st b4 is_transformable_to b5 & b5 is_transformable_to b6
   holds b7 * (b9 `*` b8) = (b7 * b9) `*` (b7 * b8);

:: FUNCTOR3:th 14
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5, b6, b7 being covariant Functor of b2,b3
for b8 being transformation of b5,b6
for b9 being transformation of b6,b7
      st b5 is_transformable_to b6 & b6 is_transformable_to b7
   holds (b9 `*` b8) * b4 = (b9 * b4) `*` (b8 * b4);

:: FUNCTOR3:th 15
theorem
for b1, b2, b3, b4 being non empty transitive with_units AltCatStr
for b5 being covariant Functor of b1,b2
for b6 being covariant Functor of b2,b3
for b7, b8 being covariant Functor of b3,b4
for b9 being transformation of b7,b8
      st b7 is_transformable_to b8
   holds (b9 * b6) * b5 = b9 * (b6 * b5);

:: FUNCTOR3:th 16
theorem
for b1, b2, b3, b4 being non empty transitive with_units AltCatStr
for b5 being covariant Functor of b1,b3
for b6, b7 being covariant Functor of b3,b4
for b8 being covariant Functor of b4,b2
for b9 being transformation of b6,b7
      st b6 is_transformable_to b7
   holds (b8 * b9) * b5 = b8 * (b9 * b5);

:: FUNCTOR3:th 17
theorem
for b1, b2, b3, b4 being non empty transitive with_units AltCatStr
for b5, b6 being covariant Functor of b3,b4
for b7 being covariant Functor of b4,b1
for b8 being covariant Functor of b1,b2
for b9 being transformation of b5,b6
      st b5 is_transformable_to b6
   holds (b8 * b7) * b9 = b8 * (b7 * b9);

:: FUNCTOR3:th 18
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5 being covariant Functor of b2,b3 holds
   (idt b5) * b4 = idt (b5 * b4);

:: FUNCTOR3:th 19
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5 being covariant Functor of b2,b3 holds
   b5 * idt b4 = idt (b5 * b4);

:: FUNCTOR3:th 20
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being transformation of b3,b4
      st b3 is_transformable_to b4
   holds (id b2) * b5 = b5;

:: FUNCTOR3:th 21
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b2,b1
for b5 being transformation of b3,b4
      st b3 is_transformable_to b4
   holds b5 * id b2 = b5;

:: FUNCTOR3:funcnot 7 => FUNCTOR3:func 7
definition
  let a1, a2, a3 be non empty transitive with_units AltCatStr;
  let a4, a5 be covariant Functor of a1,a2;
  let a6, a7 be covariant Functor of a2,a3;
  let a8 be transformation of a4,a5;
  let a9 be transformation of a6,a7;
  func A9 (#) A8 -> transformation of a6 * a4,a7 * a5 equals
    (a9 * a5) `*` (a6 * a8);
end;

:: FUNCTOR3:def 3
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b1,b2
for b6, b7 being covariant Functor of b2,b3
for b8 being transformation of b4,b5
for b9 being transformation of b6,b7 holds
   b9 (#) b8 = (b9 * b5) `*` (b6 * b8);

:: FUNCTOR3:th 22
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b2,b3
for b6, b7 being covariant Functor of b3,b1
for b8 being transformation of b4,b5
for b9 being natural_transformation of b6,b7
      st b4 is_transformable_to b5 & b6 is_naturally_transformable_to b7
   holds b9 (#) b8 = (b7 * b8) `*` (b9 * b4);

:: FUNCTOR3:th 23
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being transformation of b3,b4
      st b3 is_transformable_to b4
   holds (idt id b2) (#) b5 = b5;

:: FUNCTOR3:th 24
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b2,b1
for b5 being transformation of b3,b4
      st b3 is_transformable_to b4
   holds b5 (#) idt id b2 = b5;

:: FUNCTOR3:th 25
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4, b5 being covariant Functor of b2,b3
for b6 being covariant Functor of b3,b1
for b7 being transformation of b4,b5
      st b4 is_transformable_to b5
   holds b6 * b7 = (idt b6) (#) b7;

:: FUNCTOR3:th 26
theorem
for b1, b2, b3 being non empty transitive with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5, b6 being covariant Functor of b2,b3
for b7 being transformation of b5,b6
      st b5 is_transformable_to b6
   holds b7 * b4 = b7 (#) idt b4;

:: FUNCTOR3:th 27
theorem
for b1, b2, b3, b4 being non empty transitive associative with_units AltCatStr
for b5, b6 being covariant Functor of b1,b2
for b7, b8 being covariant Functor of b2,b3
for b9, b10 being covariant Functor of b3,b4
for b11 being transformation of b5,b6
for b12 being transformation of b7,b8
for b13 being transformation of b9,b10
      st b5 is_transformable_to b6 & b7 is_transformable_to b8 & b9 is_transformable_to b10
   holds (b13 (#) b12) (#) b11 = b13 (#) (b12 (#) b11);

:: FUNCTOR3:th 28
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4, b5 being covariant Functor of b2,b3
for b6 being covariant Functor of b3,b1
for b7 being natural_transformation of b4,b5
      st b4 is_naturally_transformable_to b5
   holds b6 * b7 is natural_transformation of b6 * b4,b6 * b5;

:: FUNCTOR3:th 29
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5, b6 being covariant Functor of b2,b3
for b7 being natural_transformation of b5,b6
      st b5 is_naturally_transformable_to b6
   holds b7 * b4 is natural_transformation of b5 * b4,b6 * b4;

:: FUNCTOR3:th 30
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4, b5 being covariant Functor of b1,b2
for b6, b7 being covariant Functor of b2,b3
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7
      st b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7
   holds b6 * b4 is_naturally_transformable_to b7 * b5 &
    b9 (#) b8 is natural_transformation of b6 * b4,b7 * b5;

:: FUNCTOR3:th 31
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4, b5, b6 being covariant Functor of b1,b2
for b7, b8, b9 being covariant Functor of b2,b3
for b10 being natural_transformation of b7,b8
for b11 being natural_transformation of b8,b9
for b12 being transformation of b4,b5
for b13 being transformation of b5,b6
      st b4 is_naturally_transformable_to b5 & b5 is_naturally_transformable_to b6 & b7 is_naturally_transformable_to b8 & b8 is_naturally_transformable_to b9
   holds (b11 `*` b10) (#) (b13 `*` b12) = (b11 (#) b13) `*` (b10 (#) b12);

:: FUNCTOR3:th 32
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b2,b1
for b5 being natural_transformation of b3,b4
      st b3 is_naturally_transformable_to b4 &
         b4 is_transformable_to b3 &
         (for b6 being Element of the carrier of b2 holds
            b5 ! b6 is iso(b1, b3 . b6, b4 . b6))
   holds b4 is_naturally_transformable_to b3 &
    (ex b6 being natural_transformation of b4,b3 st
       for b7 being Element of the carrier of b2 holds
          b6 . b7 = (b5 ! b7) " & b6 ! b7 is iso(b1, b4 . b7, b3 . b7));

:: FUNCTOR3:prednot 1 => FUNCTOR3:pred 1
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  pred A3,A4 are_naturally_equivalent means
    a3 is_naturally_transformable_to a4 &
     a4 is_transformable_to a3 &
     (ex b1 being natural_transformation of a3,a4 st
        for b2 being Element of the carrier of a1 holds
           b1 ! b2 is iso(a2, a3 . b2, a4 . b2));
  symmetry;
::  for a1, a2 being non empty transitive associative with_units AltCatStr
::  for a3, a4 being covariant Functor of a1,a2
::        st a3,a4 are_naturally_equivalent
::     holds a4,a3 are_naturally_equivalent;
  reflexivity;
::  for a1, a2 being non empty transitive associative with_units AltCatStr
::  for a3 being covariant Functor of a1,a2 holds
::     a3,a3 are_naturally_equivalent;
end;

:: FUNCTOR3:dfs 4
definiens
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
To prove
     a3,a4 are_naturally_equivalent
it is sufficient to prove
  thus a3 is_naturally_transformable_to a4 &
     a4 is_transformable_to a3 &
     (ex b1 being natural_transformation of a3,a4 st
        for b2 being Element of the carrier of a1 holds
           b1 ! b2 is iso(a2, a3 . b2, a4 . b2));

:: FUNCTOR3:def 4
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2 holds
   b3,b4 are_naturally_equivalent
iff
   b3 is_naturally_transformable_to b4 &
    b4 is_transformable_to b3 &
    (ex b5 being natural_transformation of b3,b4 st
       for b6 being Element of the carrier of b1 holds
          b5 ! b6 is iso(b2, b3 . b6, b4 . b6));

:: FUNCTOR3:modenot 1 => FUNCTOR3:mode 1
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  assume a3,a4 are_naturally_equivalent;
  mode natural_equivalence of A3,A4 -> natural_transformation of a3,a4 means
    for b1 being Element of the carrier of a1 holds
       it ! b1 is iso(a2, a3 . b1, a4 . b1);
end;

:: FUNCTOR3:dfs 5
definiens
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  let a5 be natural_transformation of a3,a4;
To prove
     a5 is natural_equivalence of a3,a4
it is sufficient to prove
thus a3,a4 are_naturally_equivalent;
  thus for b1 being Element of the carrier of a1 holds
       a5 ! b1 is iso(a2, a3 . b1, a4 . b1);

:: FUNCTOR3:def 5
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3,b4 are_naturally_equivalent
for b5 being natural_transformation of b3,b4 holds
      b5 is natural_equivalence of b3,b4
   iff
      for b6 being Element of the carrier of b1 holds
         b5 ! b6 is iso(b2, b3 . b6, b4 . b6);

:: FUNCTOR3:th 33
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
      st b3,b4 are_naturally_equivalent & b4,b5 are_naturally_equivalent
   holds b3,b5 are_naturally_equivalent;

:: FUNCTOR3:th 34
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
for b6 being natural_equivalence of b3,b4
for b7 being natural_equivalence of b4,b5
      st b3,b4 are_naturally_equivalent & b4,b5 are_naturally_equivalent
   holds b7 `*` b6 is natural_equivalence of b3,b5;

:: FUNCTOR3:th 35
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4, b5 being covariant Functor of b2,b3
for b6 being covariant Functor of b3,b1
for b7 being natural_equivalence of b4,b5
      st b4,b5 are_naturally_equivalent
   holds b6 * b4,b6 * b5 are_naturally_equivalent & b6 * b7 is natural_equivalence of b6 * b4,b6 * b5;

:: FUNCTOR3:th 36
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4 being covariant Functor of b1,b2
for b5, b6 being covariant Functor of b2,b3
for b7 being natural_equivalence of b5,b6
      st b5,b6 are_naturally_equivalent
   holds b5 * b4,b6 * b4 are_naturally_equivalent & b7 * b4 is natural_equivalence of b5 * b4,b6 * b4;

:: FUNCTOR3:th 37
theorem
for b1, b2, b3 being non empty transitive associative with_units AltCatStr
for b4, b5 being covariant Functor of b1,b2
for b6, b7 being covariant Functor of b2,b3
for b8 being natural_equivalence of b4,b5
for b9 being natural_equivalence of b6,b7
      st b4,b5 are_naturally_equivalent & b6,b7 are_naturally_equivalent
   holds b6 * b4,b7 * b5 are_naturally_equivalent & b9 (#) b8 is natural_equivalence of b6 * b4,b7 * b5;

:: FUNCTOR3:funcnot 8 => FUNCTOR3:func 8
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  let a5 be natural_equivalence of a3,a4;
  assume a3,a4 are_naturally_equivalent;
  func A5 " -> natural_equivalence of a4,a3 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = (a5 ! b1) ";
end;

:: FUNCTOR3:def 6
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being natural_equivalence of b3,b4
   st b3,b4 are_naturally_equivalent
for b6 being natural_equivalence of b4,b3 holds
      b6 = b5 "
   iff
      for b7 being Element of the carrier of b1 holds
         b6 . b7 = (b5 ! b7) ";

:: FUNCTOR3:th 38
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b2,b1
for b5 being natural_equivalence of b3,b4
for b6 being Element of the carrier of b2
      st b3,b4 are_naturally_equivalent
   holds b5 " ! b6 = (b5 ! b6) ";

:: FUNCTOR3:th 39
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being natural_equivalence of b3,b4
      st b3,b4 are_naturally_equivalent
   holds b5 `*` (b5 ") = idt b4;

:: FUNCTOR3:th 40
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being natural_equivalence of b3,b4
      st b3,b4 are_naturally_equivalent
   holds b5 " `*` b5 = idt b3;

:: FUNCTOR3:funcnot 9 => FUNCTOR3:func 9
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3 be covariant Functor of a1,a2;
  redefine func idt a3 -> natural_equivalence of a3,a3;
end;

:: FUNCTOR3:th 41
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
for b5 being natural_equivalence of b3,b4
      st b3,b4 are_naturally_equivalent
   holds b5 " " = b5;

:: FUNCTOR3:th 42
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
for b6 being natural_equivalence of b3,b5
for b7 being natural_equivalence of b5,b4
for b8 being natural_equivalence of b3,b4
      st b8 = b7 `*` b6 & b3,b5 are_naturally_equivalent & b5,b4 are_naturally_equivalent
   holds b8 " = b6 " `*` (b7 ");

:: FUNCTOR3:th 43
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3 being covariant Functor of b1,b2 holds
   (idt b3) " = idt b3;