Article MSINST_1, MML version 4.99.1005

:: MSINST_1:funcnot 1 => MSINST_1:func 1
definition
  let a1 be non empty set;
  func MSSCat A1 -> non empty strict AltCatStr means
    the carrier of it = MSS_set a1 &
     (for b1, b2 being Element of MSS_set a1 holds
     (the Arrows of it) .(b1,b2) = MSS_morph(b1,b2)) &
     (for b1, b2, b3 being Element of the carrier of it
        st b1 in MSS_set a1 & b2 in MSS_set a1 & b3 in MSS_set a1
     for b4, b5, b6, b7 being Relation-like Function-like set
           st [b4,b5] in (the Arrows of it) .(b1,b2) & [b6,b7] in (the Arrows of it) .(b2,b3)
        holds ((the Comp of it) .(b1,b2,b3)) .([b6,b7],[b4,b5]) = [b4 * b6,b5 * b7]);
end;

:: MSINST_1:def 1
theorem
for b1 being non empty set
for b2 being non empty strict AltCatStr holds
      b2 = MSSCat b1
   iff
      the carrier of b2 = MSS_set b1 &
       (for b3, b4 being Element of MSS_set b1 holds
       (the Arrows of b2) .(b3,b4) = MSS_morph(b3,b4)) &
       (for b3, b4, b5 being Element of the carrier of b2
          st b3 in MSS_set b1 & b4 in MSS_set b1 & b5 in MSS_set b1
       for b6, b7, b8, b9 being Relation-like Function-like set
             st [b6,b7] in (the Arrows of b2) .(b3,b4) & [b8,b9] in (the Arrows of b2) .(b4,b5)
          holds ((the Comp of b2) .(b3,b4,b5)) .([b8,b9],[b6,b7]) = [b6 * b8,b7 * b9]);

:: MSINST_1:funcreg 1
registration
  let a1 be non empty set;
  cluster MSSCat a1 -> non empty transitive strict associative with_units;
end;

:: MSINST_1:th 1
theorem
for b1 being non empty set
for b2 being non empty transitive associative with_units AltCatStr
   st b2 = MSSCat b1
for b3 being Element of the carrier of b2 holds
   b3 is non empty non void ManySortedSign;

:: MSINST_1:exreg 1
registration
  let a1 be non empty non void ManySortedSign;
  cluster strict feasible MSAlgebra over a1;
end;

:: MSINST_1:funcnot 2 => MSINST_1:func 2
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non empty set;
  func MSAlg_set(A1,A2) -> set means
    for b1 being set holds
          b1 in it
       iff
          ex b2 being strict feasible MSAlgebra over a1 st
             b1 = b2 &
              (for b3 being Element of proj2 the Sorts of b2 holds
                 b3 c= a2);
end;

:: MSINST_1:def 2
theorem
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3 being set holds
      b3 = MSAlg_set(b1,b2)
   iff
      for b4 being set holds
            b4 in b3
         iff
            ex b5 being strict feasible MSAlgebra over b1 st
               b4 = b5 &
                (for b6 being Element of proj2 the Sorts of b5 holds
                   b6 c= b2);

:: MSINST_1:funcreg 2
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non empty set;
  cluster MSAlg_set(a1,a2) -> non empty;
end;

:: MSINST_1:th 2
theorem
for b1 being non empty set
for b2 being non empty non void ManySortedSign
for b3 being MSAlgebra over b2
      st b3 in MSAlg_set(b2,b1)
   holds the Sorts of b3 in Funcs(the carrier of b2,bool b1) &
    the Charact of b3 in Funcs(the OperSymbols of b2,PFuncs(PFuncs(NAT,b1),b1));

:: MSINST_1:th 3
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3, b4 being MSAlgebra over b1
      st the Sorts of b3 is_transformable_to the Sorts of b4 & Args(b2,b3) <> {}
   holds Args(b2,b4) <> {};

:: MSINST_1:th 4
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3, b4, b5 being feasible MSAlgebra over b1
for b6 being ManySortedFunction of the Sorts of b3,the Sorts of b4
for b7 being ManySortedFunction of the Sorts of b4,the Sorts of b5
for b8 being Element of Args(b2,b3)
      st Args(b2,b3) <> {} & the Sorts of b3 is_transformable_to the Sorts of b4 & the Sorts of b4 is_transformable_to the Sorts of b5
   holds ex b9 being ManySortedFunction of the Sorts of b3,the Sorts of b5 st
      b9 = b7 ** b6 & b9 # b8 = b7 # (b6 # b8);

