Article ISOCAT_2, MML version 4.99.1005

:: ISOCAT_2:funcnot 1 => ISOCAT_2:func 1
definition
  let a1, a2, a3 be non empty set;
  let a4 be Function-like quasi_total Relation of a1,Funcs(a2,a3);
  redefine func uncurry a4 -> Function-like quasi_total Relation of [:a1,a2:],a3;
end;

:: ISOCAT_2:th 1
theorem
for b1, b2, b3 being non empty set
for b4 being Function-like quasi_total Relation of b1,Funcs(b2,b3) holds
   curry uncurry b4 = b4;

:: ISOCAT_2:th 2
theorem
for b1, b2, b3 being non empty set
for b4 being Function-like quasi_total Relation of b1,Funcs(b2,b3)
for b5 being Element of b1
for b6 being Element of b2 holds
   (uncurry b4) .(b5,b6) = (b4 . b5) . b6;

:: ISOCAT_2:th 3
theorem
for b1 being set
for b2 being non empty set
for b3, b4 being Function-like quasi_total Relation of {b1},b2
      st b3 . b1 = b4 . b1
   holds b3 = b4;

:: ISOCAT_2:th 4
theorem
for b1, b2 being non empty set
for b3 being Element of b1
for b4 being Function-like quasi_total Relation of b1,b2 holds
   b4 . b3 in rng b4;

:: ISOCAT_2:th 5
theorem
for b1, b2, b3 being non empty set
for b4, b5 being Function-like quasi_total Relation of b1,[:b2,b3:]
      st (pr1(b2,b3)) * b4 = (pr1(b2,b3)) * b5 &
         (pr2(b2,b3)) * b4 = (pr2(b2,b3)) * b5
   holds b4 = b5;

:: ISOCAT_2:th 6
theorem
for b1 being non void Category-like CatStr
for b2 being Element of the Edges of b1 holds
   (id cod b2) * b2 = b2;

:: ISOCAT_2:th 7
theorem
for b1 being non void Category-like CatStr
for b2 being Element of the Edges of b1 holds
   b2 * id dom b2 = b2;

:: ISOCAT_2:th 8
theorem
for b1, b2 being non void Category-like CatStr
for b3 being set holds
      b3 is Element of the Vertices of Functors(b1,b2)
   iff
      b3 is Functor of b1,b2;

:: ISOCAT_2:th 9
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Edges of Functors(b1,b2) holds
   ex b4, b5 being Functor of b1,b2 st
      ex b6 being natural_transformation of b4,b5 st
         b4 is_naturally_transformable_to b5 & dom b3 = b4 & cod b3 = b5 & b3 = [[b4,b5],b6];

:: ISOCAT_2:funcnot 2 => ISOCAT_2:func 2
definition
  let a1, a2 be non void Category-like CatStr;
  let a3 be Element of the Vertices of a1;
  func A3 |-> A2 -> Functor of Functors(a1,a2),a2 means
    for b1, b2 being Functor of a1,a2
    for b3 being natural_transformation of b1,b2
          st b1 is_naturally_transformable_to b2
       holds it . [[b1,b2],b3] = b3 . a3;
end;

:: ISOCAT_2:def 1
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Functor of Functors(b1,b2),b2 holds
      b4 = b3 |-> b2
   iff
      for b5, b6 being Functor of b1,b2
      for b7 being natural_transformation of b5,b6
            st b5 is_naturally_transformable_to b6
         holds b4 . [[b5,b6],b7] = b7 . b3;

:: ISOCAT_2:th 11
theorem
for b1 being non void Category-like CatStr
for b2, b3 being set holds
Functors(1Cat(b2,b3),b1),b1 are_isomorphic;

:: ISOCAT_2:th 12
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Vertices of b1
for b6 being Element of the Vertices of b2 holds
   (b4 ?- b5) . b6 = b4 . [b5,b6];

:: ISOCAT_2:th 13
theorem
for b1, b2 being non void Category-like CatStr
for b3, b4 being Element of the Vertices of b1
for b5, b6 being Element of the Vertices of b2 holds
   Hom(b3,b4) <> {} & Hom(b5,b6) <> {}
