Article MSUALG_4, MML version 4.99.1005

:: MSUALG_4:attrnot 1 => MSUALG_4:attr 1
definition
  let a1 be Relation-like Function-like set;
  attr a1 is Relation-yielding means
    for b1 being set
          st b1 in proj1 a1
       holds a1 . b1 is Relation-like set;
end;

:: MSUALG_4:dfs 1
definiens
  let a1 be Relation-like Function-like set;
To prove
     a1 is Relation-yielding
it is sufficient to prove
  thus for b1 being set
          st b1 in proj1 a1
       holds a1 . b1 is Relation-like set;

:: MSUALG_4:def 1
theorem
for b1 being Relation-like Function-like set holds
      b1 is Relation-yielding
   iff
      for b2 being set
            st b2 in proj1 b1
         holds b1 . b2 is Relation-like set;

:: MSUALG_4:exreg 1
registration
  let a1 be set;
  cluster Relation-like Function-like Relation-yielding ManySortedSet of a1;
end;

:: MSUALG_4:modenot 1
definition
  let a1 be set;
  mode ManySortedRelation of a1 is Relation-yielding ManySortedSet of a1;
end;

:: MSUALG_4:modenot 2 => MSUALG_4:mode 1
definition
  let a1 be set;
  let a2, a3 be ManySortedSet of a1;
  mode ManySortedRelation of A2,A3 -> ManySortedSet of a1 means
    for b1 being set
          st b1 in a1
       holds it . b1 is Relation of a2 . b1,a3 . b1;
end;

:: MSUALG_4:dfs 2
definiens
  let a1 be set;
  let a2, a3, a4 be ManySortedSet of a1;
To prove
     a4 is ManySortedRelation of a2,a3
it is sufficient to prove
  thus for b1 being set
          st b1 in a1
       holds a4 . b1 is Relation of a2 . b1,a3 . b1;

:: MSUALG_4:def 2
theorem
for b1 being set
for b2, b3, b4 being ManySortedSet of b1 holds
   b4 is ManySortedRelation of b2,b3
iff
   for b5 being set
         st b5 in b1
      holds b4 . b5 is Relation of b2 . b5,b3 . b5;

:: MSUALG_4:condreg 1
registration
  let a1 be set;
  let a2, a3 be ManySortedSet of a1;
  cluster -> Relation-yielding (ManySortedRelation of a2,a3);
end;

:: MSUALG_4:modenot 3
definition
  let a1 be set;
  let a2 be ManySortedSet of a1;
  mode ManySortedRelation of a2 is ManySortedRelation of a2,a2;
end;

:: MSUALG_4:attrnot 2 => MSUALG_4:attr 2
definition
  let a1 be set;
  let a2 be ManySortedSet of a1;
  let a3 be ManySortedRelation of a2,a2;
  attr a3 is MSEquivalence_Relation-like means
    for b1 being set
    for b2 being Relation of a2 . b1,a2 . b1
          st b1 in a1 & a3 . b1 = b2
       holds b2 is symmetric transitive total Relation of a2 . b1,a2 . b1;
end;

:: MSUALG_4:dfs 3
definiens
  let a1 be set;
  let a2 be ManySortedSet of a1;
  let a3 be ManySortedRelation of a2,a2;
To prove
     a3 is MSEquivalence_Relation-like
it is sufficient to prove
  thus for b1 being set
    for b2 being Relation of a2 . b1,a2 . b1
          st b1 in a1 & a3 . b1 = b2
       holds b2 is symmetric transitive total Relation of a2 . b1,a2 . b1;

:: MSUALG_4:def 3
theorem
for b1 being set
for b2 being ManySortedSet of b1
for b3 being ManySortedRelation of b2,b2 holds
      b3 is MSEquivalence_Relation-like(b1, b2)
   iff
      for b4 being set
      for b5 being Relation of b2 . b4,b2 . b4
            st b4 in b1 & b3 . b4 = b5
         holds b5 is symmetric transitive total Relation of b2 . b4,b2 . b4;

:: MSUALG_4:funcnot 1 => MSUALG_4:func 1
definition
  let a1 be non empty set;
  let a2, a3 be ManySortedSet of a1;
  let a4 be ManySortedRelation of a2,a3;
  let a5 be Element of a1;
  redefine func a4 . a5 -> Relation of a2 . a5,a3 . a5;
end;

:: MSUALG_4:modenot 4
definition
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
  mode ManySortedRelation of a2 is ManySortedRelation of the Sorts of a2,the Sorts of a2;
end;

