Article FUNCTOR2, MML version 4.99.1005

:: FUNCTOR2:condreg 1
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster -> feasible id-preserving (Functor of a1,a2);
end;

:: FUNCTOR2:condreg 2
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster covariant -> Covariant comp-preserving (Functor of a1,a2);
end;

:: FUNCTOR2:condreg 3
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster Covariant comp-preserving -> covariant (Functor of a1,a2);
end;

:: FUNCTOR2:condreg 4
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster contravariant -> Contravariant comp-reversing (Functor of a1,a2);
end;

:: FUNCTOR2:condreg 5
registration
  let a1 be non empty transitive with_units AltCatStr;
  let a2 be non empty with_units AltCatStr;
  cluster Contravariant comp-reversing -> contravariant (Functor of a1,a2);
end;

:: FUNCTOR2:th 2
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4 being Element of the carrier of b1 holds
   b3 . idm b4 = idm (b3 . b4);

:: FUNCTOR2:prednot 1 => FUNCTOR2:pred 1
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  pred A3 is_transformable_to A4 means
    for b1 being Element of the carrier of a1 holds
       <^a3 . b1,a4 . b1^> <> {};
  reflexivity;
::  for a1, a2 being non empty transitive with_units AltCatStr
::  for a3 being covariant Functor of a1,a2 holds
::     a3 is_transformable_to a3;
end;

:: FUNCTOR2:dfs 1
definiens
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
To prove
     a3 is_transformable_to a4
it is sufficient to prove
  thus for b1 being Element of the carrier of a1 holds
       <^a3 . b1,a4 . b1^> <> {};

:: FUNCTOR2:def 1
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2 holds
   b3 is_transformable_to b4
iff
   for b5 being Element of the carrier of b1 holds
      <^b3 . b5,b4 . b5^> <> {};

:: FUNCTOR2:th 4
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
      st b3 is_transformable_to b4 & b4 is_transformable_to b5
   holds b3 is_transformable_to b5;

:: FUNCTOR2:modenot 1 => FUNCTOR2:mode 1
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  assume a3 is_transformable_to a4;
  mode transformation of A3,A4 -> ManySortedSet of the carrier of a1 means
    for b1 being Element of the carrier of a1 holds
       it . b1 is Element of <^a3 . b1,a4 . b1^>;
end;

:: FUNCTOR2:dfs 2
definiens
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  let a5 be ManySortedSet of the carrier of a1;
To prove
     a5 is transformation of a3,a4
it is sufficient to prove
thus a3 is_transformable_to a4;
  thus for b1 being Element of the carrier of a1 holds
       a5 . b1 is Element of <^a3 . b1,a4 . b1^>;

:: FUNCTOR2:def 2
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_transformable_to b4
for b5 being ManySortedSet of the carrier of b1 holds
      b5 is transformation of b3,b4
   iff
      for b6 being Element of the carrier of b1 holds
         b5 . b6 is Element of <^b3 . b6,b4 . b6^>;

:: FUNCTOR2:funcnot 1 => FUNCTOR2:func 1
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be covariant Functor of a1,a2;
  func idt A3 -> transformation of a3,a3 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = idm (a3 . b1);
end;

:: FUNCTOR2:def 3
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4 being transformation of b3,b3 holds
      b4 = idt b3
   iff
      for b5 being Element of the carrier of b1 holds
         b4 . b5 = idm (b3 . b5);

:: FUNCTOR2:funcnot 2 => FUNCTOR2:func 2
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  let a5 be transformation of a3,a4;
  let a6 be Element of the carrier of a1;
  assume a3 is_transformable_to a4;
  func A5 ! A6 -> Element of <^a3 . a6,a4 . a6^> means
    it = a5 . a6;
end;

:: FUNCTOR2:def 4
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_transformable_to b4
for b5 being transformation of b3,b4
for b6 being Element of the carrier of b1
for b7 being Element of <^b3 . b6,b4 . b6^> holds
      b7 = b5 ! b6
   iff
      b7 = b5 . b6;

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

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

:: FUNCTOR2:th 5
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_transformable_to b4
for b5, b6 being transformation of b3,b4
      st for b7 being Element of the carrier of b1 holds
           b5 ! b7 = b6 ! b7
   holds b5 = b6;

