Article CAT_2, MML version 4.99.1005

:: CAT_2:funcnot 1 => CAT_2:func 1
definition
  let a1 be non empty set;
  let a2 be set;
  let a3 be non empty set;
  let a4 be FUNCTION_DOMAIN of a2,a3;
  let a5 be Function-like quasi_total Relation of a1,a4;
  let a6 be Element of a1;
  redefine func a5 . a6 -> Element of a4;
end;

:: CAT_2:th 1
theorem
for b1, b2, b3 being non empty set
for b4 being Function-like quasi_total Relation of [:b1,b2:],b3 holds
   curry b4 is Function-like quasi_total Relation of b1,Funcs(b2,b3);

:: CAT_2:th 2
theorem
for b1, b2, b3 being non empty set
for b4 being Function-like quasi_total Relation of [:b2,b1:],b3 holds
   curry' b4 is Function-like quasi_total Relation of b1,Funcs(b2,b3);

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

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

:: CAT_2:th 3
theorem
for b1, b2, b3 being non empty set
for b4 being Element of b1
for b5 being Element of b2
for b6 being Function-like quasi_total Relation of [:b1,b2:],b3 holds
   b6 .(b4,b5) = ((curry b6) . b4) . b5;

:: CAT_2:th 4
theorem
for b1, b2, b3 being non empty set
for b4 being Element of b1
for b5 being Element of b2
for b6 being Function-like quasi_total Relation of [:b1,b2:],b3 holds
   b6 .(b4,b5) = ((curry' b6) . b5) . b4;

:: CAT_2:funcnot 4 => CAT_2:func 4
definition
  let a1, a2 be non void Category-like CatStr;
  let a3 be Element of the Vertices of a2;
  func A1 --> A3 -> Functor of a1,a2 equals
    (the Edges of a1) --> id a3;
end;

:: CAT_2:def 1
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b2 holds
   b1 --> b3 = (the Edges of b1) --> id b3;

:: CAT_2:th 7
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Element of the Vertices of b2 holds
   (Obj (b2 --> b3)) . b4 = b3;

:: CAT_2:funcnot 5 => CAT_2:func 5
definition
  let a1, a2 be non void Category-like CatStr;
  func Funct(A1,A2) -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is Functor of a1,a2;
end;

:: CAT_2:def 2
theorem
for b1, b2 being non void Category-like CatStr
for b3 being set holds
      b3 = Funct(b1,b2)
   iff
      for b4 being set holds
            b4 in b3
         iff
            b4 is Functor of b1,b2;

:: CAT_2:funcreg 1
registration
  let a1, a2 be non void Category-like CatStr;
  cluster Funct(a1,a2) -> non empty;
end;

:: CAT_2:modenot 1 => CAT_2:mode 1
definition
  let a1, a2 be non void Category-like CatStr;
  mode FUNCTOR-DOMAIN of A1,A2 -> non empty set means
    for b1 being Element of it holds
       b1 is Functor of a1,a2;
end;

:: CAT_2:dfs 3
definiens
  let a1, a2 be non void Category-like CatStr;
  let a3 be non empty set;
To prove
     a3 is FUNCTOR-DOMAIN of a1,a2
it is sufficient to prove
  thus for b1 being Element of a3 holds
       b1 is Functor of a1,a2;

:: CAT_2:def 3
theorem
for b1, b2 being non void Category-like CatStr
for b3 being non empty set holds
      b3 is FUNCTOR-DOMAIN of b1,b2
   iff
      for b4 being Element of b3 holds
         b4 is Functor of b1,b2;

:: CAT_2:modenot 2 => CAT_2:mode 2
definition
  let a1, a2 be non void Category-like CatStr;
  let a3 be FUNCTOR-DOMAIN of a1,a2;
  redefine mode Element of a3 -> Functor of a1,a2;
end;

:: CAT_2:funcnot 6 => CAT_2:func 6
definition
  let a1 be non empty set;
  let a2, a3 be non void Category-like CatStr;
  let a4 be FUNCTOR-DOMAIN of a2,a3;
  let a5 be Function-like quasi_total Relation of a1,a4;
  let a6 be Element of a1;
  redefine func a5 . a6 -> Element of a4;
end;

:: CAT_2:funcnot 7 => CAT_2:func 7
definition
  let a1, a2 be non void Category-like CatStr;
  redefine func Funct(a1,a2) -> FUNCTOR-DOMAIN of a1,a2;
end;

:: CAT_2:modenot 3 => CAT_2:mode 3
definition
  let a1 be non void Category-like CatStr;
  mode Subcategory of A1 -> non void Category-like CatStr means
    the Vertices of it c= the Vertices of a1 &
     (for b1, b2 being Element of the Vertices of it
     for b3, b4 being Element of the Vertices of a1
           st b1 = b3 & b2 = b4
        holds Hom(b1,b2) c= Hom(b3,b4)) &
     the Comp of it c= the Comp of a1 &
     (for b1 being Element of the Vertices of it
     for b2 being Element of the Vertices of a1
           st b1 = b2
        holds id b1 = id b2);
end;

:: CAT_2:dfs 4
definiens
  let a1, a2 be non void Category-like CatStr;
To prove
     a2 is Subcategory of a1
it is sufficient to prove
  thus the Vertices of a2 c= the Vertices of a1 &
     (for b1, b2 being Element of the Vertices of a2
     for b3, b4 being Element of the Vertices of a1
           st b1 = b3 & b2 = b4
        holds Hom(b1,b2) c= Hom(b3,b4)) &
     the Comp of a2 c= the Comp of a1 &
     (for b1 being Element of the Vertices of a2
     for b2 being Element of the Vertices of a1
           st b1 = b2
        holds id b1 = id b2);

:: CAT_2:def 4
theorem
for b1, b2 being non void Category-like CatStr holds
   b2 is Subcategory of b1
iff
   the Vertices of b2 c= the Vertices of b1 &
    (for b3, b4 being Element of the Vertices of b2
    for b5, b6 being Element of the Vertices of b1
          st b3 = b5 & b4 = b6
       holds Hom(b3,b4) c= Hom(b5,b6)) &
    the Comp of b2 c= the Comp of b1 &
    (for b3 being Element of the Vertices of b2
    for b4 being Element of the Vertices of b1
          st b3 = b4
       holds id b3 = id b4);

:: CAT_2:exreg 1
registration
  let a1 be non void Category-like CatStr;
  cluster strict non void Category-like Subcategory of a1;
end;

:: CAT_2:th 12
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3 being Element of the Vertices of b2 holds
   b3 is Element of the Vertices of b1;

:: CAT_2:th 13
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
   the Edges of b2 c= the Edges of b1;

:: CAT_2:th 14
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3 being Element of the Edges of b2 holds
   b3 is Element of the Edges of b1;

:: CAT_2:th 15
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3 being Element of the Edges of b2
for b4 being Element of the Edges of b1
      st b3 = b4
   holds dom b3 = dom b4 & cod b3 = cod b4;

:: CAT_2:th 16
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3, b4 being Element of the Vertices of b2
for b5, b6 being Element of the Vertices of b1
for b7 being Morphism of b3,b4
      st b3 = b5 & b4 = b6 & Hom(b3,b4) <> {}
   holds b7 is Morphism of b5,b6;

:: CAT_2:th 17
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3, b4 being Element of the Edges of b2
for b5, b6 being Element of the Edges of b1
      st b3 = b5 & b4 = b6 & dom b4 = cod b3
   holds b4 * b3 = b6 * b5;

:: CAT_2:th 18
theorem
for b1 being non void Category-like CatStr holds
   b1 is Subcategory of b1;

:: CAT_2:th 19
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
   id b2 is Functor of b2,b1;

:: CAT_2:funcnot 8 => CAT_2:func 8
definition
  let a1 be non void Category-like CatStr;
  let a2 be Subcategory of a1;
  func incl A2 -> Functor of a2,a1 equals
    id a2;
end;

:: CAT_2:def 5
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
   incl b2 = id b2;

:: CAT_2:th 22
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3 being Element of the Vertices of b2 holds
   (Obj incl b2) . b3 = b3;

:: CAT_2:th 23
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1
for b3 being Element of the Vertices of b2 holds
   (incl b2) . b3 = b3;

:: CAT_2:th 24
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
   incl b2 is faithful(b2, b1);

:: CAT_2:th 25
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
      incl b2 is full(b2, b1)
   iff
      for b3, b4 being Element of the Vertices of b2
      for b5, b6 being Element of the Vertices of b1
            st b3 = b5 & b4 = b6
         holds Hom(b3,b4) = Hom(b5,b6);

:: CAT_2:prednot 1 => CAT_2:pred 1
definition
  let a1 be non void CatStr;
  let a2 be non void Category-like CatStr;
  pred A1 is_full_subcategory_of A2 means
    a1 is Subcategory of a2 &
     (for b1, b2 being Element of the Vertices of a1
     for b3, b4 being Element of the Vertices of a2
           st b1 = b3 & b2 = b4
        holds Hom(b1,b2) = Hom(b3,b4));
end;

:: CAT_2:dfs 6
definiens
  let a1 be non void CatStr;
  let a2 be non void Category-like CatStr;
To prove
     a1 is_full_subcategory_of a2
it is sufficient to prove
  thus a1 is Subcategory of a2 &
     (for b1, b2 being Element of the Vertices of a1
     for b3, b4 being Element of the Vertices of a2
           st b1 = b3 & b2 = b4
        holds Hom(b1,b2) = Hom(b3,b4));

:: CAT_2:def 6
theorem
for b1 being non void CatStr
for b2 being non void Category-like CatStr holds
      b1 is_full_subcategory_of b2
   iff
      b1 is Subcategory of b2 &
       (for b3, b4 being Element of the Vertices of b1
       for b5, b6 being Element of the Vertices of b2
             st b3 = b5 & b4 = b6
          holds Hom(b3,b4) = Hom(b5,b6));

:: CAT_2:th 27
theorem
for b1 being non void Category-like CatStr
for b2 being Subcategory of b1 holds
      b2 is_full_subcategory_of b1
   iff
      incl b2 is full(b2, b1);

:: CAT_2:th 28
theorem
for b1 being non void Category-like CatStr
for b2 being non empty Element of bool the Vertices of b1 holds
   union {Hom(b3,b4) where b3 is Element of the Vertices of b1, b4 is Element of the Vertices of b1: b3 in b2 & b4 in b2} is non empty Element of bool the Edges of b1;

:: CAT_2:th 29
theorem
for b1 being non void Category-like CatStr
for b2 being non empty Element of bool the Vertices of b1
for b3 being non empty set
      st b3 = union {Hom(b4,b5) where b4 is Element of the Vertices of b1, b5 is Element of the Vertices of b1: b4 in b2 & b5 in b2}
   holds (the Source of b1) | b3 is Function-like quasi_total Relation of b3,b2 &
    (the Target of b1) | b3 is Function-like quasi_total Relation of b3,b2 &
    (the Comp of b1) || b3 is Function-like Relation of [:b3,b3:],b3 &
    (the Id of b1) | b2 is Function-like quasi_total Relation of b2,b3;

:: CAT_2:funcreg 2
registration
  let a1, a2 be non empty set;
  let a3, a4 be Function-like quasi_total Relation of a2,a1;
  let a5 be Function-like Relation of [:a2,a2:],a2;
  let a6 be Function-like quasi_total Relation of a1,a2;
  cluster CatStr(#a1,a2,a3,a4,a5,a6#) -> strict non void;
end;

:: CAT_2:th 30
theorem
for b1 being non void Category-like CatStr
for b2 being non empty Element of bool the Vertices of b1
for b3 being non empty set
for b4, b5 being Function-like quasi_total Relation of b3,b2
for b6 being Function-like Relation of [:b3,b3:],b3
for b7 being Function-like quasi_total Relation of b2,b3
      st b3 = union {Hom(b8,b9) where b8 is Element of the Vertices of b1, b9 is Element of the Vertices of b1: b8 in b2 & b9 in b2} &
         b4 = (the Source of b1) | b3 &
         b5 = (the Target of b1) | b3 &
         b6 = (the Comp of b1) || b3 &
         b7 = (the Id of b1) | b2
   holds CatStr(#b2,b3,b4,b5,b6,b7#) is_full_subcategory_of b1;

:: CAT_2:th 31
theorem
for b1 being non void Category-like CatStr
for b2 being non empty Element of bool the Vertices of b1
for b3 being non empty set
for b4, b5 being Function-like quasi_total Relation of b3,b2
for b6 being Function-like Relation of [:b3,b3:],b3
for b7 being Function-like quasi_total Relation of b2,b3
      st CatStr(#b2,b3,b4,b5,b6,b7#) is_full_subcategory_of b1
   holds b3 = union {Hom(b8,b9) where b8 is Element of the Vertices of b1, b9 is Element of the Vertices of b1: b8 in b2 & b9 in b2} &
    b4 = (the Source of b1) | b3 &
    b5 = (the Target of b1) | b3 &
    b6 = (the Comp of b1) || b3 &
    b7 = (the Id of b1) | b2;

:: CAT_2:funcnot 9 => CAT_2:func 9
definition
  let a1, a2, a3, a4 be non empty set;
  let a5 be Function-like quasi_total Relation of a1,a3;
  let a6 be Function-like quasi_total Relation of a2,a4;
  redefine func [:a5, a6:] -> Function-like quasi_total Relation of [:a1,a2:],[:a3,a4:];
end;

:: CAT_2:funcnot 10 => CAT_2:func 10
definition
  let a1, a2 be non empty set;
  let a3 be Function-like Relation of [:a1,a1:],a1;
  let a4 be Function-like Relation of [:a2,a2:],a2;
  redefine func |:a3, a4:| -> Function-like Relation of [:[:a1,a2:],[:a1,a2:]:],[:a1,a2:];
end;

:: CAT_2:funcnot 11 => CAT_2:func 11
definition
  let a1, a2 be non void Category-like CatStr;
  func [:A1,A2:] -> non void Category-like CatStr equals
    CatStr(#[:the Vertices of a1,the Vertices of a2:],[:the Edges of a1,the Edges of a2:],[:the Source of a1,the Source of a2:],[:the Target of a1,the Target of a2:],|:the Comp of a1,the Comp of a2:|,[:the Id of a1,the Id of a2:]#);
end;

:: CAT_2:def 7
theorem
for b1, b2 being non void Category-like CatStr holds
[:b1,b2:] = CatStr(#[:the Vertices of b1,the Vertices of b2:],[:the Edges of b1,the Edges of b2:],[:the Source of b1,the Source of b2:],[:the Target of b1,the Target of b2:],|:the Comp of b1,the Comp of b2:|,[:the Id of b1,the Id of b2:]#);

:: CAT_2:funcreg 3
registration
  let a1, a2 be non void Category-like CatStr;
  cluster [:a1,a2:] -> strict non void Category-like;
end;

:: CAT_2:th 33
theorem
for b1, b2 being non void Category-like CatStr holds
the Vertices of [:b1,b2:] = [:the Vertices of b1,the Vertices of b2:] &
 the Edges of [:b1,b2:] = [:the Edges of b1,the Edges of b2:] &
 the Source of [:b1,b2:] = [:the Source of b1,the Source of b2:] &
 the Target of [:b1,b2:] = [:the Target of b1,the Target of b2:] &
 the Comp of [:b1,b2:] = |:the Comp of b1,the Comp of b2:| &
 the Id of [:b1,b2:] = [:the Id of b1,the Id of b2:];

:: CAT_2:th 34
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Element of the Vertices of b2 holds
   [b3,b4] is Element of the Vertices of [:b1,b2:];

:: CAT_2:funcnot 12 => CAT_2:func 12
definition
  let a1, a2 be non void Category-like CatStr;
  let a3 be Element of the Vertices of a1;
  let a4 be Element of the Vertices of a2;
  redefine func [a3, a4] -> Element of the Vertices of [:a1,a2:];
end;

:: CAT_2:th 35
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of [:b1,b2:] holds
   ex b4 being Element of the Vertices of b1 st
      ex b5 being Element of the Vertices of b2 st
         b3 = [b4,b5];

:: CAT_2:th 36
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Edges of b1
for b4 being Element of the Edges of b2 holds
   [b3,b4] is Element of the Edges of [:b1,b2:];

:: CAT_2:funcnot 13 => CAT_2:func 13
definition
  let a1, a2 be non void Category-like CatStr;
  let a3 be Element of the Edges of a1;
  let a4 be Element of the Edges of a2;
  redefine func [a3, a4] -> Element of the Edges of [:a1,a2:];
end;

:: CAT_2:th 37
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Edges of [:b1,b2:] holds
   ex b4 being Element of the Edges of b1 st
      ex b5 being Element of the Edges of b2 st
         b3 = [b4,b5];

:: CAT_2:th 38
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Edges of b1
for b4 being Element of the Edges of b2 holds
   dom [b3,b4] = [dom b3,dom b4] &
    cod [b3,b4] = [cod b3,cod b4];

:: CAT_2:th 39
theorem
for b1, b2 being non void Category-like CatStr
for b3, b4 being Element of the Edges of b1
for b5, b6 being Element of the Edges of b2
      st dom b4 = cod b3 & dom b6 = cod b5
   holds [b4,b6] * [b3,b5] = [b4 * b3,b6 * b5];

:: CAT_2:th 40
theorem
for b1, b2 being non void Category-like CatStr
for b3, b4 being Element of the Edges of b1
for b5, b6 being Element of the Edges of b2
      st dom [b4,b6] = cod [b3,b5]
   holds [b4,b6] * [b3,b5] = [b4 * b3,b6 * b5];

:: CAT_2:th 41
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Element of the Vertices of b2 holds
   id [b3,b4] = [id b3,id b4];

:: CAT_2:th 42
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,b5],[b4,b6]) = [:Hom(b3,b4),Hom(b5,b6):];

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

:: CAT_2:funcnot 14 => CAT_2:func 14
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;
  let a6 be Element of the Edges of a2;
  redefine func a4 .(a5,a6) -> Element of the Edges of a3;
end;

:: CAT_2:th 44
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
   (curry b4) . id b5 is Functor of b2,b3;

:: CAT_2:th 45
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 b2 holds
   (curry' b4) . id b5 is Functor of b1,b3;

:: CAT_2:funcnot 15 => CAT_2:func 15
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 Vertices of a1;
  func A4 ?- A5 -> Functor of a2,a3 equals
    (curry a4) . id a5;
end;

:: CAT_2:def 8
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
   b4 ?- b5 = (curry b4) . id b5;

:: CAT_2:th 47
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 Edges of b2 holds
   (b4 ?- b5) . b6 = b4 .(id b5,b6);

:: CAT_2:th 48
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
   (Obj (b4 ?- b5)) . b6 = (Obj b4) .(b5,b6);

:: CAT_2:funcnot 16 => CAT_2:func 16
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 Vertices of a2;
  func A4 -? A5 -> Functor of a1,a3 equals
    (curry' a4) . id a5;
end;

:: CAT_2:def 9
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 b2 holds
   b4 -? b5 = (curry' b4) . id b5;

:: CAT_2:th 50
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 b2
for b6 being Element of the Edges of b1 holds
   (b4 -? b5) . b6 = b4 .(b6,id b5);

:: CAT_2:th 51
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
   (Obj (b4 -? b6)) . b5 = (Obj b4) .(b5,b6);

:: CAT_2:th 52
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Function-like quasi_total Relation of the Vertices of b1,Funct(b2,b3)
for b5 being Function-like quasi_total Relation of the Vertices of b2,Funct(b1,b3)
      st (for b6 being Element of the Vertices of b1
         for b7 being Element of the Vertices of b2 holds
            (b5 . b7) . id b6 = (b4 . b6) . id b7) &
         (for b6 being Element of the Edges of b2
         for b7 being Element of the Edges of b1 holds
            ((b5 . cod b6) . b7) * ((b4 . dom b7) . b6) = ((b4 . cod b7) . b6) * ((b5 . dom b6) . b7))
   holds ex b6 being Functor of [:b2,b1:],b3 st
      for b7 being Element of the Edges of b2
      for b8 being Element of the Edges of b1 holds
         b6 .(b7,b8) = ((b4 . cod b8) . b7) * ((b5 . dom b7) . b8);

:: CAT_2:th 53
theorem
for b1, b2, b3 being non void Category-like CatStr
for b4 being Function-like quasi_total Relation of the Vertices of b1,Funct(b2,b3)
for b5 being Function-like quasi_total Relation of the Vertices of b2,Funct(b1,b3)
   st ex b6 being Functor of [:b2,b1:],b3 st
        for b7 being Element of the Vertices of b1
        for b8 being Element of the Vertices of b2 holds
           b6 -? b7 = b4 . b7 & b6 ?- b8 = b5 . b8
for b6 being Element of the Edges of b2
for b7 being Element of the Edges of b1 holds
   ((b5 . cod b6) . b7) * ((b4 . dom b7) . b6) = ((b4 . cod b7) . b6) * ((b5 . dom b6) . b7);

:: CAT_2:th 54
theorem
for b1, b2 being non void Category-like CatStr holds
pr1(the Edges of b1,the Edges of b2) is Functor of [:b1,b2:],b1;

:: CAT_2:th 55
theorem
for b1, b2 being non void Category-like CatStr holds
pr2(the Edges of b1,the Edges of b2) is Functor of [:b1,b2:],b2;

:: CAT_2:funcnot 17 => CAT_2:func 17
definition
  let a1, a2 be non void Category-like CatStr;
  func pr1(A1,A2) -> Functor of [:a1,a2:],a1 equals
    pr1(the Edges of a1,the Edges of a2);
end;

:: CAT_2:def 10
theorem
for b1, b2 being non void Category-like CatStr holds
pr1(b1,b2) = pr1(the Edges of b1,the Edges of b2);

:: CAT_2:funcnot 18 => CAT_2:func 18
definition
  let a1, a2 be non void Category-like CatStr;
  func pr2(A1,A2) -> Functor of [:a1,a2:],a2 equals
    pr2(the Edges of a1,the Edges of a2);
end;

:: CAT_2:def 11
theorem
for b1, b2 being non void Category-like CatStr holds
pr2(b1,b2) = pr2(the Edges of b1,the Edges of b2);

:: CAT_2:th 59
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Element of the Vertices of b2 holds
   (Obj pr1(b1,b2)) .(b3,b4) = b3;

:: CAT_2:th 61
theorem
for b1, b2 being non void Category-like CatStr
for b3 being Element of the Vertices of b1
for b4 being Element of the Vertices of b2 holds
   (Obj pr2(b1,b2)) .(b3,b4) = b4;

:: CAT_2:th 62
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
   <:b4,b5:> is Functor of b1,[:b2,b3:];

:: CAT_2:funcnot 19 => CAT_2:func 19
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;

:: CAT_2:th 63
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
   (Obj <:b4,b5:>) . b6 = [(Obj b4) . b6,(Obj b5) . b6];

:: CAT_2:th 64
theorem
for b1, b2, b3, b4 being non void Category-like CatStr
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4 holds
   [:b5,b6:] = <:b5 * pr1(b1,b3),b6 * pr2(b1,b3):>;

:: CAT_2:th 65
theorem
for b1, b2, b3, b4 being non void Category-like CatStr
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4 holds
   [:b5,b6:] is Functor of [:b1,b3:],[:b2,b4:];

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

:: CAT_2:th 66
theorem
for b1, b2, b3, b4 being non void Category-like CatStr
for b5 being Functor of b1,b2
for b6 being Functor of b3,b4
for b7 being Element of the Vertices of b1
for b8 being Element of the Vertices of b3 holds
   (Obj [:b5,b6:]) .(b7,b8) = [(Obj b5) . b7,(Obj b6) . b8];