:: MSUALG_4:attrnot 3 => MSUALG_4:attr 3
definition
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
  let a3 be ManySortedRelation of the Sorts of a2,the Sorts of a2;
  attr a3 is MSEquivalence-like means
    a3 is MSEquivalence_Relation-like(the carrier of a1, the Sorts of a2);
end;

:: MSUALG_4:dfs 4
definiens
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
  let a3 be ManySortedRelation of the Sorts of a2,the Sorts of a2;
To prove
     a3 is MSEquivalence-like
it is sufficient to prove
  thus a3 is MSEquivalence_Relation-like(the carrier of a1, the Sorts of a2);

:: MSUALG_4:def 5
theorem
for b1 being non empty ManySortedSign
for b2 being MSAlgebra over b1
for b3 being ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
      b3 is MSEquivalence-like(b1, b2)
   iff
      b3 is MSEquivalence_Relation-like(the carrier of b1, the Sorts of b2);

:: MSUALG_4:exreg 2
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be MSAlgebra over a1;
  cluster Relation-like Function-like Relation-yielding MSEquivalence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
end;

:: MSUALG_4:th 1
theorem
for b1 being non empty non void ManySortedSign
for b2 being MSAlgebra over b1
for b3 being Element of the carrier of b1
for b4 being MSEquivalence-like ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
   b4 . b3 is symmetric transitive total Relation of (the Sorts of b2) . b3,(the Sorts of b2) . b3;

:: MSUALG_4:attrnot 4 => MSUALG_4:attr 4
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  attr a3 is MSCongruence-like means
    for b1 being Element of the OperSymbols of a1
    for b2, b3 being Element of Args(b1,a2)
          st for b4 being natural set
                  st b4 in proj1 b2
               holds [b2 . b4,b3 . b4] in a3 . ((the_arity_of b1) /. b4)
       holds [(Den(b1,a2)) . b2,(Den(b1,a2)) . b3] in a3 . the_result_sort_of b1;
end;

:: MSUALG_4:dfs 5
definiens
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
To prove
     a3 is MSCongruence-like
it is sufficient to prove
  thus for b1 being Element of the OperSymbols of a1
    for b2, b3 being Element of Args(b1,a2)
          st for b4 being natural set
                  st b4 in proj1 b2
               holds [b2 . b4,b3 . b4] in a3 . ((the_arity_of b1) /. b4)
       holds [(Den(b1,a2)) . b2,(Den(b1,a2)) . b3] in a3 . the_result_sort_of b1;

:: MSUALG_4:def 6
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
      b3 is MSCongruence-like(b1, b2)
   iff
      for b4 being Element of the OperSymbols of b1
      for b5, b6 being Element of Args(b4,b2)
            st for b7 being natural set
                    st b7 in proj1 b5
                 holds [b5 . b7,b6 . b7] in b3 . ((the_arity_of b4) /. b7)
         holds [(Den(b4,b2)) . b5,(Den(b4,b2)) . b6] in b3 . the_result_sort_of b4;

:: MSUALG_4:exreg 3
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  cluster Relation-like Function-like Relation-yielding MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
end;

:: MSUALG_4:modenot 5
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  mode MSCongruence of a2 is MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
end;

:: MSUALG_4:funcnot 2 => MSUALG_4:func 2
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be MSAlgebra over a1;
  let a3 be MSEquivalence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  let a4 be Element of the carrier of a1;
  redefine func a3 . a4 -> symmetric transitive total Relation of (the Sorts of a2) . a4,(the Sorts of a2) . a4;
end;

:: MSUALG_4:funcnot 3 => MSUALG_4:func 3
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be MSAlgebra over a1;
  let a3 be MSEquivalence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  let a4 be Element of the carrier of a1;
  let a5 be Element of (the Sorts of a2) . a4;
  func Class(A3,A5) -> Element of bool ((the Sorts of a2) . a4) equals
    Class(a3 . a4,a5);
end;

:: MSUALG_4:def 7
theorem
for b1 being non empty non void ManySortedSign
for b2 being MSAlgebra over b1
for b3 being MSEquivalence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being Element of the carrier of b1
for b5 being Element of (the Sorts of b2) . b4 holds
   Class(b3,b5) = Class(b3 . b4,b5);

:: MSUALG_4:funcnot 4 => MSUALG_4:func 4
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func Class A3 -> non-empty ManySortedSet of the carrier of a1 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = Class (a3 . b1);
end;

:: MSUALG_4:def 8
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being non-empty ManySortedSet of the carrier of b1 holds
      b4 = Class b3
   iff
      for b5 being Element of the carrier of b1 holds
         b4 . b5 = Class (b3 . b5);

