unialg_2.miz



    begin

    reserve U0,U1,U2,U3 for Universal_Algebra,

n for Nat,

x,y for set;

    definition

      let U1;

      mode PFuncsDomHQN of U1 is PFuncsDomHQN of the carrier of U1;

    end

    definition

      let U1 be UAStr;

      mode PartFunc of U1 is PartFunc of (the carrier of U1 * ), the carrier of U1;

    end

    definition

      let U1, U2;

      :: UNIALG_2:def1

      pred U1,U2 are_similar means ( signature U1) = ( signature U2);

      symmetry ;

      reflexivity ;

    end

    theorem :: UNIALG_2:1

    (U1,U2) are_similar implies ( len the charact of U1) = ( len the charact of U2)

    proof

      

       A1: ( len ( signature U1)) = ( len the charact of U1) & ( len ( signature U2)) = ( len the charact of U2) by UNIALG_1:def 4;

      assume (U1,U2) are_similar ;

      hence thesis by A1;

    end;

    theorem :: UNIALG_2:2

    (U1,U2) are_similar & (U2,U3) are_similar implies (U1,U3) are_similar ;

    theorem :: UNIALG_2:3

    ( rng the charact of U0) is non empty Subset of ( PFuncs ((the carrier of U0 * ),the carrier of U0)) by FINSEQ_1:def 4, RELAT_1: 41;

    definition

      let U0;

      :: UNIALG_2:def2

      func Operations (U0) -> PFuncsDomHQN of U0 equals ( rng the charact of U0);

      coherence

      proof

        reconsider A = ( rng the charact of U0) as non empty set by RELAT_1: 41;

        now

          let x be Element of A;

          consider i be Nat such that

           A1: i in ( dom the charact of U0) and

           A2: (the charact of U0 . i) = x by FINSEQ_2: 10;

          reconsider p = (the charact of U0 . i) as PartFunc of U0 by A1, UNIALG_1: 1;

          p is homogeneous quasi_total non empty by A1, FUNCT_1:def 9, MARGREL1:def 24;

          hence x is homogeneous quasi_total non empty PartFunc of U0 by A2;

        end;

        hence thesis by MARGREL1:def 26;

      end;

    end

    definition

      let U1;

      mode operation of U1 is Element of ( Operations U1);

    end

    reserve A for non empty Subset of U0,

o for operation of U0,

