osalg_2.miz



    begin

    reserve x for set,

R for non empty Poset;

    theorem :: OSALG_2:1

    

     Th1: for X,Y be OrderSortedSet of R holds (X (/\) Y) is OrderSortedSet of R

    proof

      let X,Y be OrderSortedSet of R;

      reconsider M = (X (/\) Y) as ManySortedSet of R;

      M is order-sorted

      proof

        let s1,s2 be Element of R;

        assume s1 <= s2;

        then

         A1: (X . s1) c= (X . s2) & (Y . s1) c= (Y . s2) by OSALG_1:def 16;

        ((X (/\) Y) . s1) = ((X . s1) /\ (Y . s1)) & ((X (/\) Y) . s2) = ((X . s2) /\ (Y . s2)) by PBOOLE:def 5;

        hence thesis by A1, XBOOLE_1: 27;

      end;

      hence thesis;

    end;

    theorem :: OSALG_2:2

    

     Th2: for X,Y be OrderSortedSet of R holds (X (\/) Y) is OrderSortedSet of R

    proof

      let X,Y be OrderSortedSet of R;

      reconsider M = (X (\/) Y) as ManySortedSet of R;

      M is order-sorted

      proof

        let s1,s2 be Element of R;

        assume s1 <= s2;

        then

         A1: (X . s1) c= (X . s2) & (Y . s1) c= (Y . s2) by OSALG_1:def 16;

        ((X (\/) Y) . s1) = ((X . s1) \/ (Y . s1)) & ((X (\/) Y) . s2) = ((X . s2) \/ (Y . s2)) by PBOOLE:def 4;

        hence thesis by A1, XBOOLE_1: 13;

      end;

      hence thesis;

    end;

    definition

      let R be non empty Poset, M be OrderSortedSet of R;

      :: OSALG_2:def1

      mode OrderSortedSubset of M -> ManySortedSubset of M means

      : Def1: it is OrderSortedSet of R;

      existence

      proof

        reconsider X = M as ManySortedSubset of M by PBOOLE:def 18;

        take X;

        thus thesis;

      end;

    end

    registration

      let R be non empty Poset, M be non-empty OrderSortedSet of R;

      cluster non-empty for OrderSortedSubset of M;

      existence

      proof

        reconsider N = M as ManySortedSubset of M by PBOOLE:def 18;

        reconsider N1 = N as OrderSortedSubset of M by Def1;

        take N1;

        thus thesis;

      end;

    end

    begin

    definition

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      :: OSALG_2:def2

      mode OSSubset of U0 -> ManySortedSubset of the Sorts of U0 means

      : Def2: it is OrderSortedSet of S;

      existence

      proof

        reconsider B = the Sorts of U0 as MSSubset of U0 by PBOOLE:def 18;

        take B;

        thus thesis by OSALG_1: 17;

      end;

    end

    registration

      let S be OrderSortedSign;

      cluster monotone strict non-empty for OSAlgebra of S;

      existence

      proof

        set z1 = the Element of { {} };

        take ( TrivialOSA (S, { {} },z1));

        thus thesis;

      end;

    end

    registration

      let S be OrderSortedSign, U0 be non-empty OSAlgebra of S;

      cluster non-empty for OSSubset of U0;

      existence

      proof

        reconsider N = the Sorts of U0 as MSSubset of U0 by PBOOLE:def 18;

        the Sorts of U0 is OrderSortedSet of S by OSALG_1: 17;

        then

        reconsider M = N as OSSubset of U0 by Def2;

        take M;

        thus thesis;

      end;

    end

    theorem :: OSALG_2:3

    

     Th3: for S0 be non void all-with_const_op strict non empty ManySortedSign holds ( OSSign S0) is all-with_const_op

    proof

      let S0 be non void all-with_const_op strict non empty ManySortedSign;

      let s be Element of ( OSSign S0);

      reconsider s1 = s as Element of S0 by OSALG_1:def 5;

      s1 is with_const_op by MSUALG_2:def 2;

      then

      consider o be Element of the carrier' of S0 such that

       A1: (the Arity of S0 . o) = {} & (the ResultSort of S0 . o) = s1;

      

       A2: o is Element of the carrier' of ( OSSign S0) by OSALG_1:def 5;

      (the Arity of ( OSSign S0) . o) = {} & (the ResultSort of ( OSSign S0) . o) = s1 by A1, OSALG_1:def 5;

      hence thesis by A2;

    end;

    registration

      cluster all-with_const_op strict for OrderSortedSign;

      existence

      proof

        set S0 = the non void all-with_const_op strict non empty ManySortedSign;

        take ( OSSign S0);

        thus thesis by Th3;

      end;

    end

    begin

    theorem :: OSALG_2:4

    

     Th4: for S be OrderSortedSign, U0 be OSAlgebra of S holds MSAlgebra (# the Sorts of U0, the Charact of U0 #) is order-sorted

    proof

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      the Sorts of U0 is OrderSortedSet of S by OSALG_1: 17;

      hence thesis by OSALG_1: 17;

    end;

    registration

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      cluster order-sorted for MSSubAlgebra of U0;

      existence

      proof

        reconsider U1 = MSAlgebra (# the Sorts of U0, the Charact of U0 #) as strict MSSubAlgebra of U0 by MSUALG_2: 37;

        take U1;

        thus thesis by Th4;

      end;

    end

    definition

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      mode OSSubAlgebra of U0 is order-sorted MSSubAlgebra of U0;

    end

    registration

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      cluster strict for OSSubAlgebra of U0;

      existence

      proof

        reconsider U1 = MSAlgebra (# the Sorts of U0, the Charact of U0 #) as order-sorted MSSubAlgebra of U0 by Th4, MSUALG_2: 37;

        take U1;

        thus thesis;

      end;

    end

    registration

      let S be OrderSortedSign, U0 be non-empty OSAlgebra of S;

      cluster non-empty strict for OSSubAlgebra of U0;

      existence

      proof

        set U1 = MSAlgebra (# the Sorts of U0, the Charact of U0 #);

        the Sorts of U0 is OrderSortedSet of S by OSALG_1: 17;

        then

        reconsider U1 as strict OSSubAlgebra of U0 by MSUALG_2: 37, OSALG_1: 17;

        take U1;

        thus thesis;

      end;

    end

    theorem :: OSALG_2:5

    

     Th5: for S be OrderSortedSign holds for U0 be OSAlgebra of S holds for U1 be MSAlgebra over S holds U1 is OSSubAlgebra of U0 iff the Sorts of U1 is OSSubset of U0 & for B be OSSubset of U0 st B = the Sorts of U1 holds B is opers_closed & the Charact of U1 = ( Opers (U0,B))

    proof

      let S be OrderSortedSign;

      let U0 be OSAlgebra of S;

      let U1 be MSAlgebra over S;

      hereby

        assume

         A1: U1 is OSSubAlgebra of U0;

        then the Sorts of U1 is OrderSortedSet of S & the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9, OSALG_1: 17;

        hence the Sorts of U1 is OSSubset of U0 by Def2;

        let B be OSSubset of U0;

        assume B = the Sorts of U1;

        hence B is opers_closed & the Charact of U1 = ( Opers (U0,B)) by A1, MSUALG_2:def 9;

      end;

      assume

       A2: the Sorts of U1 is OSSubset of U0;

      assume

       A3: for B be OSSubset of U0 st B = the Sorts of U1 holds B is opers_closed & the Charact of U1 = ( Opers (U0,B));

      

       A4: U1 is MSSubAlgebra of U0

      proof

        thus the Sorts of U1 is MSSubset of U0 by A2;

        let B be MSSubset of U0 such that

         A5: B = the Sorts of U1;

        reconsider B1 = B as OSSubset of U0 by A2, A5;

        B1 is opers_closed by A3, A5;

        hence thesis by A3, A5;

      end;

      the Sorts of U1 is OrderSortedSet of S by A2, Def2;

      hence thesis by A4, OSALG_1: 17;

    end;

    reserve S1 for OrderSortedSign,

OU0 for OSAlgebra of S1;

    reserve s,s1,s2,s3,s4 for SortSymbol of S1;

    definition

      let S1, OU0, s;

      :: OSALG_2:def3

      func OSConstants (OU0,s) -> Subset of (the Sorts of OU0 . s) equals ( union { ( Constants (OU0,s2)) : s2 <= s });

      coherence

      proof

        set Cs = { ( Constants (OU0,s2)) : s2 <= s };

        for X be set st X in Cs holds X c= (the Sorts of OU0 . s)

        proof

          let X be set;

          assume X in Cs;

          then

          consider s2 such that

           A1: X = ( Constants (OU0,s2)) and

           A2: s2 <= s;

          (the Sorts of OU0 . s2) c= (the Sorts of OU0 . s) by A2, OSALG_1:def 17;

          hence thesis by A1;

        end;

        hence thesis by ZFMISC_1: 76;

      end;

    end

    theorem :: OSALG_2:6

    

     Th6: ( Constants (OU0,s)) c= ( OSConstants (OU0,s))

    proof

      ( Constants (OU0,s)) in { ( Constants (OU0,s2)) : s2 <= s };

      hence thesis by ZFMISC_1: 74;

    end;

    definition

      let S1;

      let M be ManySortedSet of the carrier of S1;

      :: OSALG_2:def4

      func OSCl M -> OrderSortedSet of S1 means

      : Def4: for s be SortSymbol of S1 holds (it . s) = ( union { (M . s1) : s1 <= s });

      existence

      proof

        deffunc F( Element of S1) = ( union { (M . s1) : s1 <= $1 });

        consider f be Function such that

         A1: ( dom f) = the carrier of S1 & for d be Element of S1 holds (f . d) = F(d) from FUNCT_1:sch 4;

        reconsider f as ManySortedSet of the carrier of S1 by A1, PARTFUN1:def 2, RELAT_1:def 18;

        reconsider f1 = f as ManySortedSet of S1;

        f1 is order-sorted

        proof

          let r1,r2 be Element of S1;

          assume

           A2: r1 <= r2;

          let x be object;

          assume x in (f1 . r1);

          then x in ( union { (M . s2) : s2 <= r1 }) by A1;

          then

          consider y be set such that

           A3: x in y & y in { (M . s2) : s2 <= r1 } by TARSKI:def 4;

          consider s3 such that

           A4: y = (M . s3) and

           A5: s3 <= r1 by A3;

          s3 <= r2 by A2, A5, ORDERS_2: 3;

          then y in { (M . s2) : s2 <= r2 } by A4;

          then x in ( union { (M . s2) : s2 <= r2 }) by A3, TARSKI:def 4;

          hence thesis by A1;

        end;

        then

        reconsider f2 = f1 as OrderSortedSet of S1;

        take f2;

        thus thesis by A1;

      end;

      uniqueness

      proof

        let W1,W2 be OrderSortedSet of S1;

        assume

         A6: for s be SortSymbol of S1 holds (W1 . s) = ( union { (M . s1) : s1 <= s });

        assume

         A7: for s be SortSymbol of S1 holds (W2 . s) = ( union { (M . s1) : s1 <= s });

        for s be object st s in the carrier of S1 holds (W1 . s) = (W2 . s)

        proof

          let s be object;

          assume s in the carrier of S1;

          then

          reconsider t = s as SortSymbol of S1;

          (W1 . s) = ( union { (M . s1) : s1 <= t }) by A6

          .= (W2 . s) by A7;

          hence thesis;

        end;

        hence thesis;

      end;

    end

    theorem :: OSALG_2:7

    

     Th7: for M be ManySortedSet of the carrier of S1 holds M c= ( OSCl M)

    proof

      let M be ManySortedSet of the carrier of S1;

      let i be object;

      assume i in the carrier of S1;

      then

      reconsider s = i as SortSymbol of S1;

      (M . s) in { (M . s1) : s1 <= s };

      then (M . s) c= ( union { (M . s1) : s1 <= s }) by ZFMISC_1: 74;

      hence thesis by Def4;

    end;

    theorem :: OSALG_2:8

    

     Th8: for M be ManySortedSet of the carrier of S1, A be OrderSortedSet of S1 holds M c= A implies ( OSCl M) c= A

    proof

      let M be ManySortedSet of the carrier of S1, A be OrderSortedSet of S1;

      assume

       A1: M c= A;

      assume not ( OSCl M) c= A;

      then

      consider i be object such that

       A2: i in the carrier of S1 and

       A3: not (( OSCl M) . i) c= (A . i);

      reconsider s = i as SortSymbol of S1 by A2;

      consider x be object such that

       A4: x in (( OSCl M) . i) and

       A5: not x in (A . i) by A3;

      (( OSCl M) . s) = ( union { (M . s2) : s2 <= s }) by Def4;

      then

      consider X1 be set such that

       A6: x in X1 and

       A7: X1 in { (M . s2) : s2 <= s } by A4, TARSKI:def 4;

      consider s1 be SortSymbol of S1 such that

       A8: X1 = (M . s1) and

       A9: s1 <= s by A7;

      (M . s1) c= (A . s1) by A1;

      then

       A10: x in (A . s1) by A6, A8;

      (A . s1) c= (A . s) by A9, OSALG_1:def 16;

      hence contradiction by A5, A10;

    end;

    theorem :: OSALG_2:9

    for S be OrderSortedSign, X be OrderSortedSet of S holds ( OSCl X) = X

    proof

      let S be OrderSortedSign, X be OrderSortedSet of S;

      X c= ( OSCl X) & ( OSCl X) c= X by Th7, Th8;

      hence thesis by PBOOLE: 146;

    end;

    definition

      let S1, OU0;

      :: OSALG_2:def5

      func OSConstants (OU0) -> OSSubset of OU0 means

      : Def5: for s be SortSymbol of S1 holds (it . s) = ( OSConstants (OU0,s));

      existence

      proof

        deffunc F( Element of S1) = ( union { ( Constants (OU0,s1)) : s1 <= $1 });

        consider f be Function such that

         A1: ( dom f) = the carrier of S1 & for d be Element of S1 holds (f . d) = F(d) from FUNCT_1:sch 4;

        reconsider f as ManySortedSet of the carrier of S1 by A1, PARTFUN1:def 2, RELAT_1:def 18;

        f c= the Sorts of OU0

        proof

          let s be object;

          assume s in the carrier of S1;

          then

          reconsider s1 = s as SortSymbol of S1;

          (f . s1) = ( OSConstants (OU0,s1)) by A1;

          hence thesis;

        end;

        then

        reconsider f as MSSubset of OU0 by PBOOLE:def 18;

        take f;

        reconsider f1 = f as ManySortedSet of S1;

        f1 is order-sorted

        proof

          let r1,r2 be Element of S1;

          assume

           A2: r1 <= r2;

          let x be object;

          assume x in (f1 . r1);

          then x in ( union { ( Constants (OU0,s2)) : s2 <= r1 }) by A1;

          then

          consider y be set such that

           A3: x in y & y in { ( Constants (OU0,s2)) : s2 <= r1 } by TARSKI:def 4;

          consider s3 such that

           A4: y = ( Constants (OU0,s3)) and

           A5: s3 <= r1 by A3;

          s3 <= r2 by A2, A5, ORDERS_2: 3;

          then y in { ( Constants (OU0,s2)) : s2 <= r2 } by A4;

          then x in ( union { ( Constants (OU0,s2)) : s2 <= r2 }) by A3, TARSKI:def 4;

          hence thesis by A1;

        end;

        hence f is OSSubset of OU0 by Def2;

        thus thesis by A1;

      end;

      uniqueness

      proof

        let W1,W2 be OSSubset of OU0;

        assume that

         A6: for s be SortSymbol of S1 holds (W1 . s) = ( OSConstants (OU0,s)) and

         A7: for s be SortSymbol of S1 holds (W2 . s) = ( OSConstants (OU0,s));

        for s be object st s in the carrier of S1 holds (W1 . s) = (W2 . s)

        proof

          let s be object;

          assume s in the carrier of S1;

          then

          reconsider t = s as SortSymbol of S1;

          (W1 . t) = ( OSConstants (OU0,t)) by A6;

          hence thesis by A7;

        end;

        hence thesis;

      end;

    end

    theorem :: OSALG_2:10

    

     Th10: ( Constants OU0) c= ( OSConstants OU0)

    proof

      let i be object;

      assume i in the carrier of S1;

      then

      reconsider s = i as SortSymbol of S1;

      (( Constants OU0) . s) = ( Constants (OU0,s)) & (( OSConstants OU0) . s) = ( OSConstants (OU0,s)) by Def5, MSUALG_2:def 4;

      hence thesis by Th6;

    end;

    theorem :: OSALG_2:11

    

     Th11: for A be OSSubset of OU0 holds ( Constants OU0) c= A implies ( OSConstants OU0) c= A

    proof

      let A be OSSubset of OU0;

      assume

       A1: ( Constants OU0) c= A;

      assume not ( OSConstants OU0) c= A;

      then

      consider i be object such that

       A2: i in the carrier of S1 and

       A3: not (( OSConstants OU0) . i) c= (A . i);

      reconsider s = i as SortSymbol of S1 by A2;

      consider x be object such that

       A4: x in (( OSConstants OU0) . i) and

       A5: not x in (A . i) by A3;

      (( OSConstants OU0) . s) = ( OSConstants (OU0,s)) by Def5

      .= ( union { ( Constants (OU0,s2)) : s2 <= s });

      then

      consider X1 be set such that

       A6: x in X1 and

       A7: X1 in { ( Constants (OU0,s2)) : s2 <= s } by A4, TARSKI:def 4;

      consider s1 be SortSymbol of S1 such that

       A8: X1 = ( Constants (OU0,s1)) and

       A9: s1 <= s by A7;

      

       A10: (( Constants OU0) . s1) c= (A . s1) by A1;

      x in (( Constants OU0) . s1) by A6, A8, MSUALG_2:def 4;

      then

       A11: x in (A . s1) by A10;

      A is OrderSortedSet of S1 by Def2;

      then (A . s1) c= (A . s) by A9, OSALG_1:def 16;

      hence contradiction by A5, A11;

    end;

    theorem :: OSALG_2:12

    for A be OSSubset of OU0 holds ( OSConstants OU0) = ( OSCl ( Constants OU0))

    proof

      let A be OSSubset of OU0;

       A1:

      now

        let i be set;

        assume i in the carrier of S1;

        then

        reconsider s = i as SortSymbol of S1;

        set c1 = { (( Constants OU0) . s1) : s1 <= s }, c2 = { ( Constants (OU0,s1)) : s1 <= s };

        for x be object holds (x in c1 iff x in c2)

        proof

          let x be object;

          hereby

            assume x in c1;

            then

            consider s1 such that

             A2: x = (( Constants OU0) . s1) and

             A3: s1 <= s;

            x = ( Constants (OU0,s1)) by A2, MSUALG_2:def 4;

            hence x in c2 by A3;

          end;

          assume x in c2;

          then

          consider s1 such that

           A4: x = ( Constants (OU0,s1)) and

           A5: s1 <= s;

          x = (( Constants OU0) . s1) by A4, MSUALG_2:def 4;

          hence thesis by A5;

        end;

        then

         A6: c1 = c2 by TARSKI: 2;

        (( OSConstants OU0) . s) = ( OSConstants (OU0,s)) by Def5

        .= (( OSCl ( Constants OU0)) . s) by A6, Def4;

        hence (( OSConstants OU0) . i) = (( OSCl ( Constants OU0)) . i);

      end;

      then for i be object st i in the carrier of S1 holds (( OSCl ( Constants OU0)) . i) c= (( OSConstants OU0) . i);

      then

       A7: ( OSCl ( Constants OU0)) c= ( OSConstants OU0);

      for i be object st i in the carrier of S1 holds (( OSConstants OU0) . i) c= (( OSCl ( Constants OU0)) . i) by A1;

      then ( OSConstants OU0) c= ( OSCl ( Constants OU0));

      hence thesis by A7, PBOOLE: 146;

    end;

    theorem :: OSALG_2:13

    

     Th13: for OU1 be OSSubAlgebra of OU0 holds ( OSConstants OU0) is OSSubset of OU1

    proof

      let OU1 be OSSubAlgebra of OU0;

      ( OSConstants OU0) c= the Sorts of OU1

      proof

        let i be object;

        assume i in the carrier of S1;

        then

        reconsider s = i as SortSymbol of S1;

        ( Constants OU0) is MSSubset of OU1 by MSUALG_2: 10;

        then

         A1: ( Constants OU0) c= the Sorts of OU1 by PBOOLE:def 18;

        

         A2: for s2, s3 st s2 <= s3 holds (( Constants OU0) . s2) c= (the Sorts of OU1 . s3)

        proof

          let s2, s3;

          assume s2 <= s3;

          then

           A3: (the Sorts of OU1 . s2) c= (the Sorts of OU1 . s3) by OSALG_1:def 17;

          (( Constants OU0) . s2) c= (the Sorts of OU1 . s2) by A1;

          hence thesis by A3;

        end;

        

         A4: for X be set st X in { ( Constants (OU0,s1)) : s1 <= s } holds X c= (the Sorts of OU1 . s)

        proof

          let X be set;

          assume X in { ( Constants (OU0,s1)) : s1 <= s };

          then

          consider s4 such that

           A5: X = ( Constants (OU0,s4)) & s4 <= s;

          ( Constants (OU0,s4)) = (( Constants OU0) . s4) by MSUALG_2:def 4;

          hence thesis by A2, A5;

        end;

        (( OSConstants OU0) . i) = ( OSConstants (OU0,s)) by Def5

        .= ( union { ( Constants (OU0,s1)) : s1 <= s });

        hence thesis by A4, ZFMISC_1: 76;

      end;

      then

       A6: ( OSConstants OU0) is ManySortedSubset of the Sorts of OU1 by PBOOLE:def 18;

      ( OSConstants OU0) is OrderSortedSet of S1 by Def2;

      hence thesis by A6, Def2;

    end;

    theorem :: OSALG_2:14

    for S be all-with_const_op OrderSortedSign, OU0 be non-empty OSAlgebra of S, OU1 be non-empty OSSubAlgebra of OU0 holds ( OSConstants OU0) is non-empty OSSubset of OU1

    proof

      let S be all-with_const_op OrderSortedSign, OU0 be non-empty OSAlgebra of S, OU1 be non-empty OSSubAlgebra of OU0;

      ( Constants OU0) c= ( OSConstants OU0) by Th10;

      hence thesis by Th13, PBOOLE: 131;

    end;

    begin

    theorem :: OSALG_2:15

    

     Th15: for I be set holds for M be ManySortedSet of I holds for x be set holds x is ManySortedSubset of M iff x in ( product ( bool M))

    proof

      let I be set;

      let M be ManySortedSet of I;

      let x be set;

      

       A1: I = ( dom ( bool M)) by PARTFUN1:def 2;

      hereby

        assume x is ManySortedSubset of M;

        then

        reconsider x1 = x as ManySortedSubset of M;

        

         A2: for i be object st i in ( dom ( bool M)) holds (x1 . i) in (( bool M) . i)

        proof

          let i be object such that

           A3: i in ( dom ( bool M));

          x1 c= M by PBOOLE:def 18;

          then (x1 . i) c= (M . i) by A1, A3;

          then (x1 . i) in ( bool (M . i));

          hence thesis by A1, A3, MBOOLEAN:def 1;

        end;

        ( dom x1) = I by PARTFUN1:def 2

        .= ( dom ( bool M)) by PARTFUN1:def 2;

        hence x in ( product ( bool M)) by A2, CARD_3:def 5;

      end;

      assume x in ( product ( bool M));

      then

      consider x1 be Function such that

       A4: x = x1 and

       A5: ( dom x1) = ( dom ( bool M)) and

       A6: for i be object st i in ( dom ( bool M)) holds (x1 . i) in (( bool M) . i) by CARD_3:def 5;

      ( dom x1) = I by A5, PARTFUN1:def 2;

      then

      reconsider x2 = x1 as ManySortedSet of I by PARTFUN1:def 2, RELAT_1:def 18;

      x2 c= M

      proof

        let i be object such that

         A7: i in I;

        (x2 . i) in (( bool M) . i) by A1, A6, A7;

        then (x2 . i) in ( bool (M . i)) by A7, MBOOLEAN:def 1;

        hence thesis;

      end;

      hence thesis by A4, PBOOLE:def 18;

    end;

    definition

      let R be non empty Poset, M be OrderSortedSet of R;

      :: OSALG_2:def6

      func OSbool (M) -> set means for x be set holds x in it iff x is OrderSortedSubset of M;

      existence

      proof

        defpred P[ set] means $1 is OrderSortedSubset of M;

        set f = ( product ( bool M));

        consider X be set such that

         A1: for y be set holds y in X iff y in f & P[y] from XFAMILY:sch 1;

        take X;

        let y be set;

        thus y in X implies y is OrderSortedSubset of M by A1;

        assume

         A2: y is OrderSortedSubset of M;

        then y in f by Th15;

        hence thesis by A1, A2;

      end;

      uniqueness

      proof

        defpred P[ set] means $1 is OrderSortedSubset of M;

        thus for X1,X2 be set st (for x be set holds x in X1 iff P[x]) & (for x be set holds x in X2 iff P[x]) holds X1 = X2 from XFAMILY:sch 3;

      end;

    end

    definition

      let S be OrderSortedSign, U0 be OSAlgebra of S, A be OSSubset of U0;

      :: OSALG_2:def7

      func OSSubSort (A) -> set equals { x where x be Element of ( SubSort A) : x is OrderSortedSet of S };

      correctness ;

    end

    theorem :: OSALG_2:16

    

     Th16: for A be OSSubset of OU0 holds ( OSSubSort A) c= ( SubSort A)

    proof

      let A be OSSubset of OU0;

      let x be object;

      assume x in ( OSSubSort A);

      then ex y be Element of ( SubSort A) st x = y & y is OrderSortedSet of S1;

      hence thesis;

    end;

    theorem :: OSALG_2:17

    

     Th17: for A be OSSubset of OU0 holds the Sorts of OU0 in ( OSSubSort A)

    proof

      let A be OSSubset of OU0;

      reconsider X = the Sorts of OU0 as Element of ( SubSort A) by MSUALG_2: 38;

      the Sorts of OU0 is OrderSortedSet of S1 by OSALG_1: 17;

      then X in { x where x be Element of ( SubSort A) : x is OrderSortedSet of S1 };

      hence thesis;

    end;

    registration

      let S1, OU0;

      let A be OSSubset of OU0;

      cluster ( OSSubSort A) -> non empty;

      coherence by Th17;

    end

    definition

      let S1, OU0;

      :: OSALG_2:def8

      func OSSubSort (OU0) -> set equals { x where x be Element of ( SubSort OU0) : x is OrderSortedSet of S1 };

      correctness ;

    end

    theorem :: OSALG_2:18

    

     Th18: for A be OSSubset of OU0 holds ( OSSubSort A) c= ( OSSubSort OU0)

    proof

      let A be OSSubset of OU0;

      let x be object;

      assume x in ( OSSubSort A);

      then

      consider x1 be Element of ( SubSort A) such that

       A1: x1 = x and

       A2: x1 is OrderSortedSet of S1;

      x1 in ( SubSort A) & ( SubSort A) c= ( SubSort OU0) by MSUALG_2: 39;

      then

      reconsider x2 = x1 as Element of ( SubSort OU0);

      x2 in { y where y be Element of ( SubSort OU0) : y is OrderSortedSet of S1 } by A2;

      hence thesis by A1;

    end;

    registration

      let S1, OU0;

      cluster ( OSSubSort OU0) -> non empty;

      coherence

      proof

        set A = the OSSubset of OU0;

        ( OSSubSort A) c= ( OSSubSort OU0) by Th18;

        hence thesis;

      end;

    end

    definition

      let S1, OU0;

      let e be Element of ( OSSubSort OU0);

      :: OSALG_2:def9

      func @ e -> OSSubset of OU0 equals e;

      coherence

      proof

        e in { x where x be Element of ( SubSort OU0) : x is OrderSortedSet of S1 };

        then

        consider e1 be Element of ( SubSort OU0) such that

         A1: e = e1 and

         A2: e1 is OrderSortedSet of S1;

        reconsider e2 = ( @ e1) as OSSubset of OU0 by A2, Def2;

        e2 = e by A1;

        hence thesis;

      end;

    end

    theorem :: OSALG_2:19

    

     Th19: for A,B be OSSubset of OU0 holds B in ( OSSubSort A) iff B is opers_closed & ( OSConstants OU0) c= B & A c= B

    proof

      let A,B be OSSubset of OU0;

      thus B in ( OSSubSort A) implies B is opers_closed & ( OSConstants OU0) c= B & A c= B

      proof

        assume B in ( OSSubSort A);

        then

         A1: ex B1 be Element of ( SubSort A) st B1 = B & B1 is OrderSortedSet of S1;

        then ( Constants OU0) c= B by MSUALG_2: 13;

        hence thesis by A1, Th11, MSUALG_2: 13;

      end;

      assume that

       A2: B is opers_closed and

       A3: ( OSConstants OU0) c= B and

       A4: A c= B;

      ( Constants OU0) c= ( OSConstants OU0) by Th10;

      then ( Constants OU0) c= B by A3, PBOOLE: 13;

      then

       A5: B in ( SubSort A) by A2, A4, MSUALG_2: 13;

      B is OrderSortedSet of S1 by Def2;

      hence thesis by A5;

    end;

    theorem :: OSALG_2:20

    

     Th20: for B be OSSubset of OU0 holds B in ( OSSubSort OU0) iff B is opers_closed

    proof

      let B be OSSubset of OU0;

      

       A1: B in ( SubSort OU0) iff B is opers_closed by MSUALG_2: 14;

      thus B in ( OSSubSort OU0) implies B is opers_closed

      proof

        assume B in ( OSSubSort OU0);

        then ex B1 be Element of ( SubSort OU0) st B1 = B & B1 is OrderSortedSet of S1;

        hence thesis by MSUALG_2: 14;

      end;

      assume

       A2: B is opers_closed;

      B is OrderSortedSet of S1 by Def2;

      hence thesis by A1, A2;

    end;

    definition

      let S1, OU0;

      let A be OSSubset of OU0, s be Element of S1;

      :: OSALG_2:def10

      func OSSubSort (A,s) -> set means

      : Def10: for x be object holds x in it iff ex B be OSSubset of OU0 st B in ( OSSubSort A) & x = (B . s);

      existence

      proof

        defpred P[ object] means ex B be OSSubset of OU0 st B in ( OSSubSort A) & $1 = (B . s);

        set C = ( bool ( Union the Sorts of OU0));

        consider X be set such that

         A1: for x be object holds x in X iff x in C & P[x] from XBOOLE_0:sch 1;

        take X;

        

         A2: C = ( bool ( union ( rng the Sorts of OU0))) by CARD_3:def 4;

        for x be set holds x in X iff ex B be OSSubset of OU0 st B in ( OSSubSort A) & x = (B . s)

        proof

          ( dom the Sorts of OU0) = the carrier of S1 by PARTFUN1:def 2;

          then (the Sorts of OU0 . s) in ( rng the Sorts of OU0) by FUNCT_1:def 3;

          then

           A3: (the Sorts of OU0 . s) c= ( union ( rng the Sorts of OU0)) by ZFMISC_1: 74;

          let x be set;

          thus x in X implies ex B be OSSubset of OU0 st B in ( OSSubSort A) & x = (B . s) by A1;

          given B be OSSubset of OU0 such that

           A4: B in ( OSSubSort A) and

           A5: x = (B . s);

          B c= the Sorts of OU0 by PBOOLE:def 18;

          then (B . s) c= (the Sorts of OU0 . s);

          then x c= ( union ( rng the Sorts of OU0)) by A5, A3;

          hence thesis by A2, A1, A4, A5;

        end;

        hence thesis;

      end;

      uniqueness

      proof

        defpred P[ object] means ex B be OSSubset of OU0 st B in ( OSSubSort A) & $1 = (B . s);

        thus for X1,X2 be set st (for x be object holds x in X1 iff P[x]) & (for x be object holds x in X2 iff P[x]) holds X1 = X2 from XBOOLE_0:sch 3;

      end;

    end

    theorem :: OSALG_2:21

    

     Th21: for A be OSSubset of OU0, s1,s2 be SortSymbol of S1 holds s1 <= s2 implies ( OSSubSort (A,s2)) is_coarser_than ( OSSubSort (A,s1))

    proof

      let A be OSSubset of OU0, s1,s2 be SortSymbol of S1;

      assume

       A1: s1 <= s2;

      for Y be set st Y in ( OSSubSort (A,s2)) holds ex X be set st X in ( OSSubSort (A,s1)) & X c= Y

      proof

        let x be set;

        assume x in ( OSSubSort (A,s2));

        then

        consider B be OSSubset of OU0 such that

         A2: B in ( OSSubSort A) & x = (B . s2) by Def10;

        take (B . s1);

        B is OrderSortedSet of S1 by Def2;

        hence thesis by A1, A2, Def10, OSALG_1:def 16;

      end;

      hence thesis by SETFAM_1:def 3;

    end;

    theorem :: OSALG_2:22

    

     Th22: for A be OSSubset of OU0, s be SortSymbol of S1 holds ( OSSubSort (A,s)) c= ( SubSort (A,s))

    proof

      let A be OSSubset of OU0, s be SortSymbol of S1;

      let x be object;

      assume x in ( OSSubSort (A,s));

      then

       A1: ex B be OSSubset of OU0 st B in ( OSSubSort A) & x = (B . s) by Def10;

      ( OSSubSort A) c= ( SubSort A) by Th16;

      hence thesis by A1, MSUALG_2:def 13;

    end;

    theorem :: OSALG_2:23

    

     Th23: for A be OSSubset of OU0, s be SortSymbol of S1 holds (the Sorts of OU0 . s) in ( OSSubSort (A,s))

    proof

      let A be OSSubset of OU0, s be SortSymbol of S1;

      the Sorts of OU0 is ManySortedSubset of the Sorts of OU0 & the Sorts of OU0 is OrderSortedSet of S1 by OSALG_1: 17, PBOOLE:def 18;

      then

      reconsider B = the Sorts of OU0 as OSSubset of OU0 by Def2;

      the Sorts of OU0 in ( OSSubSort A) by Th17;

      then (B . s) in ( OSSubSort (A,s)) by Def10;

      hence thesis;

    end;

    registration

      let S1, OU0;

      let A be OSSubset of OU0, s be SortSymbol of S1;

      cluster ( OSSubSort (A,s)) -> non empty;

      coherence by Th23;

    end

    definition

      let S1, OU0;

      let A be OSSubset of OU0;

      :: OSALG_2:def11

      func OSMSubSort (A) -> OSSubset of OU0 means

      : Def11: for s be SortSymbol of S1 holds (it . s) = ( meet ( OSSubSort (A,s)));

      existence

      proof

        deffunc F( Element of S1) = ( meet ( OSSubSort (A,$1)));

        consider f be Function such that

         A1: ( dom f) = the carrier of S1 & for s be Element of S1 holds (f . s) = F(s) from FUNCT_1:sch 4;

        reconsider f as ManySortedSet of the carrier of S1 by A1, PARTFUN1:def 2, RELAT_1:def 18;

        f c= the Sorts of OU0

        proof

          reconsider u0 = the Sorts of OU0 as MSSubset of OU0 by PBOOLE:def 18;

          let x be object;

          assume x in the carrier of S1;

          then

          reconsider s = x as SortSymbol of S1;

          

           A2: (f . s) = ( meet ( OSSubSort (A,s))) by A1;

          u0 is OrderSortedSet of S1 by OSALG_1: 17;

          then

           A3: u0 is OSSubset of OU0 by Def2;

          u0 in ( OSSubSort A) by Th17;

          then (the Sorts of OU0 . s) in ( OSSubSort (A,s)) by A3, Def10;

          hence thesis by A2, SETFAM_1: 3;

        end;

        then

        reconsider f as MSSubset of OU0 by PBOOLE:def 18;

        take f;

        reconsider f1 = f as ManySortedSet of S1;

        for s1,s2 be Element of S1 st s1 <= s2 holds (f1 . s1) c= (f1 . s2)

        proof

          let s1,s2 be Element of S1;

          assume s1 <= s2;

          then

           A4: ( meet ( OSSubSort (A,s1))) c= ( meet ( OSSubSort (A,s2))) by Th21, SETFAM_1: 14;

          (f1 . s1) = ( meet ( OSSubSort (A,s1))) by A1;

          hence thesis by A1, A4;

        end;

        then f is OrderSortedSet of S1 by OSALG_1:def 16;

        hence thesis by A1, Def2;

      end;

      uniqueness

      proof

        let W1,W2 be OSSubset of OU0;

        assume that

         A5: for s be SortSymbol of S1 holds (W1 . s) = ( meet ( OSSubSort (A,s))) and

         A6: for s be SortSymbol of S1 holds (W2 . s) = ( meet ( OSSubSort (A,s)));

        for s be object st s in the carrier of S1 holds (W1 . s) = (W2 . s)

        proof

          let s be object;

          assume s in the carrier of S1;

          then

          reconsider s as SortSymbol of S1;

          (W1 . s) = ( meet ( OSSubSort (A,s))) by A5;

          hence thesis by A6;

        end;

        hence thesis;

      end;

    end

    registration

      let S1, OU0;

      cluster opers_closed for OSSubset of OU0;

      existence

      proof

        set x = the Element of ( OSSubSort OU0);

        x in { y where y be Element of ( SubSort OU0) : y is OrderSortedSet of S1 };

        then

        consider x1 be Element of ( SubSort OU0) such that x = x1 and

         A1: x1 is OrderSortedSet of S1;

        reconsider x2 = x1 as MSSubset of OU0 by MSUALG_2:def 11;

        reconsider x3 = x2 as OSSubset of OU0 by A1, Def2;

        take x3;

        thus thesis by MSUALG_2:def 11;

      end;

    end

    theorem :: OSALG_2:24

    

     Th24: for A be OSSubset of OU0 holds (( OSConstants OU0) (\/) A) c= ( OSMSubSort A)

    proof

      let A be OSSubset of OU0;

      let i be object;

      assume i in the carrier of S1;

      then

      reconsider s = i as SortSymbol of S1;

      

       A1: for Z be set st Z in ( OSSubSort (A,s)) holds ((( OSConstants OU0) (\/) A) . s) c= Z

      proof

        let Z be set;

        assume Z in ( OSSubSort (A,s));

        then

        consider B be OSSubset of OU0 such that

         A2: B in ( OSSubSort A) and

         A3: Z = (B . s) by Def10;

        ( OSConstants OU0) c= B & A c= B by A2, Th19;

        then (( OSConstants OU0) (\/) A) c= B by PBOOLE: 16;

        hence thesis by A3;

      end;

      (( OSMSubSort A) . s) = ( meet ( OSSubSort (A,s))) by Def11;

      hence thesis by A1, SETFAM_1: 5;

    end;

    theorem :: OSALG_2:25

    for A be OSSubset of OU0 st (( OSConstants OU0) (\/) A) is non-empty holds ( OSMSubSort A) is non-empty

    proof

      let A be OSSubset of OU0;

      assume

       A1: (( OSConstants OU0) (\/) A) is non-empty;

      now

        let i be object;

        assume i in the carrier of S1;

        then

        reconsider s = i as SortSymbol of S1;

        for Z be set st Z in ( OSSubSort (A,s)) holds ((( OSConstants OU0) (\/) A) . s) c= Z

        proof

          let Z be set;

          assume Z in ( OSSubSort (A,s));

          then

          consider B be OSSubset of OU0 such that

           A2: B in ( OSSubSort A) and

           A3: Z = (B . s) by Def10;

          ( OSConstants OU0) c= B & A c= B by A2, Th19;

          then (( OSConstants OU0) (\/) A) c= B by PBOOLE: 16;

          hence thesis by A3;

        end;

        then

         A4: ((( OSConstants OU0) (\/) A) . s) c= ( meet ( OSSubSort (A,s))) by SETFAM_1: 5;

        ex x be object st x in ((( OSConstants OU0) (\/) A) . s) by A1, XBOOLE_0:def 1;

        hence (( OSMSubSort A) . i) is non empty by A4, Def11;

      end;

      hence thesis;

    end;

    theorem :: OSALG_2:26

    

     Th26: for o be OperSymbol of S1 holds for A be OSSubset of OU0 holds for B be OSSubset of OU0 st B in ( OSSubSort A) holds (((( OSMSubSort A) # ) * the Arity of S1) . o) c= (((B # ) * the Arity of S1) . o)

    proof

      let o be OperSymbol of S1, A be OSSubset of OU0, B be OSSubset of OU0;

      assume

       A1: B in ( OSSubSort A);

      ( OSMSubSort A) c= B

      proof

        let i be object;

        assume i in the carrier of S1;

        then

        reconsider s = i as SortSymbol of S1;

        (( OSMSubSort A) . s) = ( meet ( OSSubSort (A,s))) & (B . s) in ( OSSubSort (A,s)) by A1, Def10, Def11;

        hence thesis by SETFAM_1: 3;

      end;

      hence thesis by MSUALG_2: 2;

    end;

    theorem :: OSALG_2:27

    

     Th27: for o be OperSymbol of S1 holds for A be OSSubset of OU0 holds for B be OSSubset of OU0 st B in ( OSSubSort A) holds ( rng (( Den (o,OU0)) | (((( OSMSubSort A) # ) * the Arity of S1) . o))) c= ((B * the ResultSort of S1) . o)

    proof

      let o be OperSymbol of S1;

      let A be OSSubset of OU0, B be OSSubset of OU0;

      set m = (((( OSMSubSort A) # ) * the Arity of S1) . o), b = (((B # ) * the Arity of S1) . o), d = ( Den (o,OU0));

      assume

       A1: B in ( OSSubSort A);

      then B is opers_closed by Th19;

      then B is_closed_on o;

      then

       A2: ( rng (d | b)) c= ((B * the ResultSort of S1) . o);

      (b /\ m) = m by A1, Th26, XBOOLE_1: 28;

      then (d | m) = ((d | b) | m) by RELAT_1: 71;

      then ( rng (d | m)) c= ( rng (d | b)) by RELAT_1: 70;

      hence thesis by A2;

    end;

    theorem :: OSALG_2:28

    

     Th28: for o be OperSymbol of S1 holds for A be OSSubset of OU0 holds ( rng (( Den (o,OU0)) | (((( OSMSubSort A) # ) * the Arity of S1) . o))) c= ((( OSMSubSort A) * the ResultSort of S1) . o)

    proof

      let o be OperSymbol of S1;

      let A be OSSubset of OU0;

      let x be object;

      assume that

       A1: x in ( rng (( Den (o,OU0)) | (((( OSMSubSort A) # ) * the Arity of S1) . o))) and

       A2: not x in ((( OSMSubSort A) * the ResultSort of S1) . o);

      set r = ( the_result_sort_of o);

      

       A3: r = (the ResultSort of S1 . o) & ( dom the ResultSort of S1) = the carrier' of S1 by FUNCT_2:def 1, MSUALG_1:def 2;

      

      then ((( OSMSubSort A) * the ResultSort of S1) . o) = (( OSMSubSort A) . r) by FUNCT_1: 13

      .= ( meet ( OSSubSort (A,r))) by Def11;

      then

      consider X be set such that

       A4: X in ( OSSubSort (A,r)) and

       A5: not x in X by A2, SETFAM_1:def 1;

      consider B be OSSubset of OU0 such that

       A6: B in ( OSSubSort A) and

       A7: (B . r) = X by A4, Def10;

      ( rng (( Den (o,OU0)) | (((( OSMSubSort A) # ) * the Arity of S1) . o))) c= ((B * the ResultSort of S1) . o) by A6, Th27;

      then x in ((B * the ResultSort of S1) . o) by A1;

      hence contradiction by A3, A5, A7, FUNCT_1: 13;

    end;

    theorem :: OSALG_2:29

    

     Th29: for A be OSSubset of OU0 holds ( OSMSubSort A) is opers_closed & A c= ( OSMSubSort A)

    proof

      let A be OSSubset of OU0;

      thus ( OSMSubSort A) is opers_closed

      proof

        let o1 be Element of the carrier' of S1;

        reconsider o = o1 as OperSymbol of S1;

        ( rng (( Den (o,OU0)) | (((( OSMSubSort A) # ) * the Arity of S1) . o))) c= ((( OSMSubSort A) * the ResultSort of S1) . o) by Th28;

        hence thesis;

      end;

      A c= (( OSConstants OU0) (\/) A) & (( OSConstants OU0) (\/) A) c= ( OSMSubSort A) by Th24, PBOOLE: 14;

      hence thesis by PBOOLE: 13;

    end;

    registration

      let S1, OU0;

      let A be OSSubset of OU0;

      cluster ( OSMSubSort A) -> opers_closed;

      coherence by Th29;

    end

    begin

    registration

      let S1, OU0;

      let A be opers_closed OSSubset of OU0;

      cluster (OU0 | A) -> order-sorted;

      coherence

      proof

        set M = MSAlgebra (# A, ( Opers (OU0,A)) qua ManySortedFunction of ((A # ) * the Arity of S1), (A * the ResultSort of S1) #);

        (OU0 | A) = M & A is OrderSortedSet of S1 by Def2, MSUALG_2:def 15;

        hence thesis by OSALG_1: 17;

      end;

    end

    registration

      let S1, OU0;

      let OU1,OU2 be OSSubAlgebra of OU0;

      cluster (OU1 /\ OU2) -> order-sorted;

      coherence

      proof

        reconsider M1 = the Sorts of OU1, M2 = the Sorts of OU2 as OrderSortedSet of S1 by OSALG_1: 17;

        (M1 (/\) M2) is OrderSortedSet of S1 by Th1;

        then the Sorts of (OU1 /\ OU2) is OrderSortedSet of S1 by MSUALG_2:def 16;

        hence thesis by OSALG_1: 17;

      end;

    end

    definition

      let S1, OU0;

      let A be OSSubset of OU0;

      :: OSALG_2:def12

      func GenOSAlg (A) -> strict OSSubAlgebra of OU0 means

      : Def12: A is OSSubset of it & for OU1 be OSSubAlgebra of OU0 st A is OSSubset of OU1 holds it is OSSubAlgebra of OU1;

      existence

      proof

        set a = ( OSMSubSort A);

        reconsider u1 = (OU0 | a) as strict OSSubAlgebra of OU0;

        take u1;

        

         A1: u1 = MSAlgebra (# a, ( Opers (OU0,a)) qua ManySortedFunction of ((a # ) * the Arity of S1), (a * the ResultSort of S1) #) by MSUALG_2:def 15;

        

         A2: A is OrderSortedSet of S1 by Def2;

        A c= a by Th29;

        then A is MSSubset of u1 by A1, PBOOLE:def 18;

        hence A is OSSubset of u1 by A2, Def2;

        let U2 be OSSubAlgebra of OU0;

        reconsider B1 = the Sorts of U2 as MSSubset of OU0 by MSUALG_2:def 9;

        B1 is OrderSortedSet of S1 by OSALG_1: 17;

        then

        reconsider B = B1 as OSSubset of OU0 by Def2;

        assume A is OSSubset of U2;

        then

         A3: B is opers_closed & A c= B by MSUALG_2:def 9, PBOOLE:def 18;

        ( OSConstants OU0) is OSSubset of U2 by Th13;

        then ( OSConstants OU0) c= B by PBOOLE:def 18;

        then

         A4: B in ( OSSubSort A) by A3, Th19;

        the Sorts of u1 c= the Sorts of U2

        proof

          let i be object;

          assume i in the carrier of S1;

          then

          reconsider s = i as SortSymbol of S1;

          (the Sorts of u1 . s) = ( meet ( OSSubSort (A,s))) & (B . s) in ( OSSubSort (A,s)) by A1, A4, Def10, Def11;

          hence thesis by SETFAM_1: 3;

        end;

        hence thesis by MSUALG_2: 8;

      end;

      uniqueness

      proof

        let W1,W2 be strict OSSubAlgebra of OU0;

        assume A is OSSubset of W1 & (for U1 be OSSubAlgebra of OU0 st A is OSSubset of U1 holds W1 is OSSubAlgebra of U1) & A is OSSubset of W2 & for U2 be OSSubAlgebra of OU0 st A is OSSubset of U2 holds W2 is OSSubAlgebra of U2;

        then W1 is strict OSSubAlgebra of W2 & W2 is strict OSSubAlgebra of W1;

        hence thesis by MSUALG_2: 7;

      end;

    end

    theorem :: OSALG_2:30

    

     Th30: for A be OSSubset of OU0 holds ( GenOSAlg A) = (OU0 | ( OSMSubSort A)) & the Sorts of ( GenOSAlg A) = ( OSMSubSort A)

    proof

      let A be OSSubset of OU0;

      set a = ( OSMSubSort A);

      reconsider u1 = (OU0 | a) as strict OSSubAlgebra of OU0;

      

       A1: u1 = MSAlgebra (# a, ( Opers (OU0,a)) qua ManySortedFunction of ((a # ) * the Arity of S1), (a * the ResultSort of S1) #) by MSUALG_2:def 15;

      

       A2: A c= a by Th29;

      

       A3: A is OrderSortedSet of S1 by Def2;

      

       A4: A is OSSubset of u1 & for OU1 be OSSubAlgebra of OU0 st A is OSSubset of OU1 holds u1 is OSSubAlgebra of OU1

      proof

        A is MSSubset of u1 by A2, A1, PBOOLE:def 18;

        hence A is OSSubset of u1 by A3, Def2;

        let U2 be OSSubAlgebra of OU0;

        reconsider B1 = the Sorts of U2 as MSSubset of OU0 by MSUALG_2:def 9;

        B1 is OrderSortedSet of S1 by OSALG_1: 17;

        then

        reconsider B = B1 as OSSubset of OU0 by Def2;

        assume A is OSSubset of U2;

        then

         A5: B is opers_closed & A c= B by MSUALG_2:def 9, PBOOLE:def 18;

        ( OSConstants OU0) is OSSubset of U2 by Th13;

        then ( OSConstants OU0) c= B by PBOOLE:def 18;

        then

         A6: B in ( OSSubSort A) by A5, Th19;

        the Sorts of u1 c= the Sorts of U2

        proof

          let i be object;

          assume i in the carrier of S1;

          then

          reconsider s = i as SortSymbol of S1;

          (the Sorts of u1 . s) = ( meet ( OSSubSort (A,s))) & (B . s) in ( OSSubSort (A,s)) by A1, A6, Def10, Def11;

          hence thesis by SETFAM_1: 3;

        end;

        hence thesis by MSUALG_2: 8;

      end;

      hence ( GenOSAlg A) = (OU0 | a) by Def12;

      thus thesis by A1, A4, Def12;

    end;

    theorem :: OSALG_2:31

    

     Th31: for S be non void non empty ManySortedSign holds for U0 be MSAlgebra over S holds for A be MSSubset of U0 holds ( GenMSAlg A) = (U0 | ( MSSubSort A)) & the Sorts of ( GenMSAlg A) = ( MSSubSort A)

    proof

      let S be non void non empty ManySortedSign, U0 be MSAlgebra over S, A be MSSubset of U0;

      set a = ( MSSubSort A);

      reconsider u1 = (U0 | a) as strict MSSubAlgebra of U0;

      

       A1: u1 = MSAlgebra (# a, ( Opers (U0,a)) qua ManySortedFunction of ((a # ) * the Arity of S), (a * the ResultSort of S) #) by MSUALG_2: 20, MSUALG_2:def 15;

      

       A2: A c= a by MSUALG_2: 20;

      

       A3: A is MSSubset of u1 & for U1 be MSSubAlgebra of U0 st A is MSSubset of U1 holds u1 is MSSubAlgebra of U1

      proof

        thus A is MSSubset of u1 by A2, A1, PBOOLE:def 18;

        let U2 be MSSubAlgebra of U0;

        reconsider B = the Sorts of U2 as MSSubset of U0 by MSUALG_2:def 9;

        ( Constants U0) is MSSubset of U2 by MSUALG_2: 10;

        then

         A4: ( Constants U0) c= B by PBOOLE:def 18;

        assume A is MSSubset of U2;

        then B is opers_closed & A c= B by MSUALG_2:def 9, PBOOLE:def 18;

        then

         A5: B in ( SubSort A) by A4, MSUALG_2: 13;

        the Sorts of u1 c= the Sorts of U2

        proof

          let i be object;

          assume i in the carrier of S;

          then

          reconsider s = i as SortSymbol of S;

          (the Sorts of u1 . s) = ( meet ( SubSort (A,s))) & (B . s) in ( SubSort (A,s)) by A1, A5, MSUALG_2:def 13, MSUALG_2:def 14;

          hence thesis by SETFAM_1: 3;

        end;

        hence thesis by MSUALG_2: 8;

      end;

      hence ( GenMSAlg A) = (U0 | a) by MSUALG_2:def 17;

      thus thesis by A1, A3, MSUALG_2:def 17;

    end;

    theorem :: OSALG_2:32

    

     Th32: for A be OSSubset of OU0 holds the Sorts of ( GenMSAlg A) c= the Sorts of ( GenOSAlg A)

    proof

      let A be OSSubset of OU0;

      set GM = ( GenMSAlg A), GO = ( GenOSAlg A);

      let i be object;

      assume i in the carrier of S1;

      then

      reconsider s = i as SortSymbol of S1;

      the Sorts of GM = ( MSSubSort A) by Th31;

      then

       A1: (the Sorts of GM . s) = ( meet ( SubSort (A,s))) by MSUALG_2:def 14;

      the Sorts of GO = ( OSMSubSort A) by Th30;

      then (the Sorts of GO . s) = ( meet ( OSSubSort (A,s))) by Def11;

      hence thesis by A1, Th22, SETFAM_1: 6;

    end;

    theorem :: OSALG_2:33

    for A be OSSubset of OU0 holds ( GenMSAlg A) is MSSubAlgebra of ( GenOSAlg A) by Th32, MSUALG_2: 8;

    theorem :: OSALG_2:34

    

     Th34: for OU0 be strict OSAlgebra of S1 holds for B be OSSubset of OU0 st B = the Sorts of OU0 holds ( GenOSAlg B) = OU0

    proof

      let OU0 be strict OSAlgebra of S1;

      let B be OSSubset of OU0;

      assume B = the Sorts of OU0;

      then

       A1: ( GenMSAlg B) = OU0 by MSUALG_2: 21;

      ( GenMSAlg B) is strict MSSubAlgebra of ( GenOSAlg B) by Th32, MSUALG_2: 8;

      hence thesis by A1, MSUALG_2: 7;

    end;

    theorem :: OSALG_2:35

    

     Th35: for OU1 be strict OSSubAlgebra of OU0, B be OSSubset of OU0 st B = the Sorts of OU1 holds ( GenOSAlg B) = OU1

    proof

      let OU1 be strict OSSubAlgebra of OU0;

      let B be OSSubset of OU0;

      set W = ( GenOSAlg B);

      assume

       A1: B = the Sorts of OU1;

      then

       A2: B is MSSubset of OU1 by PBOOLE:def 18;

      B is OSSubset of W by Def12;

      then the Sorts of OU1 c= the Sorts of W by A1, PBOOLE:def 18;

      then

       A3: OU1 is strict MSSubAlgebra of W by MSUALG_2: 8;

      B is OrderSortedSet of S1 by Def2;

      then B is OSSubset of OU1 by A2, Def2;

      then W is strict OSSubAlgebra of OU1 by Def12;

      hence thesis by A3, MSUALG_2: 7;

    end;

    theorem :: OSALG_2:36

    

     Th36: for U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0 holds (( GenOSAlg ( OSConstants U0)) /\ U1) = ( GenOSAlg ( OSConstants U0))

    proof

      let U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0;

      set C = ( OSConstants U0), G = ( GenOSAlg C);

      C is OSSubset of U1 by Th13;

      then G is strict OSSubAlgebra of U1 by Def12;

      then the Sorts of G is MSSubset of U1 by MSUALG_2:def 9;

      then the Sorts of (G /\ U1) = (the Sorts of G (/\) the Sorts of U1) & the Sorts of G c= the Sorts of U1 by MSUALG_2:def 16, PBOOLE:def 18;

      then the Sorts of (G /\ U1) = the Sorts of G by PBOOLE: 23;

      hence thesis by MSUALG_2: 9;

    end;

    definition

      let S1;

      let U0 be non-empty OSAlgebra of S1, U1,U2 be OSSubAlgebra of U0;

      :: OSALG_2:def13

      func U1 "\/"_os U2 -> strict OSSubAlgebra of U0 means

      : Def13: for A be OSSubset of U0 st A = (the Sorts of U1 (\/) the Sorts of U2) holds it = ( GenOSAlg A);

      existence

      proof

        set B = (the Sorts of U1 (\/) the Sorts of U2);

        the Sorts of U2 is MSSubset of U0 by MSUALG_2:def 9;

        then

         A1: the Sorts of U2 c= the Sorts of U0 by PBOOLE:def 18;

        the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9;

        then the Sorts of U1 c= the Sorts of U0 by PBOOLE:def 18;

        then B c= the Sorts of U0 by A1, PBOOLE: 16;

        then

        reconsider B as MSSubset of U0 by PBOOLE:def 18;

        reconsider B1 = the Sorts of U1, B2 = the Sorts of U2 as OrderSortedSet of S1 by OSALG_1: 17;

        B = (B1 (\/) B2);

        then B is OrderSortedSet of S1 by Th2;

        then

        reconsider B0 = B as OSSubset of U0 by Def2;

        take ( GenOSAlg B0);

        thus thesis;

      end;

      uniqueness

      proof

        reconsider B1 = the Sorts of U1, B2 = the Sorts of U2 as OrderSortedSet of S1 by OSALG_1: 17;

        set B = (the Sorts of U1 (\/) the Sorts of U2);

        the Sorts of U2 is MSSubset of U0 by MSUALG_2:def 9;

        then

         A2: the Sorts of U2 c= the Sorts of U0 by PBOOLE:def 18;

        the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9;

        then the Sorts of U1 c= the Sorts of U0 by PBOOLE:def 18;

        then B c= the Sorts of U0 by A2, PBOOLE: 16;

        then

        reconsider B as MSSubset of U0 by PBOOLE:def 18;

        let W1,W2 be strict OSSubAlgebra of U0;

        assume that

         A3: for A be OSSubset of U0 st A = (the Sorts of U1 (\/) the Sorts of U2) holds W1 = ( GenOSAlg A) and

         A4: for A be OSSubset of U0 st A = (the Sorts of U1 (\/) the Sorts of U2) holds W2 = ( GenOSAlg A);

        B = (B1 (\/) B2);

        then B is OrderSortedSet of S1 by Th2;

        then

        reconsider B0 = B as OSSubset of U0 by Def2;

        W1 = ( GenOSAlg B0) by A3;

        hence thesis by A4;

      end;

    end

    theorem :: OSALG_2:37

    

     Th37: for U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0, A,B be OSSubset of U0 st B = (A (\/) the Sorts of U1) holds (( GenOSAlg A) "\/"_os U1) = ( GenOSAlg B)

    proof

      let U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0, A,B be OSSubset of U0;

      assume

       A1: B = (A (\/) the Sorts of U1);

      reconsider u1m = the Sorts of U1, am = the Sorts of ( GenOSAlg A) as MSSubset of U0 by MSUALG_2:def 9;

      

       A2: the Sorts of U1 is OrderSortedSet of S1 & the Sorts of ( GenOSAlg A) is OrderSortedSet of S1 by OSALG_1: 17;

      then

      reconsider u1 = u1m, a = am as OSSubset of U0 by Def2;

      a c= the Sorts of U0 & u1 c= the Sorts of U0 by PBOOLE:def 18;

      then (a (\/) u1) c= the Sorts of U0 by PBOOLE: 16;

      then

      reconsider b = (a (\/) u1) as MSSubset of U0 by PBOOLE:def 18;

      

       A3: (a (\/) u1) is OrderSortedSet of S1 by A2, Th2;

      then

      reconsider b as OSSubset of U0 by Def2;

      

       A4: (( GenOSAlg A) "\/"_os U1) = ( GenOSAlg b) by Def13;

      then (a (\/) u1) is OSSubset of (( GenOSAlg A) "\/"_os U1) by Def12;

      then

       A5: (a (\/) u1) c= the Sorts of (( GenOSAlg A) "\/"_os U1) by PBOOLE:def 18;

      A is OSSubset of ( GenOSAlg A) by Def12;

      then

       A6: A c= the Sorts of ( GenOSAlg A) by PBOOLE:def 18;

      then (A (\/) u1) c= (a (\/) u1) by PBOOLE: 20;

      then B c= the Sorts of (( GenOSAlg A) "\/"_os U1) by A1, A5, PBOOLE: 13;

      then

       A7: B is MSSubset of (( GenOSAlg A) "\/"_os U1) by PBOOLE:def 18;

      

       A8: A is OrderSortedSet of S1 by Def2;

      

       A9: the Sorts of (( GenOSAlg A) /\ ( GenOSAlg B)) = (the Sorts of ( GenOSAlg A) (/\) the Sorts of ( GenOSAlg B)) by MSUALG_2:def 16;

      B is OSSubset of ( GenOSAlg B) by Def12;

      then

       A10: B c= the Sorts of ( GenOSAlg B) by PBOOLE:def 18;

      A c= B by A1, PBOOLE: 14;

      then A c= the Sorts of ( GenOSAlg B) by A10, PBOOLE: 13;

      then A c= (the Sorts of ( GenOSAlg A) (/\) the Sorts of ( GenOSAlg B)) by A6, PBOOLE: 17;

      then A is MSSubset of (( GenOSAlg A) /\ ( GenOSAlg B)) by A9, PBOOLE:def 18;

      then A is OSSubset of (( GenOSAlg A) /\ ( GenOSAlg B)) by A8, Def2;

      then ( GenOSAlg A) is OSSubAlgebra of (( GenOSAlg A) /\ ( GenOSAlg B)) by Def12;

      then a is MSSubset of (( GenOSAlg A) /\ ( GenOSAlg B)) by MSUALG_2:def 9;

      then

       A11: a c= (the Sorts of ( GenOSAlg A) (/\) the Sorts of ( GenOSAlg B)) by A9, PBOOLE:def 18;

      (the Sorts of ( GenOSAlg A) (/\) the Sorts of ( GenOSAlg B)) c= a by PBOOLE: 15;

      then a = (the Sorts of ( GenOSAlg A) (/\) the Sorts of ( GenOSAlg B)) by A11, PBOOLE: 146;

      then

       A12: a c= the Sorts of ( GenOSAlg B) by PBOOLE: 15;

      u1 c= B by A1, PBOOLE: 14;

      then u1 c= the Sorts of ( GenOSAlg B) by A10, PBOOLE: 13;

      then b c= the Sorts of ( GenOSAlg B) by A12, PBOOLE: 16;

      then b is MSSubset of ( GenOSAlg B) by PBOOLE:def 18;

      then b is OSSubset of ( GenOSAlg B) by A3, Def2;

      then

       A13: ( GenOSAlg b) is strict OSSubAlgebra of ( GenOSAlg B) by Def12;

      B is OrderSortedSet of S1 by Def2;

      then B is OSSubset of (( GenOSAlg A) "\/"_os U1) by A7, Def2;

      then ( GenOSAlg B) is strict OSSubAlgebra of (( GenOSAlg A) "\/"_os U1) by Def12;

      hence thesis by A4, A13, MSUALG_2: 7;

    end;

    theorem :: OSALG_2:38

    

     Th38: for U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0, B be OSSubset of U0 st B = the Sorts of U0 holds (( GenOSAlg B) "\/"_os U1) = ( GenOSAlg B)

    proof

      let U0 be non-empty OSAlgebra of S1, U1 be OSSubAlgebra of U0, B be OSSubset of U0;

      

       A1: the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9;

      assume B = the Sorts of U0;

      then the Sorts of U1 c= B by A1, PBOOLE:def 18;

      then (B (\/) the Sorts of U1) = B by PBOOLE: 22;

      hence thesis by Th37;

    end;

    theorem :: OSALG_2:39

    

     Th39: for U0 be non-empty OSAlgebra of S1, U1,U2 be OSSubAlgebra of U0 holds (U1 "\/"_os U2) = (U2 "\/"_os U1)

    proof

      let U0 be non-empty OSAlgebra of S1, U1,U2 be OSSubAlgebra of U0;

      reconsider u1 = the Sorts of U1, u2 = the Sorts of U2 as MSSubset of U0 by MSUALG_2:def 9;

      u1 c= the Sorts of U0 & u2 c= the Sorts of U0 by PBOOLE:def 18;

      then (u1 (\/) u2) c= the Sorts of U0 by PBOOLE: 16;

      then

      reconsider A1 = (u1 (\/) u2) as MSSubset of U0 by PBOOLE:def 18;

      u1 is OrderSortedSet of S1 & u2 is OrderSortedSet of S1 by OSALG_1: 17;

      then A1 is OrderSortedSet of S1 by Th2;

      then

      reconsider A = A1 as OSSubset of U0 by Def2;

      (U1 "\/"_os U2) = ( GenOSAlg A) by Def13;

      hence thesis by Def13;

    end;

    theorem :: OSALG_2:40

    

     Th40: for U0 be non-empty OSAlgebra of S1, U1,U2 be strict OSSubAlgebra of U0 holds (U1 /\ (U1 "\/"_os U2)) = U1

    proof

      let U0 be non-empty OSAlgebra of S1, U1,U2 be strict OSSubAlgebra of U0;

      reconsider u1 = the Sorts of U1, u2 = the Sorts of U2 as MSSubset of U0 by MSUALG_2:def 9;

      reconsider u112 = the Sorts of (U1 /\ (U1 "\/"_os U2)) as MSSubset of U0 by MSUALG_2:def 9;

      

       A1: the Charact of (U1 /\ (U1 "\/"_os U2)) = ( Opers (U0,u112)) by MSUALG_2:def 16;

      u1 c= the Sorts of U0 & u2 c= the Sorts of U0 by PBOOLE:def 18;

      then (u1 (\/) u2) c= the Sorts of U0 by PBOOLE: 16;

      then

      reconsider A = (u1 (\/) u2) as MSSubset of U0 by PBOOLE:def 18;

      u1 is OrderSortedSet of S1 & u2 is OrderSortedSet of S1 by OSALG_1: 17;

      then A is OrderSortedSet of S1 by Th2;

      then

      reconsider A as OSSubset of U0 by Def2;

      

       A2: the Sorts of (U1 /\ (U1 "\/"_os U2)) = (the Sorts of U1 (/\) the Sorts of (U1 "\/"_os U2)) by MSUALG_2:def 16;

      (U1 "\/"_os U2) = ( GenOSAlg A) by Def13;

      then A is OSSubset of (U1 "\/"_os U2) by Def12;

      then

       A3: A c= the Sorts of (U1 "\/"_os U2) by PBOOLE:def 18;

      the Sorts of U1 c= A by PBOOLE: 14;

      then the Sorts of U1 c= the Sorts of (U1 "\/"_os U2) by A3, PBOOLE: 13;

      then

       A4: the Sorts of U1 c= the Sorts of (U1 /\ (U1 "\/"_os U2)) by A2, PBOOLE: 17;

      the Sorts of (U1 /\ (U1 "\/"_os U2)) c= the Sorts of U1 by A2, PBOOLE: 15;

      then the Sorts of (U1 /\ (U1 "\/"_os U2)) = the Sorts of U1 by A4, PBOOLE: 146;

      hence thesis by A1, MSUALG_2:def 9;

    end;

    theorem :: OSALG_2:41

    

     Th41: for U0 be non-empty OSAlgebra of S1, U1,U2 be strict OSSubAlgebra of U0 holds ((U1 /\ U2) "\/"_os U2) = U2

    proof

      let U0 be non-empty OSAlgebra of S1, U1,U2 be strict OSSubAlgebra of U0;

      reconsider u12 = the Sorts of (U1 /\ U2), u2 = the Sorts of U2 as MSSubset of U0 by MSUALG_2:def 9;

      

       A1: u12 is OrderSortedSet of S1 & u2 is OrderSortedSet of S1 by OSALG_1: 17;

      then

      reconsider u12, u2 as OSSubset of U0 by Def2;

      u12 c= the Sorts of U0 & u2 c= the Sorts of U0 by PBOOLE:def 18;

      then (u12 (\/) u2) c= the Sorts of U0 by PBOOLE: 16;

      then

      reconsider A = (u12 (\/) u2) as MSSubset of U0 by PBOOLE:def 18;

      A is OrderSortedSet of S1 by A1, Th2;

      then

      reconsider A = (u12 (\/) u2) as OSSubset of U0 by Def2;

      u12 = (the Sorts of U1 (/\) the Sorts of U2) by MSUALG_2:def 16;

      then u12 c= u2 by PBOOLE: 15;

      then

       A2: A = u2 by PBOOLE: 22;

      ((U1 /\ U2) "\/"_os U2) = ( GenOSAlg A) by Def13;

      hence thesis by A2, Th35;

    end;

    begin

    definition

      let S1, OU0;

      :: OSALG_2:def14

      func OSSub (OU0) -> set means

      : Def14: for x be object holds x in it iff x is strict OSSubAlgebra of OU0;

      existence

      proof

        set X = the set of all ( GenOSAlg ( @ A)) where A be Element of ( OSSubSort OU0);

        take X;

        let x be object;

        thus x in X implies x is strict OSSubAlgebra of OU0

        proof

          assume x in X;

          then ex A be Element of ( OSSubSort OU0) st x = ( GenOSAlg ( @ A));

          hence thesis;

        end;

        assume x is strict OSSubAlgebra of OU0;

        then

        reconsider a = x as strict OSSubAlgebra of OU0;

        reconsider A = the Sorts of a as OSSubset of OU0 by Th5;

        A is opers_closed by Th5;

        then

        reconsider h = A as Element of ( OSSubSort OU0) by Th20;

        a = ( GenOSAlg ( @ h)) by Th35;

        hence thesis;

      end;

      uniqueness

      proof

        defpred P[ object] means $1 is strict OSSubAlgebra of OU0;

        thus for X1,X2 be set st (for x be object holds x in X1 iff P[x]) & (for x be object holds x in X2 iff P[x]) holds X1 = X2 from XBOOLE_0:sch 3;

      end;

    end

    theorem :: OSALG_2:42

    

     Th42: ( OSSub OU0) c= ( MSSub OU0)

    proof

      let x be object;

      assume x in ( OSSub OU0);

      then x is strict MSSubAlgebra of OU0 by Def14;

      hence thesis by MSUALG_2:def 19;

    end;

    registration

      let S be OrderSortedSign, U0 be OSAlgebra of S;

      cluster ( OSSub U0) -> non empty;

      coherence

      proof

        set x = the strict OSSubAlgebra of U0;

        x in ( OSSub U0) by Def14;

        hence thesis;

      end;

    end

    definition

      let S1, OU0;

      :: original: OSSub

      redefine

      func OSSub (OU0) -> Subset of ( MSSub OU0) ;

      coherence by Th42;

    end

    definition

      let S1;

      let U0 be non-empty OSAlgebra of S1;

      :: OSALG_2:def15

      func OSAlg_join (U0) -> BinOp of ( OSSub U0) means

      : Def15: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (it . (x,y)) = (U1 "\/"_os U2);

      existence

      proof

        defpred P[ Element of ( OSSub U0), Element of ( OSSub U0), set] means for U1,U2 be strict OSSubAlgebra of U0 st $1 = U1 & $2 = U2 holds $3 = (U1 "\/"_os U2);

        

         A1: for x,y be Element of ( OSSub U0) holds ex z be Element of ( OSSub U0) st P[x, y, z]

        proof

          let x,y be Element of ( OSSub U0);

          reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

          reconsider z = (U1 "\/"_os U2) as Element of ( OSSub U0) by Def14;

          take z;

          thus thesis;

        end;

        consider o be BinOp of ( OSSub U0) such that

         A2: for a,b be Element of ( OSSub U0) holds P[a, b, (o . (a,b))] from BINOP_1:sch 3( A1);

        take o;

        thus thesis by A2;

      end;

      uniqueness

      proof

        let o1,o2 be BinOp of ( OSSub U0);

        assume that

         A3: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (o1 . (x,y)) = (U1 "\/"_os U2) and

         A4: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (o2 . (x,y)) = (U1 "\/"_os U2);

        for x be Element of ( OSSub U0) holds for y be Element of ( OSSub U0) holds (o1 . (x,y)) = (o2 . (x,y))

        proof

          let x,y be Element of ( OSSub U0);

          reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

          (o1 . (x,y)) = (U1 "\/"_os U2) by A3;

          hence thesis by A4;

        end;

        hence thesis by BINOP_1: 2;

      end;

    end

    definition

      let S1;

      let U0 be non-empty OSAlgebra of S1;

      :: OSALG_2:def16

      func OSAlg_meet (U0) -> BinOp of ( OSSub U0) means

      : Def16: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (it . (x,y)) = (U1 /\ U2);

      existence

      proof

        defpred P[ Element of ( OSSub U0), Element of ( OSSub U0), set] means for U1,U2 be strict OSSubAlgebra of U0 st $1 = U1 & $2 = U2 holds $3 = (U1 /\ U2);

        

         A1: for x,y be Element of ( OSSub U0) holds ex z be Element of ( OSSub U0) st P[x, y, z]

        proof

          let x,y be Element of ( OSSub U0);

          reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

          reconsider z = (U1 /\ U2) as Element of ( OSSub U0) by Def14;

          take z;

          thus thesis;

        end;

        consider o be BinOp of ( OSSub U0) such that

         A2: for a,b be Element of ( OSSub U0) holds P[a, b, (o . (a,b))] from BINOP_1:sch 3( A1);

        take o;

        thus thesis by A2;

      end;

      uniqueness

      proof

        let o1,o2 be BinOp of ( OSSub U0);

        assume that

         A3: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (o1 . (x,y)) = (U1 /\ U2) and

         A4: for x,y be Element of ( OSSub U0) holds for U1,U2 be strict OSSubAlgebra of U0 st x = U1 & y = U2 holds (o2 . (x,y)) = (U1 /\ U2);

        for x be Element of ( OSSub U0) holds for y be Element of ( OSSub U0) holds (o1 . (x,y)) = (o2 . (x,y))

        proof

          let x,y be Element of ( OSSub U0);

          reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

          (o1 . (x,y)) = (U1 /\ U2) by A3;

          hence thesis by A4;

        end;

        hence thesis by BINOP_1: 2;

      end;

    end

    theorem :: OSALG_2:43

    

     Th43: for U0 be non-empty OSAlgebra of S1 holds for x,y be Element of ( OSSub U0) holds (( OSAlg_meet U0) . (x,y)) = (( MSAlg_meet U0) . (x,y))

    proof

      let U0 be non-empty OSAlgebra of S1;

      let x,y be Element of ( OSSub U0);

      x is strict OSSubAlgebra of U0 & y is strict OSSubAlgebra of U0 by Def14;

      then

      consider U1,U2 be strict OSSubAlgebra of U0 such that

       A1: x = U1 & y = U2;

      (( OSAlg_meet U0) . (x,y)) = (U1 /\ U2) by A1, Def16

      .= (( MSAlg_meet U0) . (x,y)) by A1, MSUALG_2:def 21;

      hence thesis;

    end;

    reserve U0 for non-empty OSAlgebra of S1;

    theorem :: OSALG_2:44

    

     Th44: ( OSAlg_join U0) is commutative

    proof

      set o = ( OSAlg_join U0);

      for x,y be Element of ( OSSub U0) holds (o . (x,y)) = (o . (y,x))

      proof

        let x,y be Element of ( OSSub U0);

        reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

        set B = (the Sorts of U1 (\/) the Sorts of U2);

        the Sorts of U2 is MSSubset of U0 by MSUALG_2:def 9;

        then

         A1: the Sorts of U2 c= the Sorts of U0 by PBOOLE:def 18;

        the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9;

        then the Sorts of U1 c= the Sorts of U0 by PBOOLE:def 18;

        then B c= the Sorts of U0 by A1, PBOOLE: 16;

        then

         A2: B is MSSubset of U0 by PBOOLE:def 18;

        the Sorts of U1 is OrderSortedSet of S1 & the Sorts of U2 is OrderSortedSet of S1 by OSALG_1: 17;

        then B is OrderSortedSet of S1 by Th2;

        then

        reconsider B as OSSubset of U0 by A2, Def2;

        

         A3: (U1 "\/"_os U2) = ( GenOSAlg B) by Def13;

        (o . (x,y)) = (U1 "\/"_os U2) & (o . (y,x)) = (U2 "\/"_os U1) by Def15;

        hence thesis by A3, Def13;

      end;

      hence thesis by BINOP_1:def 2;

    end;

    theorem :: OSALG_2:45

    

     Th45: ( OSAlg_join U0) is associative

    proof

      set o = ( OSAlg_join U0);

      for x,y,z be Element of ( OSSub U0) holds (o . (x,(o . (y,z)))) = (o . ((o . (x,y)),z))

      proof

        let x,y,z be Element of ( OSSub U0);

        reconsider U1 = x, U2 = y, U3 = z as strict OSSubAlgebra of U0 by Def14;

        set B = (the Sorts of U1 (\/) (the Sorts of U2 (\/) the Sorts of U3));

        

         A1: the Sorts of U2 is OrderSortedSet of S1 by OSALG_1: 17;

        the Sorts of U2 is MSSubset of U0 by MSUALG_2:def 9;

        then

         A2: the Sorts of U2 c= the Sorts of U0 by PBOOLE:def 18;

        the Sorts of U3 is MSSubset of U0 by MSUALG_2:def 9;

        then the Sorts of U3 c= the Sorts of U0 by PBOOLE:def 18;

        then

         A3: (the Sorts of U2 (\/) the Sorts of U3) c= the Sorts of U0 by A2, PBOOLE: 16;

        then

        reconsider C1 = (the Sorts of U2 (\/) the Sorts of U3) as MSSubset of U0 by PBOOLE:def 18;

        the Sorts of U3 is OrderSortedSet of S1 by OSALG_1: 17;

        then

         A4: (the Sorts of U2 (\/) the Sorts of U3) is OrderSortedSet of S1 by A1, Th2;

        then

        reconsider C = C1 as OSSubset of U0 by Def2;

        

         A5: the Sorts of U1 is OrderSortedSet of S1 by OSALG_1: 17;

        then

         A6: B is OrderSortedSet of S1 by A4, Th2;

        the Sorts of U1 is MSSubset of U0 by MSUALG_2:def 9;

        then

         A7: the Sorts of U1 c= the Sorts of U0 by PBOOLE:def 18;

        then (the Sorts of U1 (\/) the Sorts of U2) c= the Sorts of U0 by A2, PBOOLE: 16;

        then

        reconsider D1 = (the Sorts of U1 (\/) the Sorts of U2) as MSSubset of U0 by PBOOLE:def 18;

        (o . (y,z)) = (U2 "\/"_os U3) by Def15;

        then

         A8: (o . (x,(o . (y,z)))) = (U1 "\/"_os (U2 "\/"_os U3)) by Def15;

        (the Sorts of U1 (\/) the Sorts of U2) is OrderSortedSet of S1 by A5, A1, Th2;

        then

        reconsider D = D1 as OSSubset of U0 by Def2;

        

         A9: (o . (x,y)) = (U1 "\/"_os U2) by Def15;

        B c= the Sorts of U0 by A7, A3, PBOOLE: 16;

        then B is MSSubset of U0 by PBOOLE:def 18;

        then

        reconsider B as OSSubset of U0 by A6, Def2;

        

         A10: B = (D (\/) the Sorts of U3) by PBOOLE: 28;

        

         A11: ((U1 "\/"_os U2) "\/"_os U3) = (( GenOSAlg D) "\/"_os U3) by Def13

        .= ( GenOSAlg B) by A10, Th37;

        (U1 "\/"_os (U2 "\/"_os U3)) = (U1 "\/"_os ( GenOSAlg C)) by Def13

        .= (( GenOSAlg C) "\/"_os U1) by Th39

        .= ( GenOSAlg B) by Th37;

        hence thesis by A9, A8, A11, Def15;

      end;

      hence thesis by BINOP_1:def 3;

    end;

    theorem :: OSALG_2:46

    

     Th46: ( OSAlg_meet U0) is commutative

    proof

      set o = ( OSAlg_meet U0);

      set m = ( MSAlg_meet U0);

      

       A1: m is commutative by MSUALG_2: 31;

      for x,y be Element of ( OSSub U0) holds (o . (x,y)) = (o . (y,x))

      proof

        let x,y be Element of ( OSSub U0);

        (o . (x,y)) = (m . (x,y)) by Th43

        .= (m . (y,x)) by A1, BINOP_1:def 2

        .= (o . (y,x)) by Th43;

        hence thesis;

      end;

      hence thesis by BINOP_1:def 2;

    end;

    theorem :: OSALG_2:47

    

     Th47: ( OSAlg_meet U0) is associative

    proof

      set o = ( OSAlg_meet U0);

      set m = ( MSAlg_meet U0);

      

       A1: m is associative by MSUALG_2: 32;

      for x,y,z be Element of ( OSSub U0) holds (o . (x,(o . (y,z)))) = (o . ((o . (x,y)),z))

      proof

        let x,y,z be Element of ( OSSub U0);

        

         A2: (o . (x,y)) = (m . (x,y)) by Th43;

        (o . (y,z)) = (m . (y,z)) by Th43;

        

        then (o . (x,(o . (y,z)))) = (m . (x,(m . (y,z)))) by Th43

        .= (m . ((m . (x,y)),z)) by A1, BINOP_1:def 3

        .= (o . ((o . (x,y)),z)) by A2, Th43;

        hence thesis;

      end;

      hence thesis by BINOP_1:def 3;

    end;

    definition

      let S1;

      let U0 be non-empty OSAlgebra of S1;

      :: OSALG_2:def17

      func OSSubAlLattice (U0) -> strict Lattice equals LattStr (# ( OSSub U0), ( OSAlg_join U0), ( OSAlg_meet U0) #);

      coherence

      proof

        set L = LattStr (# ( OSSub U0), ( OSAlg_join U0), ( OSAlg_meet U0) #);

        

         A1: for a,b,c be Element of L holds (a "\/" (b "\/" c)) = ((a "\/" b) "\/" c) by Th45, BINOP_1:def 3;

        

         A2: for a,b be Element of L holds (a "/\" b) = (b "/\" a) by Th46, BINOP_1:def 2;

        

         A3: for a,b be Element of L holds (a "/\" (a "\/" b)) = a

        proof

          let a,b be Element of L;

          reconsider x = a, y = b as Element of ( OSSub U0);

          (( OSAlg_meet U0) . (x,(( OSAlg_join U0) . (x,y)))) = x

          proof

            reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

            (( OSAlg_join U0) . (x,y)) = (U1 "\/"_os U2) by Def15;

            

            hence (( OSAlg_meet U0) . (x,(( OSAlg_join U0) . (x,y)))) = (U1 /\ (U1 "\/"_os U2)) by Def16

            .= x by Th40;

          end;

          hence thesis;

        end;

        

         A4: for a,b be Element of L holds ((a "/\" b) "\/" b) = b

        proof

          let a,b be Element of L;

          reconsider x = a, y = b as Element of ( OSSub U0);

          (( OSAlg_join U0) . ((( OSAlg_meet U0) . (x,y)),y)) = y

          proof

            reconsider U1 = x, U2 = y as strict OSSubAlgebra of U0 by Def14;

            (( OSAlg_meet U0) . (x,y)) = (U1 /\ U2) by Def16;

            

            hence (( OSAlg_join U0) . ((( OSAlg_meet U0) . (x,y)),y)) = ((U1 /\ U2) "\/"_os U2) by Def15

            .= y by Th41;

          end;

          hence thesis;

        end;

        

         A5: for a,b,c be Element of L holds (a "/\" (b "/\" c)) = ((a "/\" b) "/\" c) by Th47, BINOP_1:def 3;

        for a,b be Element of L holds (a "\/" b) = (b "\/" a) by Th44, BINOP_1:def 2;

        then L is strict join-commutative join-associative meet-absorbing meet-commutative meet-associative join-absorbing by A1, A4, A2, A5, A3;

        hence thesis;

      end;

    end

    theorem :: OSALG_2:48

    

     Th48: for U0 be non-empty OSAlgebra of S1 holds ( OSSubAlLattice U0) is bounded

    proof

      let U0 be non-empty OSAlgebra of S1;

      set L = ( OSSubAlLattice U0);

      thus L is lower-bounded

      proof

        set C = ( OSConstants U0);

        reconsider G = ( GenOSAlg C) as Element of ( OSSub U0) by Def14;

        reconsider G1 = G as Element of L;

        take G1;

        let a be Element of L;

        reconsider a1 = a as Element of ( OSSub U0);

        reconsider a2 = a1 as strict OSSubAlgebra of U0 by Def14;

        

        thus (G1 "/\" a) = (( GenOSAlg C) /\ a2) by Def16

        .= G1 by Th36;

        hence thesis;

      end;

      thus L is upper-bounded

      proof

        reconsider B = the Sorts of U0 as MSSubset of U0 by PBOOLE:def 18;

        the Sorts of U0 is OrderSortedSet of S1 by OSALG_1: 17;

        then

        reconsider B as OSSubset of U0 by Def2;

        reconsider G = ( GenOSAlg B) as Element of ( OSSub U0) by Def14;

        reconsider G1 = G as Element of L;

        take G1;

        let a be Element of L;

        reconsider a1 = a as Element of ( OSSub U0);

        reconsider a2 = a1 as strict OSSubAlgebra of U0 by Def14;

        

        thus (G1 "\/" a) = (( GenOSAlg B) "\/"_os a2) by Def15

        .= G1 by Th38;

        hence thesis;

      end;

    end;

    registration

      let S1;

      let U0 be non-empty OSAlgebra of S1;

      cluster ( OSSubAlLattice U0) -> bounded;

      coherence by Th48;

    end

    theorem :: OSALG_2:49

    for U0 be non-empty OSAlgebra of S1 holds ( Bottom ( OSSubAlLattice U0)) = ( GenOSAlg ( OSConstants U0))

    proof

      let U0 be non-empty OSAlgebra of S1;

      set C = ( OSConstants U0);

      reconsider G = ( GenOSAlg C) as Element of ( OSSub U0) by Def14;

      set L = ( OSSubAlLattice U0);

      reconsider G1 = G as Element of L;

      now

        let a be Element of L;

        reconsider a1 = a as Element of ( OSSub U0);

        reconsider a2 = a1 as strict OSSubAlgebra of U0 by Def14;

        

        thus (G1 "/\" a) = (( GenOSAlg C) /\ a2) by Def16

        .= G1 by Th36;

        hence (a "/\" G1) = G1;

      end;

      hence thesis by LATTICES:def 16;

    end;

    theorem :: OSALG_2:50

    

     Th50: for U0 be non-empty OSAlgebra of S1, B be OSSubset of U0 st B = the Sorts of U0 holds ( Top ( OSSubAlLattice U0)) = ( GenOSAlg B)

    proof

      let U0 be non-empty OSAlgebra of S1, B be OSSubset of U0;

      reconsider G = ( GenOSAlg B) as Element of ( OSSub U0) by Def14;

      set L = ( OSSubAlLattice U0);

      reconsider G1 = G as Element of L;

      assume

       A1: B = the Sorts of U0;

      now

        let a be Element of L;

        reconsider a1 = a as Element of ( OSSub U0);

        reconsider a2 = a1 as strict OSSubAlgebra of U0 by Def14;

        

        thus (G1 "\/" a) = (( GenOSAlg B) "\/"_os a2) by Def15

        .= G1 by A1, Th38;

        hence (a "\/" G1) = G1;

      end;

      hence thesis by LATTICES:def 17;

    end;

    theorem :: OSALG_2:51

    for U0 be strict non-empty OSAlgebra of S1 holds ( Top ( OSSubAlLattice U0)) = U0

    proof

      let U0 be strict non-empty OSAlgebra of S1;

      reconsider B = the Sorts of U0 as MSSubset of U0 by PBOOLE:def 18;

      B is OrderSortedSet of S1 by OSALG_1: 17;

      then

      reconsider B = the Sorts of U0 as OSSubset of U0 by Def2;

      

      thus ( Top ( OSSubAlLattice U0)) = ( GenOSAlg B) by Th50

      .= U0 by Th34;

    end;