Article OSALG_2, MML version 4.99.1005

:: OSALG_2:th 1
theorem
for b1 being non empty reflexive transitive antisymmetric RelStr
for b2, b3 being order-sorted ManySortedSet of the carrier of b1 holds
b2 /\ b3 is order-sorted ManySortedSet of the carrier of b1;

:: OSALG_2:th 2
theorem
for b1 being non empty reflexive transitive antisymmetric RelStr
for b2, b3 being order-sorted ManySortedSet of the carrier of b1 holds
b2 \/ b3 is order-sorted ManySortedSet of the carrier of b1;

:: OSALG_2:modenot 1 => OSALG_2:mode 1
definition
  let a1 be non empty reflexive transitive antisymmetric RelStr;
  let a2 be order-sorted ManySortedSet of the carrier of a1;
  mode OrderSortedSubset of A2 -> ManySortedSubset of a2 means
    it is order-sorted ManySortedSet of the carrier of a1;
end;

:: OSALG_2:dfs 1
definiens
  let a1 be non empty reflexive transitive antisymmetric RelStr;
  let a2 be order-sorted ManySortedSet of the carrier of a1;
  let a3 be ManySortedSubset of a2;
To prove
     a3 is OrderSortedSubset of a2
it is sufficient to prove
  thus a3 is order-sorted ManySortedSet of the carrier of a1;

:: OSALG_2:def 1
theorem
for b1 being non empty reflexive transitive antisymmetric RelStr
for b2 being order-sorted ManySortedSet of the carrier of b1
for b3 being ManySortedSubset of b2 holds
      b3 is OrderSortedSubset of b2
   iff
      b3 is order-sorted ManySortedSet of the carrier of b1;

:: OSALG_2:exreg 1
registration
  let a1 be non empty reflexive transitive antisymmetric RelStr;
  let a2 be non-empty order-sorted ManySortedSet of the carrier of a1;
  cluster Relation-like non-empty Function-like OrderSortedSubset of a2;
end;

:: OSALG_2:modenot 2 => OSALG_2:mode 2
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  mode OSSubset of A2 -> ManySortedSubset of the Sorts of a2 means
    it is order-sorted ManySortedSet of the carrier of a1;
end;

:: OSALG_2:dfs 2
definiens
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be ManySortedSubset of the Sorts of a2;
To prove
     a3 is OSSubset of a2
it is sufficient to prove
  thus a3 is order-sorted ManySortedSet of the carrier of a1;

:: OSALG_2:def 2
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being ManySortedSubset of the Sorts of b2 holds
      b3 is OSSubset of b2
   iff
      b3 is order-sorted ManySortedSet of the carrier of b1;

:: OSALG_2:exreg 2
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  cluster strict non-empty order-sorted monotone MSAlgebra over a1;
end;

:: OSALG_2:exreg 3
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  cluster Relation-like non-empty Function-like OSSubset of a2;
end;

:: OSALG_2:th 3
theorem
for b1 being non empty strict non void all-with_const_op ManySortedSign holds
   OSSign b1 is all-with_const_op;

:: OSALG_2:exreg 4
registration
  cluster non empty non void all-with_const_op reflexive transitive antisymmetric strict order-sorted discernable OverloadedRSSign;
end;