:: MSUALG_4:funcnot 5 => MSUALG_4:func 5
definition
  let a1 be non empty non void ManySortedSign;
  let a2, a3 be ManySortedSet of the OperSymbols of a1;
  let a4 be ManySortedFunction of a2,a3;
  let a5 be Element of the OperSymbols of a1;
  redefine func a4 . a5 -> Function-like quasi_total Relation of a2 . a5,a3 . a5;
end;

:: MSUALG_4:funcnot 6 => MSUALG_4:func 6
definition
  let a1 be non empty set;
  let a2 be FinSequence of a1;
  let a3 be ManySortedSet of a1;
  redefine func a3 * a2 -> ManySortedSet of dom a2;
end;

:: MSUALG_4:funcnot 7 => MSUALG_4:func 7
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be Element of the OperSymbols of a1;
  let a3 be non-empty MSAlgebra over a1;
  let a4 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a3,the Sorts of a3;
  let a5 be Element of Args(a2,a3);
  func A4 # A5 -> Element of product ((Class a4) * the_arity_of a2) means
    for b1 being natural set
          st b1 in dom the_arity_of a2
       holds it . b1 = Class(a4 . ((the_arity_of a2) /. b1),a5 . b1);
end;

:: MSUALG_4:def 9
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3 being non-empty MSAlgebra over b1
for b4 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b3,the Sorts of b3
for b5 being Element of Args(b2,b3)
for b6 being Element of product ((Class b4) * the_arity_of b2) holds
      b6 = b4 # b5
   iff
      for b7 being natural set
            st b7 in dom the_arity_of b2
         holds b6 . b7 = Class(b4 . ((the_arity_of b2) /. b7),b5 . b7);

:: MSUALG_4:funcnot 8 => MSUALG_4:func 8
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be Element of the OperSymbols of a1;
  let a3 be non-empty MSAlgebra over a1;
  let a4 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a3,the Sorts of a3;
  func QuotRes(A4,A2) -> Function-like quasi_total Relation of ((the Sorts of a3) * the ResultSort of a1) . a2,((Class a4) * the ResultSort of a1) . a2 means
    for b1 being Element of (the Sorts of a3) . the_result_sort_of a2 holds
       it . b1 = Class(a4,b1);
end;

:: MSUALG_4:def 10
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3 being non-empty MSAlgebra over b1
for b4 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b3,the Sorts of b3
for b5 being Function-like quasi_total Relation of ((the Sorts of b3) * the ResultSort of b1) . b2,((Class b4) * the ResultSort of b1) . b2 holds
      b5 = QuotRes(b4,b2)
   iff
      for b6 being Element of (the Sorts of b3) . the_result_sort_of b2 holds
         b5 . b6 = Class(b4,b6);