iff
   Hom([b3,b5],[b4,b6]) <> {};

:: ISOCAT_2:th 14
theorem
for b1, b2 being non void Category-like CatStr
for b3, b4 being Element of the Vertices of b1
for b5, b6 being Element of the Vertices of b2
   st Hom([b3,b5],[b4,b6]) <> {}
for b7 being Element of the Edges of b1
for b8 being Element of the Edges of b2 holds
      [b7,b8] is Morphism of [b3,b5],[b4,b6]
   iff
      b7 is Morphism of b3,b4 & b8 is Morphism of b5,b6;

:: ISOCAT_2:th 15
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
   st b4 is_naturally_transformable_to b5
for b6 being natural_transformation of b4,b5
for b7 being Element of the Vertices of b1 holds
   b4 ?- b7 is_naturally_transformable_to b5 ?- b7 &
    (curry b6) . b7 is natural_transformation of b4 ?- b7,b5 ?- b7;

:: ISOCAT_2:funcnot 3 => ISOCAT_2:func 3
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of [:a1,a2:],a3;
  let a5 be Element of the Edges of a1;
  func curry(A4,A5) -> Function-like quasi_total Relation of the Edges of a2,the Edges of a3 equals
    (curry a4) . a5;
end;

:: ISOCAT_2:def 2
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Edges of b1 holds
   curry(b4,b5) = (curry b4) . b5;

:: ISOCAT_2:th 16
theorem
for b1, b2 being non void Category-like CatStr
for b3, b4 being Element of the Vertices of b1
for b5, b6 being Element of the Vertices of b2
for b7 being Element of the Edges of b1
for b8 being Element of the Edges of b2
      st b7 in Hom(b3,b4) & b8 in Hom(b5,b6)
   holds [b7,b8] in Hom([b3,b5],[b4,b6]);

:: ISOCAT_2:th 17
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5, b6 being Element of the Vertices of b1
   st Hom(b5,b6) <> {}
for b7 being Morphism of b5,b6 holds
   b4 ?- b5 is_naturally_transformable_to b4 ?- b6 &
    (curry(b4,b7)) * the Id of b2 is natural_transformation of b4 ?- b5,b4 ?- b6;

:: ISOCAT_2:funcnot 4 => ISOCAT_2:func 4
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of [:a1,a2:],a3;
  let a5 be Element of the Edges of a1;
  func A4 ?- A5 -> natural_transformation of a4 ?- dom a5,a4 ?- cod a5 equals
    (curry(a4,a5)) * the Id of a2;
end;

:: ISOCAT_2:def 3
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Edges of b1 holds
   b4 ?- b5 = (curry(b4,b5)) * the Id of b2;

:: ISOCAT_2:th 18
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Edges of b1 holds
   b4 ?- dom b5 is_naturally_transformable_to b4 ?- cod b5;

:: ISOCAT_2:th 19
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Edges of b1
for b6 being Element of the Vertices of b2 holds
   (b4 ?- b5) . b6 = b4 .(b5,id b6);

:: ISOCAT_2:th 20
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Vertices of b1 holds
   id (b4 ?- b5) = b4 ?- id b5;

:: ISOCAT_2:th 21
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5, b6 being Element of the Edges of b1
   st dom b5 = cod b6
for b7 being natural_transformation of b4 ?- dom b6,b4 ?- dom b5
      st b7 = b4 ?- b6
   holds b4 ?- (b5 * b6) = (b4 ?- b5) `*` b7;

:: ISOCAT_2:funcnot 5 => ISOCAT_2:func 5
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of [:a1,a2:],a3;
  func export A4 -> Functor of a1,Functors(a2,a3) means
    for b1 being Element of the Edges of a1 holds
       it . b1 = [[a4 ?- dom b1,a4 ?- cod b1],a4 ?- b1];
end;

:: ISOCAT_2:def 4
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Functor of b1,Functors(b2,b3) holds
      b5 = export b4
   iff
      for b6 being Element of the Edges of b1 holds
         b5 . b6 = [[b4 ?- dom b6,b4 ?- cod b6],b4 ?- b6];