:: FUNCTOR2:th 6
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2
for b4 being Element of the carrier of b1 holds
   (idt b3) ! b4 = idm (b3 . b4);

:: FUNCTOR2:th 7
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_transformable_to b4
for b5 being transformation of b3,b4 holds
   (idt b4) `*` b5 = b5 & b5 `*` idt b3 = b5;

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

:: FUNCTOR2:prednot 2 => FUNCTOR2:pred 2
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  pred A3 is_naturally_transformable_to A4 means
    a3 is_transformable_to a4 &
     (ex b1 being transformation of a3,a4 st
        for b2, b3 being Element of the carrier of a1
           st <^b2,b3^> <> {}
        for b4 being Element of <^b2,b3^> holds
           (b1 ! b3) * (a3 . b4) = (a4 . b4) * (b1 ! b2));
end;

:: FUNCTOR2:dfs 6
definiens
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
To prove
     a3 is_naturally_transformable_to a4
it is sufficient to prove
  thus a3 is_transformable_to a4 &
     (ex b1 being transformation of a3,a4 st
        for b2, b3 being Element of the carrier of a1
           st <^b2,b3^> <> {}
        for b4 being Element of <^b2,b3^> holds
           (b1 ! b3) * (a3 . b4) = (a4 . b4) * (b1 ! b2));

:: FUNCTOR2:def 6
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2 holds
   b3 is_naturally_transformable_to b4
iff
   b3 is_transformable_to b4 &
    (ex b5 being transformation of b3,b4 st
       for b6, b7 being Element of the carrier of b1
          st <^b6,b7^> <> {}
       for b8 being Element of <^b6,b7^> holds
          (b5 ! b7) * (b3 . b8) = (b4 . b8) * (b5 ! b6));

:: FUNCTOR2:th 9
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being covariant Functor of b1,b2 holds
   b3 is_naturally_transformable_to b3;

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

:: FUNCTOR2:modenot 2 => FUNCTOR2:mode 2
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  assume a3 is_naturally_transformable_to a4;
  mode natural_transformation of A3,A4 -> transformation of a3,a4 means
    for b1, b2 being Element of the carrier of a1
       st <^b1,b2^> <> {}
    for b3 being Element of <^b1,b2^> holds
       (it ! b2) * (a3 . b3) = (a4 . b3) * (it ! b1);
end;

:: FUNCTOR2:dfs 7
definiens
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3, a4 be covariant Functor of a1,a2;
  let a5 be transformation of a3,a4;
To prove
     a5 is natural_transformation of a3,a4
it is sufficient to prove
thus a3 is_naturally_transformable_to a4;
  thus for b1, b2 being Element of the carrier of a1
       st <^b1,b2^> <> {}
    for b3 being Element of <^b1,b2^> holds
       (a5 ! b2) * (a3 . b3) = (a4 . b3) * (a5 ! b1);

:: FUNCTOR2:def 7
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_naturally_transformable_to b4
for b5 being transformation of b3,b4 holds
      b5 is natural_transformation of b3,b4
   iff
      for b6, b7 being Element of the carrier of b1
         st <^b6,b7^> <> {}
      for b8 being Element of <^b6,b7^> holds
         (b5 ! b7) * (b3 . b8) = (b4 . b8) * (b5 ! b6);

:: FUNCTOR2:funcnot 4 => FUNCTOR2:func 4
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  let a3 be covariant Functor of a1,a2;
  redefine func idt a3 -> natural_transformation of a3,a3;
end;

:: FUNCTOR2:funcnot 5 => FUNCTOR2:func 5
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  let a3, a4, a5 be covariant Functor of a1,a2;
  let a6 be natural_transformation of a3,a4;
  let a7 be natural_transformation of a4,a5;
  assume a3 is_naturally_transformable_to a4 & a4 is_naturally_transformable_to a5;
  func A7 `*` A6 -> natural_transformation of a3,a5 means
    it = a7 `*` a6;
end;

:: FUNCTOR2:def 8
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
   st b3 is_naturally_transformable_to b4 & b4 is_naturally_transformable_to b5
for b6 being natural_transformation of b3,b4
for b7 being natural_transformation of b4,b5
for b8 being natural_transformation of b3,b5 holds
      b8 = b7 `*` b6
   iff
      b8 = b7 `*` b6;