:: OSALG_2:th 4
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1 holds
   MSAlgebra(#the Sorts of b2,the Charact of b2#) is order-sorted(b1);

:: OSALG_2:exreg 5
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  cluster order-sorted MSSubAlgebra of a2;
end;

:: OSALG_2:modenot 3
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  mode OSSubAlgebra of a2 is order-sorted MSSubAlgebra of a2;
end;

:: OSALG_2:exreg 6
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  cluster strict order-sorted MSSubAlgebra of a2;
end;

:: OSALG_2:exreg 7
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  cluster strict non-empty order-sorted MSSubAlgebra of a2;
end;

:: OSALG_2:th 5
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being MSAlgebra over b1 holds
      b3 is order-sorted MSSubAlgebra of b2
   iff
      the Sorts of b3 is OSSubset of b2 &
       (for b4 being OSSubset of b2
             st b4 = the Sorts of b3
          holds b4 is opers_closed(b1, b2) & the Charact of b3 = Opers(b2,b4));

:: OSALG_2:funcnot 1 => OSALG_2:func 1
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be Element of the carrier of a1;
  func OSConstants(A2,A3) -> Element of bool ((the Sorts of a2) . a3) equals
    union {Constants(a2,b1) where b1 is Element of the carrier of a1: b1 <= a3};
end;

:: OSALG_2:def 3
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of the carrier of b1 holds
   OSConstants(b2,b3) = union {Constants(b2,b4) where b4 is Element of the carrier of b1: b4 <= b3};

:: OSALG_2:th 11
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of the carrier of b1 holds
   Constants(b2,b3) c= OSConstants(b2,b3);

:: OSALG_2:funcnot 2 => OSALG_2:func 2
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be ManySortedSet of the carrier of a1;
  func OSCl A2 -> order-sorted ManySortedSet of the carrier of a1 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = union {a2 . b2 where b2 is Element of the carrier of a1: b2 <= b1};
end;

:: OSALG_2:def 4
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being ManySortedSet of the carrier of b1
for b3 being order-sorted ManySortedSet of the carrier of b1 holds
      b3 = OSCl b2
   iff
      for b4 being Element of the carrier of b1 holds
         b3 . b4 = union {b2 . b5 where b5 is Element of the carrier of b1: b5 <= b4};

:: OSALG_2:th 12
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being ManySortedSet of the carrier of b1 holds
   b2 c= OSCl b2;

:: OSALG_2:th 13
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being ManySortedSet of the carrier of b1
for b3 being order-sorted ManySortedSet of the carrier of b1
      st b2 c= b3
   holds OSCl b2 c= b3;

:: OSALG_2:th 14
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted ManySortedSet of the carrier of b1 holds
   OSCl b2 = b2;

:: OSALG_2:funcnot 3 => OSALG_2:func 3
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  func OSConstants A2 -> OSSubset of a2 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = OSConstants(a2,b1);
end;

:: OSALG_2:def 5
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
      b3 = OSConstants b2
   iff
      for b4 being Element of the carrier of b1 holds
         b3 . b4 = OSConstants(b2,b4);

:: OSALG_2:th 15
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1 holds
   Constants b2 c= OSConstants b2;

:: OSALG_2:th 16
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
      st Constants b2 c= b3
   holds OSConstants b2 c= b3;

:: OSALG_2:th 17
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   OSConstants b2 = OSCl Constants b2;

:: OSALG_2:th 18
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being order-sorted MSSubAlgebra of b2 holds
   OSConstants b2 is OSSubset of b3;

:: OSALG_2:th 19
theorem
for b1 being non empty non void all-with_const_op order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being non-empty order-sorted MSSubAlgebra of b2 holds
   OSConstants b2 is non-empty OSSubset of b3;

:: OSALG_2:th 20
theorem
for b1 being set
for b2 being ManySortedSet of b1
for b3 being set holds
      b3 is ManySortedSubset of b2
   iff
      b3 in product bool b2;

:: OSALG_2:funcnot 4 => OSALG_2:func 4
definition
  let a1 be non empty reflexive transitive antisymmetric RelStr;
  let a2 be order-sorted ManySortedSet of the carrier of a1;
  func OSbool A2 -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is OrderSortedSubset of a2;
end;

:: OSALG_2:def 6
theorem
for b1 being non empty reflexive transitive antisymmetric RelStr
for b2 being order-sorted ManySortedSet of the carrier of b1
for b3 being set holds
      b3 = OSbool b2
   iff
      for b4 being set holds
            b4 in b3
         iff
            b4 is OrderSortedSubset of b2;

:: OSALG_2:funcnot 5 => OSALG_2:func 5
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  func OSSubSort A3 -> set equals
    {b1 where b1 is Element of SubSort a3: b1 is order-sorted ManySortedSet of the carrier of a1};
end;

:: OSALG_2:def 7
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   OSSubSort b3 = {b4 where b4 is Element of SubSort b3: b4 is order-sorted ManySortedSet of the carrier of b1};

:: OSALG_2:th 21
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   OSSubSort b3 c= SubSort b3;

:: OSALG_2:th 22
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   the Sorts of b2 in OSSubSort b3;

:: OSALG_2:funcreg 1
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  cluster OSSubSort a3 -> non empty;
end;

:: OSALG_2:funcnot 6 => OSALG_2:func 6
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  func OSSubSort A2 -> set equals
    {b1 where b1 is Element of SubSort a2: b1 is order-sorted ManySortedSet of the carrier of a1};
end;

:: OSALG_2:def 8
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1 holds
   OSSubSort b2 = {b3 where b3 is Element of SubSort b2: b3 is order-sorted ManySortedSet of the carrier of b1};

:: OSALG_2:th 23
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   OSSubSort b3 c= OSSubSort b2;

:: OSALG_2:funcreg 2
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  cluster OSSubSort a2 -> non empty;
end;

:: OSALG_2:funcnot 7 => OSALG_2:func 7
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be Element of OSSubSort a2;
  func @ A3 -> OSSubset of a2 equals
    a3;
end;

:: OSALG_2:def 9
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of OSSubSort b2 holds
   @ b3 = b3;

:: OSALG_2:th 24
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3, b4 being OSSubset of b2 holds
   b4 in OSSubSort b3
iff
   b4 is opers_closed(b1, b2) & OSConstants b2 c= b4 & b3 c= b4;

:: OSALG_2:th 25
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
      b3 in OSSubSort b2
   iff
      b3 is opers_closed(b1, b2);

:: OSALG_2:funcnot 8 => OSALG_2:func 8
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  let a4 be Element of the carrier of a1;
  func OSSubSort(A3,A4) -> set means
    for b1 being set holds
          b1 in it
       iff
          ex b2 being OSSubset of a2 st
             b2 in OSSubSort a3 & b1 = b2 . a4;
end;

:: OSALG_2:def 10
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
for b4 being Element of the carrier of b1
for b5 being set holds
      b5 = OSSubSort(b3,b4)
   iff
      for b6 being set holds
            b6 in b5
         iff
            ex b7 being OSSubset of b2 st
               b7 in OSSubSort b3 & b6 = b7 . b4;

:: OSALG_2:th 26
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
for b4, b5 being Element of the carrier of b1
      st b4 <= b5
   holds OSSubSort(b3,b5) is_coarser_than OSSubSort(b3,b4);

:: OSALG_2:th 27
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
for b4 being Element of the carrier of b1 holds
   OSSubSort(b3,b4) c= SubSort(b3,b4);

:: OSALG_2:th 28
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
for b4 being Element of the carrier of b1 holds
   (the Sorts of b2) . b4 in OSSubSort(b3,b4);

:: OSALG_2:funcreg 3
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  let a4 be Element of the carrier of a1;
  cluster OSSubSort(a3,a4) -> non empty;
end;

:: OSALG_2:funcnot 9 => OSALG_2:func 9
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  func OSMSubSort A3 -> OSSubset of a2 means
    for b1 being Element of the carrier of a1 holds
       it . b1 = meet OSSubSort(a3,b1);
end;

:: OSALG_2:def 11
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3, b4 being OSSubset of b2 holds
   b4 = OSMSubSort b3
iff
   for b5 being Element of the carrier of b1 holds
      b4 . b5 = meet OSSubSort(b3,b5);

:: OSALG_2:exreg 8
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  cluster Relation-like Function-like opers_closed OSSubset of a2;
end;

:: OSALG_2:th 29
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   (OSConstants b2) \/ b3 c= OSMSubSort b3;

:: OSALG_2:th 30
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
      st (OSConstants b2) \/ b3 is non-empty
   holds OSMSubSort b3 is non-empty;

:: OSALG_2:th 31
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of the OperSymbols of b1
for b4, b5 being OSSubset of b2
      st b5 in OSSubSort b4
   holds ((OSMSubSort b4) # * the Arity of b1) . b3 c= (b5 # * the Arity of b1) . b3;

:: OSALG_2:th 32
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of the OperSymbols of b1
for b4, b5 being OSSubset of b2
      st b5 in OSSubSort b4
   holds proj2 ((Den(b3,b2)) | (((OSMSubSort b4) # * the Arity of b1) . b3)) c= (b5 * the ResultSort of b1) . b3;

:: OSALG_2:th 33
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being Element of the OperSymbols of b1
for b4 being OSSubset of b2 holds
   proj2 ((Den(b3,b2)) | (((OSMSubSort b4) # * the Arity of b1) . b3)) c= ((OSMSubSort b4) * the ResultSort of b1) . b3;

:: OSALG_2:th 34
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   OSMSubSort b3 is opers_closed(b1, b2) & b3 c= OSMSubSort b3;

:: OSALG_2:funcreg 4
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  cluster OSMSubSort a3 -> opers_closed;
end;

:: OSALG_2:funcreg 5
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be opers_closed OSSubset of a2;
  cluster a2 | a3 -> strict order-sorted;
end;

:: OSALG_2:funcreg 6
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3, a4 be order-sorted MSSubAlgebra of a2;
  cluster a3 /\ a4 -> strict order-sorted;
end;

:: OSALG_2:funcnot 10 => OSALG_2:func 10
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  let a3 be OSSubset of a2;
  func GenOSAlg A3 -> strict order-sorted MSSubAlgebra of a2 means
    a3 is OSSubset of it &
     (for b1 being order-sorted MSSubAlgebra of a2
           st a3 is OSSubset of b1
        holds it is order-sorted MSSubAlgebra of b1);
end;

:: OSALG_2:def 13
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
for b4 being strict order-sorted MSSubAlgebra of b2 holds
      b4 = GenOSAlg b3
   iff
      b3 is OSSubset of b4 &
       (for b5 being order-sorted MSSubAlgebra of b2
             st b3 is OSSubset of b5
          holds b4 is order-sorted MSSubAlgebra of b5);

:: OSALG_2:th 35
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   GenOSAlg b3 = b2 | OSMSubSort b3 & the Sorts of GenOSAlg b3 = OSMSubSort b3;

:: OSALG_2:th 36
theorem
for b1 being non empty non void ManySortedSign
for b2 being MSAlgebra over b1
for b3 being ManySortedSubset of the Sorts of b2 holds
   GenMSAlg b3 = b2 | MSSubSort b3 & the Sorts of GenMSAlg b3 = MSSubSort b3;

:: OSALG_2:th 37
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   the Sorts of GenMSAlg b3 c= the Sorts of GenOSAlg b3;

:: OSALG_2:th 38
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being OSSubset of b2 holds
   GenMSAlg b3 is MSSubAlgebra of GenOSAlg b3;

:: OSALG_2:th 39
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being strict order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
      st b3 = the Sorts of b2
   holds GenOSAlg b3 = b2;

:: OSALG_2:th 40
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being strict order-sorted MSSubAlgebra of b2
for b4 being OSSubset of b2
      st b4 = the Sorts of b3
   holds GenOSAlg b4 = b3;

:: OSALG_2:th 41
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being order-sorted MSSubAlgebra of b2 holds
   (GenOSAlg OSConstants b2) /\ b3 = GenOSAlg OSConstants b2;

:: OSALG_2:funcnot 11 => OSALG_2:func 11
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  let a3, a4 be order-sorted MSSubAlgebra of a2;
  func A3 "\/"_os A4 -> strict order-sorted MSSubAlgebra of a2 means
    for b1 being OSSubset of a2
          st b1 = (the Sorts of a3) \/ the Sorts of a4
       holds it = GenOSAlg b1;
end;

:: OSALG_2:def 14
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3, b4 being order-sorted MSSubAlgebra of b2
for b5 being strict order-sorted MSSubAlgebra of b2 holds
      b5 = b3 "\/"_os b4
   iff
      for b6 being OSSubset of b2
            st b6 = (the Sorts of b3) \/ the Sorts of b4
         holds b5 = GenOSAlg b6;

:: OSALG_2:th 42
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being order-sorted MSSubAlgebra of b2
for b4, b5 being OSSubset of b2
      st b5 = b4 \/ the Sorts of b3
   holds (GenOSAlg b4) "\/"_os b3 = GenOSAlg b5;

:: OSALG_2:th 43
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being order-sorted MSSubAlgebra of b2
for b4 being OSSubset of b2
      st b4 = the Sorts of b2
   holds (GenOSAlg b4) "\/"_os b3 = GenOSAlg b4;

:: OSALG_2:th 44
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3, b4 being order-sorted MSSubAlgebra of b2 holds
b3 "\/"_os b4 = b4 "\/"_os b3;

:: OSALG_2:th 45
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3, b4 being strict order-sorted MSSubAlgebra of b2 holds
b3 /\ (b3 "\/"_os b4) = b3;

:: OSALG_2:th 46
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3, b4 being strict order-sorted MSSubAlgebra of b2 holds
(b3 /\ b4) "\/"_os b4 = b4;

:: OSALG_2:funcnot 12 => OSALG_2:func 12
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  func OSSub A2 -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is strict order-sorted MSSubAlgebra of a2;
end;

:: OSALG_2:def 15
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1
for b3 being set holds
      b3 = OSSub b2
   iff
      for b4 being set holds
            b4 in b3
         iff
            b4 is strict order-sorted MSSubAlgebra of b2;

:: OSALG_2:th 47
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being order-sorted MSAlgebra over b1 holds
   OSSub b2 c= MSSub b2;

:: OSALG_2:funcreg 7
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  cluster OSSub a2 -> non empty;
end;

:: OSALG_2:funcnot 13 => OSALG_2:func 13
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be order-sorted MSAlgebra over a1;
  redefine func OSSub a2 -> Element of bool MSSub a2;
end;

:: OSALG_2:funcnot 14 => OSALG_2:func 14
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  func OSAlg_join A2 -> Function-like quasi_total Relation of [:OSSub a2,OSSub a2:],OSSub a2 means
    for b1, b2 being Element of OSSub a2
    for b3, b4 being strict order-sorted MSSubAlgebra of a2
          st b1 = b3 & b2 = b4
       holds it .(b1,b2) = b3 "\/"_os b4;
end;

:: OSALG_2:def 16
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being Function-like quasi_total Relation of [:OSSub b2,OSSub b2:],OSSub b2 holds
      b3 = OSAlg_join b2
   iff
      for b4, b5 being Element of OSSub b2
      for b6, b7 being strict order-sorted MSSubAlgebra of b2
            st b4 = b6 & b5 = b7
         holds b3 .(b4,b5) = b6 "\/"_os b7;

:: OSALG_2:funcnot 15 => OSALG_2:func 15
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  func OSAlg_meet A2 -> Function-like quasi_total Relation of [:OSSub a2,OSSub a2:],OSSub a2 means
    for b1, b2 being Element of OSSub a2
    for b3, b4 being strict order-sorted MSSubAlgebra of a2
          st b1 = b3 & b2 = b4
       holds it .(b1,b2) = b3 /\ b4;
end;

:: OSALG_2:def 17
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being Function-like quasi_total Relation of [:OSSub b2,OSSub b2:],OSSub b2 holds
      b3 = OSAlg_meet b2
   iff
      for b4, b5 being Element of OSSub b2
      for b6, b7 being strict order-sorted MSSubAlgebra of b2
            st b4 = b6 & b5 = b7
         holds b3 .(b4,b5) = b6 /\ b7;

:: OSALG_2:th 48
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3, b4 being Element of OSSub b2 holds
(OSAlg_meet b2) .(b3,b4) = (MSAlg_meet b2) .(b3,b4);

:: OSALG_2:th 49
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSAlg_join b2 is commutative(OSSub b2);

:: OSALG_2:th 50
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSAlg_join b2 is associative(OSSub b2);

:: OSALG_2:th 51
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSAlg_meet b2 is commutative(OSSub b2);

:: OSALG_2:th 52
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSAlg_meet b2 is associative(OSSub b2);

:: OSALG_2:funcnot 16 => OSALG_2:func 16
definition
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  func OSSubAlLattice A2 -> non empty strict Lattice-like LattStr equals
    LattStr(#OSSub a2,OSAlg_join a2,OSAlg_meet a2#);
end;

:: OSALG_2:def 18
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSSubAlLattice b2 = LattStr(#OSSub b2,OSAlg_join b2,OSAlg_meet b2#);

:: OSALG_2:th 53
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   OSSubAlLattice b2 is bounded;

:: OSALG_2:funcreg 8
registration
  let a1 be non empty non void order-sorted discernable OverloadedRSSign;
  let a2 be non-empty order-sorted MSAlgebra over a1;
  cluster OSSubAlLattice a2 -> non empty strict Lattice-like bounded;
end;

:: OSALG_2:th 54
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1 holds
   Bottom OSSubAlLattice b2 = GenOSAlg OSConstants b2;

:: OSALG_2:th 55
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being non-empty order-sorted MSAlgebra over b1
for b3 being OSSubset of b2
      st b3 = the Sorts of b2
   holds Top OSSubAlLattice b2 = GenOSAlg b3;

:: OSALG_2:th 56
theorem
for b1 being non empty non void order-sorted discernable OverloadedRSSign
for b2 being strict non-empty order-sorted MSAlgebra over b1 holds
   Top OSSubAlLattice b2 = b2;