:: ISOCAT_2:th 24
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Vertices of b1 holds
   (export b4) . b5 = b4 ?- b5;

:: ISOCAT_2:th 25
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3
for b5 being Element of the Vertices of b1 holds
   (export b4) . b5 is Functor of b2,b3;

:: ISOCAT_2:th 26
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
      st export b4 = export b5
   holds b4 = b5;

:: ISOCAT_2:th 27
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
   st b4 is_naturally_transformable_to b5
for b6 being natural_transformation of b4,b5 holds
   export b4 is_naturally_transformable_to export b5 &
    (ex b7 being natural_transformation of export b4,export b5 st
       for b8 being Function-like quasi_total Relation of [:the Vertices of b1,the Vertices of b2:],the Edges of b3
          st b6 = b8
       for b9 being Element of the Vertices of b1 holds
          b7 . b9 = [[(export b4) . b9,(export b5) . b9],(curry b8) . b9]);

:: ISOCAT_2:funcnot 6 => ISOCAT_2:func 6
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4, a5 be Functor of [:a1,a2:],a3;
  let a6 be natural_transformation of a4,a5;
  assume a4 is_naturally_transformable_to a5;
  func export A6 -> natural_transformation of export a4,export a5 means
    for b1 being Function-like quasi_total Relation of [:the Vertices of a1,the Vertices of a2:],the Edges of a3
       st a6 = b1
    for b2 being Element of the Vertices of a1 holds
       it . b2 = [[(export a4) . b2,(export a5) . b2],(curry b1) . b2];
end;

:: ISOCAT_2:def 5
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
   st b4 is_naturally_transformable_to b5
for b6 being natural_transformation of b4,b5
for b7 being natural_transformation of export b4,export b5 holds
      b7 = export b6
   iff
      for b8 being Function-like quasi_total Relation of [:the Vertices of b1,the Vertices of b2:],the Edges of b3
         st b6 = b8
      for b9 being Element of the Vertices of b1 holds
         b7 . b9 = [[(export b4) . b9,(export b5) . b9],(curry b8) . b9];

:: ISOCAT_2:th 28
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of [:b1,b2:],b3 holds
   id export b4 = export id b4;

:: ISOCAT_2:th 29
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5, b6 being Functor of [:b1,b2:],b3
   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
   export (b8 `*` b7) = (export b8) `*` export b7;

:: ISOCAT_2:th 30
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
   st b4 is_naturally_transformable_to b5
for b6, b7 being natural_transformation of b4,b5
      st export b6 = export b7
   holds b6 = b7;

:: ISOCAT_2:th 31
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,Functors(b2,b3) holds
   ex b5 being Functor of [:b1,b2:],b3 st
      b4 = export b5;

:: ISOCAT_2:th 32
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of [:b1,b2:],b3
   st export b4 is_naturally_transformable_to export b5
for b6 being natural_transformation of export b4,export b5 holds
   b4 is_naturally_transformable_to b5 &
    (ex b7 being natural_transformation of b4,b5 st
       b6 = export b7);

:: ISOCAT_2:funcnot 7 => ISOCAT_2:func 7
definition
  let a1, a2, a3 be non void Category-like CatStr;
  func export(A1,A2,A3) -> Functor of Functors([:a1,a2:],a3),Functors(a1,Functors(a2,a3)) means
    for b1, b2 being Functor of [:a1,a2:],a3
       st b1 is_naturally_transformable_to b2
    for b3 being natural_transformation of b1,b2 holds
       it . [[b1,b2],b3] = [[export b1,export b2],export b3];
end;

:: ISOCAT_2:def 6
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of Functors([:b1,b2:],b3),Functors(b1,Functors(b2,b3)) holds
      b4 = export(b1,b2,b3)
   iff
      for b5, b6 being Functor of [:b1,b2:],b3
         st b5 is_naturally_transformable_to b6
      for b7 being natural_transformation of b5,b6 holds
         b4 . [[b5,b6],b7] = [[export b5,export b6],export b7];

:: ISOCAT_2:th 33
theorem
for b1, b2, b3 being non void Category-like CatStr holds
export(b1,b2,b3) is isomorphic(Functors([:b1,b2:],b3), Functors(b1,Functors(b2,b3)));