:: MSUALG_4:funcnot 9 => MSUALG_4:func 9
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be Element of the OperSymbols of a1;
  let a3 be non-empty MSAlgebra over a1;
  let a4 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a3,the Sorts of a3;
  func QuotArgs(A4,A2) -> Function-like quasi_total Relation of ((the Sorts of a3) # * the Arity of a1) . a2,((Class a4) # * the Arity of a1) . a2 means
    for b1 being Element of Args(a2,a3) holds
       it . b1 = a4 # b1;
end;

:: MSUALG_4:def 11
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3 being non-empty MSAlgebra over b1
for b4 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b3,the Sorts of b3
for b5 being Function-like quasi_total Relation of ((the Sorts of b3) # * the Arity of b1) . b2,((Class b4) # * the Arity of b1) . b2 holds
      b5 = QuotArgs(b4,b2)
   iff
      for b6 being Element of Args(b2,b3) holds
         b5 . b6 = b4 # b6;

:: MSUALG_4:funcnot 10 => MSUALG_4:func 10
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func QuotRes A3 -> ManySortedFunction of (the Sorts of a2) * the ResultSort of a1,(Class a3) * the ResultSort of a1 means
    for b1 being Element of the OperSymbols of a1 holds
       it . b1 = QuotRes(a3,b1);
end;

:: MSUALG_4:def 12
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being ManySortedFunction of (the Sorts of b2) * the ResultSort of b1,(Class b3) * the ResultSort of b1 holds
      b4 = QuotRes b3
   iff
      for b5 being Element of the OperSymbols of b1 holds
         b4 . b5 = QuotRes(b3,b5);

:: MSUALG_4:funcnot 11 => MSUALG_4:func 11
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func QuotArgs A3 -> ManySortedFunction of (the Sorts of a2) # * the Arity of a1,(Class a3) # * the Arity of a1 means
    for b1 being Element of the OperSymbols of a1 holds
       it . b1 = QuotArgs(a3,b1);
end;

:: MSUALG_4:def 13
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being ManySortedFunction of (the Sorts of b2) # * the Arity of b1,(Class b3) # * the Arity of b1 holds
      b4 = QuotArgs b3
   iff
      for b5 being Element of the OperSymbols of b1 holds
         b4 . b5 = QuotArgs(b3,b5);

:: MSUALG_4:th 2
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3 being non-empty MSAlgebra over b1
for b4 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b3,the Sorts of b3
for b5 being set
      st b5 in ((Class b4) # * the Arity of b1) . b2
   holds ex b6 being Element of Args(b2,b3) st
      b5 = b4 # b6;

:: MSUALG_4:funcnot 12 => MSUALG_4:func 12
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be Element of the OperSymbols of a1;
  let a3 be non-empty MSAlgebra over a1;
  let a4 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a3,the Sorts of a3;
  func QuotCharact(A4,A2) -> Function-like quasi_total Relation of ((Class a4) # * the Arity of a1) . a2,((Class a4) * the ResultSort of a1) . a2 means
    for b1 being Element of Args(a2,a3)
          st a4 # b1 in ((Class a4) # * the Arity of a1) . a2
       holds it . (a4 # b1) = ((QuotRes(a4,a2)) * Den(a2,a3)) . b1;
end;

:: MSUALG_4:def 14
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the OperSymbols of b1
for b3 being non-empty MSAlgebra over b1
for b4 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b3,the Sorts of b3
for b5 being Function-like quasi_total Relation of ((Class b4) # * the Arity of b1) . b2,((Class b4) * the ResultSort of b1) . b2 holds
      b5 = QuotCharact(b4,b2)
   iff
      for b6 being Element of Args(b2,b3)
            st b4 # b6 in ((Class b4) # * the Arity of b1) . b2
         holds b5 . (b4 # b6) = ((QuotRes(b4,b2)) * Den(b2,b3)) . b6;

:: MSUALG_4:funcnot 13 => MSUALG_4:func 13
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func QuotCharact A3 -> ManySortedFunction of (Class a3) # * the Arity of a1,(Class a3) * the ResultSort of a1 means
    for b1 being Element of the OperSymbols of a1 holds
       it . b1 = QuotCharact(a3,b1);
end;

:: MSUALG_4:def 15
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being ManySortedFunction of (Class b3) # * the Arity of b1,(Class b3) * the ResultSort of b1 holds
      b4 = QuotCharact b3
   iff
      for b5 being Element of the OperSymbols of b1 holds
         b4 . b5 = QuotCharact(b3,b5);

:: MSUALG_4:funcnot 14 => MSUALG_4:func 14
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func QuotMSAlg(A2,A3) -> MSAlgebra over a1 equals
    MSAlgebra(#Class a3,QuotCharact a3#);
end;

:: MSUALG_4:def 16
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
   QuotMSAlg(b2,b3) = MSAlgebra(#Class b3,QuotCharact b3#);

:: MSUALG_4:funcreg 1
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  cluster QuotMSAlg(a2,a3) -> strict non-empty;
end;

:: MSUALG_4:funcnot 15 => MSUALG_4:func 15
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  let a4 be Element of the carrier of a1;
  func MSNat_Hom(A2,A3,A4) -> Function-like quasi_total Relation of (the Sorts of a2) . a4,(Class a3) . a4 means
    for b1 being set
          st b1 in (the Sorts of a2) . a4
       holds it . b1 = Class(a3 . a4,b1);
end;

:: MSUALG_4:def 17
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being Element of the carrier of b1
for b5 being Function-like quasi_total Relation of (the Sorts of b2) . b4,(Class b3) . b4 holds
      b5 = MSNat_Hom(b2,b3,b4)
   iff
      for b6 being set
            st b6 in (the Sorts of b2) . b4
         holds b5 . b6 = Class(b3 . b4,b6);

:: MSUALG_4:funcnot 16 => MSUALG_4:func 16
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2;
  func MSNat_Hom(A2,A3) -> ManySortedFunction of the Sorts of a2,the Sorts of QuotMSAlg(a2,a3) means
    for b1 being Element of the carrier of a1 holds
       it . b1 = MSNat_Hom(a2,a3,b1);
end;

:: MSUALG_4:def 18
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of QuotMSAlg(b2,b3) holds
      b4 = MSNat_Hom(b2,b3)
   iff
      for b5 being Element of the carrier of b1 holds
         b4 . b5 = MSNat_Hom(b2,b3,b5);

:: MSUALG_4:th 3
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
   MSNat_Hom(b2,b3) is_epimorphism b2,QuotMSAlg(b2,b3);

:: MSUALG_4:funcnot 17 => MSUALG_4:func 17
definition
  let a1 be non empty non void ManySortedSign;
  let a2, a3 be non-empty MSAlgebra over a1;
  let a4 be ManySortedFunction of the Sorts of a2,the Sorts of a3;
  let a5 be Element of the carrier of a1;
  func MSCng(A4,A5) -> symmetric transitive total Relation of (the Sorts of a2) . a5,(the Sorts of a2) . a5 means
    for b1, b2 being Element of (the Sorts of a2) . a5 holds
       [b1,b2] in it
    iff
       (a4 . a5) . b1 = (a4 . a5) . b2;
end;

:: MSUALG_4:def 19
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
for b5 being Element of the carrier of b1
for b6 being symmetric transitive total Relation of (the Sorts of b2) . b5,(the Sorts of b2) . b5 holds
      b6 = MSCng(b4,b5)
   iff
      for b7, b8 being Element of (the Sorts of b2) . b5 holds
         [b7,b8] in b6
      iff
         (b4 . b5) . b7 = (b4 . b5) . b8;

:: MSUALG_4:funcnot 18 => MSUALG_4:func 18
definition
  let a1 be non empty non void ManySortedSign;
  let a2, a3 be non-empty MSAlgebra over a1;
  let a4 be ManySortedFunction of the Sorts of a2,the Sorts of a3;
  assume a4 is_homomorphism a2,a3;
  func MSCng A4 -> MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of a2,the Sorts of a2 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = MSCng(a4,b1);
end;

:: MSUALG_4:def 20
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
   st b4 is_homomorphism b2,b3
for b5 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b2,the Sorts of b2 holds
      b5 = MSCng b4
   iff
      for b6 being Element of the carrier of b1 holds
         b5 . b6 = MSCng(b4,b6);

:: MSUALG_4:funcnot 19 => MSUALG_4:func 19
definition
  let a1 be non empty non void ManySortedSign;
  let a2, a3 be non-empty MSAlgebra over a1;
  let a4 be ManySortedFunction of the Sorts of a2,the Sorts of a3;
  let a5 be Element of the carrier of a1;
  assume a4 is_homomorphism a2,a3;
  func MSHomQuot(A4,A5) -> Function-like quasi_total Relation of (the Sorts of QuotMSAlg(a2,MSCng a4)) . a5,(the Sorts of a3) . a5 means
    for b1 being Element of (the Sorts of a2) . a5 holds
       it . Class(MSCng(a4,a5),b1) = (a4 . a5) . b1;
end;

:: MSUALG_4:def 21
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
for b5 being Element of the carrier of b1
   st b4 is_homomorphism b2,b3
for b6 being Function-like quasi_total Relation of (the Sorts of QuotMSAlg(b2,MSCng b4)) . b5,(the Sorts of b3) . b5 holds
      b6 = MSHomQuot(b4,b5)
   iff
      for b7 being Element of (the Sorts of b2) . b5 holds
         b6 . Class(MSCng(b4,b5),b7) = (b4 . b5) . b7;

:: MSUALG_4:funcnot 20 => MSUALG_4:func 20
definition
  let a1 be non empty non void ManySortedSign;
  let a2, a3 be non-empty MSAlgebra over a1;
  let a4 be ManySortedFunction of the Sorts of a2,the Sorts of a3;
  func MSHomQuot A4 -> ManySortedFunction of the Sorts of QuotMSAlg(a2,MSCng a4),the Sorts of a3 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = MSHomQuot(a4,b1);
end;

:: MSUALG_4:def 22
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
for b5 being ManySortedFunction of the Sorts of QuotMSAlg(b2,MSCng b4),the Sorts of b3 holds
      b5 = MSHomQuot b4
   iff
      for b6 being Element of the carrier of b1 holds
         b5 . b6 = MSHomQuot(b4,b6);

:: MSUALG_4:th 4
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
      st b4 is_homomorphism b2,b3
   holds MSHomQuot b4 is_monomorphism QuotMSAlg(b2,MSCng b4),b3;

:: MSUALG_4:th 5
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
      st b4 is_epimorphism b2,b3
   holds MSHomQuot b4 is_isomorphism QuotMSAlg(b2,MSCng b4),b3;

:: MSUALG_4:th 6
theorem
for b1 being non empty non void ManySortedSign
for b2, b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of the Sorts of b2,the Sorts of b3
      st b4 is_epimorphism b2,b3
   holds QuotMSAlg(b2,MSCng b4),b3 are_isomorphic;