x1,y1 for FinSequence of A;

    definition

      let U0 be Universal_Algebra, A be Subset of U0, o be operation of U0;

      :: UNIALG_2:def3

      pred A is_closed_on o means for s be FinSequence of A st ( len s) = ( arity o) holds (o . s) in A;

    end

    definition

      let U0 be Universal_Algebra, A be Subset of U0;

      :: UNIALG_2:def4

      attr A is opers_closed means for o be operation of U0 holds A is_closed_on o;

    end

    definition

      let U0, A, o;

      assume

       A1: A is_closed_on o;

      :: UNIALG_2:def5

      func o /. A -> homogeneous quasi_total non empty PartFunc of (A * ), A equals

      : Def5: (o | (( arity o) -tuples_on A));

      coherence

      proof

        

         A2: (( arity o) -tuples_on A) c= (( arity o) -tuples_on the carrier of U0)

        proof

          let x be object;

          assume x in (( arity o) -tuples_on A);

          then x in { s where s be Element of (A * ) : ( len s) = ( arity o) } by FINSEQ_2:def 4;

          then

          consider s be Element of (A * ) such that

           A3: x = s and

           A4: ( len s) = ( arity o);

          ( rng s) c= A by FINSEQ_1:def 4;

          then ( rng s) c= the carrier of U0 by XBOOLE_1: 1;

          then

          reconsider s as FinSequence of the carrier of U0 by FINSEQ_1:def 4;

          reconsider s as Element of (the carrier of U0 * ) by FINSEQ_1:def 11;

          x = s by A3;

          then x in { s1 where s1 be Element of (the carrier of U0 * ) : ( len s1) = ( arity o) } by A4;

          hence thesis by FINSEQ_2:def 4;

        end;

        

         A5: ( dom (o | (( arity o) -tuples_on A))) = (( dom o) /\ (( arity o) -tuples_on A)) by RELAT_1: 61

        .= ((( arity o) -tuples_on the carrier of U0) /\ (( arity o) -tuples_on A)) by MARGREL1: 22

        .= (( arity o) -tuples_on A) by A2, XBOOLE_1: 28;

        

         A6: ( rng (o | (( arity o) -tuples_on A))) c= A

        proof

          let x be object;

          assume x in ( rng (o | (( arity o) -tuples_on A)));

          then

          consider y be object such that

           A7: y in ( dom (o | (( arity o) -tuples_on A))) and

           A8: x = ((o | (( arity o) -tuples_on A)) . y) by FUNCT_1:def 3;

          y in { s where s be Element of (A * ) : ( len s) = ( arity o) } by A5, A7, FINSEQ_2:def 4;

          then

          consider s be Element of (A * ) such that

           A9: y = s and

           A10: ( len s) = ( arity o);

          ((o | (( arity o) -tuples_on A)) . s) = (o . s) by A7, A9, FUNCT_1: 47;

          hence thesis by A1, A8, A9, A10;

        end;

        (( arity o) -tuples_on A) in the set of all (i -tuples_on A) where i be Nat;

        then (( arity o) -tuples_on A) c= ( union the set of all (i -tuples_on A) where i be Nat) by ZFMISC_1: 74;

        then ( dom (o | (( arity o) -tuples_on A))) c= (A * ) by A5, FINSEQ_2: 108;

        then

        reconsider oa = (o | (( arity o) -tuples_on A)) as PartFunc of (A * ), A by A6, RELSET_1: 4;

        

         A11: oa is homogeneous

        proof

          let x1,y1 be FinSequence;

          assume that

           A12: x1 in ( dom oa) and

           A13: y1 in ( dom oa);

          y1 in { s1 where s1 be Element of (A * ) : ( len s1) = ( arity o) } by A5, A13, FINSEQ_2:def 4;

          then

           A14: ex s1 be Element of (A * ) st y1 = s1 & ( len s1) = ( arity o);

          x1 in { s where s be Element of (A * ) : ( len s) = ( arity o) } by A5, A12, FINSEQ_2:def 4;

          then ex s be Element of (A * ) st x1 = s & ( len s) = ( arity o);

          hence thesis by A14;

        end;

        oa is quasi_total

        proof

          let x1, y1;

          assume that

           A15: ( len x1) = ( len y1) and

           A16: x1 in ( dom oa);

          x1 in { s where s be Element of (A * ) : ( len s) = ( arity o) } by A5, A16, FINSEQ_2:def 4;

          then ex s be Element of (A * ) st x1 = s & ( len s) = ( arity o);

          then y1 is Element of (( arity o) -tuples_on A) by A15, FINSEQ_2: 92;

          hence thesis by A5;

        end;

        hence thesis by A5, A11;

      end;

    end

    definition

      let U0, A;

      :: UNIALG_2:def6

      func Opers (U0,A) -> PFuncFinSequence of A means

      : Def6: ( dom it ) = ( dom the charact of U0) & for n be set, o st n in ( dom it ) & o = (the charact of U0 . n) holds (it . n) = (o /. A);

      existence

      proof

        defpred P[ Nat, set] means for o st o = (the charact of U0 . $1) holds $2 = (o /. A);

        

         A1: for n be Nat st n in ( Seg ( len the charact of U0)) holds ex x be Element of ( PFuncs ((A * ),A)) st P[n, x]

        proof

          let n be Nat;

          assume n in ( Seg ( len the charact of U0));

          then n in ( dom the charact of U0) by FINSEQ_1:def 3;

          then

          reconsider o1 = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

          reconsider x = (o1 /. A) as Element of ( PFuncs ((A * ),A)) by PARTFUN1: 45;

          take x;

          let o;

          assume o = (the charact of U0 . n);

          hence thesis;

        end;

        consider p be FinSequence of ( PFuncs ((A * ),A)) such that

         A2: ( dom p) = ( Seg ( len the charact of U0)) and

         A3: for n be Nat st n in ( Seg ( len the charact of U0)) holds P[n, (p . n)] from FINSEQ_1:sch 5( A1);

        reconsider p as PFuncFinSequence of A;

        take p;

        thus ( dom p) = ( dom the charact of U0) by A2, FINSEQ_1:def 3;

        let n be set, o;

        assume n in ( dom p) & o = (the charact of U0 . n);

        hence thesis by A2, A3;

      end;

      uniqueness

      proof

        let p1,p2 be PFuncFinSequence of A;

        assume that

         A4: ( dom p1) = ( dom the charact of U0) and

         A5: for n be set, o st n in ( dom p1) & o = (the charact of U0 . n) holds (p1 . n) = (o /. A) and

         A6: ( dom p2) = ( dom the charact of U0) and

         A7: for n be set, o st n in ( dom p2) & o = (the charact of U0 . n) holds (p2 . n) = (o /. A);

        for n be Nat st n in ( dom the charact of U0) holds (p1 . n) = (p2 . n)

        proof

          let n be Nat;

          assume

           A8: n in ( dom the charact of U0);

          then

          reconsider k = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

          (p1 . n) = (k /. A) by A4, A5, A8;

          hence thesis by A6, A7, A8;

        end;

        hence thesis by A4, A6, FINSEQ_1: 13;

      end;

    end

    theorem :: UNIALG_2:4

    

     Th4: for B be non empty Subset of U0 st B = the carrier of U0 holds B is opers_closed & for o holds (o /. B) = o

    proof

      let B be non empty Subset of U0;

      assume

       A1: B = the carrier of U0;

      

       A2: for o holds B is_closed_on o

      proof

        let o;

        let s be FinSequence of B;

        assume

         A3: ( len s) = ( arity o);

        ( dom o) = (( arity o) -tuples_on B) & s is Element of (( len s) -tuples_on B) by A1, FINSEQ_2: 92, MARGREL1: 22;

        then

         A4: (o . s) in ( rng o) by A3, FUNCT_1:def 3;

        ( rng o) c= B by A1, RELAT_1:def 19;

        hence thesis by A4;

      end;

      for o holds (o /. B) = o

      proof

        let o;

        ( dom o) = (( arity o) -tuples_on B) & (o /. B) = (o | (( arity o) -tuples_on B)) by A1, A2, Def5, MARGREL1: 22;

        hence thesis by RELAT_1: 68;

      end;

      hence thesis by A2;

    end;

    theorem :: UNIALG_2:5

    for U1 be Universal_Algebra, A be non empty Subset of U1, o be operation of U1 st A is_closed_on o holds ( arity (o /. A)) = ( arity o)

    proof

      let U1 be Universal_Algebra, A be non empty Subset of U1, o be operation of U1;

      assume A is_closed_on o;

      then (o /. A) = (o | (( arity o) -tuples_on A)) by Def5;

      then ( dom (o /. A)) = (( dom o) /\ (( arity o) -tuples_on A)) by RELAT_1: 61;

      

      then

       A1: ( dom (o /. A)) = ((( arity o) -tuples_on the carrier of U1) /\ (( arity o) -tuples_on A)) by MARGREL1: 22

      .= (( arity o) -tuples_on A) by MARGREL1: 21;

      ( dom (o /. A)) = (( arity (o /. A)) -tuples_on A) by MARGREL1: 22;

      hence thesis by A1, FINSEQ_2: 110;

    end;

    definition

      let U0;

      :: UNIALG_2:def7

      mode SubAlgebra of U0 -> Universal_Algebra means

      : Def7: the carrier of it is Subset of U0 & for B be non empty Subset of U0 st B = the carrier of it holds the charact of it = ( Opers (U0,B)) & B is opers_closed;

      existence

      proof

        take U1 = U0;

        

         A1: for B be non empty Subset of U0 st B = the carrier of U0 holds the charact of U0 = ( Opers (U0,B)) & B is opers_closed

        proof

          let B be non empty Subset of U0;

          assume

           A2: B = the carrier of U0;

          

           A3: ( dom the charact of U0) = ( dom ( Opers (U0,B))) by Def6;

          for n be Nat st n in ( dom the charact of U0) holds (the charact of U0 . n) = (( Opers (U0,B)) . n)

          proof

            let n be Nat;

            assume

             A4: n in ( dom the charact of U0);

            then

            reconsider o = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

            (( Opers (U0,B)) . n) = (o /. B) by A3, A4, Def6;

            hence thesis by A2, Th4;

          end;

          hence thesis by A2, A3, Th4, FINSEQ_1: 13;

        end;

        the carrier of U1 c= the carrier of U1;

        hence thesis by A1;

      end;

    end

    registration

      let U0 be Universal_Algebra;

      cluster strict for SubAlgebra of U0;

      existence

      proof

        reconsider S = UAStr (# the carrier of U0, the charact of U0 #) as strict Universal_Algebra by UNIALG_1:def 1, UNIALG_1:def 2, UNIALG_1:def 3;

        

         A1: the carrier of S c= the carrier of U0;

        for B be non empty Subset of U0 st B = the carrier of S holds the charact of S = ( Opers (U0,B)) & B is opers_closed

        proof

          let B be non empty Subset of U0;

          assume

           A2: B = the carrier of S;

           A3:

          now

            let n be Nat;

            assume

             A4: n in ( dom the charact of U0);

            then

            reconsider o = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

            n in ( dom ( Opers (U0,B))) by A4, Def6;

            

            hence (( Opers (U0,B)) . n) = (o /. B) by Def6

            .= (the charact of U0 . n) by A2, Th4;

          end;

          ( dom the charact of U0) = ( dom ( Opers (U0,B))) by Def6;

          hence thesis by A2, A3, Th4, FINSEQ_1: 13;

        end;

        then

        reconsider S as SubAlgebra of U0 by A1, Def7;

        take S;

        thus thesis;

      end;

    end

    theorem :: UNIALG_2:6

    

     Th6: for U0,U1 be Universal_Algebra, o0 be operation of U0, o1 be operation of U1, n be Nat st U0 is SubAlgebra of U1 & n in ( dom the charact of U0) & o0 = (the charact of U0 . n) & o1 = (the charact of U1 . n) holds ( arity o0) = ( arity o1)

    proof

      let U0,U1 be Universal_Algebra, o0 be operation of U0, o1 be operation of U1, n;

      assume that

       A1: U0 is SubAlgebra of U1 and

       A2: n in ( dom the charact of U0) & o0 = (the charact of U0 . n) and

       A3: o1 = (the charact of U1 . n);

      reconsider A = the carrier of U0 as non empty Subset of U1 by A1, Def7;

      A is opers_closed by A1, Def7;

      then

       A4: A is_closed_on o1;

      n in ( dom ( Opers (U1,A))) & o0 = (( Opers (U1,A)) . n) by A1, A2, Def7;

      then o0 = (o1 /. A) by A3, Def6;

      then o0 = (o1 | (( arity o1) -tuples_on A)) by A4, Def5;

      then ( dom o0) = (( dom o1) /\ (( arity o1) -tuples_on A)) by RELAT_1: 61;

      

      then

       A5: ( dom o0) = ((( arity o1) -tuples_on the carrier of U1) /\ (( arity o1) -tuples_on A)) by MARGREL1: 22

      .= (( arity o1) -tuples_on A) by MARGREL1: 21;

      ( dom o0) = (( arity o0) -tuples_on A) by MARGREL1: 22;

      hence thesis by A5, FINSEQ_2: 110;

    end;

    theorem :: UNIALG_2:7

    

     Th7: U0 is SubAlgebra of U1 implies ( dom the charact of U0) = ( dom the charact of U1)

    proof

      assume

       A1: U0 is SubAlgebra of U1;

      then

      reconsider A = the carrier of U0 as non empty Subset of U1 by Def7;

      the charact of U0 = ( Opers (U1,A)) by A1, Def7;

      hence thesis by Def6;

    end;

    theorem :: UNIALG_2:8

    U0 is SubAlgebra of U0

    proof

      

       A1: for B be non empty Subset of U0 st B = the carrier of U0 holds the charact of U0 = ( Opers (U0,B)) & B is opers_closed

      proof

        let B be non empty Subset of U0;

        assume

         A2: B = the carrier of U0;

        

         A3: ( dom the charact of U0) = ( dom ( Opers (U0,B))) by Def6;

        for n be Nat st n in ( dom the charact of U0) holds (the charact of U0 . n) = (( Opers (U0,B)) . n)

        proof

          let n be Nat;

          assume

           A4: n in ( dom the charact of U0);

          then

          reconsider o = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

          (( Opers (U0,B)) . n) = (o /. B) by A3, A4, Def6;

          hence thesis by A2, Th4;

        end;

        hence thesis by A2, A3, Th4, FINSEQ_1: 13;

      end;

      the carrier of U0 c= the carrier of U0;

      hence thesis by A1, Def7;

    end;

    theorem :: UNIALG_2:9

    U0 is SubAlgebra of U1 & U1 is SubAlgebra of U2 implies U0 is SubAlgebra of U2

    proof

      assume that

       A1: U0 is SubAlgebra of U1 and

       A2: U1 is SubAlgebra of U2;

      

       A3: the carrier of U0 is Subset of U1 by A1, Def7;

      reconsider B2 = the carrier of U1 as non empty Subset of U2 by A2, Def7;

      

       A4: the charact of U1 = ( Opers (U2,B2)) by A2, Def7;

      the carrier of U1 is Subset of U2 by A2, Def7;

      hence the carrier of U0 is Subset of U2 by A3, XBOOLE_1: 1;

      let B be non empty Subset of U2;

      assume

       A5: B = the carrier of U0;

      reconsider B1 = the carrier of U0 as non empty Subset of U1 by A1, Def7;

      

       A6: the charact of U0 = ( Opers (U1,B1)) by A1, Def7;

      

       A7: B2 is opers_closed by A2, Def7;

      

       A8: ( dom the charact of U1) = ( dom ( Opers (U2,B2))) by A2, Def7

      .= ( dom the charact of U2) by Def6;

      

       A9: B1 is opers_closed by A1, Def7;

       A10:

      now

        let o2 be operation of U2;

        consider n be Nat such that

         A11: n in ( dom the charact of U2) and

         A12: (the charact of U2 . n) = o2 by FINSEQ_2: 10;

        

         A13: ( dom the charact of U2) = ( dom ( Opers (U2,B2))) by Def6;

        then

        reconsider o21 = (the charact of U1 . n) as operation of U1 by A4, A11, FUNCT_1:def 3;

        

         A14: ( dom o21) = (( arity o21) -tuples_on the carrier of U1) by MARGREL1: 22;

        

         A15: ( dom the charact of U1) = ( dom ( Opers (U1,B1))) by Def6;

        then

        reconsider o20 = (the charact of U0 . n) as operation of U0 by A6, A4, A11, A13, FUNCT_1:def 3;

        

         A16: ( dom o20) = (( arity o20) -tuples_on the carrier of U0) by MARGREL1: 22;

        

         A17: ( dom o2) = (( arity o2) -tuples_on the carrier of U2) & ( dom (o2 | (( arity o2) -tuples_on B2))) = (( dom o2) /\ (( arity o2) -tuples_on B2)) by MARGREL1: 22, RELAT_1: 61;

        

         A18: B2 is_closed_on o2 by A7;

        

         A19: o21 = (o2 /. B2) by A4, A11, A12, A13, Def6;

        then o21 = (o2 | (( arity o2) -tuples_on B2)) by A18, Def5;

        then

         A20: ( arity o2) = ( arity o21) by A14, A17, FINSEQ_2: 110, MARGREL1: 21;

        

         A21: B1 is_closed_on o21 by A9;

        

         A22: o20 = (o21 /. B1) by A6, A4, A11, A13, A15, Def6;

        then o20 = (o21 | (( arity o21) -tuples_on B1)) by A21, Def5;

        then (( arity o20) -tuples_on B1) = ((( arity o21) -tuples_on the carrier of U1) /\ (( arity o21) -tuples_on B1)) by A16, A14, RELAT_1: 61;

        then

         A23: ( arity o20) = ( arity o21) by FINSEQ_2: 110, MARGREL1: 21;

        now

          let s be FinSequence of B;

          reconsider s1 = s as Element of (B1 * ) by A5, FINSEQ_1:def 11;

          reconsider s0 = s as Element of (the carrier of U0 * ) by A5, FINSEQ_1:def 11;

          

           A24: ( rng o20) c= B by A5, RELAT_1:def 19;

          ( rng s) c= B by FINSEQ_1:def 4;

          then ( rng s) c= B2 by A3, A5, XBOOLE_1: 1;

          then s is FinSequence of B2 by FINSEQ_1:def 4;

          then

          reconsider s2 = s as Element of (B2 * ) by FINSEQ_1:def 11;

          assume

           A25: ( len s) = ( arity o2);

          then s2 in { w where w be Element of (B2 * ) : ( len w) = ( arity o2) };

          then

           A26: s2 in (( arity o2) -tuples_on B2) by FINSEQ_2:def 4;

          s0 in { w where w be Element of (the carrier of U0 * ) : ( len w) = ( arity o20) } by A23, A20, A25;

          then s0 in (( arity o20) -tuples_on the carrier of U0) by FINSEQ_2:def 4;

          then

           A27: (o20 . s0) in ( rng o20) by A16, FUNCT_1:def 3;

          s1 in { w where w be Element of (B1 * ) : ( len w) = ( arity o21) } by A20, A25;

          then

           A28: s1 in (( arity o21) -tuples_on B1) by FINSEQ_2:def 4;

          (o20 . s0) = ((o21 | (( arity o21) -tuples_on B1)) . s1) by A21, A22, Def5

          .= (o21 . s1) by A28, FUNCT_1: 49

          .= ((o2 | (( arity o2) -tuples_on B2)) . s2) by A18, A19, Def5

          .= (o2 . s) by A26, FUNCT_1: 49;

          hence (o2 . s) in B by A27, A24;

        end;

        hence B is_closed_on o2;

      end;

      

       A29: ( dom the charact of U0) = ( dom ( Opers (U1,B1))) by A1, Def7

      .= ( dom the charact of U1) by Def6;

      

       A30: ( dom the charact of U2) = ( dom ( Opers (U2,B))) by Def6;

      

       A31: B = B1 by A5;

      now

        let n be Nat;

        assume

         A32: n in ( dom ( Opers (U2,B)));

        then

        reconsider o2 = (the charact of U2 . n) as operation of U2 by A30, FUNCT_1:def 3;

        reconsider o21 = (the charact of U1 . n) as operation of U1 by A8, A30, A32, FUNCT_1:def 3;

        

         A33: B2 is_closed_on o2 by A7;

        

         A34: B1 is_closed_on o21 by A9;

        

        thus (( Opers (U2,B)) . n) = (o2 /. B) by A32, Def6

        .= (o2 | (( arity o2) -tuples_on B)) by A10, Def5

        .= (o2 | ((( arity o2) -tuples_on B2) /\ (( arity o2) -tuples_on B))) by A31, MARGREL1: 21

        .= ((o2 | (( arity o2) -tuples_on B2)) | (( arity o2) -tuples_on B)) by RELAT_1: 71

        .= ((o2 /. B2) | (( arity o2) -tuples_on B)) by A33, Def5

        .= (o21 | (( arity o2) -tuples_on B)) by A4, A8, A30, A32, Def6

        .= (o21 | (( arity o21) -tuples_on B1)) by A2, A5, A8, A30, A32, Th6

        .= (o21 /. B1) by A34, Def5

        .= (the charact of U0 . n) by A6, A29, A8, A30, A32, Def6;

      end;

      hence the charact of U0 = ( Opers (U2,B)) by A29, A8, A30, FINSEQ_1: 13;

      thus thesis by A10;

    end;

    theorem :: UNIALG_2:10

    

     Th10: U1 is strict SubAlgebra of U2 & U2 is strict SubAlgebra of U1 implies U1 = U2

    proof

      assume that

       A1: U1 is strict SubAlgebra of U2 and

       A2: U2 is strict SubAlgebra of U1;

      reconsider B = the carrier of U1 as non empty Subset of U2 by A1, Def7;

      the carrier of U2 c= the carrier of U2;

      then

      reconsider B1 = the carrier of U2 as non empty Subset of U2;

      

       A3: ( dom ( Opers (U2,B1))) = ( dom the charact of U2) by Def6;

      

       A4: for n be Nat st n in ( dom the charact of U2) holds (the charact of U2 . n) = (( Opers (U2,B1)) . n)

      proof

        let n be Nat;

        assume

         A5: n in ( dom the charact of U2);

        then

        reconsider o = (the charact of U2 . n) as operation of U2 by FUNCT_1:def 3;

        (( Opers (U2,B1)) . n) = (o /. B1) by A3, A5, Def6

        .= o by Th4;

        hence thesis;

      end;

      the carrier of U2 is Subset of U1 by A2, Def7;

      then

       A6: B1 = B;

      then the charact of U1 = ( Opers (U2,B1)) by A1, Def7;

      hence thesis by A1, A2, A6, A3, A4, FINSEQ_1: 13;

    end;

    theorem :: UNIALG_2:11

    

     Th11: for U1,U2 be SubAlgebra of U0 st the carrier of U1 c= the carrier of U2 holds U1 is SubAlgebra of U2

    proof

      let U1,U2 be SubAlgebra of U0;

      

       A1: ( dom the charact of U1) = ( dom the charact of U0) by Th7;

      reconsider B1 = the carrier of U1 as non empty Subset of U0 by Def7;

      assume

       A2: the carrier of U1 c= the carrier of U2;

      hence the carrier of U1 is Subset of U2;

      let B be non empty Subset of U2;

      assume

       A3: B = the carrier of U1;

      reconsider B2 = the carrier of U2 as non empty Subset of U0 by Def7;

      

       A4: the charact of U2 = ( Opers (U0,B2)) by Def7;

      

       A5: B2 is opers_closed by Def7;

      

       A6: ( dom ( Opers (U2,B))) = ( dom the charact of U2) by Def6;

      

       A7: ( dom the charact of U2) = ( dom the charact of U0) by Th7;

      

       A8: B1 is opers_closed by Def7;

      

       A9: B is opers_closed

      proof

        let o2 be operation of U2;

        let s be FinSequence of B;

        consider n be Nat such that

         A10: n in ( dom the charact of U2) and

         A11: (the charact of U2 . n) = o2 by FINSEQ_2: 10;

        reconsider o0 = (the charact of U0 . n) as operation of U0 by A7, A10, FUNCT_1:def 3;

        

         A12: ( arity o2) = ( arity o0) by A10, A11, Th6;

        ( rng s) c= B by FINSEQ_1:def 4;

        then ( rng s) c= B2 by XBOOLE_1: 1;

        then s is FinSequence of B2 by FINSEQ_1:def 4;

        then

        reconsider s2 = s as Element of (B2 * ) by FINSEQ_1:def 11;

        reconsider s1 = s as Element of (B1 * ) by A3, FINSEQ_1:def 11;

        assume

         A13: ( arity o2) = ( len s);

        set tb2 = (( arity o0) -tuples_on B2);

        

         A14: B2 is_closed_on o0 by A5;

        

         A15: o2 = (o0 /. B2) by A4, A10, A11, Def6

        .= (o0 | tb2) by A14, Def5;

        

         A16: B1 is_closed_on o0 by A8;

        tb2 = { w where w be Element of (B2 * ) : ( len w) = ( arity o0) } by FINSEQ_2:def 4;

        then s2 in tb2 by A13, A12;

        then (o2 . s) = (o0 . s1) by A15, FUNCT_1: 49;

        hence thesis by A3, A13, A16, A12;

      end;

      

       A17: the charact of U1 = ( Opers (U0,B1)) by Def7;

      now

        let n be Nat;

        assume

         A18: n in ( dom the charact of U0);

        then

        reconsider o0 = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

        reconsider o2 = (the charact of U2 . n) as operation of U2 by A7, A18, FUNCT_1:def 3;

        

         A19: o2 = (o0 /. B2) & ( arity o2) = ( arity o0) by A4, A7, A18, Def6, Th6;

        

         A20: B is_closed_on o2 by A9;

        

         A21: B2 is_closed_on o0 by A5;

        

         A22: B1 is_closed_on o0 by A8;

        

        thus (the charact of U1 . n) = (o0 /. B1) by A17, A1, A18, Def6

        .= (o0 | (( arity o0) -tuples_on B1)) by A22, Def5

        .= (o0 | ((( arity o0) -tuples_on B2) /\ (( arity o0) -tuples_on B1))) by A2, MARGREL1: 21

        .= ((o0 | (( arity o0) -tuples_on B2)) | (( arity o0) -tuples_on B)) by A3, RELAT_1: 71

        .= ((o0 /. B2) | (( arity o0) -tuples_on B)) by A21, Def5

        .= (o2 /. B) by A20, A19, Def5

        .= (( Opers (U2,B)) . n) by A7, A6, A18, Def6;

      end;

      hence the charact of U1 = ( Opers (U2,B)) by A1, A7, A6, FINSEQ_1: 13;

      thus thesis by A9;

    end;

    theorem :: UNIALG_2:12

    

     Th12: for U1,U2 be strict SubAlgebra of U0 st the carrier of U1 = the carrier of U2 holds U1 = U2

    proof

      let U1,U2 be strict SubAlgebra of U0;

      assume the carrier of U1 = the carrier of U2;

      then U1 is strict SubAlgebra of U2 & U2 is strict SubAlgebra of U1 by Th11;

      hence thesis by Th10;

    end;

    theorem :: UNIALG_2:13

    U1 is SubAlgebra of U2 implies (U1,U2) are_similar

    proof

      set s1 = ( signature U1), s2 = ( signature U2);

      set X = ( dom s1);

      ( len s1) = ( len the charact of U1) by UNIALG_1:def 4;

      then

       A1: ( dom s1) = ( dom the charact of U1) by FINSEQ_3: 29;

      assume

       A2: U1 is SubAlgebra of U2;

      then

      reconsider A = the carrier of U1 as non empty Subset of U2 by Def7;

      ( len s2) = ( len the charact of U2) by UNIALG_1:def 4;

      then

       A3: ( dom s2) = ( dom the charact of U2) by FINSEQ_3: 29;

      ( dom the charact of U1) = ( dom ( Opers (U2,A))) by A2, Def7;

      then

       A4: ( dom s1) = ( dom s2) by A1, A3, Def6;

      the charact of U1 = ( Opers (U2,A)) by A2, Def7;

      then

       A5: ( dom s1) c= ( dom s2) by A1, A3, Def6;

      for n be Nat st n in X holds (s1 . n) = (s2 . n)

      proof

        let n be Nat;

        assume

         A6: n in X;

        then

        reconsider o1 = (the charact of U1 . n) as operation of U1 by A1, FUNCT_1:def 3;

        reconsider o2 = (the charact of U2 . n) as operation of U2 by A3, A4, A6, FUNCT_1:def 3;

        (s1 . n) = ( arity o1) & (s2 . n) = ( arity o2) by A5, A6, UNIALG_1:def 4;

        hence thesis by A2, A1, A6, Th6;

      end;

      then s1 = s2 by A4, FINSEQ_1: 13;

      hence thesis;

    end;

    theorem :: UNIALG_2:14

    

     Th14: for A be non empty Subset of U0 holds UAStr (# A, ( Opers (U0,A)) #) is strict Universal_Algebra

    proof

      let A be non empty Subset of U0;

      set C = UAStr (# A, ( Opers (U0,A)) #);

      

       A1: ( dom the charact of C) = ( dom the charact of U0) by Def6;

      for n be object st n in ( dom the charact of C) holds (the charact of C . n) is non empty

      proof

        let n be object;

        assume

         A2: n in ( dom the charact of C);

        then

        reconsider o = (the charact of U0 . n) as operation of U0 by A1, FUNCT_1:def 3;

        (the charact of C . n) = (o /. A) by A2, Def6;

        hence thesis;

      end;

      then

       A3: the charact of C is non-empty by FUNCT_1:def 9;

      for n be Nat, h be PartFunc of C st n in ( dom the charact of C) & h = (the charact of C . n) holds h is quasi_total

      proof

        let n;

        let h be PartFunc of (the carrier of C * ), the carrier of C;

        assume that

         A4: n in ( dom the charact of C) and

         A5: h = (the charact of C . n);

        reconsider o = (the charact of U0 . n) as operation of U0 by A1, A4, FUNCT_1:def 3;

        h = (o /. A) by A4, A5, Def6;

        hence thesis;

      end;

      then

       A6: the charact of C is quasi_total;

      for n be Nat, h be PartFunc of (the carrier of C * ), the carrier of C st n in ( dom the charact of C) & h = (the charact of C . n) holds h is homogeneous

      proof

        let n;

        let h be PartFunc of (the carrier of C * ), the carrier of C;

        assume that

         A7: n in ( dom the charact of C) and

         A8: h = (the charact of C . n);

        reconsider o = (the charact of U0 . n) as operation of U0 by A1, A7, FUNCT_1:def 3;

        h = (o /. A) by A7, A8, Def6;

        hence thesis;

      end;

      then

       A9: the charact of C is homogeneous;

      the charact of C <> {} by A1, RELAT_1: 38, RELAT_1: 41;

      hence thesis by A9, A6, A3, UNIALG_1:def 1, UNIALG_1:def 2, UNIALG_1:def 3;

    end;

    definition

      let U0 be Universal_Algebra, A be non empty Subset of U0;

      assume

       A1: A is opers_closed;

      :: UNIALG_2:def8

      func UniAlgSetClosed (A) -> strict SubAlgebra of U0 equals

      : Def8: UAStr (# A, ( Opers (U0,A)) #);

      coherence

      proof

        reconsider C = UAStr (# A, ( Opers (U0,A)) #) as strict Universal_Algebra by Th14;

        for B be non empty Subset of U0 st B = the carrier of C holds the charact of C = ( Opers (U0,B)) & B is opers_closed by A1;

        hence thesis by Def7;

      end;

    end

    definition

      let U0;

      let U1,U2 be SubAlgebra of U0;

      assume

       A1: the carrier of U1 meets the carrier of U2;

      :: UNIALG_2:def9

      func U1 /\ U2 -> strict SubAlgebra of U0 means

      : Def9: the carrier of it = (the carrier of U1 /\ the carrier of U2) & for B be non empty Subset of U0 st B = the carrier of it holds the charact of it = ( Opers (U0,B)) & B is opers_closed;

      existence

      proof

        

         A2: (the carrier of U1 /\ the carrier of U2) c= the carrier of U1 by XBOOLE_1: 17;

        the carrier of U1 is Subset of U0 by Def7;

        then

        reconsider C = (the carrier of U1 /\ the carrier of U2) as non empty Subset of U0 by A1, A2, XBOOLE_1: 1;

        set S = UAStr (# C, ( Opers (U0,C)) #);

        

         A3: (the carrier of U1 /\ the carrier of U2) c= the carrier of U2 by XBOOLE_1: 17;

         A4:

        now

          let o be operation of U0;

          now

            set B1 = the carrier of U1, B2 = the carrier of U2;

            let s be FinSequence of C;

            reconsider s2 = s as FinSequence of B2 by A3, FINSEQ_2: 24;

            reconsider s1 = s as FinSequence of B1 by A2, FINSEQ_2: 24;

            assume

             A5: ( len s) = ( arity o);

            reconsider B1 as non empty Subset of U0 by Def7;

            reconsider B2 as non empty Subset of U0 by Def7;

            B2 is opers_closed by Def7;

            then B2 is_closed_on o;

            then

             A6: (o . s2) in B2 by A5;

            B1 is opers_closed by Def7;

            then B1 is_closed_on o;

            then (o . s1) in B1 by A5;

            hence (o . s) in C by A6, XBOOLE_0:def 4;

          end;

          hence C is_closed_on o;

        end;

        then

         A7: for B be non empty Subset of U0 st B = the carrier of S holds the charact of S = ( Opers (U0,B)) & B is opers_closed;

        reconsider S as Universal_Algebra by Th14;

        reconsider S as strict SubAlgebra of U0 by A7, Def7;

        take S;

        thus thesis by A4;

      end;

      uniqueness

      proof

        the carrier of U1 is Subset of U0 & (the carrier of U1 /\ the carrier of U2) c= the carrier of U1 by Def7, XBOOLE_1: 17;

        then

        reconsider C = (the carrier of U1 /\ the carrier of U2) as non empty Subset of U0 by A1, XBOOLE_1: 1;

        let W1,W2 be strict SubAlgebra of U0;

        assume that

         A8: the carrier of W1 = (the carrier of U1 /\ the carrier of U2) & for B1 be non empty Subset of U0 st B1 = the carrier of W1 holds the charact of W1 = ( Opers (U0,B1)) & B1 is opers_closed and

         A9: the carrier of W2 = (the carrier of U1 /\ the carrier of U2) and

         A10: for B2 be non empty Subset of U0 st B2 = the carrier of W2 holds the charact of W2 = ( Opers (U0,B2)) & B2 is opers_closed;

        the charact of W2 = ( Opers (U0,C)) by A9, A10;

        hence thesis by A8, A9;

      end;

    end

    definition

      let U0;

      :: UNIALG_2:def10

      func Constants (U0) -> Subset of U0 equals { a where a be Element of U0 : ex o be operation of U0 st ( arity o) = 0 & a in ( rng o) };

      coherence

      proof

        set E = { a where a be Element of U0 : ex o be operation of U0 st ( arity o) = 0 & a in ( rng o) };

        E c= the carrier of U0

        proof

          let x be object;

          assume x in E;

          then ex w be Element of U0 st w = x & ex o be operation of U0 st ( arity o) = 0 & w in ( rng o);

          hence thesis;

        end;

        hence thesis;

      end;

    end

    definition

      let IT be Universal_Algebra;

      :: UNIALG_2:def11

      attr IT is with_const_op means

      : Def11: ex o be operation of IT st ( arity o) = 0 ;

    end

    registration

      cluster with_const_op strict for Universal_Algebra;

      existence

      proof

        set A = the non empty set;

        set a = the Element of A;

        reconsider w = (( <*> A) .--> a) as Element of ( PFuncs ((A * ),A)) by MARGREL1: 19;

        set U0 = UAStr (# A, <*w*> #);

        

         A1: the charact of U0 is quasi_total & the charact of U0 is homogeneous by MARGREL1: 20;

        the charact of U0 is non-empty by MARGREL1: 20;

        then

        reconsider U0 as Universal_Algebra by A1, UNIALG_1:def 1, UNIALG_1:def 2, UNIALG_1:def 3;

        take U0;

        ( dom <*w*>) = {1} & 1 in {1} by FINSEQ_1: 2, FINSEQ_1: 38, TARSKI:def 1;

        then

        reconsider o = (the charact of U0 . 1) as operation of U0 by FUNCT_1:def 3;

        o = w by FINSEQ_1: 40;

        then

         A2: ( dom o) = {( <*> A)} by FUNCOP_1: 13;

         A3:

        now

          let x be FinSequence;

          assume x in ( dom o);

          then x = ( <*> A) by A2, TARSKI:def 1;

          hence ( len x) = 0 ;

        end;

        ( <*> A) in {( <*> A)} by TARSKI:def 1;

        then ( arity o) = 0 by A2, A3, MARGREL1:def 25;

        hence thesis;

      end;

    end

    registration

      let U0 be with_const_op Universal_Algebra;

      cluster ( Constants U0) -> non empty;

      coherence

      proof

        consider o be operation of U0 such that

         A1: ( arity o) = 0 by Def11;

        ( dom o) = ( 0 -tuples_on the carrier of U0) by A1, MARGREL1: 22

        .= {( <*> the carrier of U0)} by FINSEQ_2: 94;

        then ( <*> the carrier of U0) in ( dom o) by TARSKI:def 1;

        then

         A2: (o . ( <*> the carrier of U0)) in ( rng o) by FUNCT_1:def 3;

        ( rng o) c= the carrier of U0 by RELAT_1:def 19;

        then

        reconsider u = (o . ( <*> the carrier of U0)) as Element of U0 by A2;

        u in { a where a be Element of U0 : ex o be operation of U0 st ( arity o) = 0 & a in ( rng o) } by A1, A2;

        hence thesis;

      end;

    end

    theorem :: UNIALG_2:15

    

     Th15: for U0 be Universal_Algebra, U1 be SubAlgebra of U0 holds ( Constants U0) is Subset of U1

    proof

      let U0 be Universal_Algebra, U1 be SubAlgebra of U0;

      set u1 = the carrier of U1;

      ( Constants U0) c= u1

      proof

        reconsider B = u1 as non empty Subset of U0 by Def7;

        let x be object;

        assume x in ( Constants U0);

        then

        consider a be Element of U0 such that

         A1: a = x and

         A2: ex o be operation of U0 st ( arity o) = 0 & a in ( rng o);

        consider o0 be operation of U0 such that

         A3: ( arity o0) = 0 and

         A4: a in ( rng o0) by A2;

        consider y be object such that

         A5: y in ( dom o0) and

         A6: a = (o0 . y) by A4, FUNCT_1:def 3;

        ( dom o0) = ( 0 -tuples_on the carrier of U0) by A3, MARGREL1: 22

        .= {( <*> the carrier of U0)} by FINSEQ_2: 94;

        then y in {( <*> B)} by A5;

        then y in ( 0 -tuples_on B) by FINSEQ_2: 94;

        then y in (( dom o0) /\ (( arity o0) -tuples_on B)) by A3, A5, XBOOLE_0:def 4;

        then

         A7: y in ( dom (o0 | (( arity o0) -tuples_on B))) by RELAT_1: 61;

        consider n be Nat such that

         A8: n in ( dom the charact of U0) and

         A9: (the charact of U0 . n) = o0 by FINSEQ_2: 10;

        

         A10: n in ( dom the charact of U1) by A8, Th7;

        then

        reconsider o1 = (the charact of U1 . n) as operation of U1 by FUNCT_1:def 3;

        the charact of U1 = ( Opers (U0,B)) by Def7;

        then

         A11: o1 = (o0 /. B) by A9, A10, Def6;

        B is opers_closed by Def7;

        then

         A12: B is_closed_on o0;

        then y in ( dom (o0 /. B)) by A7, Def5;

        then

         A13: (o1 . y) in ( rng o1) by A11, FUNCT_1:def 3;

        

         A14: ( rng o1) c= the carrier of U1 by RELAT_1:def 19;

        (o1 . y) = ((o0 | (( arity o0) -tuples_on B)) . y) by A11, A12, Def5

        .= a by A6, A7, FUNCT_1: 47;

        hence thesis by A1, A13, A14;

      end;

      hence thesis;

    end;

    theorem :: UNIALG_2:16

    for U0 be with_const_op Universal_Algebra, U1 be SubAlgebra of U0 holds ( Constants U0) is non empty Subset of U1 by Th15;

    theorem :: UNIALG_2:17

    

     Th17: for U0 be with_const_op Universal_Algebra, U1,U2 be SubAlgebra of U0 holds the carrier of U1 meets the carrier of U2

    proof

      let U0 be with_const_op Universal_Algebra, U1,U2 be SubAlgebra of U0;

      set a = the Element of ( Constants U0);

      ( Constants U0) is non empty Subset of U1 & ( Constants U0) is non empty Subset of U2 by Th15;

      then

       A1: ( Constants U0) c= (the carrier of U1 /\ the carrier of U2) by XBOOLE_1: 19;

      thus thesis by A1;

    end;

    definition

      let U0 be Universal_Algebra, A be Subset of U0;

      assume

       A1: ( Constants U0) <> {} or A <> {} ;

      :: UNIALG_2:def12

      func GenUnivAlg (A) -> strict SubAlgebra of U0 means

      : Def12: A c= the carrier of it & for U1 be SubAlgebra of U0 st A c= the carrier of U1 holds it is SubAlgebra of U1;

      existence

      proof

        defpred P[ set] means A c= $1 & ( Constants U0) c= $1 & for B be non empty Subset of U0 st B = $1 holds B is opers_closed;

        set C = ( bool the carrier of U0);

        consider X be set such that

         A2: for x holds x in X iff x in C & P[x] from XFAMILY:sch 1;

        set P = ( meet X);

        the carrier of U0 in C & for B be non empty Subset of U0 st B = the carrier of U0 holds B is opers_closed by Th4, ZFMISC_1:def 1;

        then

         A3: the carrier of U0 in X by A2;

        

         A4: P c= the carrier of U0 by A3, SETFAM_1:def 1;

        now

          let x be set;

          assume x in X;

          then A c= x & ( Constants U0) c= x by A2;

          hence (A \/ ( Constants U0)) c= x by XBOOLE_1: 8;

        end;

        then

         A5: (A \/ ( Constants U0)) c= P by A3, SETFAM_1: 5;

        then

        reconsider P as non empty Subset of U0 by A1, A4;

        take E = ( UniAlgSetClosed P);

        

         A6: P is opers_closed

        proof

          let o be operation of U0;

          let s be FinSequence of P;

          assume

           A7: ( len s) = ( arity o);

          now

            let a be set;

            

             A8: ( rng s) c= P by FINSEQ_1:def 4;

            assume

             A9: a in X;

            then

            reconsider a0 = a as Subset of U0 by A2;

            A c= a0 & ( Constants U0) c= a0 by A2, A9;

            then

            reconsider a0 as non empty Subset of U0 by A1;

            P c= a0 by A9, SETFAM_1: 3;

            then ( rng s) c= a0 by A8;

            then

            reconsider s0 = s as FinSequence of a0 by FINSEQ_1:def 4;

            a0 is opers_closed by A2, A9;

            then a0 is_closed_on o;

            then (o . s0) in a0 by A7;

            hence (o . s) in a;

          end;

          hence thesis by A3, SETFAM_1:def 1;

        end;

        then

         A10: E = UAStr (# P, ( Opers (U0,P)) #) by Def8;

        A c= (A \/ ( Constants U0)) by XBOOLE_1: 7;

        hence A c= the carrier of E by A5, A10;

        let U1 be SubAlgebra of U0;

        assume

         A11: A c= the carrier of U1;

        set u1 = the carrier of U1;

        

         A12: ( Constants U0) c= u1

        proof

          reconsider B = u1 as non empty Subset of U0 by Def7;

          let x be object;

          assume x in ( Constants U0);

          then

          consider a be Element of U0 such that

           A13: a = x and

           A14: ex o be operation of U0 st ( arity o) = 0 & a in ( rng o);

          consider o0 be operation of U0 such that

           A15: ( arity o0) = 0 and

           A16: a in ( rng o0) by A14;

          consider y be object such that

           A17: y in ( dom o0) and

           A18: a = (o0 . y) by A16, FUNCT_1:def 3;

          ( dom o0) = ( 0 -tuples_on the carrier of U0) by A15, MARGREL1: 22

          .= {( <*> the carrier of U0)} by FINSEQ_2: 94;

          then y in {( <*> B)} by A17;

          then y in ( 0 -tuples_on B) by FINSEQ_2: 94;

          then y in (( dom o0) /\ (( arity o0) -tuples_on B)) by A15, A17, XBOOLE_0:def 4;

          then

           A19: y in ( dom (o0 | (( arity o0) -tuples_on B))) by RELAT_1: 61;

          consider n be Nat such that

           A20: n in ( dom the charact of U0) and

           A21: (the charact of U0 . n) = o0 by FINSEQ_2: 10;

          

           A22: n in ( dom the charact of U1) by A20, Th7;

          then

          reconsider o1 = (the charact of U1 . n) as operation of U1 by FUNCT_1:def 3;

          the charact of U1 = ( Opers (U0,B)) by Def7;

          then

           A23: o1 = (o0 /. B) by A21, A22, Def6;

          B is opers_closed by Def7;

          then

           A24: B is_closed_on o0;

          then y in ( dom (o0 /. B)) by A19, Def5;

          then

           A25: (o1 . y) in ( rng o1) by A23, FUNCT_1:def 3;

          

           A26: ( rng o1) c= the carrier of U1 by RELAT_1:def 19;

          (o1 . y) = ((o0 | (( arity o0) -tuples_on B)) . y) by A23, A24, Def5

          .= a by A18, A19, FUNCT_1: 47;

          hence thesis by A13, A25, A26;

        end;

        u1 is Subset of U0 & for B be non empty Subset of U0 st B = u1 holds B is opers_closed by Def7;

        then

         A27: u1 in X by A2, A11, A12;

        hence the carrier of E is Subset of U1 by A10, SETFAM_1: 3;

        let B be non empty Subset of U1;

        assume

         A28: B = the carrier of E;

        reconsider u11 = u1 as non empty Subset of U0 by Def7;

        

         A29: the charact of U1 = ( Opers (U0,u11)) by Def7;

        

         A30: ( dom the charact of U0) = ( dom ( Opers (U0,u11))) by Def6;

        

         A31: u11 is opers_closed by Def7;

         A32:

        now

          let o1 be operation of U1;

          consider n be Nat such that

           A33: n in ( dom the charact of U1) and

           A34: o1 = (the charact of U1 . n) by FINSEQ_2: 10;

          reconsider o0 = (the charact of U0 . n) as operation of U0 by A29, A30, A33, FUNCT_1:def 3;

          

           A35: ( arity o0) = ( arity o1) by A33, A34, Th6;

          

           A36: u11 is_closed_on o0 by A31;

          now

            let s be FinSequence of B;

            

             A37: P is_closed_on o0 by A6;

            reconsider sE = s as Element of (P * ) by A10, A28, FINSEQ_1:def 11;

            s is FinSequence of u11 by FINSEQ_2: 24;

            then

            reconsider s1 = s as Element of (u11 * ) by FINSEQ_1:def 11;

            

             A38: ( dom (o0 | (( arity o0) -tuples_on u11))) = (( dom o0) /\ (( arity o0) -tuples_on u11)) by RELAT_1: 61

            .= ((( arity o0) -tuples_on the carrier of U0) /\ (( arity o0) -tuples_on u11)) by MARGREL1: 22

            .= (( arity o0) -tuples_on u11) by MARGREL1: 21;

            assume

             A39: ( len s) = ( arity o1);

            then s1 in { q where q be Element of (u11 * ) : ( len q) = ( arity o0) } by A35;

            then

             A40: s1 in ( dom (o0 | (( arity o0) -tuples_on u11))) by A38, FINSEQ_2:def 4;

            (o1 . s) = ((o0 /. u11) . s1) by A29, A33, A34, Def6

            .= ((o0 | (( arity o0) -tuples_on u11)) . s1) by A36, Def5

            .= (o0 . sE) by A40, FUNCT_1: 47;

            hence (o1 . s) in B by A10, A28, A35, A39, A37;

          end;

          hence B is_closed_on o1;

        end;

        

         A41: ( dom ( Opers (U1,B))) = ( dom the charact of U1) by Def6;

        

         A42: ( dom the charact of U0) = ( dom ( Opers (U0,P))) by Def6;

        

         A43: P c= u1 by A27, SETFAM_1: 3;

        now

          let n be Nat;

          assume

           A44: n in ( dom the charact of U0);

          then

          reconsider o0 = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

          reconsider o1 = (the charact of U1 . n) as operation of U1 by A29, A30, A44, FUNCT_1:def 3;

          

           A45: u11 is_closed_on o0 by A31;

          

           A46: P is_closed_on o0 by A6;

          

          thus (the charact of E . n) = (o0 /. P) by A10, A42, A44, Def6

          .= (o0 | (( arity o0) -tuples_on P)) by A46, Def5

          .= (o0 | ((( arity o0) -tuples_on u11) /\ (( arity o0) -tuples_on P))) by A43, MARGREL1: 21

          .= ((o0 | (( arity o0) -tuples_on u11)) | (( arity o0) -tuples_on P)) by RELAT_1: 71

          .= ((o0 /. u11) | (( arity o0) -tuples_on P)) by A45, Def5

          .= (o1 | (( arity o0) -tuples_on P)) by A29, A30, A44, Def6

          .= (o1 | (( arity o1) -tuples_on B)) by A10, A28, A29, A30, A44, Th6

          .= (o1 /. B) by A32, Def5

          .= (( Opers (U1,B)) . n) by A29, A30, A41, A44, Def6;

        end;

        hence thesis by A10, A29, A42, A30, A32, A41, FINSEQ_1: 13;

      end;

      uniqueness

      proof

        let W1,W2 be strict SubAlgebra of U0;

        assume A c= the carrier of W1 & (for U1 be SubAlgebra of U0 st A c= the carrier of U1 holds W1 is SubAlgebra of U1) & A c= the carrier of W2 & for U2 be SubAlgebra of U0 st A c= the carrier of U2 holds W2 is SubAlgebra of U2;

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

        hence thesis by Th10;

      end;

    end

    theorem :: UNIALG_2:18

    for U0 be strict Universal_Algebra holds ( GenUnivAlg ( [#] the carrier of U0)) = U0

    proof

      let U0 be strict Universal_Algebra;

      set W = ( GenUnivAlg ( [#] the carrier of U0));

      reconsider B = the carrier of W as non empty Subset of U0 by Def7;

      the carrier of W is Subset of U0 & the carrier of U0 c= the carrier of W by Def7, Def12;

      then

       A1: the carrier of U0 = the carrier of W;

      

       A2: ( dom the charact of U0) = ( dom ( Opers (U0,B))) by Def6;

      

       A3: for n be Nat st n in ( dom the charact of U0) holds (the charact of U0 . n) = (( Opers (U0,B)) . n)

      proof

        let n be Nat;

        assume

         A4: n in ( dom the charact of U0);

        then

        reconsider o = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

        (( Opers (U0,B)) . n) = (o /. B) by A2, A4, Def6;

        hence thesis by A1, Th4;

      end;

      the charact of W = ( Opers (U0,B)) by Def7;

      hence thesis by A1, A2, A3, FINSEQ_1: 13;

    end;

    theorem :: UNIALG_2:19

    

     Th19: for U0 be Universal_Algebra, U1 be strict SubAlgebra of U0, B be non empty Subset of U0 st B = the carrier of U1 holds ( GenUnivAlg B) = U1

    proof

      let U0 be Universal_Algebra, U1 be strict SubAlgebra of U0, B be non empty Subset of U0;

      set W = ( GenUnivAlg B);

      assume

       A1: B = the carrier of U1;

      then ( GenUnivAlg B) is SubAlgebra of U1 by Def12;

      then

       A2: the carrier of W is non empty Subset of U1 by Def7;

      the carrier of U1 c= the carrier of W by A1, Def12;

      then the carrier of U1 = the carrier of W by A2;

      hence thesis by Th12;

    end;

    definition

      let U0 be Universal_Algebra, U1,U2 be SubAlgebra of U0;

      :: UNIALG_2:def13

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

      : Def13: for A be non empty Subset of U0 st A = (the carrier of U1 \/ the carrier of U2) holds it = ( GenUnivAlg A);

      existence

      proof

        reconsider B = (the carrier of U1 \/ the carrier of U2) as non empty set;

        the carrier of U1 is Subset of U0 & the carrier of U2 is Subset of U0 by Def7;

        then

        reconsider B as non empty Subset of U0 by XBOOLE_1: 8;

        take ( GenUnivAlg B);

        thus thesis;

      end;

      uniqueness

      proof

        reconsider B = (the carrier of U1 \/ the carrier of U2) as non empty set;

        let W1,W2 be strict SubAlgebra of U0;

        assume that

         A1: for A be non empty Subset of U0 st A = (the carrier of U1 \/ the carrier of U2) holds W1 = ( GenUnivAlg A) and

         A2: for A be non empty Subset of U0 st A = (the carrier of U1 \/ the carrier of U2) holds W2 = ( GenUnivAlg A);

        the carrier of U1 is Subset of U0 & the carrier of U2 is Subset of U0 by Def7;

        then

        reconsider B as non empty Subset of U0 by XBOOLE_1: 8;

        W1 = ( GenUnivAlg B) by A1;

        hence thesis by A2;

      end;

    end

    theorem :: UNIALG_2:20

    

     Th20: for U0 be Universal_Algebra, U1 be SubAlgebra of U0, A,B be Subset of U0 st (A <> {} or ( Constants U0) <> {} ) & B = (A \/ the carrier of U1) holds (( GenUnivAlg A) "\/" U1) = ( GenUnivAlg B)

    proof

      let U0 be Universal_Algebra, U1 be SubAlgebra of U0, A,B be Subset of U0;

      reconsider u1 = the carrier of U1, a = the carrier of ( GenUnivAlg A) as non empty Subset of U0 by Def7;

      assume that

       A1: A <> {} or ( Constants U0) <> {} and

       A2: B = (A \/ the carrier of U1);

      

       A3: A c= the carrier of ( GenUnivAlg A) by Def12;

      

       A4: B c= the carrier of ( GenUnivAlg B) by Def12;

      A c= B by A2, XBOOLE_1: 7;

      then

       A5: A c= the carrier of ( GenUnivAlg B) by A4;

      now

        per cases by A1;

          case A <> {} ;

          hence (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) <> {} by A3, A5, XBOOLE_1: 3, XBOOLE_1: 19;

        end;

          case

           A6: ( Constants U0) <> {} ;

          ( Constants U0) is Subset of ( GenUnivAlg A) & ( Constants U0) is Subset of ( GenUnivAlg B) by Th15;

          hence (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) <> {} by A6, XBOOLE_1: 3, XBOOLE_1: 19;

        end;

      end;

      then the carrier of ( GenUnivAlg A) meets the carrier of ( GenUnivAlg B);

      then

       A7: the carrier of (( GenUnivAlg A) /\ ( GenUnivAlg B)) = (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) by Def9;

      reconsider b = (a \/ u1) as non empty Subset of U0;

      

       A8: (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) c= a by XBOOLE_1: 17;

      A c= (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) by A3, A5, XBOOLE_1: 19;

      then ( GenUnivAlg A) is SubAlgebra of (( GenUnivAlg A) /\ ( GenUnivAlg B)) by A1, A7, Def12;

      then a is non empty Subset of (( GenUnivAlg A) /\ ( GenUnivAlg B)) by Def7;

      then a = (the carrier of ( GenUnivAlg A) /\ the carrier of ( GenUnivAlg B)) by A7, A8;

      then

       A9: a c= the carrier of ( GenUnivAlg B) by XBOOLE_1: 17;

      u1 c= B by A2, XBOOLE_1: 7;

      then u1 c= the carrier of ( GenUnivAlg B) by A4;

      then b c= the carrier of ( GenUnivAlg B) by A9, XBOOLE_1: 8;

      then

       A10: ( GenUnivAlg b) is strict SubAlgebra of ( GenUnivAlg B) by Def12;

      

       A11: (( GenUnivAlg A) "\/" U1) = ( GenUnivAlg b) by Def13;

      then

       A12: (a \/ u1) c= the carrier of (( GenUnivAlg A) "\/" U1) by Def12;

      (A \/ u1) c= (a \/ u1) by A3, XBOOLE_1: 13;

      then B c= the carrier of (( GenUnivAlg A) "\/" U1) by A2, A12;

      then ( GenUnivAlg B) is strict SubAlgebra of (( GenUnivAlg A) "\/" U1) by A2, Def12;

      hence thesis by A11, A10, Th10;

    end;

    theorem :: UNIALG_2:21

    

     Th21: for U0 be Universal_Algebra, U1,U2 be SubAlgebra of U0 holds (U1 "\/" U2) = (U2 "\/" U1)

    proof

      let U0 be Universal_Algebra, U1,U2 be SubAlgebra of U0;

      reconsider u1 = the carrier of U1, u2 = the carrier of U2 as non empty Subset of U0 by Def7;

      reconsider A = (u1 \/ u2) as non empty Subset of U0;

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

      hence thesis by Def13;

    end;

    theorem :: UNIALG_2:22

    

     Th22: for U0 be with_const_op Universal_Algebra, U1,U2 be strict SubAlgebra of U0 holds (U1 /\ (U1 "\/" U2)) = U1

    proof

      let U0 be with_const_op Universal_Algebra, U1,U2 be strict SubAlgebra of U0;

      reconsider u112 = the carrier of (U1 /\ (U1 "\/" U2)) as non empty Subset of U0 by Def7;

      reconsider u1 = the carrier of U1, u2 = the carrier of U2 as non empty Subset of U0 by Def7;

      reconsider A = (u1 \/ u2) as non empty Subset of U0;

      

       A1: the charact of U1 = ( Opers (U0,u1)) by Def7;

      

       A2: ( dom ( Opers (U0,u1))) = ( dom the charact of U0) by Def6;

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

      then

       A3: A c= the carrier of (U1 "\/" U2) by Def12;

      

       A4: the carrier of U1 meets the carrier of (U1 "\/" U2) by Th17;

      then

       A5: the carrier of (U1 /\ (U1 "\/" U2)) = (the carrier of U1 /\ the carrier of (U1 "\/" U2)) by Def9;

      then

       A6: the carrier of (U1 /\ (U1 "\/" U2)) c= the carrier of U1 by XBOOLE_1: 17;

      the carrier of U1 c= A by XBOOLE_1: 7;

      then the carrier of U1 c= the carrier of (U1 "\/" U2) by A3;

      then

       A7: the carrier of U1 c= the carrier of (U1 /\ (U1 "\/" U2)) by A5, XBOOLE_1: 19;

      

       A8: ( dom ( Opers (U0,u112))) = ( dom the charact of U0) by Def6;

      

       A9: for n be Nat st n in ( dom the charact of U0) holds (the charact of (U1 /\ (U1 "\/" U2)) . n) = (the charact of U1 . n)

      proof

        let n be Nat;

        assume

         A10: n in ( dom the charact of U0);

        then

        reconsider o0 = (the charact of U0 . n) as operation of U0 by FUNCT_1:def 3;

        

        thus (the charact of (U1 /\ (U1 "\/" U2)) . n) = (( Opers (U0,u112)) . n) by A4, Def9

        .= (o0 /. u112) by A8, A10, Def6

        .= (o0 /. u1) by A7, A6, XBOOLE_0:def 10

        .= (( Opers (U0,u1)) . n) by A2, A10, Def6

        .= (the charact of U1 . n) by Def7;

      end;

      the charact of (U1 /\ (U1 "\/" U2)) = ( Opers (U0,u112)) by A4, Def9;

      then the charact of (U1 /\ (U1 "\/" U2)) = the charact of U1 by A1, A8, A2, A9, FINSEQ_1: 13;

      hence thesis by A7, A6, XBOOLE_0:def 10;

    end;

    theorem :: UNIALG_2:23

    

     Th23: for U0 be with_const_op Universal_Algebra, U1,U2 be strict SubAlgebra of U0 holds ((U1 /\ U2) "\/" U2) = U2

    proof

      let U0 be with_const_op Universal_Algebra, U1,U2 be strict SubAlgebra of U0;

      reconsider u12 = the carrier of (U1 /\ U2), u2 = the carrier of U2 as non empty Subset of U0 by Def7;

      reconsider A = (u12 \/ u2) as non empty Subset of U0;

      the carrier of U1 meets the carrier of U2 by Th17;

      then u12 = (the carrier of U1 /\ the carrier of U2) by Def9;

      then

       A1: u12 c= u2 by XBOOLE_1: 17;

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

      hence thesis by A1, Th19, XBOOLE_1: 12;

    end;

    definition

      let U0 be Universal_Algebra;

      :: UNIALG_2:def14

      func Sub (U0) -> set means

      : Def14: for x be object holds x in it iff x is strict SubAlgebra of U0;

      existence

      proof

        reconsider X = { ( GenUnivAlg A) where A be Subset of U0 : A is non empty } as set;

        take X;

        let x be object;

        thus x in X implies x is strict SubAlgebra of U0

        proof

          assume x in X;

          then ex A be Subset of U0 st x = ( GenUnivAlg A) & A is non empty;

          hence thesis;

        end;

        assume x is strict SubAlgebra of U0;

        then

        reconsider a = x as strict SubAlgebra of U0;

        reconsider A = the carrier of a as non empty Subset of U0 by Def7;

        a = ( GenUnivAlg A) by Th19;

        hence thesis;

      end;

      uniqueness

      proof

        let A,B be set;

        assume that

         A1: for x be object holds x in A iff x is strict SubAlgebra of U0 and

         A2: for y be object holds y in B iff y is strict SubAlgebra of U0;

        now

          let x be object;

          assume x in A;

          then x is strict SubAlgebra of U0 by A1;

          hence x in B by A2;

        end;

        hence A c= B;

        let y be object;

        assume y in B;

        then y is strict SubAlgebra of U0 by A2;

        hence thesis by A1;

      end;

    end

    registration

      let U0 be Universal_Algebra;

      cluster ( Sub U0) -> non empty;

      coherence

      proof

        set x = the strict SubAlgebra of U0;

        x in ( Sub U0) by Def14;

        hence thesis;

      end;

    end

    definition

      let U0 be Universal_Algebra;

      :: UNIALG_2:def15

      func UniAlg_join (U0) -> BinOp of ( Sub U0) means

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

      existence

      proof

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

        

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

        proof

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

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

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

          take z;

          thus thesis;

        end;

        consider o be BinOp of ( Sub U0) such that

         A2: for a,b be Element of ( Sub 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 ( Sub U0);

        assume that

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

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

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

        proof

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

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

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

          hence thesis by A4;

        end;

        hence thesis by BINOP_1: 2;

      end;

    end

    definition

      let U0 be Universal_Algebra;

      :: UNIALG_2:def16

      func UniAlg_meet (U0) -> BinOp of ( Sub U0) means

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

      existence

      proof

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

        

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

        proof

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

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

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

          take z;

          thus thesis;

        end;

        consider o be BinOp of ( Sub U0) such that

         A2: for a,b be Element of ( Sub 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 ( Sub U0);

        assume that

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

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

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

        proof

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

          reconsider U1 = x, U2 = y as strict SubAlgebra 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 :: UNIALG_2:24

    

     Th24: ( UniAlg_join U0) is commutative

    proof

      set o = ( UniAlg_join U0);

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

      proof

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

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

        reconsider B = (the carrier of U1 \/ the carrier of U2) as non empty set;

        the carrier of U1 is Subset of U0 & the carrier of U2 is Subset of U0 by Def7;

        then

        reconsider B as non empty Subset of U0 by XBOOLE_1: 8;

        

         A1: (U1 "\/" U2) = ( GenUnivAlg B) by Def13;

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

        hence thesis by A1, Def13;

      end;

      hence thesis by BINOP_1:def 2;

    end;

    theorem :: UNIALG_2:25

    

     Th25: ( UniAlg_join U0) is associative

    proof

      set o = ( UniAlg_join U0);

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

      proof

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

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

        reconsider B = (the carrier of U1 \/ (the carrier of U2 \/ the carrier of U3)) as non empty set;

        

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

        

         A2: the carrier of U2 is Subset of U0 by Def7;

        

         A3: the carrier of U3 is Subset of U0 by Def7;

        then

        reconsider C = (the carrier of U2 \/ the carrier of U3) as non empty Subset of U0 by A2, XBOOLE_1: 8;

        

         A4: the carrier of U1 is Subset of U0 by Def7;

        then

        reconsider D = (the carrier of U1 \/ the carrier of U2) as non empty Subset of U0 by A2, XBOOLE_1: 8;

        (the carrier of U2 \/ the carrier of U3) c= the carrier of U0 by A2, A3, XBOOLE_1: 8;

        then

        reconsider B as non empty Subset of U0 by A4, XBOOLE_1: 8;

        

         A5: B = (D \/ the carrier of U3) by XBOOLE_1: 4;

        

         A6: ((U1 "\/" U2) "\/" U3) = (( GenUnivAlg D) "\/" U3) by Def13

        .= ( GenUnivAlg B) by A5, Th20;

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

        then

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

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

        .= (( GenUnivAlg C) "\/" U1) by Th21

        .= ( GenUnivAlg B) by Th20;

        hence thesis by A1, A7, A6, Def15;

      end;

      hence thesis by BINOP_1:def 3;

    end;

    theorem :: UNIALG_2:26

    

     Th26: for U0 be with_const_op Universal_Algebra holds ( UniAlg_meet U0) is commutative

    proof

      let U0 be with_const_op Universal_Algebra;

      set o = ( UniAlg_meet U0);

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

      proof

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

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

        

         A1: (o . (x,y)) = (U1 /\ U2) & (o . (y,x)) = (U2 /\ U1) by Def16;

        

         A2: the carrier of U1 meets the carrier of U2 by Th17;

        then the carrier of (U2 /\ U1) = (the carrier of U2 /\ the carrier of U1) & for B2 be non empty Subset of U0 st B2 = the carrier of (U2 /\ U1) holds the charact of (U2 /\ U1) = ( Opers (U0,B2)) & B2 is opers_closed by Def9;

        hence thesis by A1, A2, Def9;

      end;

      hence thesis by BINOP_1:def 2;

    end;

    theorem :: UNIALG_2:27

    

     Th27: for U0 be with_const_op Universal_Algebra holds ( UniAlg_meet U0) is associative

    proof

      let U0 be with_const_op Universal_Algebra;

      set o = ( UniAlg_meet U0);

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

      proof

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

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

        reconsider u23 = (U2 /\ U3), u12 = (U1 /\ U2) as Element of ( Sub U0) by Def14;

        

         A1: (o . (x,(o . (y,z)))) = (o . (x,u23)) by Def16

        .= (U1 /\ (U2 /\ U3)) by Def16;

        

         A2: (o . ((o . (x,y)),z)) = (o . (u12,z)) by Def16

        .= ((U1 /\ U2) /\ U3) by Def16;

        the carrier of U2 meets the carrier of U3 by Th17;

        then

         A3: the carrier of (U2 /\ U3) = (the carrier of U2 /\ the carrier of U3) by Def9;

        then

         A4: the carrier of U1 meets (the carrier of U2 /\ the carrier of U3) by Th17;

        then

         A5: for B be non empty Subset of U0 st B = the carrier of (U1 /\ (U2 /\ U3)) holds the charact of (U1 /\ (U2 /\ U3)) = ( Opers (U0,B)) & B is opers_closed by A3, Def9;

        

         A6: the carrier of (U1 /\ (U2 /\ U3)) = (the carrier of U1 /\ (the carrier of U2 /\ the carrier of U3)) by A3, A4, Def9;

        then

        reconsider C = (the carrier of U1 /\ (the carrier of U2 /\ the carrier of U3)) as non empty Subset of U0 by Def7;

        

         A7: C = ((the carrier of U1 /\ the carrier of U2) /\ the carrier of U3) by XBOOLE_1: 16;

        the carrier of U1 meets the carrier of U2 by Th17;

        then

         A8: the carrier of (U1 /\ U2) = (the carrier of U1 /\ the carrier of U2) by Def9;

        then (the carrier of U1 /\ the carrier of U2) meets the carrier of U3 by Th17;

        hence thesis by A1, A2, A8, A6, A5, A7, Def9;

      end;

      hence thesis by BINOP_1:def 3;

    end;

    definition

      let U0 be with_const_op Universal_Algebra;

      :: UNIALG_2:def17

      func UnSubAlLattice (U0) -> strict Lattice equals LattStr (# ( Sub U0), ( UniAlg_join U0), ( UniAlg_meet U0) #);

      coherence

      proof

        set L = LattStr (# ( Sub U0), ( UniAlg_join U0), ( UniAlg_meet U0) #);

        

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

        proof

          let a,b,c be Element of L;

          reconsider x = a, y = b, z = c as Element of ( Sub U0);

          

           A2: ( UniAlg_join U0) is associative by Th25;

          

          thus (a "\/" (b "\/" c)) = (the L_join of L . (a,(b "\/" c))) by LATTICES:def 1

          .= (( UniAlg_join U0) . (x,(( UniAlg_join U0) . (y,z)))) by LATTICES:def 1

          .= (the L_join of L . ((the L_join of L . (a,b)),c)) by A2, BINOP_1:def 3

          .= ((the L_join of L . (a,b)) "\/" c) by LATTICES:def 1

          .= ((a "\/" b) "\/" c) by LATTICES:def 1;

        end;

        

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

        proof

          let a,b be Element of L;

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

          

           A4: ( UniAlg_meet U0) is commutative by Th26;

          

          thus (a "/\" b) = (( UniAlg_meet U0) . (x,y)) by LATTICES:def 2

          .= (the L_meet of L . (b,a)) by A4, BINOP_1:def 2

          .= (b "/\" a) by LATTICES:def 2;

        end;

        

         A5: 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 ( Sub U0);

          

           A6: (( UniAlg_meet U0) . (x,(( UniAlg_join U0) . (x,y)))) = x

          proof

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

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

            

            hence (( UniAlg_meet U0) . (x,(( UniAlg_join U0) . (x,y)))) = (U1 /\ (U1 "\/" U2)) by Def16

            .= x by Th22;

          end;

          

          thus (a "/\" (a "\/" b)) = (the L_meet of L . (a,(a "\/" b))) by LATTICES:def 2

          .= a by A6, LATTICES:def 1;

        end;

        

         A7: 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 ( Sub U0);

          

           A8: (( UniAlg_join U0) . ((( UniAlg_meet U0) . (x,y)),y)) = y

          proof

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

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

            

            hence (( UniAlg_join U0) . ((( UniAlg_meet U0) . (x,y)),y)) = ((U1 /\ U2) "\/" U2) by Def15

            .= y by Th23;

          end;

          

          thus ((a "/\" b) "\/" b) = (the L_join of L . ((a "/\" b),b)) by LATTICES:def 1

          .= b by A8, LATTICES:def 2;

        end;

        

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

        proof

          let a,b,c be Element of L;

          reconsider x = a, y = b, z = c as Element of ( Sub U0);

          

           A10: ( UniAlg_meet U0) is associative by Th27;

          

          thus (a "/\" (b "/\" c)) = (the L_meet of L . (a,(b "/\" c))) by LATTICES:def 2

          .= (( UniAlg_meet U0) . (x,(( UniAlg_meet U0) . (y,z)))) by LATTICES:def 2

          .= (the L_meet of L . ((the L_meet of L . (a,b)),c)) by A10, BINOP_1:def 3

          .= ((the L_meet of L . (a,b)) "/\" c) by LATTICES:def 2

          .= ((a "/\" b) "/\" c) by LATTICES:def 2;

        end;

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

        proof

          let a,b be Element of L;

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

          

           A11: ( UniAlg_join U0) is commutative by Th24;

          

          thus (a "\/" b) = (( UniAlg_join U0) . (x,y)) by LATTICES:def 1

          .= (the L_join of L . (b,a)) by A11, BINOP_1:def 2

          .= (b "\/" a) by LATTICES:def 1;

        end;

        then L is join-commutative join-associative meet-absorbing meet-commutative meet-associative join-absorbing by A1, A7, A3, A9, A5, LATTICES:def 4, LATTICES:def 5, LATTICES:def 6, LATTICES:def 7, LATTICES:def 8, LATTICES:def 9;

        hence thesis;

      end;

    end