:: ISOCAT_2:th 34
theorem
for b1, b2, b3 being non void Category-like CatStr holds
Functors([:b1,b2:],b3),Functors(b1,Functors(b2,b3)) are_isomorphic;

:: ISOCAT_2:th 35
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6 being Functor of b2,b3
   st b4 is_naturally_transformable_to b5
for b7 being natural_transformation of b4,b5 holds
   b6 * b7 = b7 * b6;

:: ISOCAT_2:funcnot 8 => ISOCAT_2:func 8
definition
  let a1, a2 be non void Category-like CatStr;
  redefine func pr1(a1,a2) -> Functor of [:a1,a2:],a1;
end;

:: ISOCAT_2:funcnot 9 => ISOCAT_2:func 9
definition
  let a1, a2 be non void Category-like CatStr;
  redefine func pr2(a1,a2) -> Functor of [:a1,a2:],a2;
end;

:: ISOCAT_2:funcnot 10 => ISOCAT_2:func 10
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of a1,a2;
  let a5 be Functor of a1,a3;
  redefine func <:a4, a5:> -> Functor of a1,[:a2,a3:];
end;

:: ISOCAT_2:funcnot 11 => ISOCAT_2:func 11
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of a1,[:a2,a3:];
  func Pr1 A4 -> Functor of a1,a2 equals
    (pr1(a2,a3)) * a4;
end;

:: ISOCAT_2:def 7
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,[:b2,b3:] holds
   Pr1 b4 = (pr1(b2,b3)) * b4;

:: ISOCAT_2:funcnot 12 => ISOCAT_2:func 12
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4 be Functor of a1,[:a2,a3:];
  func Pr2 A4 -> Functor of a1,a3 equals
    (pr2(a2,a3)) * a4;
end;

:: ISOCAT_2:def 8
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,[:b2,b3:] holds
   Pr2 b4 = (pr2(b2,b3)) * b4;

:: ISOCAT_2:th 36
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3 holds
   Pr1 <:b4,b5:> = b4 & Pr2 <:b4,b5:> = b5;

:: ISOCAT_2:th 37
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,[:b2,b3:]
      st Pr1 b4 = Pr1 b5 & Pr2 b4 = Pr2 b5
   holds b4 = b5;

:: ISOCAT_2:funcnot 13 => ISOCAT_2:func 13
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4, a5 be Functor of a1,[:a2,a3:];
  let a6 be natural_transformation of a4,a5;
  func Pr1 A6 -> natural_transformation of Pr1 a4,Pr1 a5 equals
    (pr1(a2,a3)) * a6;
end;

:: ISOCAT_2:def 9
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,[:b2,b3:]
for b6 being natural_transformation of b4,b5 holds
   Pr1 b6 = (pr1(b2,b3)) * b6;

:: ISOCAT_2:funcnot 14 => ISOCAT_2:func 14
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4, a5 be Functor of a1,[:a2,a3:];
  let a6 be natural_transformation of a4,a5;
  func Pr2 A6 -> natural_transformation of Pr2 a4,Pr2 a5 equals
    (pr2(a2,a3)) * a6;
end;

:: ISOCAT_2:def 10
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,[:b2,b3:]
for b6 being natural_transformation of b4,b5 holds
   Pr2 b6 = (pr2(b2,b3)) * b6;

:: ISOCAT_2:th 39
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5, b6, b7 being Functor of b1,[:b2,b3:]
   st b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7
      st Pr1 b8 = Pr1 b9 & Pr2 b8 = Pr2 b9
   holds b8 = b9;

:: ISOCAT_2:th 42
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3
for b6, b7 being Element of the Vertices of b1
   st Hom(b6,b7) <> {}
for b8 being Morphism of b6,b7 holds
   <:b4,b5:> . b8 = [b4 . b8,b5 . b8];

:: ISOCAT_2:th 43
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of b1,b2
for b5 being Functor of b1,b3
for b6 being Element of the Vertices of b1 holds
   <:b4,b5:> . b6 = [b4 . b6,b5 . b6];