:: MSINST_1:th 5
theorem
for b1 being non empty non void ManySortedSign
for b2, b3, b4 being feasible MSAlgebra over b1
for b5 being ManySortedFunction of the Sorts of b2,the Sorts of b3
for b6 being ManySortedFunction of the Sorts of b3,the Sorts of b4
      st the Sorts of b2 is_transformable_to the Sorts of b3 & the Sorts of b3 is_transformable_to the Sorts of b4 & b5 is_homomorphism b2,b3 & b6 is_homomorphism b3,b4
   holds ex b7 being ManySortedFunction of the Sorts of b2,the Sorts of b4 st
      b7 = b6 ** b5 & b7 is_homomorphism b2,b4;

:: MSINST_1:funcnot 3 => MSINST_1:func 3
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non empty set;
  let a3, a4 be set;
  assume a3 in MSAlg_set(a1,a2) & a4 in MSAlg_set(a1,a2);
  func MSAlg_morph(A1,A2,A3,A4) -> set means
    for b1 being set holds
          b1 in it
       iff
          ex b2, b3 being strict feasible MSAlgebra over a1 st
             ex b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3 st
                b2 = a3 & b3 = a4 & b4 = b1 & the Sorts of b2 is_transformable_to the Sorts of b3 & b4 is_homomorphism b2,b3;
end;

:: MSINST_1:def 3
theorem
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3, b4 being set
   st b3 in MSAlg_set(b1,b2) & b4 in MSAlg_set(b1,b2)
for b5 being set holds
      b5 = MSAlg_morph(b1,b2,b3,b4)
   iff
      for b6 being set holds
            b6 in b5
         iff
            ex b7, b8 being strict feasible MSAlgebra over b1 st
               ex b9 being ManySortedFunction of the Sorts of b7,the Sorts of b8 st
                  b7 = b3 & b8 = b4 & b9 = b6 & the Sorts of b7 is_transformable_to the Sorts of b8 & b9 is_homomorphism b7,b8;

:: MSINST_1:funcnot 4 => MSINST_1:func 4
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non empty set;
  func MSAlgCat(A1,A2) -> non empty strict AltCatStr means
    the carrier of it = MSAlg_set(a1,a2) &
     (for b1, b2 being Element of MSAlg_set(a1,a2) holds
     (the Arrows of it) .(b1,b2) = MSAlg_morph(a1,a2,b1,b2)) &
     (for b1, b2, b3 being Element of the carrier of it
     for b4, b5 being Relation-like Function-like Function-yielding set
           st b4 in (the Arrows of it) .(b1,b2) & b5 in (the Arrows of it) .(b2,b3)
        holds ((the Comp of it) .(b1,b2,b3)) .(b5,b4) = b5 ** b4);
end;

:: MSINST_1:def 4
theorem
for b1 being non empty non void ManySortedSign
for b2 being non empty set
for b3 being non empty strict AltCatStr holds
      b3 = MSAlgCat(b1,b2)
   iff
      the carrier of b3 = MSAlg_set(b1,b2) &
       (for b4, b5 being Element of MSAlg_set(b1,b2) holds
       (the Arrows of b3) .(b4,b5) = MSAlg_morph(b1,b2,b4,b5)) &
       (for b4, b5, b6 being Element of the carrier of b3
       for b7, b8 being Relation-like Function-like Function-yielding set
             st b7 in (the Arrows of b3) .(b4,b5) & b8 in (the Arrows of b3) .(b5,b6)
          holds ((the Comp of b3) .(b4,b5,b6)) .(b8,b7) = b8 ** b7);

:: MSINST_1:funcreg 3
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non empty set;
  cluster MSAlgCat(a1,a2) -> non empty transitive strict associative with_units;
end;

:: MSINST_1:th 6
theorem
for b1 being non empty set
for b2 being non empty non void ManySortedSign
for b3 being non empty transitive associative with_units AltCatStr
   st b3 = MSAlgCat(b2,b1)
for b4 being Element of the carrier of b3 holds
   b4 is strict feasible MSAlgebra over b2;