:: FUNCTOR2:th 11
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4 being covariant Functor of b1,b2
   st b3 is_naturally_transformable_to b4
for b5 being natural_transformation of b3,b4 holds
   (idt b4) `*` b5 = b5 & b5 `*` idt b3 = b5;

:: FUNCTOR2:th 12
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3, b4, b5 being covariant Functor of b1,b2
   st b3 is_naturally_transformable_to b4 & b4 is_naturally_transformable_to b5
for b6 being natural_transformation of b3,b4
for b7 being natural_transformation of b4,b5
for b8 being Element of the carrier of b1 holds
   (b7 `*` b6) ! b8 = (b7 ! b8) * (b6 ! b8);

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

:: FUNCTOR2:funcnot 6 => FUNCTOR2:func 6
definition
  let a1 be set;
  let a2, a3 be ManySortedSet of a1;
  func Funcs(A2,A3) -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is ManySortedFunction of a2,a3
    if for b1 being set
          st b1 in a1 & a3 . b1 = {}
       holds a2 . b1 = {}
    otherwise it = {};
end;

:: FUNCTOR2:def 9
theorem
for b1 being set
for b2, b3 being ManySortedSet of b1
for b4 being set holds
   (for b5 being set
          st b5 in b1 & b3 . b5 = {}
       holds b2 . b5 = {} implies    (b4 = Funcs(b2,b3)
    iff
       for b5 being set holds
             b5 in b4
          iff
             b5 is ManySortedFunction of b2,b3)) &
    (for b5 being set
          st b5 in b1 & b3 . b5 = {}
       holds b2 . b5 = {} or    (b4 = Funcs(b2,b3)
    iff
       b4 = {}));

:: FUNCTOR2:funcnot 7 => FUNCTOR2:func 7
definition
  let a1, a2 be non empty transitive with_units AltCatStr;
  func Funct(A1,A2) -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is strict covariant Functor of a1,a2;
end;

:: FUNCTOR2:def 10
theorem
for b1, b2 being non empty transitive with_units AltCatStr
for b3 being set holds
      b3 = Funct(b1,b2)
   iff
      for b4 being set holds
            b4 in b3
         iff
            b4 is strict covariant Functor of b1,b2;

:: FUNCTOR2:funcnot 8 => FUNCTOR2:func 8
definition
  let a1, a2 be non empty transitive associative with_units AltCatStr;
  func Functors(A1,A2) -> non empty transitive strict AltCatStr means
    the carrier of it = Funct(a1,a2) &
     (for b1, b2 being strict covariant Functor of a1,a2
     for b3 being set holds
           b3 in (the Arrows of it) .(b1,b2)
        iff
           b1 is_naturally_transformable_to b2 & b3 is natural_transformation of b1,b2) &
     (for b1, b2, b3 being strict covariant Functor of a1,a2
        st b1 is_naturally_transformable_to b2 & b2 is_naturally_transformable_to b3
     for b4 being natural_transformation of b1,b2
     for b5 being natural_transformation of b2,b3 holds
        ex b6 being Relation-like Function-like set st
           b6 = (the Comp of it) .(b1,b2,b3) & b6 .(b5,b4) = b5 `*` b4);
end;

:: FUNCTOR2:def 11
theorem
for b1, b2 being non empty transitive associative with_units AltCatStr
for b3 being non empty transitive strict AltCatStr holds
      b3 = Functors(b1,b2)
   iff
      the carrier of b3 = Funct(b1,b2) &
       (for b4, b5 being strict covariant Functor of b1,b2
       for b6 being set holds
             b6 in (the Arrows of b3) .(b4,b5)
          iff
             b4 is_naturally_transformable_to b5 & b6 is natural_transformation of b4,b5) &
       (for b4, b5, b6 being strict covariant Functor of b1,b2
          st b4 is_naturally_transformable_to b5 & b5 is_naturally_transformable_to b6
       for b7 being natural_transformation of b4,b5
       for b8 being natural_transformation of b5,b6 holds
          ex b9 being Relation-like Function-like set st
             b9 = (the Comp of b3) .(b4,b5,b6) & b9 .(b8,b7) = b8 `*` b7);