:: ISOCAT_2:th 44
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
      st b4 is_transformable_to b5 & b6 is_transformable_to b7
   holds <:b4,b6:> is_transformable_to <:b5,b7:>;

:: ISOCAT_2:funcnot 15 => ISOCAT_2:func 15
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4, a5 be Functor of a1,a2;
  let a6, a7 be Functor of a1,a3;
  let a8 be transformation of a4,a5;
  let a9 be transformation of a6,a7;
  assume a4 is_transformable_to a5 & a6 is_transformable_to a7;
  func <:A8,A9:> -> transformation of <:a4,a6:>,<:a5,a7:> equals
    <:a8,a9:>;
end;

:: ISOCAT_2:def 11
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
   st b4 is_transformable_to b5 & b6 is_transformable_to b7
for b8 being transformation of b4,b5
for b9 being transformation of b6,b7 holds
   <:b8,b9:> = <:b8,b9:>;

:: ISOCAT_2:th 45
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
   st b4 is_transformable_to b5 & b6 is_transformable_to b7
for b8 being transformation of b4,b5
for b9 being transformation of b6,b7
for b10 being Element of the Vertices of b1 holds
   <:b8,b9:> . b10 = [b8 . b10,b9 . b10];

:: ISOCAT_2:th 46
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
      st b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7
   holds <:b4,b6:> is_naturally_transformable_to <:b5,b7:>;

:: ISOCAT_2:funcnot 16 => ISOCAT_2:func 16
definition
  let a1, a2, a3 be non void Category-like CatStr;
  let a4, a5 be Functor of a1,a2;
  let a6, a7 be Functor of a1,a3;
  let a8 be natural_transformation of a4,a5;
  let a9 be natural_transformation of a6,a7;
  assume a4 is_naturally_transformable_to a5 & a6 is_naturally_transformable_to a7;
  func <:A8,A9:> -> natural_transformation of <:a4,a6:>,<:a5,a7:> equals
    <:a8,a9:>;
end;

:: ISOCAT_2:def 12
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
   st b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7 holds
   <:b8,b9:> = <:b8,b9:>;

:: ISOCAT_2:th 47
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4, b5 being Functor of b1,b2
for b6, b7 being Functor of b1,b3
   st b4 is_naturally_transformable_to b5 & b6 is_naturally_transformable_to b7
for b8 being natural_transformation of b4,b5
for b9 being natural_transformation of b6,b7 holds
   Pr1 <:b8,b9:> = b8 & Pr2 <:b8,b9:> = b9;

:: ISOCAT_2:funcnot 17 => ISOCAT_2:func 17
definition
  let a1, a2, a3 be non void Category-like CatStr;
  func distribute(A1,A2,A3) -> Functor of Functors(a1,[:a2,a3:]),[:Functors(a1,a2),Functors(a1,a3):] means
    for b1, b2 being Functor of a1,[:a2,a3:]
       st b1 is_naturally_transformable_to b2
    for b3 being natural_transformation of b1,b2 holds
       it . [[b1,b2],b3] = [[[Pr1 b1,Pr1 b2],Pr1 b3],[[Pr2 b1,Pr2 b2],Pr2 b3]];
end;

:: ISOCAT_2:def 13
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Functor of Functors(b1,[:b2,b3:]),[:Functors(b1,b2),Functors(b1,b3):] holds
      b4 = distribute(b1,b2,b3)
   iff
      for b5, b6 being Functor of b1,[:b2,b3:]
         st b5 is_naturally_transformable_to b6
      for b7 being natural_transformation of b5,b6 holds
         b4 . [[b5,b6],b7] = [[[Pr1 b5,Pr1 b6],Pr1 b7],[[Pr2 b5,Pr2 b6],Pr2 b7]];

:: ISOCAT_2:th 48
theorem
for b1, b2, b3 being non void Category-like CatStr holds
distribute(b1,b2,b3) is isomorphic(Functors(b1,[:b2,b3:]), [:Functors(b1,b2),Functors(b1,b3):]);

:: ISOCAT_2:th 49
theorem
for b1, b2, b3 being non void Category-like CatStr holds
Functors(b1,[:b2,b3:]),[:Functors(b1,b2),Functors(b1,b3):] are_isomorphic;