abcmiz_1.miz



    begin

    reserve i for Nat,

j for Element of NAT ,

X,Y,x,y,z for set;

    theorem :: ABCMIZ_1:1

    

     Th1: for f be Function holds (f . x) c= ( Union f)

    proof

      let f be Function;

      x in ( dom f) or not x in ( dom f);

      then (f . x) in ( rng f) or (f . x) = {} by FUNCT_1: 3, FUNCT_1:def 2;

      hence thesis by ZFMISC_1: 74;

    end;

    theorem :: ABCMIZ_1:2

    for f be Function st ( Union f) = {} holds (f . x) = {} by Th1, XBOOLE_1: 3;

    theorem :: ABCMIZ_1:3

    

     Th3: for f be Function holds for x,y be object st f = [x, y] holds x = y

    proof

      let f be Function, x,y be object;

      assume

       A1: f = [x, y];

      then

       A2: {x} in f by TARSKI:def 2;

      

       A3: {x, y} in f by A1, TARSKI:def 2;

      consider a,b be object such that

       A4: {x} = [a, b] by A2, RELAT_1:def 1;

      

       A5: {a} = {a, b} by A4, ZFMISC_1: 5;

      

       A6: x = {a} by A4, ZFMISC_1: 4;

      consider c,d be object such that

       A7: {x, y} = [c, d] by A3, RELAT_1:def 1;

      

       A8: x = {c} & y = {c, d} or x = {c, d} & y = {c} by A7, ZFMISC_1: 6;

      then c = a by A5, A6, ZFMISC_1: 4;

      hence thesis by A2, A3, A4, A5, A7, A8, FUNCT_1:def 1;

    end;

    theorem :: ABCMIZ_1:4

    

     Th4: (( id X) .: Y) c= Y

    proof

      let x be object;

      assume x in (( id X) .: Y);

      then ex y be object st [y, x] in ( id X) & y in Y by RELAT_1:def 13;

      hence thesis by RELAT_1:def 10;

    end;

    theorem :: ABCMIZ_1:5

    

     Th5: for S be non void Signature holds for X be non-empty ManySortedSet of the carrier of S holds for t be Term of S, X holds t is non pair

    proof

      let S be non void Signature;

      let X be non-empty ManySortedSet of the carrier of S;

      let t be Term of S, X;

      given x,y be object such that

       A1: t = [x, y];

      (ex s be SortSymbol of S, v be Element of (X . s) st (t . {} ) = [v, s]) or (t . {} ) in [:the carrier' of S, {the carrier of S}:] by MSATERM: 2;

      then (ex s be SortSymbol of S, v be Element of (X . s) st (t . {} ) = [v, s]) or ex a,b be object st a in the carrier' of S & b in {the carrier of S} & (t . {} ) = [a, b] by ZFMISC_1:def 2;

      then { {} } <> { {} , (t . {} )} by ZFMISC_1: 5;

      then

       A2: [ {} , (t . {} )] <> {x} by ZFMISC_1: 5;

       {} in ( dom t) by TREES_1: 22;

      then [ {} , (t . {} )] in t by FUNCT_1:def 2;

      then

       A3: [ {} , (t . {} )] = {x, y} by A1, A2, TARSKI:def 2;

      x = y by A1, Th3;

      hence thesis by A2, A3, ENUMSET1: 29;

    end;

    registration

      let S be non void Signature;

      let X be non empty-yielding ManySortedSet of the carrier of S;

      cluster -> non pair for Element of ( Free (S,X));

      coherence

      proof

        let e be Element of ( Free (S,X));

        e is Term of S, (X (\/) (the carrier of S --> { 0 })) by MSAFREE3: 8;

        hence thesis by Th5;

      end;

    end

    theorem :: ABCMIZ_1:6

    

     Th6: for x,y,z be set st x in ( {z} * ) & y in ( {z} * ) & ( card x) = ( card y) holds x = y

    proof

      let x,y,z be set such that

       A1: x in ( {z} * ) and

       A2: y in ( {z} * ) and

       A3: ( card x) = ( card y);

      reconsider x, y as FinSequence of {z} by A1, A2, FINSEQ_1:def 11;

      

       A4: ( dom x) = ( Seg ( len x)) by FINSEQ_1:def 3

      .= ( dom y) by A3, FINSEQ_1:def 3;

      now

        let i be Nat;

        assume

         A5: i in ( dom x);

        then

         A6: (x . i) in ( rng x) by FUNCT_1:def 3;

        

         A7: (y . i) in ( rng y) by A4, A5, FUNCT_1:def 3;

        

        thus (x . i) = z by A6, TARSKI:def 1

        .= (y . i) by A7, TARSKI:def 1;

      end;

      hence thesis by A4, FINSEQ_1: 13;

    end;

    definition

      let S be non void Signature;

      let A be MSAlgebra over S;

      mode Subset of A is Subset of ( Union the Sorts of A);

      mode FinSequence of A is FinSequence of ( Union the Sorts of A);

    end

    registration

      let S be non void Signature;

      let X be non empty-yielding ManySortedSet of S;

      cluster -> DTree-yielding for FinSequence of ( Free (S,X));

      coherence

      proof

        let p be FinSequence of ( Free (S,X));

        let x be object;

        assume x in ( rng p);

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:7

    

     Th7: for S be non void Signature holds for X be non empty-yielding ManySortedSet of the carrier of S holds for t be Element of ( Free (S,X)) holds (ex s be SortSymbol of S, v be set st t = ( root-tree [v, s]) & v in (X . s)) or ex o be OperSymbol of S, p be FinSequence of ( Free (S,X)) st t = ( [o, the carrier of S] -tree p) & ( len p) = ( len ( the_arity_of o)) & p is DTree-yielding & p is ArgumentSeq of ( Sym (o,(X (\/) (the carrier of S --> { 0 }))))

    proof

      let S be non void Signature;

      let X be non empty-yielding ManySortedSet of the carrier of S;

      let t be Element of ( Free (S,X));

      set V = (X (\/) (the carrier of S --> { 0 }));

      reconsider t9 = t as Term of S, V by MSAFREE3: 8;

      defpred P[ set] means $1 is Element of ( Free (S,X)) implies (ex s be SortSymbol of S, v be set st $1 = ( root-tree [v, s]) & v in (X . s)) or ex o be OperSymbol of S, p be FinSequence of ( Free (S,X)) st $1 = ( [o, the carrier of S] -tree p) & ( len p) = ( len ( the_arity_of o)) & p is DTree-yielding & p is ArgumentSeq of ( Sym (o,V));

      

       A1: for s be SortSymbol of S, v be Element of (V . s) holds P[( root-tree [v, s])]

      proof

        let s be SortSymbol of S;

        let v be Element of (V . s);

        set t = ( root-tree [v, s]);

        assume

         A2: t is Element of ( Free (S,X));

         {} in ( dom t) by TREES_1: 22;

        then (t . {} ) in ( rng t) by FUNCT_1: 3;

        then [v, s] in ( rng t) by TREES_4: 3;

        then v in (X . s) by A2, MSAFREE3: 35;

        hence thesis;

      end;

      

       A3: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,V)) st for t be Term of S, V st t in ( rng p) holds P[t] holds P[( [o, the carrier of S] -tree p)]

      proof

        let o be OperSymbol of S;

        let p be ArgumentSeq of ( Sym (o,V)) such that for t be Term of S, V st t in ( rng p) holds P[t];

        set t = ( [o, the carrier of S] -tree p);

        assume t is Element of ( Free (S,X));

        then

        consider s be object such that

         A4: s in ( dom the Sorts of ( Free (S,X))) and

         A5: t in (the Sorts of ( Free (S,X)) . s) by CARD_5: 2;

        reconsider s as Element of S by A4;

        

         A6: the Sorts of ( Free (S,X)) = (S -Terms (X,V)) by MSAFREE3: 24;

        ( the_sort_of (( Sym (o,V)) -tree p)) = ( the_result_sort_of o) by MSATERM: 20;

        then s = ( the_result_sort_of o) by A5, A6, MSAFREE3: 17;

        then ( rng p) c= ( Union (S -Terms (X,V))) by A5, A6, MSAFREE3: 19;

        then

         A7: p is FinSequence of ( Free (S,X)) by A6, FINSEQ_1:def 4;

        ( len ( the_arity_of o)) = ( len p) by MSATERM: 22;

        hence thesis by A7;

      end;

      for t be Term of S, V holds P[t] from MSATERM:sch 1( A1, A3);

      then P[t9];

      hence thesis;

    end;

    definition

      let A be set;

      :: ABCMIZ_1:def1

      func varcl A -> set means

      : Def1: A c= it & (for x, y st [x, y] in it holds x c= it ) & for B be set st A c= B & for x, y st [x, y] in B holds x c= B holds it c= B;

      uniqueness

      proof

        let B1,B2 be set;

        assume

         A1: not thesis;

        then

         A2: B1 c= B2;

        B2 c= B1 by A1;

        hence thesis by A1, A2, XBOOLE_0:def 10;

      end;

      existence

      proof

        set F = { C where C be Subset of ( Rank ( the_rank_of A)) : A c= C & for x, y st [x, y] in C holds x c= C };

        take D = ( meet F);

        

         A3: A c= ( Rank ( the_rank_of A)) by CLASSES1:def 9;

         A4:

        now

          let x, y;

          assume

           A5: [x, y] in ( Rank ( the_rank_of A));

          

           A6: {x} in { {x, y}, {x}} by TARSKI:def 2;

          

           A7: { {x, y}, {x}} c= ( Rank ( the_rank_of A)) by A5, ORDINAL1:def 2;

          

           A8: x in {x} by TARSKI:def 1;

           {x} c= ( Rank ( the_rank_of A)) by A6, A7, ORDINAL1:def 2;

          hence x c= ( Rank ( the_rank_of A)) by A8, ORDINAL1:def 2;

        end;

        ( Rank ( the_rank_of A)) c= ( Rank ( the_rank_of A));

        then

         A9: ( Rank ( the_rank_of A)) in F by A3, A4;

        hereby

          let x be object;

          assume

           A10: x in A;

          now

            let C be set;

            assume C in F;

            then ex B be Subset of ( Rank ( the_rank_of A)) st C = B & A c= B & for x, y st [x, y] in B holds x c= B;

            hence x in C by A10;

          end;

          hence x in D by A9, SETFAM_1:def 1;

        end;

        hereby

          let x, y;

          assume

           A11: [x, y] in D;

          thus x c= D

          proof

            let z be object;

            assume

             A12: z in x;

            now

              let X;

              assume

               A13: X in F;

              then

               A14: [x, y] in X by A11, SETFAM_1:def 1;

              ex B be Subset of ( Rank ( the_rank_of A)) st X = B & A c= B & for x, y st [x, y] in B holds x c= B by A13;

              then x c= X by A14;

              hence z in X by A12;

            end;

            hence thesis by A9, SETFAM_1:def 1;

          end;

        end;

        let B be set;

        assume that

         A15: A c= B and

         A16: for x, y st [x, y] in B holds x c= B;

        set C = (B /\ ( Rank ( the_rank_of A)));

        reconsider C as Subset of ( Rank ( the_rank_of A)) by XBOOLE_1: 17;

        

         A17: A c= C by A3, A15, XBOOLE_1: 19;

        now

          let x, y;

          assume

           A18: [x, y] in C;

          then [x, y] in B by XBOOLE_0:def 4;

          then

           A19: x c= B by A16;

          x c= ( Rank ( the_rank_of A)) by A4, A18;

          hence x c= C by A19, XBOOLE_1: 19;

        end;

        then C in F by A17;

        then

         A20: D c= C by SETFAM_1: 3;

        C c= B by XBOOLE_1: 17;

        hence thesis by A20;

      end;

      projectivity ;

    end

    theorem :: ABCMIZ_1:8

    

     Th8: ( varcl {} ) = {}

    proof

      

       A1: for x, y st [x, y] in {} holds x c= {} ;

      for B be set st {} c= B & for x, y st [x, y] in B holds x c= B holds {} c= B;

      hence thesis by A1, Def1;

    end;

    theorem :: ABCMIZ_1:9

    

     Th9: for A,B be set st A c= B holds ( varcl A) c= ( varcl B)

    proof

      let A,B be set such that

       A1: A c= B;

      B c= ( varcl B) by Def1;

      then

       A2: A c= ( varcl B) by A1;

      for x, y st [x, y] in ( varcl B) holds x c= ( varcl B) by Def1;

      hence thesis by A2, Def1;

    end;

    theorem :: ABCMIZ_1:10

    

     Th10: for A be set holds ( varcl ( union A)) = ( union the set of all ( varcl a) where a be Element of A)

    proof

      let A be set;

      set X = the set of all ( varcl a) where a be Element of A;

      

       A1: ( union A) c= ( union X)

      proof

        let x be object;

        assume x in ( union A);

        then

        consider Y such that

         A2: x in Y and

         A3: Y in A by TARSKI:def 4;

        reconsider Y as Element of A by A3;

        

         A4: Y c= ( varcl Y) by Def1;

        ( varcl Y) in X;

        hence thesis by A2, A4, TARSKI:def 4;

      end;

      now

        let x,y be set;

        assume [x, y] in ( union X);

        then

        consider Y be set such that

         A5: [x, y] in Y and

         A6: Y in X by TARSKI:def 4;

        ex a be Element of A st (Y = ( varcl a)) by A6;

        then

         A7: x c= Y by A5, Def1;

        Y c= ( union X) by A6, ZFMISC_1: 74;

        hence x c= ( union X) by A7;

      end;

      hence ( varcl ( union A)) c= ( union X) by A1, Def1;

      let x be object;

      assume x in ( union X);

      then

      consider Y be set such that

       A8: x in Y and

       A9: Y in X by TARSKI:def 4;

      consider a be Element of A such that

       A10: Y = ( varcl a) by A9;

      A is empty or not A is empty;

      then a in A or a is empty by SUBSET_1:def 1;

      then a c= ( union A) by ZFMISC_1: 74;

      then Y c= ( varcl ( union A)) by A10, Th9;

      hence thesis by A8;

    end;

    scheme :: ABCMIZ_1:sch1

    Sch14 { A() -> set , F( set) -> set , P[ set] } :

( varcl ( union { F(z) where z be Element of A() : P[z] })) = ( union { ( varcl F(z)) where z be Element of A() : P[z] });

      set Z = { F(z) where z be Element of A() : P[z] };

      set X = { ( varcl F(z)) where z be Element of A() : P[z] };

      

       A1: ( union Z) c= ( union X)

      proof

        let x be object;

        assume x in ( union Z);

        then

        consider Y such that

         A2: x in Y and

         A3: Y in Z by TARSKI:def 4;

        

         A4: ex z be Element of A() st (Y = F(z)) & P[z] by A3;

        

         A5: Y c= ( varcl Y) by Def1;

        ( varcl Y) in X by A4;

        hence thesis by A2, A5, TARSKI:def 4;

      end;

      now

        let x,y be set;

        assume [x, y] in ( union X);

        then

        consider Y be set such that

         A6: [x, y] in Y and

         A7: Y in X by TARSKI:def 4;

        ex z be Element of A() st (Y = ( varcl F(z))) & P[z] by A7;

        then

         A8: x c= Y by A6, Def1;

        Y c= ( union X) by A7, ZFMISC_1: 74;

        hence x c= ( union X) by A8;

      end;

      hence ( varcl ( union Z)) c= ( union X) by A1, Def1;

      let x be object;

      assume x in ( union X);

      then

      consider Y be set such that

       A9: x in Y and

       A10: Y in X by TARSKI:def 4;

      consider z be Element of A() such that

       A11: Y = ( varcl F(z)) and

       A12: P[z] by A10;

      F(z) in Z by A12;

      then Y c= ( varcl ( union Z)) by A11, Th9, ZFMISC_1: 74;

      hence thesis by A9;

    end;

    theorem :: ABCMIZ_1:11

    

     Th11: ( varcl (X \/ Y)) = (( varcl X) \/ ( varcl Y))

    proof

      set A = the set of all ( varcl a) where a be Element of {X, Y};

      (X \/ Y) = ( union {X, Y}) by ZFMISC_1: 75;

      then

       A1: ( varcl (X \/ Y)) = ( union A) by Th10;

      A = {( varcl X), ( varcl Y)}

      proof

        now

          let x be object;

          assume x in A;

          then

          consider a be Element of {X, Y} such that

           A2: x = ( varcl a);

          a = X or a = Y by TARSKI:def 2;

          hence x in {( varcl X), ( varcl Y)} by A2, TARSKI:def 2;

        end;

        let x be object;

        assume x in {( varcl X), ( varcl Y)};

        then x = ( varcl X) & X in {X, Y} or x = ( varcl Y) & Y in {X, Y} by TARSKI:def 2;

        hence thesis;

      end;

      hence thesis by A1, ZFMISC_1: 75;

    end;

    theorem :: ABCMIZ_1:12

    

     Th12: for A be non empty set st for a be Element of A holds ( varcl a) = a holds ( varcl ( meet A)) = ( meet A)

    proof

      let B be non empty set;

      set A = ( meet B);

      assume

       A1: for a be Element of B holds ( varcl a) = a;

      now

        thus A c= A;

        let x, y;

        assume

         A2: [x, y] in A;

        now

          let Y;

          assume

           A3: Y in B;

          then

           A4: [x, y] in Y by A2, SETFAM_1:def 1;

          Y = ( varcl Y) by A1, A3;

          hence x c= Y by A4, Def1;

        end;

        hence x c= A by SETFAM_1: 5;

      end;

      hence ( varcl A) c= A by Def1;

      thus thesis by Def1;

    end;

    theorem :: ABCMIZ_1:13

    

     Th13: ( varcl (( varcl X) /\ ( varcl Y))) = (( varcl X) /\ ( varcl Y))

    proof

      set A = (( varcl X) /\ ( varcl Y));

      now

        thus A c= A;

        let x, y;

        assume

         A1: [x, y] in A;

        then

         A2: [x, y] in ( varcl X) by XBOOLE_0:def 4;

        

         A3: [x, y] in ( varcl Y) by A1, XBOOLE_0:def 4;

        

         A4: x c= ( varcl X) by A2, Def1;

        x c= ( varcl Y) by A3, Def1;

        hence x c= A by A4, XBOOLE_1: 19;

      end;

      hence ( varcl (( varcl X) /\ ( varcl Y))) c= (( varcl X) /\ ( varcl Y)) by Def1;

      thus thesis by Def1;

    end;

    registration

      let A be empty set;

      cluster ( varcl A) -> empty;

      coherence by Th8;

    end

    deffunc F( set, set) = { [( varcl A), j] where A be Subset of $2, j be Element of NAT : A is finite };

    definition

      :: ABCMIZ_1:def2

      func Vars -> set means

      : Def2: ex V be ManySortedSet of NAT st it = ( Union V) & (V . 0 ) = the set of all [ {} , i] where i be Element of NAT & for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite };

      existence

      proof

        consider f be Function such that

         A1: ( dom f) = NAT and

         A2: (f . 0 ) = the set of all [ {} , i] where i be Element of NAT and

         A3: for n be Nat holds (f . (n + 1)) = F(n,.) from NAT_1:sch 11;

        reconsider f as ManySortedSet of NAT by A1, PARTFUN1:def 2, RELAT_1:def 18;

        take ( Union f), V = f;

        thus ( Union f) = ( Union V);

        thus (V . 0 ) = the set of all [ {} , i] where i be Element of NAT by A2;

        let n be Nat;

        thus thesis by A3;

      end;

      uniqueness

      proof

        let A1,A2 be set;

        given V1 be ManySortedSet of NAT such that

         A4: A1 = ( Union V1) and

         A5: (V1 . 0 ) = the set of all [ {} , i] where i be Element of NAT and

         A6: for n be Nat holds (V1 . (n + 1)) = F(n,.);

        given V2 be ManySortedSet of NAT such that

         A7: A2 = ( Union V2) and

         A8: (V2 . 0 ) = the set of all [ {} , i] where i be Element of NAT and

         A9: for n be Nat holds (V2 . (n + 1)) = F(n,.);

        

         A10: ( dom V1) = NAT by PARTFUN1:def 2;

        

         A11: ( dom V2) = NAT by PARTFUN1:def 2;

        V1 = V2 from NAT_1:sch 15( A10, A5, A6, A11, A8, A9);

        hence thesis by A4, A7;

      end;

    end

    theorem :: ABCMIZ_1:14

    

     Th14: for V be ManySortedSet of NAT st (V . 0 ) = the set of all [ {} , i] where i be Element of NAT & for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite } holds for i,j be Element of NAT st i <= j holds (V . i) c= (V . j)

    proof

      let V be ManySortedSet of NAT such that

       A1: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and

       A2: for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite };

      defpred Q[ Nat] means (V . 0 ) c= (V . $1);

       A3:

      now

        let j;

        assume Q[j];

        

         A4: (V . (j + 1)) = { [( varcl A), k] where A be Subset of (V . j), k be Element of NAT : A is finite } by A2;

        thus Q[(j + 1)]

        proof

          let x be object;

          assume x in (V . 0 );

          then

           A5: ex i be Element of NAT st x = [ {} , i] by A1;

           {} c= (V . j);

          hence thesis by A4, A5, Th8;

        end;

      end;

      defpred P[ Nat] means for i st i <= $1 holds (V . i) c= (V . $1);

      

       A6: P[ 0 ] by NAT_1: 3;

       A7:

      now

        let j be Nat;

        assume

         A8: P[j];

        

         A9: (V . j) c= (V . (j + 1))

        proof

          per cases by NAT_1: 6;

            suppose j = 0 ;

            hence thesis by A3;

          end;

            suppose ex k be Nat st j = (k + 1);

            then

            consider k be Nat such that

             A10: j = (k + 1);

            reconsider k as Element of NAT by ORDINAL1:def 12;

            

             A11: (V . j) = { [( varcl A), n] where A be Subset of (V . k), n be Element of NAT : A is finite } by A2, A10;

            

             A12: (V . (j + 1)) = { [( varcl A), n] where A be Subset of (V . j), n be Element of NAT : A is finite } by A2;

            

             A13: (V . k) c= (V . j) by A8, A10, NAT_1: 11;

            let x be object;

            assume x in (V . j);

            then

            consider A be Subset of (V . k), n be Element of NAT such that

             A14: x = [( varcl A), n] and

             A15: A is finite by A11;

            A c= (V . j) by A13;

            hence thesis by A12, A14, A15;

          end;

        end;

        thus P[(j + 1)]

        proof

          let i;

          assume i <= (j + 1);

          then i = (j + 1) or (V . i) c= (V . j) by A8, NAT_1: 8;

          hence thesis by A9;

        end;

      end;

      for j be Nat holds P[j] from NAT_1:sch 2( A6, A7);

      hence thesis;

    end;

    theorem :: ABCMIZ_1:15

    

     Th15: for V be ManySortedSet of NAT st (V . 0 ) = the set of all [ {} , i] where i be Element of NAT & for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite } holds for A be finite Subset of Vars holds ex i be Element of NAT st A c= (V . i)

    proof

      let V be ManySortedSet of NAT such that

       A1: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and

       A2: for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite };

      let A be finite Subset of Vars ;

      

       A3: Vars = ( Union V) by A1, A2, Def2;

      defpred P[ object, object] means $1 in (V . $2);

       A4:

      now

        let x be object;

        assume x in A;

        then

        consider Y such that

         A5: x in Y and

         A6: Y in ( rng V) by A3, TARSKI:def 4;

        consider i be object such that

         A7: i in ( dom V) and

         A8: Y = (V . i) by A6, FUNCT_1:def 3;

        reconsider i as object;

        take i;

        thus i in NAT & P[x, i] by A5, A7, A8;

      end;

      consider f be Function such that

       A9: ( dom f) = A & ( rng f) c= NAT and

       A10: for x be object st x in A holds P[x, (f . x)] from FUNCT_1:sch 6( A4);

      per cases ;

        suppose A = {} ;

        then A c= (V . 0 );

        hence thesis;

      end;

        suppose A <> {} ;

        then

        reconsider B = ( rng f) as finite non empty Subset of NAT by A9, FINSET_1: 8, RELAT_1: 42;

        reconsider i = ( max B) as Element of NAT by ORDINAL1:def 12;

        take i;

        let x be object;

        assume

         A11: x in A;

        then

         A12: (f . x) in B by A9, FUNCT_1:def 3;

        then

        reconsider j = (f . x) as Element of NAT ;

        j <= i by A12, XXREAL_2:def 8;

        then

         A13: (V . j) c= (V . i) by A1, A2, Th14;

        x in (V . j) by A10, A11;

        hence thesis by A13;

      end;

    end;

    theorem :: ABCMIZ_1:16

    

     Th16: the set of all [ {} , i] where i be Element of NAT c= Vars

    proof

      consider V be ManySortedSet of NAT such that

       A1: Vars = ( Union V) and

       A2: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite } by Def2;

      ( dom V) = NAT by PARTFUN1:def 2;

      then (V . 0 ) in ( rng V) by FUNCT_1:def 3;

      hence thesis by A1, A2, ZFMISC_1: 74;

    end;

    theorem :: ABCMIZ_1:17

    

     Th17: for A be finite Subset of Vars , i be Nat holds [( varcl A), i] in Vars

    proof

      let A be finite Subset of Vars , i be Nat;

      consider V be ManySortedSet of NAT such that

       A1: Vars = ( Union V) and

       A2: (V . 0 ) = the set of all [ {} , k] where k be Element of NAT and

       A3: for n be Nat holds (V . (n + 1)) = { [( varcl b), j] where b be Subset of (V . n), j be Element of NAT : b is finite } by Def2;

      consider j be Element of NAT such that

       A4: A c= (V . j) by A2, A3, Th15;

      

       A5: (V . (j + 1)) = { [( varcl B), k] where B be Subset of (V . j), k be Element of NAT : B is finite } by A3;

      i in NAT by ORDINAL1:def 12;

      then

       A6: [( varcl A), i] in (V . (j + 1)) by A4, A5;

      ( dom V) = NAT by PARTFUN1:def 2;

      hence thesis by A1, A6, CARD_5: 2;

    end;

    theorem :: ABCMIZ_1:18

    

     Th18: Vars = { [( varcl A), j] where A be Subset of Vars , j be Element of NAT : A is finite }

    proof

      consider V be ManySortedSet of NAT such that

       A1: Vars = ( Union V) and

       A2: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and

       A3: for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite } by Def2;

      set X = { [( varcl A), j] where A be Subset of Vars , j be Element of NAT : A is finite };

      

       A4: ( dom V) = NAT by PARTFUN1:def 2;

      defpred P[ Nat] means (V . $1) c= X;

      

       A5: P[ 0 ]

      proof

        let x be object;

        assume

         A6: x in (V . 0 );

        

         A7: {} c= Vars ;

        ex i be Element of NAT st x = [ {} , i] by A2, A6;

        hence thesis by A7, Th8;

      end;

       A8:

      now

        let i be Nat;

        assume P[i];

        

         A9: (V . (i + 1)) = { [( varcl A), j] where A be Subset of (V . i), j be Element of NAT : A is finite } by A3;

        thus P[(i + 1)]

        proof

          let x be object;

          assume x in (V . (i + 1));

          then

          consider A be Subset of (V . i), j be Element of NAT such that

           A10: x = [( varcl A), j] and

           A11: A is finite by A9;

          reconsider ii = i as Element of NAT by ORDINAL1:def 12;

          (V . ii) in ( rng V) by A4, FUNCT_1:def 3;

          then (V . i) c= Vars by A1, ZFMISC_1: 74;

          then A c= Vars ;

          hence thesis by A10, A11;

        end;

      end;

      

       A12: for i be Nat holds P[i] from NAT_1:sch 2( A5, A8);

      now

        let x;

        assume x in ( rng V);

        then ex y be object st y in NAT & x = (V . y) by A4, FUNCT_1:def 3;

        hence x c= X by A12;

      end;

      hence Vars c= X by A1, ZFMISC_1: 76;

      let x be object;

      assume x in X;

      then ex A be Subset of Vars , j be Element of NAT st x = [( varcl A), j] & A is finite;

      hence thesis by Th17;

    end;

    theorem :: ABCMIZ_1:19

    

     Th19: ( varcl Vars ) = Vars

    proof

      consider V be ManySortedSet of NAT such that

       A1: Vars = ( Union V) and

       A2: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and

       A3: for n be Nat holds (V . (n + 1)) = { [( varcl A), j] where A be Subset of (V . n), j be Element of NAT : A is finite } by Def2;

      defpred P[ Nat] means ( varcl (V . $1)) = (V . $1);

      now

        let x, y;

        assume [x, y] in (V . 0 );

        then ex i be Element of NAT st [x, y] = [ {} , i] by A2;

        then x = {} by XTUPLE_0: 1;

        hence x c= (V . 0 );

      end;

      then

       A4: ( varcl (V . 0 )) c= (V . 0 ) by Def1;

      (V . 0 ) c= ( varcl (V . 0 )) by Def1;

      then

       A5: P[ 0 ] by A4, XBOOLE_0:def 10;

       A6:

      now

        let i;

        assume

         A7: P[i];

        reconsider i9 = i as Element of NAT by ORDINAL1:def 12;

        

         A8: (V . (i + 1)) = { [( varcl A), j] where A be Subset of (V . i), j be Element of NAT : A is finite } by A3;

        now

          let x, y;

          assume [x, y] in (V . (i + 1));

          then

          consider A be Subset of (V . i), j be Element of NAT such that

           A9: [x, y] = [( varcl A), j] and A is finite by A8;

          x = ( varcl A) by A9, XTUPLE_0: 1;

          then

           A10: x c= (V . i) by A7, Th9;

          (V . i9) c= (V . (i9 + 1)) by A2, A3, Th14, NAT_1: 11;

          hence x c= (V . (i + 1)) by A10;

        end;

        then

         A11: ( varcl (V . (i + 1))) c= (V . (i + 1)) by Def1;

        (V . (i + 1)) c= ( varcl (V . (i + 1))) by Def1;

        hence P[(i + 1)] by A11, XBOOLE_0:def 10;

      end;

      

       A12: P[i] from NAT_1:sch 2( A5, A6);

      

       A13: ( varcl Vars ) = ( union the set of all ( varcl a) where a be Element of ( rng V)) by A1, Th10;

      now

        let x be object;

        assume x in ( varcl Vars );

        then

        consider Y such that

         A14: x in Y and

         A15: Y in the set of all ( varcl a) where a be Element of ( rng V) by A13, TARSKI:def 4;

        consider a be Element of ( rng V) such that

         A16: Y = ( varcl a) by A15;

        consider i be object such that

         A17: i in ( dom V) and

         A18: a = (V . i) by FUNCT_1:def 3;

        reconsider i as Element of NAT by A17;

        ( varcl (V . i)) = a by A12, A18;

        hence x in Vars by A1, A14, A16, A17, A18, CARD_5: 2;

      end;

      thus thesis by Def1;

    end;

    theorem :: ABCMIZ_1:20

    

     Th20: for X st ( the_rank_of X) is finite holds X is finite

    proof

      let X;

      assume ( the_rank_of X) is finite;

      then ( the_rank_of X) in NAT by CARD_1: 61;

      then

       A1: ( Rank ( the_rank_of X)) is finite by CARD_2: 67;

      X c= ( Rank ( the_rank_of X)) by CLASSES1:def 9;

      hence thesis by A1;

    end;

    theorem :: ABCMIZ_1:21

    

     Th21: ( the_rank_of ( varcl X)) = ( the_rank_of X)

    proof

      

       A1: X c= ( Rank ( the_rank_of X)) by CLASSES1:def 9;

      set a = ( the_rank_of X);

      

       A2: a c= ( succ a) by ORDINAL3: 1;

      ( succ a) c= ( succ ( succ a)) by ORDINAL3: 1;

      then a c= ( succ ( succ a)) by A2;

      then

       A3: ( Rank a) c= ( Rank ( succ ( succ a))) by CLASSES1: 37;

      now

        let x, y;

        assume [x, y] in ( Rank ( the_rank_of X));

        then x in ( Rank a) by A3, CLASSES1: 45;

        hence x c= ( Rank ( the_rank_of X)) by ORDINAL1:def 2;

      end;

      then ( varcl X) c= ( Rank a) by A1, Def1;

      hence ( the_rank_of ( varcl X)) c= a by CLASSES1: 65;

      X c= ( varcl X) by Def1;

      hence thesis by CLASSES1: 67;

    end;

    theorem :: ABCMIZ_1:22

    

     Th22: for X be finite Subset of ( Rank omega ) holds X in ( Rank omega )

    proof

      let X be finite Subset of ( Rank omega );

      deffunc F( object) = ( the_rank_of $1);

      consider f be Function such that

       A1: ( dom f) = X and

       A2: for x be object st x in X holds (f . x) = F(x) from FUNCT_1:sch 3;

      

       A3: ( rng f) c= NAT

      proof

        let y be object;

        assume y in ( rng f);

        then

        consider x be object such that

         A4: x in X and

         A5: y = (f . x) by A1, FUNCT_1:def 3;

        ( the_rank_of x) in omega by A4, CLASSES1: 66;

        hence thesis by A2, A4, A5;

      end;

      per cases ;

        suppose X = {} ;

        then ( the_rank_of X) = 0 by CLASSES1: 71;

        hence thesis by CLASSES1: 66;

      end;

        suppose X <> {} ;

        then

        reconsider Y = ( rng f) as finite non empty Subset of NAT by A1, A3, FINSET_1: 8, RELAT_1: 42;

        reconsider mY = ( max Y) as Element of NAT by ORDINAL1:def 12;

        set i = (1 + mY);

        X c= ( Rank i)

        proof

          let x be object;

          reconsider xx = x as set by TARSKI: 1;

          assume

           A6: x in X;

          then

           A7: (f . x) in Y by A1, FUNCT_1:def 3;

          

           A8: (f . x) = ( the_rank_of xx) by A2, A6;

          reconsider j = (f . x) as Element of NAT by A7;

          j <= mY by A7, XXREAL_2:def 8;

          then ( Segm j) c= ( Segm mY) by NAT_1: 39;

          then

           A9: j in ( succ mY) by ORDINAL1: 22;

          ( succ ( Segm mY)) = ( Segm i) by NAT_1: 38;

          hence thesis by A8, A9, CLASSES1: 66;

        end;

        then ( the_rank_of X) c= i by CLASSES1: 65;

        then

         A10: ( the_rank_of X) in ( succ i) by ORDINAL1: 22;

        ( Segm (i + 1)) = ( succ ( Segm i)) by NAT_1: 38;

        hence thesis by A10, CLASSES1: 66;

      end;

    end;

    theorem :: ABCMIZ_1:23

    

     Th23: Vars c= ( Rank omega )

    proof

      consider V be ManySortedSet of NAT such that

       A1: Vars = ( Union V) and

       A2: (V . 0 ) = the set of all [ {} , i] where i be Element of NAT and

       A3: for n be Nat holds (V . (n + 1)) = { [( varcl a), j] where a be Subset of (V . n), j be Element of NAT : a is finite } by Def2;

      let x be object;

      assume x in Vars ;

      then

      consider i be object such that

       A4: i in ( dom V) and

       A5: x in (V . i) by A1, CARD_5: 2;

      reconsider i as Element of NAT by A4;

      defpred P[ Nat] means (V . $1) c= ( Rank omega );

      

       A6: P[ 0 ]

      proof

        let x be object;

        assume x in (V . 0 );

        then

        consider i be Element of NAT such that

         A7: x = [ {} , i] by A2;

        

         A8: ( Segm (i + 1)) = ( succ ( Segm i)) by NAT_1: 38;

        

         A9: {} c= i;

        

         A10: i in (i + 1) by A8, ORDINAL1: 6;

        

         A11: {} in (i + 1) by A8, A9, ORDINAL1: 6, ORDINAL1: 12;

        

         A12: ( the_rank_of {} ) = {} by CLASSES1: 73;

        

         A13: ( the_rank_of i) = i by CLASSES1: 73;

        

         A14: {} in ( Rank (i + 1)) by A11, A12, CLASSES1: 66;

        i in ( Rank (i + 1)) by A10, A13, CLASSES1: 66;

        then

         A15: x in ( Rank ( succ ( succ (i + 1)))) by A7, A14, CLASSES1: 45;

        ( succ ( succ (i + 1))) c= omega ;

        then ( Rank ( succ ( succ (i + 1)))) c= ( Rank omega ) by CLASSES1: 37;

        hence thesis by A15;

      end;

       A16:

      now

        let n be Nat such that

         A17: P[n];

        

         A18: (V . (n + 1)) = { [( varcl a), j] where a be Subset of (V . n), j be Element of NAT : a is finite } by A3;

        thus P[(n + 1)]

        proof

          let x be object;

          assume x in (V . (n + 1));

          then

          consider a be Subset of (V . n), j be Element of NAT such that

           A19: x = [( varcl a), j] and

           A20: a is finite by A18;

          a c= ( Rank omega ) by A17, XBOOLE_1: 1;

          then a in ( Rank omega ) by A20, Th22;

          then

          reconsider i = ( the_rank_of a) as Element of NAT by CLASSES1: 66;

          reconsider k = (j \/ i) as Element of NAT by ORDINAL3: 12;

          

           A21: ( the_rank_of ( varcl a)) = i by Th21;

          

           A22: ( the_rank_of j) = j by CLASSES1: 73;

          

           A23: k in ( succ k) by ORDINAL1: 6;

          then

           A24: i in ( succ k) by ORDINAL1: 12, XBOOLE_1: 7;

          

           A25: j in ( succ k) by A23, ORDINAL1: 12, XBOOLE_1: 7;

          

           A26: ( succ ( Segm k)) = ( Segm (k + 1)) by NAT_1: 38;

          then

           A27: ( varcl a) in ( Rank (k + 1)) by A21, A24, CLASSES1: 66;

          j in ( Rank (k + 1)) by A22, A25, A26, CLASSES1: 66;

          then

           A28: x in ( Rank ( succ ( succ (k + 1)))) by A19, A27, CLASSES1: 45;

          ( succ ( succ (k + 1))) c= omega ;

          then ( Rank ( succ ( succ (k + 1)))) c= ( Rank omega ) by CLASSES1: 37;

          hence thesis by A28;

        end;

      end;

      for n be Nat holds P[n] from NAT_1:sch 2( A6, A16);

      then (V . i) c= ( Rank omega );

      hence thesis by A5;

    end;

    theorem :: ABCMIZ_1:24

    

     Th24: for A be finite Subset of Vars holds ( varcl A) is finite Subset of Vars

    proof

      let A be finite Subset of Vars ;

      A c= ( Rank omega ) by Th23;

      then A in ( Rank omega ) by Th22;

      then ( the_rank_of A) in omega by CLASSES1: 66;

      then ( the_rank_of ( varcl A)) is finite by Th21;

      hence thesis by Th9, Th19, Th20;

    end;

    registration

      cluster Vars -> non empty;

      correctness

      proof

         [ {} , 0 ] in the set of all [ {} , i] where i be Element of NAT ;

        hence thesis by Th16;

      end;

    end

    definition

      mode variable is Element of Vars ;

    end

    registration

      let x be variable;

      cluster (x `1 ) -> finite;

      coherence

      proof

        x in Vars ;

        then

        consider A be Subset of Vars , j be Element of NAT such that

         A1: x = [( varcl A), j] and

         A2: A is finite by Th18;

        (x `1 ) = ( varcl A) by A1;

        hence thesis by A2, Th24;

      end;

    end

    notation

      let x be variable;

      synonym vars x for x `1 ;

    end

    definition

      let x be variable;

      :: original: vars

      redefine

      func vars x -> Subset of Vars ;

      coherence

      proof

        x in Vars ;

        then

        consider A be Subset of Vars , j be Element of NAT such that

         A1: x = [( varcl A), j] and

         A2: A is finite by Th18;

        (x `1 ) = ( varcl A) by A1;

        hence thesis by A2, Th24;

      end;

    end

    theorem :: ABCMIZ_1:25

     [ {} , i] in Vars

    proof

      i in NAT by ORDINAL1:def 12;

      then [ {} , i] in the set of all [ {} , j];

      hence thesis by Th16;

    end;

    theorem :: ABCMIZ_1:26

    

     Th26: for A be Subset of Vars holds ( varcl { [( varcl A), j]}) = (( varcl A) \/ { [( varcl A), j]})

    proof

      let A be Subset of Vars ;

      

       A1: { [( varcl A), j]} c= (( varcl A) \/ { [( varcl A), j]}) by XBOOLE_1: 7;

      

       A2: ( varcl A) c= (( varcl A) \/ { [( varcl A), j]}) by XBOOLE_1: 7;

      now

        let x, y;

        assume [x, y] in (( varcl A) \/ { [( varcl A), j]});

        then [x, y] in ( varcl A) or [x, y] in { [( varcl A), j]} by XBOOLE_0:def 3;

        then [x, y] in ( varcl A) or [x, y] = [( varcl A), j] by TARSKI:def 1;

        then x c= ( varcl A) or x = ( varcl A) by Def1, XTUPLE_0: 1;

        hence x c= (( varcl A) \/ { [( varcl A), j]}) by A2;

      end;

      hence ( varcl { [( varcl A), j]}) c= (( varcl A) \/ { [( varcl A), j]}) by A1, Def1;

      

       A3: { [( varcl A), j]} c= ( varcl { [( varcl A), j]}) by Def1;

       [( varcl A), j] in { [( varcl A), j]} by TARSKI:def 1;

      then ( varcl A) c= ( varcl { [( varcl A), j]}) by A3, Def1;

      hence thesis by A3, XBOOLE_1: 8;

    end;

    theorem :: ABCMIZ_1:27

    

     Th27: for x be variable holds ( varcl {x}) = (( vars x) \/ {x})

    proof

      let x be variable;

      x in Vars ;

      then

      consider A be Subset of Vars , j such that

       A1: x = [( varcl A), j] and A is finite by Th18;

      ( varcl {x}) = (( varcl A) \/ {x}) by A1, Th26;

      hence thesis by A1;

    end;

    theorem :: ABCMIZ_1:28

    for x be variable holds [(( vars x) \/ {x}), i] in Vars

    proof

      let x be variable;

      x in Vars ;

      then

      consider A be Subset of Vars , j such that

       A1: x = [( varcl A), j] and A is finite by Th18;

      

       A2: ( varcl {x}) = (( varcl A) \/ {x}) by A1, Th26;

      

       A3: ( vars x) = ( varcl A) by A1;

      i in NAT by ORDINAL1:def 12;

      hence thesis by A2, A3, Th18;

    end;

    begin

    notation

      let R be Relation, A be set;

      synonym R dom A for R | A;

    end

    definition

      :: ABCMIZ_1:def3

      func QuasiLoci -> FinSequenceSet of Vars means

      : Def3: for p be FinSequence of Vars holds p in it iff p is one-to-one & for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p dom i));

      existence

      proof

        defpred P[ object] means ex p be Function st p = $1 & p is one-to-one & for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p | i));

        consider L be set such that

         A1: for x be object holds x in L iff x in ( Vars * ) & P[x] from XBOOLE_0:sch 1;

        L is FinSequenceSet of Vars

        proof

          let x be object;

          assume x in L;

          then x in ( Vars * ) by A1;

          hence thesis by FINSEQ_1:def 11;

        end;

        then

        reconsider L as FinSequenceSet of Vars ;

        take L;

        let p be FinSequence of Vars ;

        p in L iff p in ( Vars * ) & ex q be Function st q = p & q is one-to-one & for i st i in ( dom q) holds ((q . i) `1 ) c= ( rng (q | i)) by A1;

        hence thesis by FINSEQ_1:def 11;

      end;

      correctness

      proof

        let L1,L2 be FinSequenceSet of Vars such that

         A2: for p be FinSequence of Vars holds p in L1 iff p is one-to-one & for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p | i qua set)) and

         A3: for p be FinSequence of Vars holds p in L2 iff p is one-to-one & for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p | i qua set));

        now

          let x be object;

          assume

           A4: x in L1;

          then

          reconsider p = x as FinSequence of Vars by FINSEQ_2:def 3;

          

           A5: p is one-to-one by A2, A4;

          for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p | i qua set)) by A2, A4;

          hence x in L2 by A3, A5;

        end;

        let x be object;

        assume

         A6: x in L2;

        then

        reconsider p = x as FinSequence of Vars by FINSEQ_2:def 3;

        

         A7: p is one-to-one by A3, A6;

        for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p | i qua set)) by A3, A6;

        hence thesis by A2, A7;

      end;

    end

    theorem :: ABCMIZ_1:29

    

     Th29: ( <*> Vars ) in QuasiLoci

    proof

      reconsider p = ( <*> Vars ) as FinSequence of Vars ;

      p is one-to-one & for i st i in ( dom p) holds ((p . i) `1 ) c= ( rng (p dom i));

      hence thesis by Def3;

    end;

    registration

      cluster QuasiLoci -> non empty;

      correctness by Th29;

    end

    definition

      mode quasi-loci is Element of QuasiLoci ;

    end

    registration

      cluster -> one-to-one for quasi-loci;

      coherence by Def3;

    end

    theorem :: ABCMIZ_1:30

    

     Th30: for l be one-to-one FinSequence of Vars holds l is quasi-loci iff for i be Nat, x be variable st i in ( dom l) & x = (l . i) holds for y be variable st y in ( vars x) holds ex j be Nat st j in ( dom l) & j < i & y = (l . j)

    proof

      let l be one-to-one FinSequence of Vars ;

      now

        assume

         A1: l is quasi-loci;

        let i be Nat, x be variable such that

         A2: i in ( dom l) and

         A3: x = (l . i);

        let y be variable such that

         A4: y in ( vars x);

        ( vars x) c= ( rng (l | i qua set)) by A1, A2, A3, Def3;

        then

        consider z be object such that

         A5: z in ( dom (l dom i)) and

         A6: y = ((l dom i) . z) by A4, FUNCT_1:def 3;

        

         A7: ( dom (l dom i)) = (( dom l) /\ i) by RELAT_1: 61;

        reconsider z as Element of NAT by A5, A7;

        reconsider j = z as Nat;

        take j;

        

         A8: ( card ( Segm z)) = z;

        ( card ( Segm i)) = i;

        hence j in ( dom l) & j < i & y = (l . j) by A5, A6, A7, A8, FUNCT_1: 47, NAT_1: 41, XBOOLE_0:def 4;

      end;

      assume

       A9: for i be Nat, x be variable st i in ( dom l) & x = (l . i) holds for y be variable st y in ( vars x) holds ex j be Nat st j in ( dom l) & j < i & y = (l . j);

      now

        let i;

        assume

         A10: i in ( dom l);

        then (l . i) in ( rng l) by FUNCT_1:def 3;

        then

        reconsider x = (l . i) as variable;

        thus ((l . i) `1 ) c= ( rng (l dom i))

        proof

          let y be object;

          assume y in ((l . i) `1 );

          then

           A11: y in ( vars x);

          then

          reconsider y as variable;

          consider j be Nat such that

           A12: j in ( dom l) and

           A13: j < i and

           A14: y = (l . j) by A9, A10, A11;

          

           A15: ( card ( Segm i)) = i;

          ( card ( Segm j)) = j;

          then j in i by A13, A15, NAT_1: 41;

          hence thesis by A12, A14, FUNCT_1: 50;

        end;

      end;

      hence thesis by Def3;

    end;

    theorem :: ABCMIZ_1:31

    

     Th31: for l be quasi-loci, x be variable holds (l ^ <*x*>) is quasi-loci iff not x in ( rng l) & ( vars x) c= ( rng l)

    proof

      let l be quasi-loci, x be variable;

      

       A1: ((l ^ <*x*>) . (1 + ( len l))) = x by FINSEQ_1: 42;

      

       A2: ( dom (l ^ <*x*>)) = ( Seg (( len l) + ( len <*x*>))) by FINSEQ_1:def 7

      .= ( Seg (( len l) + 1)) by FINSEQ_1: 39;

      1 <= (1 + ( len l)) by NAT_1: 11;

      then

       A3: (1 + ( len l)) in ( dom (l ^ <*x*>)) by A2;

      

       A4: ( dom l) = ( Seg ( len l)) by FINSEQ_1:def 3;

      now

        assume

         A5: (l ^ <*x*>) is quasi-loci;

        thus not x in ( rng l)

        proof

          assume x in ( rng l);

          then

          consider a be object such that

           A6: a in ( dom l) and

           A7: x = (l . a) by FUNCT_1:def 3;

          reconsider a as Element of NAT by A6;

          

           A8: ((l ^ <*x*>) . a) = x by A6, A7, FINSEQ_1:def 7;

          

           A9: a <= ( len l) by A4, A6, FINSEQ_1: 1;

          

           A10: ( len l) < (1 + ( len l)) by NAT_1: 13;

          ( dom l) c= ( dom (l ^ <*x*>)) by FINSEQ_1: 26;

          hence thesis by A1, A3, A5, A6, A8, A9, A10, FUNCT_1:def 4;

        end;

        thus ( vars x) c= ( rng l)

        proof

          let a be object;

          assume

           A11: a in ( vars x);

          then

          reconsider a as variable;

          consider j be Nat such that

           A12: j in ( dom (l ^ <*x*>)) and

           A13: j < (1 + ( len l)) and

           A14: a = ((l ^ <*x*>) . j) by A1, A3, A5, A11, Th30;

          reconsider j as Element of NAT by ORDINAL1:def 12;

          

           A15: j <= ( len l) by A13, NAT_1: 13;

          j >= 1 by A2, A12, FINSEQ_1: 1;

          then

           A16: j in ( dom l) by A4, A15;

          then a = (l . j) by A14, FINSEQ_1:def 7;

          hence thesis by A16, FUNCT_1:def 3;

        end;

      end;

      assume that

       A17: not x in ( rng l) and

       A18: ( vars x) c= ( rng l);

      

       A19: (l ^ <*x*>) is one-to-one

      proof

        let a,b be object;

        assume that

         A20: a in ( dom (l ^ <*x*>)) and

         A21: b in ( dom (l ^ <*x*>)) and

         A22: ((l ^ <*x*>) . a) = ((l ^ <*x*>) . b);

        reconsider a, b as Element of NAT by A20, A21;

        

         A23: a >= 1 by A2, A20, FINSEQ_1: 1;

        

         A24: b >= 1 by A2, A21, FINSEQ_1: 1;

        

         A25: a <= (1 + ( len l)) by A2, A20, FINSEQ_1: 1;

        

         A26: b <= (1 + ( len l)) by A2, A21, FINSEQ_1: 1;

        

         A27: a <= ( len l) or a = (1 + ( len l)) by A25, NAT_1: 8;

        

         A28: b <= ( len l) or b = (1 + ( len l)) by A26, NAT_1: 8;

        

         A29: a in ( dom l) or a = (1 + ( len l)) by A4, A23, A27;

        

         A30: b in ( dom l) or b = (1 + ( len l)) by A4, A24, A28;

        

         A31: a in ( dom l) & (l . a) = ((l ^ <*x*>) . a) & (l . a) in ( rng l) or a = (1 + ( len l)) by A29, FINSEQ_1:def 7, FUNCT_1:def 3;

        b in ( dom l) & (l . b) = ((l ^ <*x*>) . b) & (l . b) in ( rng l) or b = (1 + ( len l)) by A30, FINSEQ_1:def 7, FUNCT_1:def 3;

        hence thesis by A17, A22, A31, FINSEQ_1: 42, FUNCT_1:def 4;

      end;

      now

        let i be Nat, z be variable;

        assume that

         A32: i in ( dom (l ^ <*x*>)) and

         A33: z = ((l ^ <*x*>) . i);

        

         A34: i >= 1 by A2, A32, FINSEQ_1: 1;

        i <= (1 + ( len l)) by A2, A32, FINSEQ_1: 1;

        then i <= ( len l) or i = (1 + ( len l)) by NAT_1: 8;

        then

         A35: i in ( dom l) or i = (1 + ( len l)) & z = x by A4, A33, A34, FINSEQ_1: 42;

        let y be variable;

        assume

         A36: y in ( vars z);

        thus ex j be Nat st j in ( dom (l ^ <*x*>)) & j < i & y = ((l ^ <*x*>) . j)

        proof

          per cases by A33, A35, FINSEQ_1:def 7;

            suppose

             A37: i = (1 + ( len l)) & z = x;

            then

            consider k be object such that

             A38: k in ( dom l) and

             A39: y = (l . k) by A18, A36, FUNCT_1:def 3;

            reconsider k as Element of NAT by A38;

            take k;

            

             A40: ( dom l) c= ( dom (l ^ <*x*>)) by FINSEQ_1: 26;

            k <= ( len l) by A4, A38, FINSEQ_1: 1;

            hence thesis by A37, A38, A39, A40, FINSEQ_1:def 7, NAT_1: 13;

          end;

            suppose i in ( dom l) & z = (l . i);

            then

            consider j be Nat such that

             A41: j in ( dom l) and

             A42: j < i and

             A43: y = (l . j) by A36, Th30;

            take j;

            ( dom l) c= ( dom (l ^ <*x*>)) by FINSEQ_1: 26;

            hence thesis by A41, A42, A43, FINSEQ_1:def 7;

          end;

        end;

      end;

      hence thesis by A19, Th30;

    end;

    theorem :: ABCMIZ_1:32

    

     Th32: for p,q be FinSequence st (p ^ q) is quasi-loci holds p is quasi-loci & q is FinSequence of Vars

    proof

      let p,q be FinSequence;

      assume

       A1: (p ^ q) is quasi-loci;

      then

       A2: p is one-to-one FinSequence of Vars by FINSEQ_1: 36, FINSEQ_3: 91;

      now

        let i be Nat, x be variable such that

         A3: i in ( dom p) and

         A4: x = (p . i);

        let y be variable such that

         A5: y in ( vars x);

        

         A6: ( dom p) c= ( dom (p ^ q)) by FINSEQ_1: 26;

        x = ((p ^ q) . i) by A3, A4, FINSEQ_1:def 7;

        then

        consider j be Nat such that

         A7: j in ( dom (p ^ q)) and

         A8: j < i and

         A9: y = ((p ^ q) . j) by A1, A3, A5, A6, Th30;

        take j;

        

         A10: ( dom p) = ( Seg ( len p)) by FINSEQ_1:def 3;

        ( dom (p ^ q)) = ( Seg ( len (p ^ q))) by FINSEQ_1:def 3;

        then

         A11: j >= 1 by A7, FINSEQ_1: 1;

        i <= ( len p) by A3, A10, FINSEQ_1: 1;

        then j < ( len p) by A8, XXREAL_0: 2;

        hence j in ( dom p) & j < i by A8, A10, A11;

        hence y = (p . j) by A9, FINSEQ_1:def 7;

      end;

      hence thesis by A1, A2, Th30, FINSEQ_1: 36;

    end;

    theorem :: ABCMIZ_1:33

    for l be quasi-loci holds ( varcl ( rng l)) = ( rng l)

    proof

      let l be quasi-loci;

      now

        let x, y;

        assume

         A1: [x, y] in ( rng l);

        then

        reconsider xy = [x, y] as variable;

        consider i be object such that

         A2: i in ( dom l) and

         A3: xy = (l . i) by A1, FUNCT_1:def 3;

        reconsider i as Nat by A2;

        

         A4: ( vars xy) = x;

        thus x c= ( rng l)

        proof

          let a be object;

          assume

           A5: a in x;

          then

          reconsider a as variable by A4;

          ex j be Nat st j in ( dom l) & j < i & a = (l . j) by A2, A3, A4, A5, Th30;

          hence thesis by FUNCT_1:def 3;

        end;

      end;

      hence ( varcl ( rng l)) c= ( rng l) by Def1;

      thus thesis by Def1;

    end;

    theorem :: ABCMIZ_1:34

    

     Th34: for x be variable holds <*x*> is quasi-loci iff ( vars x) = {}

    proof

      let x be variable;

      

       A1: <*x*> = (( <*> Vars ) ^ <*x*>) by FINSEQ_1: 34;

      

       A2: ( rng {} ) = {} ;

      ( vars x) c= {} implies ( vars x) = {} ;

      hence thesis by A1, A2, Th29, Th31;

    end;

    theorem :: ABCMIZ_1:35

    

     Th35: for x,y be variable holds <*x, y*> is quasi-loci iff ( vars x) = {} & x <> y & ( vars y) c= {x}

    proof

      let x,y be variable;

      

       A1: ( rng <*x*>) = {x} by FINSEQ_1: 38;

      

       A2: <*x*> is quasi-loci iff ( vars x) = {} by Th34;

      y in {x} iff y = x by TARSKI:def 1;

      hence thesis by A1, A2, Th31, Th32;

    end;

    theorem :: ABCMIZ_1:36

    for x,y,z be variable holds <*x, y, z*> is quasi-loci iff ( vars x) = {} & x <> y & ( vars y) c= {x} & x <> z & y <> z & ( vars z) c= {x, y}

    proof

      let x,y,z be variable;

      

       A1: ( rng <*x, y*>) = {x, y} by FINSEQ_2: 127;

      

       A2: <*x, y*> is quasi-loci iff ( vars x) = {} & x <> y & ( vars y) c= {x} by Th35;

      z in {x, y} iff z = x or z = y by TARSKI:def 2;

      hence thesis by A1, A2, Th31, Th32;

    end;

    definition

      let l be quasi-loci;

      :: original: "

      redefine

      func l " -> PartFunc of Vars , NAT ;

      coherence

      proof

        

         A1: ( dom (l " )) = ( rng l) by FUNCT_1: 33;

        ( rng (l " )) = ( dom l) by FUNCT_1: 33;

        hence thesis by A1, RELSET_1: 4;

      end;

    end

    begin

    definition

      :: ABCMIZ_1:def4

      func a_Type -> set equals 0 ;

      coherence ;

      :: ABCMIZ_1:def5

      func an_Adj -> set equals 1;

      coherence ;

      :: ABCMIZ_1:def6

      func a_Term -> set equals 2;

      coherence ;

      :: ABCMIZ_1:def7

      func * -> set equals 0 ;

      coherence ;

      :: ABCMIZ_1:def8

      func non_op -> set equals 1;

      coherence ;

    end

    definition

      let C be Signature;

      :: ABCMIZ_1:def9

      attr C is constructor means

      : Def9: the carrier of C = { a_Type , an_Adj , a_Term } & { * , non_op } c= the carrier' of C & (the Arity of C . * ) = <* an_Adj , a_Type *> & (the Arity of C . non_op ) = <* an_Adj *> & (the ResultSort of C . * ) = a_Type & (the ResultSort of C . non_op ) = an_Adj & for o be Element of the carrier' of C st o <> * & o <> non_op holds (the Arity of C . o) in ( { a_Term } * );

    end

    registration

      cluster constructor -> non empty non void for Signature;

      coherence ;

    end

    definition

      :: ABCMIZ_1:def10

      func MinConstrSign -> strict Signature means

      : Def10: it is constructor & the carrier' of it = { * , non_op };

      existence

      proof

        set A = { a_Type , an_Adj , a_Term };

        reconsider t = a_Type , a = an_Adj as Element of A by ENUMSET1:def 1;

        reconsider aa = <*a*> as Element of (A * );

        set C = ManySortedSign (# A, { * , non_op }, (( * , non_op ) --> ( <*a, t*>,aa)), (( * , non_op ) --> (t,a)) #);

        reconsider C as non void non empty strict ManySortedSign;

        take C;

        thus the carrier of C = { a_Type , an_Adj , a_Term } & { * , non_op } c= the carrier' of C;

        thus (the Arity of C . * ) = <* an_Adj , a_Type *> by FUNCT_4: 63;

        thus (the Arity of C . non_op ) = <* an_Adj *> by FUNCT_4: 63;

        thus (the ResultSort of C . * ) = a_Type by FUNCT_4: 63;

        thus (the ResultSort of C . non_op ) = an_Adj by FUNCT_4: 63;

        thus thesis by TARSKI:def 2;

      end;

      correctness

      proof

        let C1,C2 be strict Signature such that

         A1: C1 is constructor and

         A2: the carrier' of C1 = { * , non_op } and

         A3: C2 is constructor and

         A4: the carrier' of C2 = { * , non_op };

        set A = { a_Type , an_Adj , a_Term };

        

         A5: the carrier of C1 = A by A1;

        

         A6: the carrier of C2 = A by A3;

        

         A7: (the Arity of C1 . * ) = <* an_Adj , a_Type *> by A1;

        

         A8: (the Arity of C2 . * ) = <* an_Adj , a_Type *> by A3;

        

         A9: (the Arity of C1 . non_op ) = <* an_Adj *> by A1;

        

         A10: (the Arity of C2 . non_op ) = <* an_Adj *> by A3;

        

         A11: (the ResultSort of C1 . * ) = a_Type by A1;

        

         A12: (the ResultSort of C2 . * ) = a_Type by A3;

        

         A13: (the ResultSort of C1 . non_op ) = an_Adj by A1;

        

         A14: (the ResultSort of C2 . non_op ) = an_Adj by A3;

        

         A15: ( dom the Arity of C1) = { * , non_op } by A2, FUNCT_2:def 1;

        

         A16: ( dom the Arity of C2) = { * , non_op } by A4, FUNCT_2:def 1;

        

         A17: the Arity of C1 = (( * , non_op ) --> ( <* an_Adj , a_Type *>, <* an_Adj *>)) by A7, A9, A15, FUNCT_4: 66;

        

         A18: the Arity of C2 = (( * , non_op ) --> ( <* an_Adj , a_Type *>, <* an_Adj *>)) by A8, A10, A16, FUNCT_4: 66;

        

         A19: ( dom the ResultSort of C1) = { * , non_op } by A1, A2, FUNCT_2:def 1;

        

         A20: ( dom the ResultSort of C2) = { * , non_op } by A3, A4, FUNCT_2:def 1;

        the ResultSort of C1 = (( * , non_op ) --> ( a_Type , an_Adj )) by A11, A13, A19, FUNCT_4: 66;

        hence thesis by A2, A4, A5, A6, A12, A14, A17, A18, A20, FUNCT_4: 66;

      end;

    end

    registration

      cluster MinConstrSign -> constructor;

      coherence by Def10;

    end

    registration

      cluster constructor strict for Signature;

      existence

      proof

        take MinConstrSign ;

        thus thesis;

      end;

    end

    definition

      mode ConstructorSignature is constructor Signature;

    end

    definition

      let C be ConstructorSignature;

      let o be OperSymbol of C;

      :: ABCMIZ_1:def11

      attr o is constructor means

      : Def11: o <> * & o <> non_op ;

    end

    theorem :: ABCMIZ_1:37

    for S be ConstructorSignature holds for o be OperSymbol of S st o is constructor holds ( the_arity_of o) = (( len ( the_arity_of o)) |-> a_Term )

    proof

      let S be ConstructorSignature;

      let o be OperSymbol of S such that

       A1: o <> * and

       A2: o <> non_op ;

      reconsider t = a_Term as Element of { a_Term } by TARSKI:def 1;

      

       A3: ( len (( len ( the_arity_of o)) |-> a_Term )) = ( len ( the_arity_of o)) by CARD_1:def 7;

      

       A4: ( the_arity_of o) in ( { a_Term } * ) by A1, A2, Def9;

      (( len ( the_arity_of o)) |-> t) in ( { a_Term } * ) by FINSEQ_1:def 11;

      hence thesis by A3, A4, Th6;

    end;

    definition

      let C be non empty non void Signature;

      :: ABCMIZ_1:def12

      attr C is initialized means

      : Def12: ex m,a be OperSymbol of C st ( the_result_sort_of m) = a_Type & ( the_arity_of m) = {} & ( the_result_sort_of a) = an_Adj & ( the_arity_of a) = {} ;

    end

    definition

      let C be ConstructorSignature;

      

       A1: the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

      :: ABCMIZ_1:def13

      func a_Type C -> SortSymbol of C equals a_Type ;

      coherence by A1, ENUMSET1:def 1;

      :: ABCMIZ_1:def14

      func an_Adj C -> SortSymbol of C equals an_Adj ;

      coherence by A1, ENUMSET1:def 1;

      :: ABCMIZ_1:def15

      func a_Term C -> SortSymbol of C equals a_Term ;

      coherence by A1, ENUMSET1:def 1;

      

       A2: { * , non_op } c= the carrier' of C by Def9;

      

       A3: * in { * , non_op } by TARSKI:def 2;

      

       A4: non_op in { * , non_op } by TARSKI:def 2;

      :: ABCMIZ_1:def16

      func non_op C -> OperSymbol of C equals non_op ;

      coherence by A2, A4;

      :: ABCMIZ_1:def17

      func ast C -> OperSymbol of C equals * ;

      coherence by A2, A3;

    end

    theorem :: ABCMIZ_1:38

    for C be ConstructorSignature holds ( the_arity_of ( non_op C)) = <*( an_Adj C)*> & ( the_result_sort_of ( non_op C)) = ( an_Adj C) & ( the_arity_of ( ast C)) = <*( an_Adj C), ( a_Type C)*> & ( the_result_sort_of ( ast C)) = ( a_Type C) by Def9;

    definition

      :: ABCMIZ_1:def18

      func Modes -> set equals [: { a_Type }, [: QuasiLoci , NAT :]:];

      correctness ;

      :: ABCMIZ_1:def19

      func Attrs -> set equals [: { an_Adj }, [: QuasiLoci , NAT :]:];

      correctness ;

      :: ABCMIZ_1:def20

      func Funcs -> set equals [: { a_Term }, [: QuasiLoci , NAT :]:];

      correctness ;

    end

    registration

      cluster Modes -> non empty;

      coherence ;

      cluster Attrs -> non empty;

      coherence ;

      cluster Funcs -> non empty;

      coherence ;

    end

    definition

      :: ABCMIZ_1:def21

      func Constructors -> non empty set equals (( Modes \/ Attrs ) \/ Funcs );

      coherence ;

    end

    theorem :: ABCMIZ_1:39

     { * , non_op } misses Constructors

    proof

      assume not thesis;

      then

      consider x be object such that

       A1: x in { * , non_op } and

       A2: x in Constructors by XBOOLE_0: 3;

      x in ( Modes \/ Attrs ) or x in Funcs by A2, XBOOLE_0:def 3;

      then x in Modes or x in Attrs or x in Funcs by XBOOLE_0:def 3;

      then

      consider Y,Z be set such that

       A3: x in [:Y, Z:];

      

       A4: ex y,z be object st (y in Y) & (z in Z) & ( [y, z] = x) by A3, ZFMISC_1:def 2;

      reconsider x as set by TARSKI: 1;

      x = * or x = non_op by A1, TARSKI:def 2;

      then ( the_rank_of x) = 0 or ( the_rank_of x) = 1 by CLASSES1: 73;

      then ( the_rank_of x) c= 1;

      then ( the_rank_of x) in ( succ ( succ {} )) by ORDINAL1: 6, ORDINAL1: 12;

      then x in ( Rank ( succ ( succ {} ))) by CLASSES1: 66;

      hence thesis by A4, CLASSES1: 29, CLASSES1: 45;

    end;

    definition

      let x be Element of [: QuasiLoci , NAT :];

      :: original: `1

      redefine

      func x `1 -> quasi-loci ;

      coherence by MCART_1: 10;

      :: original: `2

      redefine

      func x `2 -> Element of NAT ;

      coherence by MCART_1: 10;

    end

    notation

      let c be Element of Constructors ;

      synonym kind_of c for c `1 ;

    end

    definition

      let c be Element of Constructors ;

      :: original: kind_of

      redefine

      func kind_of c -> Element of { a_Type , an_Adj , a_Term } ;

      coherence

      proof

        c in ( Modes \/ Attrs ) or c in Funcs by XBOOLE_0:def 3;

        then c in Modes or c in Attrs or c in Funcs by XBOOLE_0:def 3;

        then (c `1 ) in { a_Type } or (c `1 ) in { an_Adj } or (c `1 ) in { a_Term } by MCART_1: 10;

        then (c `1 ) = a_Type or (c `1 ) = an_Adj or (c `1 ) = a_Term by TARSKI:def 1;

        hence thesis by ENUMSET1:def 1;

      end;

      :: original: `2

      redefine

      func c `2 -> Element of [: QuasiLoci , NAT :] ;

      coherence

      proof

        c in ( Modes \/ Attrs ) or c in Funcs by XBOOLE_0:def 3;

        then c in Modes or c in Attrs or c in Funcs by XBOOLE_0:def 3;

        hence thesis by MCART_1: 10;

      end;

    end

    definition

      let c be Element of Constructors ;

      :: ABCMIZ_1:def22

      func loci_of c -> quasi-loci equals ((c `2 ) `1 );

      coherence ;

      :: ABCMIZ_1:def23

      func index_of c -> Nat equals ((c `2 ) `2 );

      coherence ;

    end

    theorem :: ABCMIZ_1:40

    for c be Element of Constructors holds (( kind_of c) = a_Type iff c in Modes ) & (( kind_of c) = an_Adj iff c in Attrs ) & (( kind_of c) = a_Term iff c in Funcs )

    proof

      let x be Element of Constructors ;

      

       A1: x in ( Modes \/ Attrs ) or x in Funcs by XBOOLE_0:def 3;

      

       A2: x in Modes implies (x `1 ) in { a_Type } by MCART_1: 10;

      

       A3: x in Attrs implies (x `1 ) in { an_Adj } by MCART_1: 10;

      x in Funcs implies (x `1 ) in { a_Term } by MCART_1: 10;

      hence thesis by A1, A2, A3, TARSKI:def 1, XBOOLE_0:def 3;

    end;

    definition

      :: ABCMIZ_1:def24

      func MaxConstrSign -> strict ConstructorSignature means

      : Def24: the carrier' of it = ( { * , non_op } \/ Constructors ) & for o be OperSymbol of it st o is constructor holds (the ResultSort of it . o) = (o `1 ) & ( card (the Arity of it . o)) = ( card ((o `2 ) `1 ));

      existence

      proof

        set S = { a_Type , an_Adj , a_Term };

        set O = ( { * , non_op } \/ Constructors );

        deffunc F( Element of Constructors ) = (( len ( loci_of $1)) |-> a_Term );

        consider f be ManySortedSet of Constructors such that

         A1: for c be Element of Constructors holds (f . c) = F(c) from PBOOLE:sch 5;

        deffunc G( Element of Constructors ) = ( kind_of $1);

        consider g be ManySortedSet of Constructors such that

         A2: for c be Element of Constructors holds (g . c) = G(c) from PBOOLE:sch 5;

        reconsider t = a_Type , a = an_Adj , tr = a_Term as Element of S by ENUMSET1:def 1;

        reconsider aa = <*a*> as Element of (S * );

        set A = (f +* (( * , non_op ) --> ( <*a, t*>,aa)));

        set R = (g +* (( * , non_op ) --> (t,a)));

        

         A3: ( dom (( * , non_op ) --> ( <*a, t*>,aa))) = { * , non_op } by FUNCT_4: 62;

        

         A4: ( dom (( * , non_op ) --> (t,a))) = { * , non_op } by FUNCT_4: 62;

        

         A5: ( dom f) = Constructors by PARTFUN1:def 2;

        

         A6: ( dom g) = Constructors by PARTFUN1:def 2;

        

         A7: ( dom A) = O by A3, A5, FUNCT_4:def 1;

        

         A8: ( dom R) = O by A4, A6, FUNCT_4:def 1;

        ( rng f) c= (S * )

        proof

          let y be object;

          assume y in ( rng f);

          then

          consider x be object such that

           A9: x in Constructors and

           A10: y = (f . x) by A5, FUNCT_1:def 3;

          reconsider x as Element of Constructors by A9;

          y = (( len ( loci_of x)) |-> tr) by A1, A10;

          hence thesis by FINSEQ_1:def 11;

        end;

        then

         A11: (( rng f) \/ ( rng (( * , non_op ) --> ( <*a, t*>,aa)))) c= ((S * ) \/ (S * )) by XBOOLE_1: 13;

        ( rng g) c= S

        proof

          let y be object;

          assume y in ( rng g);

          then

          consider x be object such that

           A12: x in Constructors and

           A13: y = (g . x) by A6, FUNCT_1:def 3;

          reconsider x as Element of Constructors by A12;

          y = ( kind_of x) by A2, A13;

          hence thesis;

        end;

        then

         A14: (( rng g) \/ ( rng (( * , non_op ) --> (t,a)))) c= (S \/ S) by XBOOLE_1: 13;

        ( rng A) c= (( rng f) \/ ( rng (( * , non_op ) --> ( <*a, t*>,aa)))) by FUNCT_4: 17;

        then

        reconsider A as Function of O, (S * ) by A7, A11, FUNCT_2: 2, XBOOLE_1: 1;

        ( rng R) c= (( rng g) \/ ( rng (( * , non_op ) --> (t,a)))) by FUNCT_4: 17;

        then

        reconsider R as Function of O, S by A8, A14, FUNCT_2: 2, XBOOLE_1: 1;

        reconsider Max = ManySortedSign (# S, O, A, R #) as non empty non void strict Signature;

        Max is constructor

        proof

          thus the carrier of Max = { a_Type , an_Adj , a_Term };

          thus { * , non_op } c= the carrier' of Max by XBOOLE_1: 7;

          

           A15: * in { * , non_op } by TARSKI:def 2;

          

           A16: non_op in { * , non_op } by TARSKI:def 2;

          

          thus (the Arity of Max . * ) = ((( * , non_op ) --> ( <*a, t*>,aa)) . * ) by A3, A15, FUNCT_4: 13

          .= <* an_Adj , a_Type *> by FUNCT_4: 63;

          

          thus (the Arity of Max . non_op ) = ((( * , non_op ) --> ( <*a, t*>,aa)) . non_op ) by A3, A16, FUNCT_4: 13

          .= <* an_Adj *> by FUNCT_4: 63;

          

          thus (the ResultSort of Max . * ) = ((( * , non_op ) --> (t,a)) . * ) by A4, A15, FUNCT_4: 13

          .= a_Type by FUNCT_4: 63;

          

          thus (the ResultSort of Max . non_op ) = ((( * , non_op ) --> (t,a)) . non_op ) by A4, A16, FUNCT_4: 13

          .= an_Adj by FUNCT_4: 63;

          let o be Element of the carrier' of Max;

          assume that

           A17: o <> * and

           A18: o <> non_op ;

          

           A19: not o in { * , non_op } by A17, A18, TARSKI:def 2;

          then

          reconsider c = o as Element of Constructors by XBOOLE_0:def 3;

          reconsider tr as Element of { a_Term } by TARSKI:def 1;

          (the Arity of Max . o) = (f . c) by A3, A5, A19, FUNCT_4:def 1

          .= (( len ( loci_of c)) |-> tr) by A1;

          hence (the Arity of Max . o) in ( { a_Term } * ) by FINSEQ_1:def 11;

        end;

        then

        reconsider Max as strict ConstructorSignature;

        take Max;

        thus the carrier' of Max = ( { * , non_op } \/ Constructors );

        let o be OperSymbol of Max;

        assume that

         A20: o <> * and

         A21: o <> non_op ;

        

         A22: not o in { * , non_op } by A20, A21, TARSKI:def 2;

        then

        reconsider c = o as Element of Constructors by XBOOLE_0:def 3;

        

        thus (the ResultSort of Max . o) = (g . c) by A4, A6, A22, FUNCT_4:def 1

        .= (o `1 ) by A2;

        

        thus ( card (the Arity of Max . o)) = ( card (f . c)) by A3, A5, A22, FUNCT_4:def 1

        .= ( card F(c)) by A1

        .= ( card ((o `2 ) `1 )) by CARD_1:def 7;

      end;

      uniqueness

      proof

        let it1,it2 be strict ConstructorSignature such that

         A23: the carrier' of it1 = ( { * , non_op } \/ Constructors ) and

         A24: for o be OperSymbol of it1 st o is constructor holds (the ResultSort of it1 . o) = (o `1 ) & ( card (the Arity of it1 . o)) = ( card ((o `2 ) `1 )) and

         A25: the carrier' of it2 = ( { * , non_op } \/ Constructors ) and

         A26: for o be OperSymbol of it2 st o is constructor holds (the ResultSort of it2 . o) = (o `1 ) & ( card (the Arity of it2 . o)) = ( card ((o `2 ) `1 ));

        set S = { a_Type , an_Adj , a_Term };

        

         A27: the carrier of it1 = S by Def9;

        

         A28: the carrier of it2 = S by Def9;

         A29:

        now

          let c be Element of Constructors ;

          reconsider o1 = c as OperSymbol of it1 by A23, XBOOLE_0:def 3;

          reconsider o2 = o1 as OperSymbol of it2 by A23, A25;

          assume that

           A30: c <> * and

           A31: c <> non_op ;

          

           A32: o1 is constructor by A30, A31;

          

           A33: o2 is constructor by A30, A31;

          

           A34: ( card (the Arity of it1 . o1)) = ( card ((c `2 ) `1 )) by A24, A32;

          

           A35: ( card (the Arity of it2 . o2)) = ( card ((c `2 ) `1 )) by A26, A33;

          

           A36: (the Arity of it1 . o1) in ( { a_Term } * ) by A30, A31, Def9;

          (the Arity of it2 . o2) in ( { a_Term } * ) by A30, A31, Def9;

          then

          reconsider p1 = (the Arity of it1 . o1), p2 = (the Arity of it2 . o2) as FinSequence of { a_Term } by A36, FINSEQ_1:def 11;

          

           A37: ( dom p1) = ( Seg ( len p1)) by FINSEQ_1:def 3;

          

           A38: ( dom p2) = ( Seg ( len p2)) by FINSEQ_1:def 3;

          now

            let i be Nat;

            assume

             A39: i in ( dom p1);

            then

             A40: (p1 . i) in ( rng p1) by FUNCT_1:def 3;

            

             A41: (p2 . i) in ( rng p2) by A34, A35, A37, A38, A39, FUNCT_1:def 3;

            (p1 . i) = a_Term by A40, TARSKI:def 1;

            hence (p1 . i) = (p2 . i) by A41, TARSKI:def 1;

          end;

          hence (the Arity of it1 . c) = (the Arity of it2 . c) by A34, A35, A37, A38;

        end;

        now

          let o be OperSymbol of it1;

          o in { * , non_op } or not o in { * , non_op };

          then o = * or o = non_op or o in Constructors & o <> * & o <> non_op by A23, TARSKI:def 2, XBOOLE_0:def 3;

          then (the Arity of it1 . o) = <* an_Adj , a_Type *> & (the Arity of it2 . o) = <* an_Adj , a_Type *> or (the Arity of it1 . o) = <* an_Adj *> & (the Arity of it2 . o) = <* an_Adj *> or (the Arity of it1 . o) = (the Arity of it2 . o) by A29, Def9;

          hence (the Arity of it1 . o) = (the Arity of it2 . o);

        end;

        then

         A42: the Arity of it1 = the Arity of it2 by A23, A25, A27, A28, FUNCT_2: 63;

        now

          let o be OperSymbol of it1;

          reconsider o9 = o as OperSymbol of it2 by A23, A25;

           not o in { * , non_op } or o in { * , non_op };

          then o = * or o = non_op or o in Constructors & o is constructor & o9 is constructor by A23, TARSKI:def 2, XBOOLE_0:def 3;

          then (the ResultSort of it1 . o) = a_Type & (the ResultSort of it2 . o) = a_Type or (the ResultSort of it1 . o) = an_Adj & (the ResultSort of it2 . o) = an_Adj or (the ResultSort of it1 . o) = (o `1 ) & (the ResultSort of it2 . o) = (o `1 ) by A24, A26, Def9;

          hence (the ResultSort of it1 . o) = (the ResultSort of it2 . o);

        end;

        hence thesis by A23, A25, A27, A28, A42, FUNCT_2: 63;

      end;

    end

    registration

      cluster MinConstrSign -> non initialized;

      correctness

      proof

        given m,a be OperSymbol of MinConstrSign such that ( the_result_sort_of m) = a_Type and

         A1: ( the_arity_of m) = {} and ( the_result_sort_of a) = an_Adj and ( the_arity_of a) = {} ;

        the carrier' of MinConstrSign = { * , non_op } by Def10;

        then m = * or m = non_op by TARSKI:def 2;

        hence contradiction by A1, Def9;

      end;

      cluster MaxConstrSign -> initialized;

      correctness

      proof

        set m = [ a_Type , [ {} , 0 ]], a = [ an_Adj , [ {} , 0 ]];

        

         A2: a_Type in { a_Type } by TARSKI:def 1;

        

         A3: an_Adj in { an_Adj } by TARSKI:def 1;

        

         A4: [( <*> Vars ), 0 ] in [: QuasiLoci , NAT :] by Th29, ZFMISC_1:def 2;

        then

         A5: m in Modes by A2, ZFMISC_1:def 2;

        

         A6: a in Attrs by A3, A4, ZFMISC_1:def 2;

        

         A7: m in ( Modes \/ Attrs ) by A5, XBOOLE_0:def 3;

        

         A8: a in ( Modes \/ Attrs ) by A6, XBOOLE_0:def 3;

        

         A9: m in Constructors by A7, XBOOLE_0:def 3;

        

         A10: a in Constructors by A8, XBOOLE_0:def 3;

        the carrier' of MaxConstrSign = ( { * , non_op } \/ Constructors ) by Def24;

        then

        reconsider m, a as OperSymbol of MaxConstrSign by A9, A10, XBOOLE_0:def 3;

        

         A11: m is constructor;

        

         A12: a is constructor;

        take m, a;

        

        thus ( the_result_sort_of m) = (m `1 ) by A11, Def24

        .= a_Type ;

        ( len ( the_arity_of m)) = ( card ((m `2 ) `1 )) by A11, Def24

        .= ( card ( [ {} , 0 ] `1 ))

        .= 0 ;

        hence ( the_arity_of m) = {} ;

        

        thus ( the_result_sort_of a) = (a `1 ) by A12, Def24

        .= an_Adj ;

        ( len ( the_arity_of a)) = ( card ((a `2 ) `1 )) by A12, Def24

        .= ( card ( [ {} , 0 ] `1 ))

        .= 0 ;

        hence thesis;

      end;

    end

    registration

      cluster initialized strict for ConstructorSignature;

      correctness

      proof

        take MaxConstrSign ;

        thus thesis;

      end;

    end

    registration

      let C be initialized ConstructorSignature;

      cluster constructor for OperSymbol of C;

      existence

      proof

        consider m,a be OperSymbol of C such that

         A1: ( the_result_sort_of m) = a_Type and

         A2: ( the_arity_of m) = {} and ( the_result_sort_of a) = an_Adj and ( the_arity_of a) = {} by Def12;

        take m;

        thus m <> * by A2, Def9;

        thus thesis by A1, Def9;

      end;

    end

    begin

    definition

      let C be ConstructorSignature;

      

       A1: the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

      :: ABCMIZ_1:def25

      func MSVars C -> ManySortedSet of the carrier of C means

      : Def25: (it . a_Type ) = {} & (it . an_Adj ) = {} & (it . a_Term ) = Vars ;

      uniqueness

      proof

        let V1,V2 be ManySortedSet of the carrier of C such that

         A2: (V1 . a_Type ) = {} and

         A3: (V1 . an_Adj ) = {} and

         A4: (V1 . a_Term ) = Vars and

         A5: (V2 . a_Type ) = {} and

         A6: (V2 . an_Adj ) = {} and

         A7: (V2 . a_Term ) = Vars ;

        now

          let x be object;

          assume x in the carrier of C;

          then x = a_Type or x = an_Adj or x = a_Term by A1, ENUMSET1:def 1;

          hence (V1 . x) = (V2 . x) by A2, A3, A4, A5, A6, A7;

        end;

        hence thesis;

      end;

      existence

      proof

        deffunc F( object) = ( IFEQ ($1, a_Term , Vars , {} ));

        consider V be ManySortedSet of the carrier of C such that

         A8: for x be object st x in the carrier of C holds (V . x) = F(x) from PBOOLE:sch 4;

        take V;

        

         A9: ( IFEQ ( a_Type , a_Term , Vars , {} )) = {} by FUNCOP_1:def 8;

        

         A10: ( IFEQ ( an_Adj , a_Term , Vars , {} )) = {} by FUNCOP_1:def 8;

        

         A11: ( IFEQ ( a_Term , a_Term , Vars , {} )) = Vars by FUNCOP_1:def 8;

        

         A12: a_Type in the carrier of C by A1, ENUMSET1:def 1;

        

         A13: an_Adj in the carrier of C by A1, ENUMSET1:def 1;

         a_Term in the carrier of C by A1, ENUMSET1:def 1;

        hence thesis by A8, A9, A10, A11, A12, A13;

      end;

    end

    registration

      let C be ConstructorSignature;

      cluster ( MSVars C) -> non empty-yielding;

      coherence

      proof

        take a_Term ;

        the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

        hence a_Term in the carrier of C by ENUMSET1:def 1;

        thus thesis by Def25;

      end;

    end

    registration

      let C be initialized ConstructorSignature;

      cluster ( Free (C,( MSVars C))) -> non-empty;

      correctness

      proof

        set X = ( MSVars C);

        consider m,a be OperSymbol of C such that

         A1: ( the_result_sort_of m) = a_Type and

         A2: ( the_arity_of m) = {} and

         A3: ( the_result_sort_of a) = an_Adj and

         A4: ( the_arity_of a) = {} by Def12;

        

         A5: ( root-tree [m, the carrier of C]) in (the Sorts of ( Free (C,X)) . a_Type ) by A1, A2, MSAFREE3: 5;

        

         A6: ( root-tree [a, the carrier of C]) in (the Sorts of ( Free (C,X)) . an_Adj ) by A3, A4, MSAFREE3: 5;

        set x = the variable;

        

         A7: ( a_Term C) = a_Term ;

        (( MSVars C) . a_Term ) = Vars by Def25;

        then

         A8: ( root-tree [x, a_Term ]) in (the Sorts of ( Free (C,X)) . a_Term ) by A7, MSAFREE3: 4;

        assume not the Sorts of ( Free (C,X)) is non-empty;

        then {} in ( rng the Sorts of ( Free (C,X))) by RELAT_1:def 9;

        then

        consider s be object such that

         A9: s in ( dom the Sorts of ( Free (C,X))) and

         A10: {} = (the Sorts of ( Free (C,X)) . s) by FUNCT_1:def 3;

        s in the carrier of C by A9;

        then s in { a_Type , an_Adj , a_Term } by Def9;

        hence thesis by A5, A6, A8, A10, ENUMSET1:def 1;

      end;

    end

    definition

      let S be non void Signature;

      let X be non empty-yielding ManySortedSet of the carrier of S;

      let t be Element of ( Free (S,X));

      :: ABCMIZ_1:def26

      attr t is ground means ( Union (S variables_in t)) = {} ;

      :: ABCMIZ_1:def27

      attr t is compound means

      : Def27: (t . {} ) in [:the carrier' of S, {the carrier of S}:];

    end

    reserve C for initialized ConstructorSignature,

s for SortSymbol of C,

o for OperSymbol of C,

c for constructor OperSymbol of C;

    definition

      let C;

      mode expression of C is Element of ( Free (C,( MSVars C)));

    end

    definition

      let C, s;

      :: ABCMIZ_1:def28

      mode expression of C,s -> expression of C means

      : Def28: it in (the Sorts of ( Free (C,( MSVars C))) . s);

      existence

      proof

        set t = the Element of (the Sorts of ( Free (C,( MSVars C))) . s);

        ( dom the Sorts of ( Free (C,( MSVars C)))) = the carrier of C by PARTFUN1:def 2;

        then t in ( Union the Sorts of ( Free (C,( MSVars C)))) by CARD_5: 2;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:41

    

     Th41: z is expression of C, s iff z in (the Sorts of ( Free (C,( MSVars C))) . s)

    proof

      

       A1: ( dom the Sorts of ( Free (C,( MSVars C)))) = the carrier of C by PARTFUN1:def 2;

      (the Sorts of ( Free (C,( MSVars C))) . s) c= ( Union the Sorts of ( Free (C,( MSVars C)))) by A1, CARD_5: 2;

      hence thesis by Def28;

    end;

    definition

      let C;

      let c;

      :: ABCMIZ_1:def29

      func c term -> expression of C equals ( [c, the carrier of C] -tree {} );

      coherence

      proof

        ( the_arity_of c) = {} by A1;

        then

         A2: ( root-tree [c, the carrier of C]) in (the Sorts of ( Free (C,( MSVars C))) . ( the_result_sort_of c)) by MSAFREE3: 5;

        ( dom the Sorts of ( Free (C,( MSVars C)))) = the carrier of C by PARTFUN1:def 2;

        then ( root-tree [c, the carrier of C]) in ( Union the Sorts of ( Free (C,( MSVars C)))) by A2, CARD_5: 2;

        hence thesis by TREES_4: 20;

      end;

    end

    theorem :: ABCMIZ_1:42

    

     Th42: for o st ( len ( the_arity_of o)) = 1 holds for a be expression of C st ex s st s = (( the_arity_of o) . 1) & a is expression of C, s holds ( [o, the carrier of C] -tree <*a*>) is expression of C, ( the_result_sort_of o)

    proof

      let o be OperSymbol of C such that

       A1: ( len ( the_arity_of o)) = 1;

      set X = ( MSVars C);

      set Y = (X (\/) (the carrier of C --> { 0 }));

      let a be expression of C;

      given s be SortSymbol of C such that

       A2: s = (( the_arity_of o) . 1) and

       A3: a is expression of C, s;

      reconsider ta = a as Term of C, Y by MSAFREE3: 8;

      

       A4: ( dom <*ta*>) = ( Seg 1) by FINSEQ_1: 38;

      

       A5: ( dom <*s*>) = ( Seg 1) by FINSEQ_1: 38;

      

       A6: ( the_arity_of o) = <*s*> by A1, A2, FINSEQ_1: 40;

      

       A7: the Sorts of ( Free (C,X)) = (C -Terms (X,Y)) by MSAFREE3: 24;

      now

        let i be Nat;

        assume i in ( dom <*ta*>);

        then

         A8: i = 1 by A4, FINSEQ_1: 2, TARSKI:def 1;

        let t be Term of C, Y;

        assume

         A9: t = ( <*ta*> . i);

        

         A10: the Sorts of ( Free (C,X)) c= the Sorts of ( FreeMSA Y) by A7, PBOOLE:def 18;

        

         A11: t = a by A8, A9, FINSEQ_1: 40;

        

         A12: (the Sorts of ( Free (C,X)) . s) c= (the Sorts of ( FreeMSA Y) . s) by A10;

        t in (the Sorts of ( Free (C,X)) . s) by A3, A11, Th41;

        hence ( the_sort_of t) = (( the_arity_of o) . i) by A2, A8, A12, MSAFREE3: 7;

      end;

      then

      reconsider p = <*ta*> as ArgumentSeq of ( Sym (o,Y)) by A4, A5, A6, MSATERM: 25;

      

       A13: ( variables_in (( Sym (o,Y)) -tree p)) c= X

      proof

        let s be object;

        assume s in the carrier of C;

        then

        reconsider s9 = s as SortSymbol of C;

        let x be object;

        assume x in (( variables_in (( Sym (o,Y)) -tree p)) . s);

        then

        consider t be DecoratedTree such that

         A14: t in ( rng p) and

         A15: x in ((C variables_in t) . s9) by MSAFREE3: 11;

        

         A16: (C variables_in a) c= X by MSAFREE3: 27;

        

         A17: ( rng p) = {a} by FINSEQ_1: 38;

        

         A18: ((C variables_in a) . s9) c= (X . s9) by A16;

        t = a by A14, A17, TARSKI:def 1;

        hence thesis by A15, A18;

      end;

      set s9 = ( the_result_sort_of o);

      

       A19: ( the_sort_of (( Sym (o,Y)) -tree p)) = ( the_result_sort_of o) by MSATERM: 20;

      (the Sorts of ( Free (C,X)) . s9) = { t where t be Term of C, Y : ( the_sort_of t) = s9 & ( variables_in t) c= X } by A7, MSAFREE3:def 5;

      then ( [o, the carrier of C] -tree <*a*>) in (the Sorts of ( Free (C,X)) . s9) by A13, A19;

      hence thesis by Th41;

    end;

    definition

      let C, o;

      let e be expression of C;

      :: ABCMIZ_1:def30

      func o term e -> expression of C equals

      : Def30: ( [o, the carrier of C] -tree <*e*>);

      coherence by A1, A2, Th42;

    end

    reserve a,b for expression of C, ( an_Adj C);

    theorem :: ABCMIZ_1:43

    

     Th43: (( non_op C) term a) is expression of C, ( an_Adj C) & (( non_op C) term a) = ( [ non_op , the carrier of C] -tree <*a*>)

    proof

      

       A1: ( the_result_sort_of ( non_op C)) = ( an_Adj C) by Def9;

      

       A2: ( the_arity_of ( non_op C)) = <*( an_Adj C)*> by Def9;

      then

       A3: ( len ( the_arity_of ( non_op C))) = 1 by FINSEQ_1: 40;

      

       A4: (( the_arity_of ( non_op C)) . 1) = ( an_Adj C) by A2, FINSEQ_1: 40;

      then (( non_op C) term a) = ( [ non_op , the carrier of C] -tree <*a*>) by A3, Def30;

      hence thesis by A1, A3, A4, Th42;

    end;

    theorem :: ABCMIZ_1:44

    

     Th44: (( non_op C) term a) = (( non_op C) term b) implies a = b

    proof

      assume (( non_op C) term a) = (( non_op C) term b);

      

      then ( [ non_op , the carrier of C] -tree <*a*>) = (( non_op C) term b) by Th43

      .= ( [ non_op , the carrier of C] -tree <*b*>) by Th43;

      then <*a*> = <*b*> by TREES_4: 15;

      hence thesis by FINSEQ_1: 76;

    end;

    registration

      let C, a;

      cluster (( non_op C) term a) -> compound;

      coherence

      proof

        (( non_op C) term a) = ( [ non_op , the carrier of C] -tree <*a*>) by Th43;

        then ((( non_op C) term a) . {} ) = [( non_op C), the carrier of C] by TREES_4:def 4;

        hence ((( non_op C) term a) . {} ) in [:the carrier' of C, {the carrier of C}:] by ZFMISC_1: 106;

      end;

    end

    registration

      let C;

      cluster compound for expression of C;

      existence

      proof

        set a = the expression of C, ( an_Adj C);

        (( non_op C) term a) is compound;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:45

    

     Th45: for o st ( len ( the_arity_of o)) = 2 holds for a,b be expression of C st ex s1,s2 be SortSymbol of C st s1 = (( the_arity_of o) . 1) & s2 = (( the_arity_of o) . 2) & a is expression of C, s1 & b is expression of C, s2 holds ( [o, the carrier of C] -tree <*a, b*>) is expression of C, ( the_result_sort_of o)

    proof

      let o be OperSymbol of C such that

       A1: ( len ( the_arity_of o)) = 2;

      set X = ( MSVars C);

      set Y = (X (\/) (the carrier of C --> { 0 }));

      let a,b be expression of C;

      given s1,s2 be SortSymbol of C such that

       A2: s1 = (( the_arity_of o) . 1) and

       A3: s2 = (( the_arity_of o) . 2) and

       A4: a is expression of C, s1 and

       A5: b is expression of C, s2;

      reconsider ta = a, tb = b as Term of C, Y by MSAFREE3: 8;

      

       A6: ( dom <*ta, tb*>) = ( Seg 2) by FINSEQ_1: 89;

      

       A7: ( dom <*s1, s2*>) = ( Seg 2) by FINSEQ_1: 89;

      

       A8: ( the_arity_of o) = <*s1, s2*> by A1, A2, A3, FINSEQ_1: 44;

      

       A9: the Sorts of ( Free (C,X)) = (C -Terms (X,Y)) by MSAFREE3: 24;

      now

        let i be Nat;

        assume i in ( dom <*ta, tb*>);

        then

         A10: i = 1 or i = 2 by A6, FINSEQ_1: 2, TARSKI:def 2;

        let t be Term of C, Y;

        assume

         A11: t = ( <*ta, tb*> . i);

        

         A12: the Sorts of ( Free (C,X)) c= the Sorts of ( FreeMSA Y) by A9, PBOOLE:def 18;

        

         A13: i = 1 & t = a or i = 2 & t = b by A10, A11, FINSEQ_1: 44;

        

         A14: (the Sorts of ( Free (C,X)) . s1) c= (the Sorts of ( FreeMSA Y) . s1) by A12;

        

         A15: (the Sorts of ( Free (C,X)) . s2) c= (the Sorts of ( FreeMSA Y) . s2) by A12;

        i = 1 & t in (the Sorts of ( Free (C,X)) . s1) or i = 2 & t in (the Sorts of ( Free (C,X)) . s2) by A4, A5, A13, Th41;

        hence ( the_sort_of t) = (( the_arity_of o) . i) by A2, A3, A14, A15, MSAFREE3: 7;

      end;

      then

      reconsider p = <*ta, tb*> as ArgumentSeq of ( Sym (o,Y)) by A6, A7, A8, MSATERM: 25;

      

       A16: ( variables_in (( Sym (o,Y)) -tree p)) c= X

      proof

        let s be object;

        assume s in the carrier of C;

        then

        reconsider s9 = s as SortSymbol of C;

        let x be object;

        assume x in (( variables_in (( Sym (o,Y)) -tree p)) . s);

        then

        consider t be DecoratedTree such that

         A17: t in ( rng p) and

         A18: x in ((C variables_in t) . s9) by MSAFREE3: 11;

        

         A19: (C variables_in a) c= X by MSAFREE3: 27;

        

         A20: (C variables_in b) c= X by MSAFREE3: 27;

        

         A21: ( rng p) = {a, b} by FINSEQ_2: 127;

        

         A22: ((C variables_in a) . s9) c= (X . s9) by A19;

        

         A23: ((C variables_in b) . s9) c= (X . s9) by A20;

        t = a or t = b by A17, A21, TARSKI:def 2;

        hence thesis by A18, A22, A23;

      end;

      set s9 = ( the_result_sort_of o);

      

       A24: ( the_sort_of (( Sym (o,Y)) -tree p)) = ( the_result_sort_of o) by MSATERM: 20;

      (the Sorts of ( Free (C,X)) . s9) = { t where t be Term of C, Y : ( the_sort_of t) = s9 & ( variables_in t) c= X } by A9, MSAFREE3:def 5;

      then ( [o, the carrier of C] -tree <*a, b*>) in (the Sorts of ( Free (C,X)) . s9) by A16, A24;

      hence thesis by Th41;

    end;

    definition

      let C, o;

      let e1,e2 be expression of C;

      :: ABCMIZ_1:def31

      func o term (e1,e2) -> expression of C equals

      : Def31: ( [o, the carrier of C] -tree <*e1, e2*>);

      coherence by A1, A2, Th45;

    end

    reserve t,t1,t2 for expression of C, ( a_Type C);

    theorem :: ABCMIZ_1:46

    

     Th46: (( ast C) term (a,t)) is expression of C, ( a_Type C) & (( ast C) term (a,t)) = ( [ * , the carrier of C] -tree <*a, t*>)

    proof

      

       A1: ( the_result_sort_of ( ast C)) = ( a_Type C) by Def9;

      

       A2: ( the_arity_of ( ast C)) = <*( an_Adj C), ( a_Type C)*> by Def9;

      then

       A3: ( len ( the_arity_of ( ast C))) = 2 by FINSEQ_1: 44;

      

       A4: (( the_arity_of ( ast C)) . 1) = ( an_Adj C) by A2, FINSEQ_1: 44;

      

       A5: (( the_arity_of ( ast C)) . 2) = ( a_Type C) by A2, FINSEQ_1: 44;

      then (( ast C) term (a,t)) = ( [ * , the carrier of C] -tree <*a, t*>) by A3, A4, Def31;

      hence thesis by A1, A3, A4, A5, Th45;

    end;

    theorem :: ABCMIZ_1:47

    (( ast C) term (a,t1)) = (( ast C) term (b,t2)) implies a = b & t1 = t2

    proof

      assume (( ast C) term (a,t1)) = (( ast C) term (b,t2));

      

      then ( [ * , the carrier of C] -tree <*a, t1*>) = (( ast C) term (b,t2)) by Th46

      .= ( [ * , the carrier of C] -tree <*b, t2*>) by Th46;

      then <*a, t1*> = <*b, t2*> by TREES_4: 15;

      hence thesis by FINSEQ_1: 77;

    end;

    registration

      let C, a, t;

      cluster (( ast C) term (a,t)) -> compound;

      coherence

      proof

        (( ast C) term (a,t)) = ( [ * , the carrier of C] -tree <*a, t*>) by Th46;

        then ((( ast C) term (a,t)) . {} ) = [( ast C), the carrier of C] by TREES_4:def 4;

        hence ((( ast C) term (a,t)) . {} ) in [:the carrier' of C, {the carrier of C}:] by ZFMISC_1: 106;

      end;

    end

    definition

      let S be non void Signature;

      let s be SortSymbol of S;

      :: ABCMIZ_1:def32

      mode OperSymbol of s -> OperSymbol of S means ( the_result_sort_of it ) = s;

      existence by A1;

    end

    definition

      let C be ConstructorSignature;

      :: original: non_op

      redefine

      func non_op C -> OperSymbol of ( an_Adj C) ;

      coherence

      proof

        ( the_result_sort_of ( non_op C)) = ( an_Adj C) by Def9;

        hence ex o be OperSymbol of C st ( the_result_sort_of o) = ( an_Adj C);

        thus thesis by Def9;

      end;

      :: original: ast

      redefine

      func ast C -> OperSymbol of ( a_Type C) ;

      coherence

      proof

        ( the_result_sort_of ( ast C)) = ( a_Type C) by Def9;

        hence ex o be OperSymbol of C st ( the_result_sort_of o) = ( a_Type C);

        thus thesis by Def9;

      end;

    end

    theorem :: ABCMIZ_1:48

    

     Th48: for s1,s2 be SortSymbol of C st s1 <> s2 holds for t1 be expression of C, s1 holds for t2 be expression of C, s2 holds t1 <> t2

    proof

      set X = ( MSVars C);

      set Y = (X (\/) (the carrier of C --> { 0 }));

      

       A1: ex A be MSSubset of ( FreeMSA Y) st (( Free (C,X)) = ( GenMSAlg A)) & (A = (( Reverse Y) "" X)) by MSAFREE3:def 1;

      let s1,s2 be SortSymbol of C;

      the Sorts of ( Free (C,X)) is MSSubset of ( FreeMSA Y) by A1, MSUALG_2:def 9;

      then

       A2: the Sorts of ( Free (C,X)) c= the Sorts of ( FreeMSA Y) by PBOOLE:def 18;

      then

       A3: (the Sorts of ( Free (C,X)) . s1) c= (the Sorts of ( FreeMSA Y) . s1);

      

       A4: (the Sorts of ( Free (C,X)) . s2) c= (the Sorts of ( FreeMSA Y) . s2) by A2;

      assume s1 <> s2;

      then

       A5: (the Sorts of ( FreeMSA Y) . s1) misses (the Sorts of ( FreeMSA Y) . s2) by PROB_2:def 2;

      let t1 be expression of C, s1;

      let t2 be expression of C, s2;

      

       A6: t1 in (the Sorts of ( Free (C,X)) . s1) by Def28;

      t2 in (the Sorts of ( Free (C,X)) . s2) by Def28;

      hence thesis by A3, A4, A5, A6, XBOOLE_0: 3;

    end;

    begin

    definition

      let C;

      

       A1: (the Sorts of ( Free (C,( MSVars C))) . ( a_Term C)) c= ( Union the Sorts of ( Free (C,( MSVars C))))

      proof

        let x be object;

        ( dom the Sorts of ( Free (C,( MSVars C)))) = the carrier of C by PARTFUN1:def 2;

        hence thesis by CARD_5: 2;

      end;

      :: ABCMIZ_1:def33

      func QuasiTerms C -> Subset of ( Free (C,( MSVars C))) equals (the Sorts of ( Free (C,( MSVars C))) . ( a_Term C));

      coherence by A1;

    end

    registration

      let C;

      cluster ( QuasiTerms C) -> non empty constituted-DTrees;

      coherence ;

    end

    definition

      let C;

      mode quasi-term of C is expression of C, ( a_Term C);

    end

    theorem :: ABCMIZ_1:49

    z is quasi-term of C iff z in ( QuasiTerms C) by Th41;

    definition

      let x be variable;

      let C;

      :: ABCMIZ_1:def34

      func x -term C -> quasi-term of C equals ( root-tree [x, a_Term ]);

      coherence

      proof

        (( MSVars C) . a_Term ) = Vars by Def25;

        then ( root-tree [x, a_Term ]) in ( QuasiTerms C) by MSAFREE3: 4;

        hence thesis by Th41;

      end;

    end

    theorem :: ABCMIZ_1:50

    

     Th50: for x1,x2 be variable holds for C1,C2 be initialized ConstructorSignature st (x1 -term C1) = (x2 -term C2) holds x1 = x2

    proof

      let x1,x2 be variable;

      let C1,C2 be initialized ConstructorSignature;

      assume (x1 -term C1) = (x2 -term C2);

      then [x1, a_Term ] = [x2, a_Term ] by TREES_4: 4;

      hence thesis by XTUPLE_0: 1;

    end;

    registration

      let x be variable;

      let C;

      cluster (x -term C) -> non compound;

      coherence

      proof

        ( a_Term C) in the carrier of C;

        then

         A1: ( a_Term C) <> the carrier of C;

        

         A2: ((x -term C) . {} ) = [x, ( a_Term C)] by TREES_4: 3;

        ( a_Term C) nin {the carrier of C} by A1, TARSKI:def 1;

        hence ((x -term C) . {} ) nin [:the carrier' of C, {the carrier of C}:] by A2, ZFMISC_1: 87;

      end;

    end

    theorem :: ABCMIZ_1:51

    

     Th51: for p be DTree-yielding FinSequence holds ( [c, the carrier of C] -tree p) is expression of C iff ( len p) = ( len ( the_arity_of c)) & p in (( QuasiTerms C) * )

    proof

      set o = c;

      

       A1: o <> * by Def11;

      

       A2: o <> non_op by Def11;

      let p be DTree-yielding FinSequence;

      set V = (( MSVars C) (\/) (the carrier of C --> { 0 }));

      

       A3: the Sorts of ( Free (C,( MSVars C))) = (C -Terms (( MSVars C),V)) by MSAFREE3: 24;

      now

        assume

         A4: ( [o, the carrier of C] -tree p) is expression of C;

        then

         A5: ( [o, the carrier of C] -tree p) is Term of C, V by MSAFREE3: 8;

        then

         A6: p is ArgumentSeq of ( Sym (o,V)) by MSATERM: 1;

        hence ( len p) = ( len ( the_arity_of o)) by MSATERM: 22;

        reconsider q = p as ArgumentSeq of ( Sym (o,V)) by A5, MSATERM: 1;

        

         A7: ( the_sort_of (( Sym (o,V)) -tree q)) = ( the_result_sort_of o) by MSATERM: 20;

        

         A8: ( variables_in (( Sym (o,V)) -tree q)) c= ( MSVars C) by A4, MSAFREE3: 27;

        ((C -Terms (( MSVars C),V)) . ( the_result_sort_of o)) = { t where t be Term of C, V : ( the_sort_of t) = ( the_result_sort_of o) & ( variables_in t) c= ( MSVars C) } by MSAFREE3:def 5;

        then (( Sym (o,V)) -tree p) in ((C -Terms (( MSVars C),V)) . ( the_result_sort_of o)) by A7, A8;

        then

         A9: ( rng p) c= ( Union (C -Terms (( MSVars C),V))) by A6, MSAFREE3: 19;

        ( rng p) c= ( QuasiTerms C)

        proof

          let a be object;

          assume

           A10: a in ( rng p);

          then

          reconsider ta = a as expression of C by A9, MSAFREE3: 24;

          consider i be object such that

           A11: i in ( dom p) and

           A12: a = (p . i) by A10, FUNCT_1:def 3;

          reconsider i as Nat by A11;

          reconsider t = (p . i) as Term of C, V by A6, A11, MSATERM: 22;

          

           A13: (the Arity of C . o) in ( { a_Term } * ) by A1, A2, Def9;

          

           A14: ( dom p) = ( dom ( the_arity_of o)) by A6, MSATERM: 22;

          

           A15: ( the_arity_of o) is FinSequence of { a_Term } by A13, FINSEQ_1:def 11;

          

           A16: (( the_arity_of o) . i) in ( rng ( the_arity_of o)) by A11, A14, FUNCT_1:def 3;

          ( rng ( the_arity_of o)) c= {( a_Term C)} by A15, FINSEQ_1:def 4;

          then (( the_arity_of o) . i) = ( a_Term C) by A16, TARSKI:def 1;

          then

           A17: ( the_sort_of t) = ( a_Term C) by A6, A11, MSATERM: 23;

          t = ta by A12;

          then ( variables_in t) c= ( MSVars C) by MSAFREE3: 27;

          then t in { T where T be Term of C, V : ( the_sort_of T) = ( a_Term C) & ( variables_in T) c= ( MSVars C) } by A17;

          then t in ((C -Terms (( MSVars C),V)) . ( a_Term C)) by MSAFREE3:def 5;

          hence thesis by A12, MSAFREE3: 23;

        end;

        then p is FinSequence of ( QuasiTerms C) by FINSEQ_1:def 4;

        hence p in (( QuasiTerms C) * ) by FINSEQ_1:def 11;

      end;

      assume

       A18: ( len p) = ( len ( the_arity_of o));

      assume

       A19: p in (( QuasiTerms C) * );

      ( Free (C,( MSVars C))) = (( FreeMSA V) | (C -Terms (( MSVars C),V))) by MSAFREE3: 25;

      then the Sorts of ( Free (C,( MSVars C))) is ManySortedSubset of the Sorts of ( FreeMSA V) by MSUALG_2:def 9;

      then the Sorts of ( Free (C,( MSVars C))) c= the Sorts of ( FreeMSA V) by PBOOLE:def 18;

      then

       A20: ( QuasiTerms C) c= (the Sorts of ( FreeMSA V) . ( a_Term C));

      

       A21: p is FinSequence of ( QuasiTerms C) by A19, FINSEQ_1:def 11;

      then

       A22: ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

      now

        let i be Nat;

        assume

         A23: i in ( dom p);

        then (p . i) in ( rng p) by FUNCT_1:def 3;

        then

         A24: (p . i) in ( QuasiTerms C) by A22;

        then

        reconsider t = (p . i) as expression of C;

        

         A25: (the Arity of C . o) in ( { a_Term } * ) by A1, A2, Def9;

        

         A26: ( dom p) = ( dom ( the_arity_of o)) by A18, FINSEQ_3: 29;

        

         A27: ( the_arity_of o) is FinSequence of { a_Term } by A25, FINSEQ_1:def 11;

        

         A28: (( the_arity_of o) . i) in ( rng ( the_arity_of o)) by A23, A26, FUNCT_1:def 3;

        ( rng ( the_arity_of o)) c= {( a_Term C)} by A27, FINSEQ_1:def 4;

        then

         A29: (( the_arity_of o) . i) = ( a_Term C) by A28, TARSKI:def 1;

        reconsider T = t as Term of C, V by MSAFREE3: 8;

        take T;

        thus T = (p . i);

        T in (the Sorts of ( FreeMSA V) . ( a_Term C)) by A20, A24;

        then T in ( FreeSort (V,( a_Term C))) by MSAFREE:def 11;

        hence ( the_sort_of T) = (( the_arity_of o) . i) by A29, MSATERM:def 5;

      end;

      then

       A30: p is ArgumentSeq of ( Sym (o,V)) by A18, MSATERM: 24;

      

       A31: ( dom the Sorts of ( Free (C,( MSVars C)))) = the carrier of C by PARTFUN1:def 2;

      ( rng p) c= ( Union (C -Terms (( MSVars C),V))) by A3, A21, FINSEQ_1:def 4;

      then (( Sym (o,V)) -tree p) in ((C -Terms (( MSVars C),V)) . ( the_result_sort_of o)) by A30, MSAFREE3: 19;

      hence thesis by A3, A31, CARD_5: 2;

    end;

    reserve p for FinSequence of ( QuasiTerms C);

    definition

      let C, c;

      let p;

      

       A2: p in (( QuasiTerms C) * ) by FINSEQ_1:def 11;

      :: ABCMIZ_1:def35

      func c -trm p -> compound expression of C equals

      : Def35: ( [c, the carrier of C] -tree p);

      coherence

      proof

        reconsider t = ( [c, the carrier of C] -tree p) as expression of C by A1, A2, Th51;

        (t . {} ) = [c, the carrier of C] by TREES_4:def 4;

        then (t . {} ) in [:the carrier' of C, {the carrier of C}:] by ZFMISC_1: 106;

        hence thesis by Def27;

      end;

    end

    theorem :: ABCMIZ_1:52

    

     Th52: ( len p) = ( len ( the_arity_of c)) implies (c -trm p) is expression of C, ( the_result_sort_of c)

    proof

      set X = ( MSVars C);

      set V = (X (\/) (the carrier of C --> { 0 }));

      assume ( len p) = ( len ( the_arity_of c));

      then

       A1: (( Sym (c,V)) -tree p) = (c -trm p) by Def35;

      

       A2: the Sorts of ( Free (C,X)) = (C -Terms (X,V)) by MSAFREE3: 24;

      (c -trm p) is Term of C, V by MSAFREE3: 8;

      then

      reconsider q = p as ArgumentSeq of ( Sym (c,V)) by A1, MSATERM: 1;

      ( rng q) c= ( Union the Sorts of ( Free (C,X))) by FINSEQ_1:def 4;

      then (c -trm p) in ((C -Terms (X,V)) . ( the_result_sort_of c)) by A1, A2, MSAFREE3: 19;

      hence thesis by A2, Def28;

    end;

    theorem :: ABCMIZ_1:53

    

     Th53: for e be expression of C holds (ex x be variable st e = (x -term C)) or (ex c be constructor OperSymbol of C st ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & e = (c -trm p)) or (ex a be expression of C, ( an_Adj C) st e = (( non_op C) term a)) or ex a be expression of C, ( an_Adj C) st ex t be expression of C, ( a_Type C) st e = (( ast C) term (a,t))

    proof

      let t be expression of C;

      set X = ( MSVars C);

      set V = (X (\/) (the carrier of C --> { 0 }));

      per cases by Th7;

        suppose ex s be SortSymbol of C, v be set st t = ( root-tree [v, s]) & v in (X . s);

        then

        consider s be SortSymbol of C, v be set such that

         A1: t = ( root-tree [v, s]) and

         A2: v in (X . s);

        the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

        then

         A3: s = a_Term or s = an_Adj or s = a_Type by ENUMSET1:def 1;

        then

        reconsider v as variable by A2, Def25;

        t = (v -term C) by A1, A2, A3, Def25;

        hence thesis;

      end;

        suppose ex o be OperSymbol of C, p be FinSequence of ( Free (C,X)) st t = ( [o, the carrier of C] -tree p) & ( len p) = ( len ( the_arity_of o)) & p is DTree-yielding & p is ArgumentSeq of ( Sym (o,V));

        then

        consider o be OperSymbol of C, p be FinSequence of ( Free (C,X)) such that

         A4: t = ( [o, the carrier of C] -tree p) and

         A5: ( len p) = ( len ( the_arity_of o)) and p is DTree-yielding and

         A6: p is ArgumentSeq of ( Sym (o,V));

        per cases ;

          suppose

           A7: o = * ;

          then

           A8: ( the_arity_of o) = <* an_Adj , a_Type *> by Def9;

          

           A9: ( dom p) = ( dom ( the_arity_of o)) by A6, MSATERM: 22;

          

           A10: ( dom ( the_arity_of o)) = ( Seg 2) by A8, FINSEQ_1: 89;

          

           A11: ( len ( the_arity_of o)) = 2 by A8, FINSEQ_1: 44;

          

           A12: 1 in ( Seg 2);

          

           A13: 2 in ( Seg 2);

          

           A14: (p . 1) in ( rng p) by A9, A10, A12, FUNCT_1: 3;

          (p . 2) in ( rng p) by A9, A10, A13, FUNCT_1: 3;

          then

          reconsider p1 = (p . 1), p2 = (p . 2) as expression of C by A14;

          reconsider t1 = p1, t2 = p2 as Term of C, V by MSAFREE3: 8;

          

           A15: (C variables_in p1) c= X by MSAFREE3: 27;

          

           A16: ( variables_in t1) = (C variables_in t1);

          

           A17: (C variables_in p2) c= X by MSAFREE3: 27;

          

           A18: ( variables_in t2) = (C variables_in t2);

          

           A19: ( <* an_Adj , a_Type *> . 2) = ( a_Type C) by FINSEQ_1: 44;

          

           A20: ( <* an_Adj , a_Type *> . 1) = ( an_Adj C) by FINSEQ_1: 44;

          ( the_sort_of t1) = (( the_arity_of o) . 1) by A6, A9, A10, A12, MSATERM: 23;

          then t1 in { q where q be Term of C, V : ( the_sort_of q) = ( an_Adj C) & ( variables_in q) c= X } by A8, A15, A16, A20;

          then p1 in ((C -Terms (X,V)) . ( an_Adj C)) by MSAFREE3:def 5;

          then p1 in (the Sorts of ( Free (C,X)) . ( an_Adj C)) by MSAFREE3: 24;

          then

          reconsider a = p1 as expression of C, ( an_Adj C) by Def28;

          ( the_sort_of t2) = (( the_arity_of o) . 2) by A6, A9, A10, A13, MSATERM: 23;

          then t2 in { q where q be Term of C, V : ( the_sort_of q) = ( a_Type C) & ( variables_in q) c= X } by A8, A17, A18, A19;

          then p2 in ((C -Terms (X,V)) . ( a_Type C)) by MSAFREE3:def 5;

          then p2 in (the Sorts of ( Free (C,X)) . ( a_Type C)) by MSAFREE3: 24;

          then

          reconsider q = p2 as expression of C, ( a_Type C) by Def28;

          p = <*a, q*> by A5, A11, FINSEQ_1: 44;

          then t = (( ast C) term (a,q)) by A4, A7, A8, A11, A19, A20, Def31;

          hence thesis;

        end;

          suppose

           A21: o = non_op ;

          then

           A22: ( the_arity_of o) = <* an_Adj *> by Def9;

          

           A23: ( dom p) = ( dom ( the_arity_of o)) by A6, MSATERM: 22;

          

           A24: ( dom ( the_arity_of o)) = ( Seg 1) by A22, FINSEQ_1: 38;

          

           A25: ( len ( the_arity_of o)) = 1 by A22, FINSEQ_1: 39;

          

           A26: 1 in ( Seg 1);

          then (p . 1) in ( rng p) by A23, A24, FUNCT_1: 3;

          then

          reconsider p1 = (p . 1) as expression of C;

          reconsider t1 = p1 as Term of C, V by MSAFREE3: 8;

          

           A27: (C variables_in p1) c= X by MSAFREE3: 27;

          

           A28: ( variables_in t1) = (C variables_in t1);

          

           A29: ( <* an_Adj *> . 1) = ( an_Adj C) by FINSEQ_1: 40;

          ( the_sort_of t1) = (( the_arity_of o) . 1) by A6, A23, A24, A26, MSATERM: 23;

          then t1 in { q where q be Term of C, V : ( the_sort_of q) = ( an_Adj C) & ( variables_in q) c= X } by A22, A27, A28, A29;

          then p1 in ((C -Terms (X,V)) . ( an_Adj C)) by MSAFREE3:def 5;

          then p1 in (the Sorts of ( Free (C,X)) . ( an_Adj C)) by MSAFREE3: 24;

          then

          reconsider a = p1 as expression of C, ( an_Adj C) by Def28;

          p = <*a*> by A5, A25, FINSEQ_1: 40;

          then t = (( non_op C) term a) by A4, A21, A22, A25, A29, Def30;

          hence thesis;

        end;

          suppose o is constructor;

          then

          reconsider o as constructor OperSymbol of C;

          t = ( [o, the carrier of C] -tree p) by A4;

          then p in (( QuasiTerms C) * ) by Th51;

          then

          reconsider p as FinSequence of ( QuasiTerms C) by FINSEQ_1:def 11;

          t = (o -trm p) by A4, A5, Def35;

          hence thesis by A5;

        end;

      end;

    end;

    theorem :: ABCMIZ_1:54

    

     Th54: ( len p) = ( len ( the_arity_of c)) implies (c -trm p) <> (( non_op C) term a)

    proof

      assume ( len p) = ( len ( the_arity_of c));

      then (c -trm p) = ( [c, the carrier of C] -tree p) by Def35;

      then

       A1: ((c -trm p) . {} ) = [c, the carrier of C] by TREES_4:def 4;

      assume (c -trm p) = (( non_op C) term a);

      then (c -trm p) = ( [ non_op , the carrier of C] -tree <*a*>) by Th43;

      then [c, the carrier of C] = [ non_op , the carrier of C] by A1, TREES_4:def 4;

      then c = non_op by XTUPLE_0: 1;

      hence thesis by Def11;

    end;

    theorem :: ABCMIZ_1:55

    

     Th55: ( len p) = ( len ( the_arity_of c)) implies (c -trm p) <> (( ast C) term (a,t))

    proof

      assume ( len p) = ( len ( the_arity_of c));

      then (c -trm p) = ( [c, the carrier of C] -tree p) by Def35;

      then

       A1: ((c -trm p) . {} ) = [c, the carrier of C] by TREES_4:def 4;

      assume (c -trm p) = (( ast C) term (a,t));

      then (c -trm p) = ( [ * , the carrier of C] -tree <*a, t*>) by Th46;

      then [c, the carrier of C] = [ * , the carrier of C] by A1, TREES_4:def 4;

      then c = * by XTUPLE_0: 1;

      hence thesis by Def11;

    end;

    theorem :: ABCMIZ_1:56

    (( non_op C) term a) <> (( ast C) term (b,t))

    proof

      assume (( non_op C) term a) = (( ast C) term (b,t));

      then (( non_op C) term a) = ( [ * , the carrier of C] -tree <*b, t*>) by Th46;

      then ((( non_op C) term a) . {} ) = [ * , the carrier of C] by TREES_4:def 4;

      then (( [ non_op , the carrier of C] -tree <*a*>) . {} ) = [ * , the carrier of C] by Th43;

      then [ non_op , the carrier of C] = [ * , the carrier of C] by TREES_4:def 4;

      hence thesis by XTUPLE_0: 1;

    end;

    reserve e for expression of C;

    theorem :: ABCMIZ_1:57

    

     Th57: (e . {} ) = [ non_op , the carrier of C] implies ex a st e = (( non_op C) term a)

    proof

      assume

       A1: (e . {} ) = [ non_op , the carrier of C];

      ( non_op C) in the carrier' of C;

      then

       A2: (e . {} ) in [:the carrier' of C, {the carrier of C}:] by A1, ZFMISC_1: 106;

      per cases by Th53;

        suppose ex x be variable st e = (x -term C);

        hence thesis by A2, Def27;

      end;

        suppose ex c, p st ( len p) = ( len ( the_arity_of c)) & e = (c -trm p);

        then

        consider c be constructor OperSymbol of C, p be FinSequence of ( QuasiTerms C) such that

         A3: ( len p) = ( len ( the_arity_of c)) and

         A4: e = (c -trm p);

        e = ( [c, the carrier of C] -tree p) by A3, A4, Def35;

        then (e . {} ) = [c, the carrier of C] by TREES_4:def 4;

        then non_op = c by A1, XTUPLE_0: 1;

        hence thesis by Def11;

      end;

        suppose ex a st e = (( non_op C) term a);

        hence thesis;

      end;

        suppose ex a, t st e = (( ast C) term (a,t));

        then

        consider a, t such that

         A5: e = (( ast C) term (a,t));

        e = ( [ * , the carrier of C] -tree <*a, t*>) by A5, Th46;

        then (e . {} ) = [ * , the carrier of C] by TREES_4:def 4;

        hence thesis by A1, XTUPLE_0: 1;

      end;

    end;

    theorem :: ABCMIZ_1:58

    

     Th58: (e . {} ) = [ * , the carrier of C] implies ex a, t st e = (( ast C) term (a,t))

    proof

      assume

       A1: (e . {} ) = [ * , the carrier of C];

      ( ast C) in the carrier' of C;

      then

       A2: (e . {} ) in [:the carrier' of C, {the carrier of C}:] by A1, ZFMISC_1: 106;

      per cases by Th53;

        suppose ex x be variable st e = (x -term C);

        hence thesis by A2, Def27;

      end;

        suppose ex c, p st ( len p) = ( len ( the_arity_of c)) & e = (c -trm p);

        then

        consider c be constructor OperSymbol of C, p be FinSequence of ( QuasiTerms C) such that

         A3: ( len p) = ( len ( the_arity_of c)) and

         A4: e = (c -trm p);

        e = ( [c, the carrier of C] -tree p) by A3, A4, Def35;

        then (e . {} ) = [c, the carrier of C] by TREES_4:def 4;

        then * = c by A1, XTUPLE_0: 1;

        hence thesis by Def11;

      end;

        suppose ex a be expression of C, ( an_Adj C) st e = (( non_op C) term a);

        then

        consider a be expression of C, ( an_Adj C) such that

         A5: e = (( non_op C) term a);

        e = ( [ non_op , the carrier of C] -tree <*a*>) by A5, Th43;

        then (e . {} ) = [ non_op , the carrier of C] by TREES_4:def 4;

        hence thesis by A1, XTUPLE_0: 1;

      end;

        suppose ex a, t st e = (( ast C) term (a,t));

        hence thesis;

      end;

    end;

    begin

    reserve a,a9 for expression of C, ( an_Adj C);

    definition

      let C, a;

      :: ABCMIZ_1:def36

      func Non a -> expression of C, ( an_Adj C) equals

      : Def36: (a | <* 0 *>) if ex a9 st a = (( non_op C) term a9)

      otherwise (( non_op C) term a);

      coherence

      proof

        now

          given a9 be expression of C, ( an_Adj C) such that

           A1: a = (( non_op C) term a9);

          

           A2: a = ( [ non_op , the carrier of C] -tree <*a9*>) by A1, Th43;

          ( len <*a9*>) = 1 by FINSEQ_1: 40;

          then (a | <* 0 *>) = ( <*a9*> . ( 0 + 1)) by A2, TREES_4:def 4;

          hence (a | <* 0 *>) is expression of C, ( an_Adj C) by FINSEQ_1: 40;

        end;

        thus thesis by Th43;

      end;

      consistency ;

    end

    definition

      let C, a;

      :: ABCMIZ_1:def37

      attr a is positive means

      : Def37: not ex a9 st a = (( non_op C) term a9);

    end

    registration

      let C;

      cluster positive for expression of C, ( an_Adj C);

      existence

      proof

        consider m,a be OperSymbol of C such that ( the_result_sort_of m) = a_Type and ( the_arity_of m) = {} and

         A1: ( the_result_sort_of a) = an_Adj and

         A2: ( the_arity_of a) = {} by Def12;

        set X = ( MSVars C);

        ( root-tree [a, the carrier of C]) in (the Sorts of ( Free (C,X)) . an_Adj ) by A1, A2, MSAFREE3: 5;

        then

        reconsider v = ( root-tree [a, the carrier of C]) as expression of C, ( an_Adj C) by Th41;

        take v;

        given a9 be expression of C, ( an_Adj C) such that

         A3: v = (( non_op C) term a9);

        v = ( [ non_op , the carrier of C] -tree <*a9*>) by A3, Th43;

        

        then [ non_op , the carrier of C] = (v . {} ) by TREES_4:def 4

        .= [a, the carrier of C] by TREES_4: 3;

        then a = ( non_op C) by XTUPLE_0: 1;

        hence contradiction by A2, Def9;

      end;

    end

    theorem :: ABCMIZ_1:59

    

     Th59: for a be positive expression of C, ( an_Adj C) holds ( Non a) = (( non_op C) term a)

    proof

      let a be positive expression of C, ( an_Adj C);

       not ex a9 be expression of C, ( an_Adj C) st a = (( non_op C) term a9) by Def37;

      hence thesis by Def36;

    end;

    definition

      let C, a;

      :: ABCMIZ_1:def38

      attr a is negative means

      : Def38: ex a9 st a9 is positive & a = (( non_op C) term a9);

    end

    registration

      let C;

      let a be positive expression of C, ( an_Adj C);

      cluster ( Non a) -> negative non positive;

      coherence

      proof

        thus ( Non a) is negative

        proof

          take a;

          thus thesis by Th59;

        end;

        take a;

        thus thesis by Th59;

      end;

    end

    registration

      let C;

      cluster negative non positive for expression of C, ( an_Adj C);

      existence

      proof

        set a = the positive expression of C, ( an_Adj C);

        take ( Non a);

        thus thesis;

      end;

    end

    theorem :: ABCMIZ_1:60

    

     Th60: for a be non positive expression of C, ( an_Adj C) holds ex a9 be expression of C, ( an_Adj C) st a = (( non_op C) term a9) & ( Non a) = a9

    proof

      let a be non positive expression of C, ( an_Adj C);

      consider a9 be expression of C, ( an_Adj C) such that

       A1: a = (( non_op C) term a9) by Def37;

      

       A2: a = ( [ non_op , the carrier of C] -tree <*a9*>) by A1, Th43;

      take a9;

      ( len <*a9*>) = 1 by FINSEQ_1: 40;

      

      then (a | <* 0 *>) = ( <*a9*> . ( 0 + 1)) by A2, TREES_4:def 4

      .= a9 by FINSEQ_1: 40;

      hence thesis by A1, Def36;

    end;

    theorem :: ABCMIZ_1:61

    

     Th61: for a be negative expression of C, ( an_Adj C) holds ex a9 be positive expression of C, ( an_Adj C) st a = (( non_op C) term a9) & ( Non a) = a9

    proof

      let a be negative expression of C, ( an_Adj C);

      consider a9 be expression of C, ( an_Adj C) such that

       A1: a9 is positive and

       A2: a = (( non_op C) term a9) by Def38;

      

       A3: a = ( [ non_op , the carrier of C] -tree <*a9*>) by A2, Th43;

      reconsider a9 as positive expression of C, ( an_Adj C) by A1;

      take a9;

      ( len <*a9*>) = 1 by FINSEQ_1: 40;

      

      then (a | <* 0 *>) = ( <*a9*> . ( 0 + 1)) by A3, TREES_4:def 4

      .= a9 by FINSEQ_1: 40;

      hence thesis by A2, Def36;

    end;

    theorem :: ABCMIZ_1:62

    

     Th62: for a be non positive expression of C, ( an_Adj C) holds (( non_op C) term ( Non a)) = a

    proof

      let a be non positive expression of C, ( an_Adj C);

      ex a9 be expression of C, ( an_Adj C) st (a = (( non_op C) term a9)) & (( Non a) = a9) by Th60;

      hence thesis;

    end;

    registration

      let C;

      let a be negative expression of C, ( an_Adj C);

      cluster ( Non a) -> positive;

      coherence

      proof

        ex a9 be positive expression of C, ( an_Adj C) st a = (( non_op C) term a9) & ( Non a) = a9 by Th61;

        hence thesis;

      end;

    end

    definition

      let C, a;

      :: ABCMIZ_1:def39

      attr a is regular means

      : Def39: a is positive or a is negative;

    end

    registration

      let C;

      cluster positive -> regular non negative for expression of C, ( an_Adj C);

      coherence ;

      cluster negative -> regular non positive for expression of C, ( an_Adj C);

      coherence ;

    end

    registration

      let C;

      cluster regular for expression of C, ( an_Adj C);

      existence

      proof

        set a = the positive expression of C, ( an_Adj C);

        take a;

        thus thesis;

      end;

    end

    definition

      let C;

      set X = { a : a is regular };

      

       A1: X c= ( Union the Sorts of ( Free (C,( MSVars C))))

      proof

        let x be object;

        assume x in X;

        then ex a st x = a & a is regular;

        hence thesis;

      end;

      :: ABCMIZ_1:def40

      func QuasiAdjs C -> Subset of ( Free (C,( MSVars C))) equals { a : a is regular };

      coherence by A1;

    end

    registration

      let C;

      cluster ( QuasiAdjs C) -> non empty constituted-DTrees;

      coherence

      proof

        set v = the positive expression of C, ( an_Adj C);

        v in { a : a is regular };

        hence ( QuasiAdjs C) is non empty;

        let x be object;

        assume x in ( QuasiAdjs C);

        hence thesis;

      end;

    end

    definition

      let C;

      mode quasi-adjective of C is regular expression of C, ( an_Adj C);

    end

    theorem :: ABCMIZ_1:63

    

     Th63: z is quasi-adjective of C iff z in ( QuasiAdjs C)

    proof

      z in ( QuasiAdjs C) iff ex a st z = a & a is regular;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:64

    z is quasi-adjective of C iff z is positive expression of C, ( an_Adj C) or z is negative expression of C, ( an_Adj C) by Def39;

    registration

      let C;

      cluster non positive -> negative for quasi-adjective of C;

      coherence by Def39;

      cluster non negative -> positive for quasi-adjective of C;

      coherence ;

    end

    registration

      let C;

      cluster positive for quasi-adjective of C;

      existence

      proof

        set a = the positive expression of C, ( an_Adj C);

        a is quasi-adjective of C;

        hence thesis;

      end;

      cluster negative for quasi-adjective of C;

      existence

      proof

        set a = the negative expression of C, ( an_Adj C);

        a is quasi-adjective of C;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:65

    

     Th65: for a be positive quasi-adjective of C holds ex v be constructor OperSymbol of C st ( the_result_sort_of v) = ( an_Adj C) & ex p st ( len p) = ( len ( the_arity_of v)) & a = (v -trm p)

    proof

      let e be positive quasi-adjective of C;

      per cases by Th53;

        suppose ex x be variable st e = (x -term C);

        hence thesis by Th48;

      end;

        suppose ex c be constructor OperSymbol of C st ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & e = (c -trm p);

        then

        consider c be constructor OperSymbol of C, p be FinSequence of ( QuasiTerms C) such that

         A1: ( len p) = ( len ( the_arity_of c)) and

         A2: e = (c -trm p);

        take c;

        e is expression of C, ( the_result_sort_of c) by A1, A2, Th52;

        hence ( the_result_sort_of c) = ( an_Adj C) by Th48;

        take p;

        thus thesis by A1, A2;

      end;

        suppose ex a st e = (( non_op C) term a);

        hence thesis by Def37;

      end;

        suppose ex a, t st e = (( ast C) term (a,t));

        then e is expression of C, ( a_Type C) by Th46;

        hence thesis by Th48;

      end;

    end;

    theorem :: ABCMIZ_1:66

    

     Th66: for v be constructor OperSymbol of C st ( the_result_sort_of v) = ( an_Adj C) & ( len p) = ( len ( the_arity_of v)) holds (v -trm p) is positive quasi-adjective of C

    proof

      let v be constructor OperSymbol of C such that

       A1: ( the_result_sort_of v) = ( an_Adj C);

      assume

       A2: ( len p) = ( len ( the_arity_of v));

      then

      reconsider a = (v -trm p) as expression of C, ( an_Adj C) by A1, Th52;

      a is positive by A2, Th54;

      hence thesis;

    end;

    registration

      let C;

      let a be quasi-adjective of C;

      cluster ( Non a) -> regular;

      coherence

      proof

        per cases ;

          suppose a is positive;

          then

          reconsider a9 = a as positive expression of C, ( an_Adj C);

          ( Non a9) is negative;

          hence thesis;

        end;

          suppose a is negative;

          then

          reconsider a9 = a as negative expression of C, ( an_Adj C);

          ( Non a9) is positive;

          hence thesis;

        end;

      end;

    end

    theorem :: ABCMIZ_1:67

    

     Th67: for a be quasi-adjective of C holds ( Non ( Non a)) = a

    proof

      let a be quasi-adjective of C;

      per cases ;

        suppose a is positive;

        then

        reconsider a9 = a as positive expression of C, ( an_Adj C);

        

         A1: ex b be positive expression of C, ( an_Adj C) st (( Non a9) = (( non_op C) term b)) & (( Non ( Non a9)) = b) by Th61;

        ( Non a9) = (( non_op C) term a) by Th59;

        hence thesis by A1, Th44;

      end;

        suppose a is negative;

        then

        reconsider a9 = a as negative expression of C, ( an_Adj C);

        ex b be positive expression of C, ( an_Adj C) st a9 = (( non_op C) term b) & ( Non a9) = b by Th61;

        hence thesis by Th59;

      end;

    end;

    theorem :: ABCMIZ_1:68

    for a1,a2 be quasi-adjective of C st ( Non a1) = ( Non a2) holds a1 = a2

    proof

      let a1,a2 be quasi-adjective of C;

      ( Non ( Non a1)) = a1 by Th67;

      hence thesis by Th67;

    end;

    theorem :: ABCMIZ_1:69

    for a be quasi-adjective of C holds ( Non a) <> a

    proof

      let a be quasi-adjective of C;

      per cases ;

        suppose a is positive;

        then

        reconsider a9 = a as positive quasi-adjective of C;

        ( Non a9) is negative quasi-adjective of C;

        hence thesis;

      end;

        suppose a is negative;

        then

        reconsider a9 = a as negative quasi-adjective of C;

        ( Non a9) is positive quasi-adjective of C;

        hence thesis;

      end;

    end;

    begin

    definition

      let C;

      let q be expression of C, ( a_Type C);

      :: ABCMIZ_1:def41

      attr q is pure means

      : Def41: not ex a, t st q = (( ast C) term (a,t));

    end

    theorem :: ABCMIZ_1:70

    

     Th70: for m be OperSymbol of C st ( the_result_sort_of m) = a_Type & ( the_arity_of m) = {} holds ex t st t = ( root-tree [m, the carrier of C]) & t is pure

    proof

      let m be OperSymbol of C such that

       A1: ( the_result_sort_of m) = a_Type and

       A2: ( the_arity_of m) = {} ;

      set X = ( MSVars C);

      ( root-tree [m, the carrier of C]) in (the Sorts of ( Free (C,X)) . a_Type ) by A1, A2, MSAFREE3: 5;

      then

      reconsider T = ( root-tree [m, the carrier of C]) as expression of C, ( a_Type C) by Th41;

      take T;

      thus T = ( root-tree [m, the carrier of C]);

      given a, t such that

       A3: T = (( ast C) term (a,t));

      T = ( [ * , the carrier of C] -tree <*a, t*>) by A3, Th46;

      

      then [ * , the carrier of C] = (T . {} ) by TREES_4:def 4

      .= [m, the carrier of C] by TREES_4: 3;

      then m = ( ast C) by XTUPLE_0: 1;

      hence contradiction by A2, Def9;

    end;

    theorem :: ABCMIZ_1:71

    

     Th71: for v be OperSymbol of C st ( the_result_sort_of v) = an_Adj & ( the_arity_of v) = {} holds ex a st a = ( root-tree [v, the carrier of C]) & a is positive

    proof

      let m be OperSymbol of C such that

       A1: ( the_result_sort_of m) = an_Adj and

       A2: ( the_arity_of m) = {} ;

      set X = ( MSVars C);

      ( root-tree [m, the carrier of C]) in (the Sorts of ( Free (C,X)) . an_Adj ) by A1, A2, MSAFREE3: 5;

      then

      reconsider T = ( root-tree [m, the carrier of C]) as expression of C, ( an_Adj C) by Th41;

      take T;

      thus T = ( root-tree [m, the carrier of C]);

      given a be expression of C, ( an_Adj C) such that

       A3: T = (( non_op C) term a);

      T = ( [ non_op , the carrier of C] -tree <*a*>) by A3, Th43;

      

      then [ non_op , the carrier of C] = (T . {} ) by TREES_4:def 4

      .= [m, the carrier of C] by TREES_4: 3;

      then m = non_op by XTUPLE_0: 1;

      hence contradiction by A2, Def9;

    end;

    registration

      let C;

      cluster pure for expression of C, ( a_Type C);

      existence

      proof

        consider m,a be OperSymbol of C such that

         A1: ( the_result_sort_of m) = a_Type and

         A2: ( the_arity_of m) = {} and ( the_result_sort_of a) = an_Adj and ( the_arity_of a) = {} by Def12;

        ex t be expression of C, ( a_Type C) st t = ( root-tree [m, the carrier of C]) & t is pure by A1, A2, Th70;

        hence thesis;

      end;

    end

    reserve q for pure expression of C, ( a_Type C),

A for finite Subset of ( QuasiAdjs C);

    definition

      let C;

      :: ABCMIZ_1:def42

      func QuasiTypes C -> set equals { [A, t] : t is pure };

      coherence ;

    end

    registration

      let C;

      cluster ( QuasiTypes C) -> non empty;

      coherence

      proof

        set q = the pure expression of C, ( a_Type C);

         {} is finite Subset of ( QuasiAdjs C) by XBOOLE_1: 2;

        then [ {} , q] in { [A, t] : t is pure };

        hence thesis;

      end;

    end

    definition

      let C;

      :: ABCMIZ_1:def43

      mode quasi-type of C -> set means

      : Def43: it in ( QuasiTypes C);

      existence

      proof

        set T = the Element of ( QuasiTypes C);

        take T;

        thus thesis;

      end;

    end

    theorem :: ABCMIZ_1:72

    

     Th72: z is quasi-type of C iff ex A, q st z = [A, q]

    proof

      z in ( QuasiTypes C) iff ex t, A st z = [A, t] & t is pure;

      hence thesis by Def43;

    end;

    theorem :: ABCMIZ_1:73

    

     Th73: [x, y] is quasi-type of C iff x is finite Subset of ( QuasiAdjs C) & y is pure expression of C, ( a_Type C)

    proof

      now

        assume [x, y] is quasi-type of C;

        then ex A, q st ( [x, y] = [A, q]) by Th72;

        hence x is finite Subset of ( QuasiAdjs C) & y is pure expression of C, ( a_Type C) by XTUPLE_0: 1;

      end;

      thus thesis by Th72;

    end;

    reserve T for quasi-type of C;

    registration

      let C;

      cluster -> pair for quasi-type of C;

      coherence

      proof

        let x be quasi-type of C;

        ex A, q st x = [A, q] by Th72;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:74

    

     Th74: ex m be constructor OperSymbol of C st ( the_result_sort_of m) = ( a_Type C) & ex p st ( len p) = ( len ( the_arity_of m)) & q = (m -trm p)

    proof

      set e = q;

      per cases by Th53;

        suppose ex x be variable st e = (x -term C);

        hence thesis by Th48;

      end;

        suppose ex c be constructor OperSymbol of C st ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & e = (c -trm p);

        then

        consider c be constructor OperSymbol of C, p be FinSequence of ( QuasiTerms C) such that

         A1: ( len p) = ( len ( the_arity_of c)) and

         A2: e = (c -trm p);

        take c;

        e is expression of C, ( the_result_sort_of c) by A1, A2, Th52;

        hence ( the_result_sort_of c) = ( a_Type C) by Th48;

        take p;

        thus thesis by A1, A2;

      end;

        suppose ex a st e = (( non_op C) term a);

        then e is expression of C, ( an_Adj C) by Th43;

        hence thesis by Th48;

      end;

        suppose ex a st ex q be expression of C, ( a_Type C) st e = (( ast C) term (a,q));

        hence thesis by Def41;

      end;

    end;

    theorem :: ABCMIZ_1:75

    

     Th75: for m be constructor OperSymbol of C st ( the_result_sort_of m) = ( a_Type C) & ( len p) = ( len ( the_arity_of m)) holds (m -trm p) is pure expression of C, ( a_Type C)

    proof

      let v be constructor OperSymbol of C such that

       A1: ( the_result_sort_of v) = ( a_Type C);

      assume

       A2: ( len p) = ( len ( the_arity_of v));

      then

      reconsider a = (v -trm p) as expression of C, ( a_Type C) by A1, Th52;

      a is pure by A2, Th55;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:76

    ( QuasiTerms C) misses ( QuasiAdjs C) & ( QuasiTerms C) misses ( QuasiTypes C) & ( QuasiTypes C) misses ( QuasiAdjs C)

    proof

      set X = ( MSVars C);

      set Y = (X (\/) (the carrier of C --> { 0 }));

      ex A be MSSubset of ( FreeMSA Y) st (( Free (C,X)) = ( GenMSAlg A)) & (A = (( Reverse Y) "" X)) by MSAFREE3:def 1;

      then the Sorts of ( Free (C,X)) is MSSubset of ( FreeMSA Y) by MSUALG_2:def 9;

      then

       A1: the Sorts of ( Free (C,X)) c= the Sorts of ( FreeMSA Y) by PBOOLE:def 18;

      then

       A2: ( QuasiTerms C) c= (the Sorts of ( FreeMSA Y) . ( a_Term C));

      

       A3: (the Sorts of ( Free (C,X)) . ( an_Adj C)) c= (the Sorts of ( FreeMSA Y) . ( an_Adj C)) by A1;

      ( QuasiAdjs C) c= (the Sorts of ( Free (C,X)) . ( an_Adj C))

      proof

        let x be object;

        assume x in ( QuasiAdjs C);

        then ex a st x = a & a is regular;

        hence thesis by Def28;

      end;

      then

       A4: ( QuasiAdjs C) c= (the Sorts of ( FreeMSA Y) . ( an_Adj C)) by A3;

      (the Sorts of ( FreeMSA Y) . ( a_Term C)) misses (the Sorts of ( FreeMSA Y) . ( an_Adj C)) by PROB_2:def 2;

      hence ( QuasiTerms C) misses ( QuasiAdjs C) by A2, A4, XBOOLE_1: 64;

      now

        let x be object;

        assume that

         A5: x in ( QuasiTerms C) and

         A6: x in ( QuasiTypes C);

        x is quasi-type of C by A6, Def43;

        hence contradiction by A5;

      end;

      hence ( QuasiTerms C) misses ( QuasiTypes C) by XBOOLE_0: 3;

      now

        let x be object;

        assume that

         A7: x in ( QuasiAdjs C) and

         A8: x in ( QuasiTypes C);

        x is quasi-type of C by A8, Def43;

        hence contradiction by A7;

      end;

      hence thesis by XBOOLE_0: 3;

    end;

    theorem :: ABCMIZ_1:77

    for e be set holds (e is quasi-term of C implies not e is quasi-adjective of C) & (e is quasi-term of C implies not e is quasi-type of C) & (e is quasi-type of C implies not e is quasi-adjective of C) by Th48;

    notation

      let C, A, q;

      synonym A ast q for [A,q];

    end

    definition

      let C, A, q;

      :: original: ast

      redefine

      func A ast q -> quasi-type of C ;

      coherence by Th73;

    end

    registration

      let C, T;

      cluster (T `1 ) -> finite;

      coherence

      proof

        ex A, q st T = [A, q] by Th72;

        hence thesis;

      end;

    end

    notation

      let C, T;

      synonym adjs T for T `1 ;

      synonym the_base_of T for T `2 ;

    end

    definition

      let C, T;

      :: original: adjs

      redefine

      func adjs T -> Subset of ( QuasiAdjs C) ;

      coherence

      proof

        ex A, q st T = [A, q] by Th72;

        hence thesis;

      end;

      :: original: the_base_of

      redefine

      func the_base_of T -> pure expression of C, ( a_Type C) ;

      coherence

      proof

        ex A, q st T = [A, q] by Th72;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:78

    ( adjs (A ast q)) = A & ( the_base_of (A ast q)) = q;

    theorem :: ABCMIZ_1:79

    for A1,A2 be finite Subset of ( QuasiAdjs C) holds for q1,q2 be pure expression of C, ( a_Type C) st (A1 ast q1) = (A2 ast q2) holds A1 = A2 & q1 = q2 by XTUPLE_0: 1;

    theorem :: ABCMIZ_1:80

    

     Th80: T = (( adjs T) ast ( the_base_of T));

    theorem :: ABCMIZ_1:81

    for T1,T2 be quasi-type of C st ( adjs T1) = ( adjs T2) & ( the_base_of T1) = ( the_base_of T2) holds T1 = T2

    proof

      let T1,T2 be quasi-type of C;

      T1 = (( adjs T1) ast ( the_base_of T1));

      hence thesis by Th80;

    end;

    definition

      let C, T;

      let a be quasi-adjective of C;

      :: ABCMIZ_1:def44

      func a ast T -> quasi-type of C equals [( {a} \/ ( adjs T)), ( the_base_of T)];

      coherence

      proof

        a in ( QuasiAdjs C);

        then {a} c= ( QuasiAdjs C) by ZFMISC_1: 31;

        then ( {a} \/ ( adjs T)) is Subset of ( QuasiAdjs C) by XBOOLE_1: 8;

        hence thesis by Th73;

      end;

    end

    theorem :: ABCMIZ_1:82

    for a be quasi-adjective of C holds ( adjs (a ast T)) = ( {a} \/ ( adjs T)) & ( the_base_of (a ast T)) = ( the_base_of T);

    theorem :: ABCMIZ_1:83

    for a be quasi-adjective of C holds (a ast (a ast T)) = (a ast T)

    proof

      let a be quasi-adjective of C;

      

      thus (a ast (a ast T)) = [( {a} \/ ( {a} \/ ( adjs T))), ( the_base_of (a ast T))]

      .= [(( {a} \/ {a}) \/ ( adjs T)), ( the_base_of (a ast T))] by XBOOLE_1: 4

      .= (a ast T);

    end;

    theorem :: ABCMIZ_1:84

    for a,b be quasi-adjective of C holds (a ast (b ast T)) = (b ast (a ast T)) by XBOOLE_1: 4;

    begin

    registration

      let S be non void Signature;

      let s be SortSymbol of S;

      let X be non-empty ManySortedSet of the carrier of S;

      let t be Term of S, X;

      cluster (( variables_in t) . s) -> finite;

      coherence

      proof

        defpred P[ non empty Relation] means for s be SortSymbol of S holds ((S variables_in $1) . s) is finite;

        

         A1: for z be SortSymbol of S, v be Element of (X . z) holds P[( root-tree [v, z])]

        proof

          let z be SortSymbol of S, v be Element of (X . z);

          let s be SortSymbol of S;

          s = z or s <> z;

          hence thesis by MSAFREE3: 10;

        end;

        

         A2: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) st for t be Term of S, X st t in ( rng p) holds P[t] holds P[( [o, the carrier of S] -tree p)]

        proof

          let o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) such that

           A3: for t be Term of S, X st t in ( rng p) holds for s be SortSymbol of S holds ((S variables_in t) . s) is finite;

          let s be SortSymbol of S;

          deffunc F( Term of S, X) = ((S variables_in $1) . s);

          set A = { F(q) where q be Term of S, X : q in ( rng p) };

          

           A4: ( rng p) is finite;

          

           A5: A is finite from FRAENKEL:sch 21( A4);

          now

            let B be set;

            assume B in A;

            then ex q be Term of S, X st B = ((S variables_in q) . s) & q in ( rng p);

            hence B is finite by A3;

          end;

          then

           A6: ( union A) is finite by A5, FINSET_1: 7;

          ((S variables_in ( [o, the carrier of S] -tree p)) . s) c= ( union A)

          proof

            let x be object;

            assume x in ((S variables_in ( [o, the carrier of S] -tree p)) . s);

            then

            consider t be DecoratedTree such that

             A7: t in ( rng p) and

             A8: x in ((S variables_in t) . s) by MSAFREE3: 11;

            consider i be object such that

             A9: i in ( dom p) and

             A10: t = (p . i) by A7, FUNCT_1:def 3;

            reconsider i as Nat by A9;

            reconsider t = (p . i) as Term of S, X by A9, MSATERM: 22;

            ((S variables_in t) . s) in A by A7, A10;

            hence thesis by A8, A10, TARSKI:def 4;

          end;

          hence thesis by A6;

        end;

        for t be Term of S, X holds P[t] from MSATERM:sch 1( A1, A2);

        hence thesis;

      end;

    end

    registration

      let S be non void Signature;

      let s be SortSymbol of S;

      let X be non empty-yielding ManySortedSet of the carrier of S;

      let t be Element of ( Free (S,X));

      cluster ((S variables_in t) . s) -> finite;

      coherence

      proof

        reconsider t as Term of S, (X (\/) (the carrier of S --> { 0 })) by MSAFREE3: 8;

        ((S variables_in t) . s) = (( variables_in t) . s);

        hence thesis;

      end;

    end

    definition

      let S be non void Signature;

      let X be non empty-yielding ManySortedSet of the carrier of S;

      let s be SortSymbol of S;

      :: ABCMIZ_1:def45

      func (X,s) variables_in -> Function of ( Union the Sorts of ( Free (S,X))), ( bool (X . s)) means

      : Def45: for t be Element of ( Free (S,X)) holds (it . t) = ((S variables_in t) . s);

      uniqueness

      proof

        let f1,f2 be Function of ( Union the Sorts of ( Free (S,X))), ( bool (X . s)) such that

         A1: for t be Element of ( Free (S,X)) holds (f1 . t) = ((S variables_in t) . s) and

         A2: for t be Element of ( Free (S,X)) holds (f2 . t) = ((S variables_in t) . s);

        now

          let x be Element of ( Union the Sorts of ( Free (S,X)));

          reconsider t = x as Element of ( Free (S,X));

          

          thus (f1 . x) = ((S variables_in t) . s) by A1

          .= (f2 . x) by A2;

        end;

        hence thesis by FUNCT_2: 63;

      end;

      existence

      proof

        defpred P[ object, object] means ex t be Element of ( Free (S,X)) st t = $1 & $2 = ((S variables_in t) . s);

         A3:

        now

          let x be object;

          assume x in ( Union the Sorts of ( Free (S,X)));

          then

          reconsider t = x as Element of ( Free (S,X));

          (S variables_in t) c= X by MSAFREE3: 27;

          then ((S variables_in t) . s) c= (X . s);

          hence ex y be object st y in ( bool (X . s)) & P[x, y];

        end;

        consider f be Function such that

         A4: ( dom f) = ( Union the Sorts of ( Free (S,X))) & ( rng f) c= ( bool (X . s)) and

         A5: for x be object st x in ( Union the Sorts of ( Free (S,X))) holds P[x, (f . x)] from FUNCT_1:sch 6( A3);

        reconsider f as Function of ( Union the Sorts of ( Free (S,X))), ( bool (X . s)) by A4, FUNCT_2: 2;

        take f;

        let x be Element of ( Free (S,X));

        ex t be Element of ( Free (S,X)) st t = x & (f . x) = ((S variables_in t) . s) by A5;

        hence thesis;

      end;

    end

    definition

      let C be initialized ConstructorSignature;

      let e be expression of C;

      :: ABCMIZ_1:def46

      func variables_in e -> Subset of Vars equals ((C variables_in e) . ( a_Term C));

      coherence

      proof

        

         A1: (( MSVars C) . ( a_Term C)) = Vars by Def25;

        (C variables_in e) c= ( MSVars C) by MSAFREE3: 27;

        hence thesis by A1;

      end;

    end

    registration

      let C, e;

      cluster ( variables_in e) -> finite;

      coherence ;

    end

    definition

      let C, e;

      :: ABCMIZ_1:def47

      func vars e -> finite Subset of Vars equals ( varcl ( variables_in e));

      coherence by Th24;

    end

    theorem :: ABCMIZ_1:85

    ( varcl ( vars e)) = ( vars e);

    theorem :: ABCMIZ_1:86

    for x be variable holds ( variables_in (x -term C)) = {x} by MSAFREE3: 10;

    theorem :: ABCMIZ_1:87

    for x be variable holds ( vars (x -term C)) = ( {x} \/ ( vars x))

    proof

      let x be variable;

      

      thus ( vars (x -term C)) = ( varcl {x}) by MSAFREE3: 10

      .= ( {x} \/ ( vars x)) by Th27;

    end;

    theorem :: ABCMIZ_1:88

    

     Th88: for p be DTree-yielding FinSequence st e = ( [c, the carrier of C] -tree p) holds ( variables_in e) = ( union { ( variables_in t) where t be quasi-term of C : t in ( rng p) })

    proof

      let p be DTree-yielding FinSequence;

      set X = { ( variables_in t) where t be quasi-term of C : t in ( rng p) };

      assume

       A1: e = ( [c, the carrier of C] -tree p);

      then p in (( QuasiTerms C) * ) by Th51;

      then p is FinSequence of ( QuasiTerms C) by FINSEQ_1:def 11;

      then

       A2: ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

      thus ( variables_in e) c= ( union X)

      proof

        let a be object;

        assume a in ( variables_in e);

        then

        consider t be DecoratedTree such that

         A3: t in ( rng p) and

         A4: a in ((C variables_in t) . ( a_Term C)) by A1, MSAFREE3: 11;

        reconsider t as quasi-term of C by A2, A3, Th41;

        ( variables_in t) in X by A3;

        hence thesis by A4, TARSKI:def 4;

      end;

      let a be object;

      assume a in ( union X);

      then

      consider Y be set such that

       A5: a in Y and

       A6: Y in X by TARSKI:def 4;

      ex t be quasi-term of C st Y = ( variables_in t) & t in ( rng p) by A6;

      hence thesis by A1, A5, MSAFREE3: 11;

    end;

    theorem :: ABCMIZ_1:89

    

     Th89: for p be DTree-yielding FinSequence st e = ( [c, the carrier of C] -tree p) holds ( vars e) = ( union { ( vars t) where t be quasi-term of C : t in ( rng p) })

    proof

      let p be DTree-yielding FinSequence;

      assume

       A1: e = ( [c, the carrier of C] -tree p);

      set A = { ( variables_in t) where t be quasi-term of C : t in ( rng p) };

      set B = { ( vars t) where t be quasi-term of C : t in ( rng p) };

      per cases ;

        suppose

         A2: A = {} ;

        set b = the Element of B;

        now

          assume B <> {} ;

          then b in B;

          then

          consider t be quasi-term of C such that b = ( vars t) and

           A3: t in ( rng p);

          ( variables_in t) in A by A3;

          hence contradiction by A2;

        end;

        hence thesis by A1, A2, Th8, Th88, ZFMISC_1: 2;

      end;

        suppose A <> {} ;

        then

        reconsider A as non empty set;

        set D = the set of all ( varcl s) where s be Element of A;

        

         A4: B c= D

        proof

          let a be object;

          assume a in B;

          then

          consider t be quasi-term of C such that

           A5: a = ( vars t) and

           A6: t in ( rng p);

          ( variables_in t) in A by A6;

          then

          reconsider s = ( variables_in t) as Element of A;

          a = ( varcl s) by A5;

          hence thesis;

        end;

        

         A7: D c= B

        proof

          let a be object;

          assume a in D;

          then

          consider s be Element of A such that

           A8: a = ( varcl s);

          s in A;

          then

          consider t be quasi-term of C such that

           A9: s = ( variables_in t) and

           A10: t in ( rng p);

          ( vars t) = a by A8, A9;

          hence thesis by A10;

        end;

        

        thus ( vars e) = ( varcl ( union A)) by A1, Th88

        .= ( union D) by Th10

        .= ( union B) by A4, A7, XBOOLE_0:def 10;

      end;

    end;

    theorem :: ABCMIZ_1:90

    ( len p) = ( len ( the_arity_of c)) implies ( variables_in (c -trm p)) = ( union { ( variables_in t) where t be quasi-term of C : t in ( rng p) })

    proof

      assume ( len p) = ( len ( the_arity_of c));

      then (c -trm p) = ( [c, the carrier of C] -tree p) by Def35;

      hence thesis by Th88;

    end;

    theorem :: ABCMIZ_1:91

    ( len p) = ( len ( the_arity_of c)) implies ( vars (c -trm p)) = ( union { ( vars t) where t be quasi-term of C : t in ( rng p) })

    proof

      assume ( len p) = ( len ( the_arity_of c));

      then (c -trm p) = ( [c, the carrier of C] -tree p) by Def35;

      hence thesis by Th89;

    end;

    theorem :: ABCMIZ_1:92

    for S be ManySortedSign, o be set holds (S variables_in ( [o, the carrier of S] -tree {} )) = ( EmptyMS the carrier of S)

    proof

      let S be ManySortedSign, o be set;

      now

        let s be object;

        assume

         A1: s in the carrier of S;

        now

          let x be object;

          ( rng {} ) = {} ;

          then x in ((S variables_in ( [o, the carrier of S] -tree {} )) . s) iff ex q be DecoratedTree st q in {} & x in ((S variables_in q) . s) by A1, MSAFREE3: 11;

          hence x in ((S variables_in ( [o, the carrier of S] -tree {} )) . s) iff x in (( EmptyMS the carrier of S) . s);

        end;

        hence ((S variables_in ( [o, the carrier of S] -tree {} )) . s) = (( EmptyMS the carrier of S) . s) by TARSKI: 2;

      end;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:93

    

     Th93: for S be ManySortedSign, o be set, t be DecoratedTree holds (S variables_in ( [o, the carrier of S] -tree <*t*>)) = (S variables_in t)

    proof

      let S be ManySortedSign, o be set, t be DecoratedTree;

      now

        let s be object;

        assume

         A1: s in the carrier of S;

        

         A2: t in {t} by TARSKI:def 1;

        now

          let x be object;

          ( rng <*t*>) = {t} by FINSEQ_1: 39;

          then x in ((S variables_in ( [o, the carrier of S] -tree <*t*>)) . s) iff ex q be DecoratedTree st q in {t} & x in ((S variables_in q) . s) by A1, MSAFREE3: 11;

          hence x in ((S variables_in ( [o, the carrier of S] -tree <*t*>)) . s) iff x in ((S variables_in t) . s) by A2, TARSKI:def 1;

        end;

        hence ((S variables_in ( [o, the carrier of S] -tree <*t*>)) . s) = ((S variables_in t) . s) by TARSKI: 2;

      end;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:94

    

     Th94: ( variables_in (( non_op C) term a)) = ( variables_in a)

    proof

      (( non_op C) term a) = ( [ non_op , the carrier of C] -tree <*a*>) by Th43;

      hence thesis by Th93;

    end;

    theorem :: ABCMIZ_1:95

    ( vars (( non_op C) term a)) = ( vars a) by Th94;

    theorem :: ABCMIZ_1:96

    

     Th96: for S be ManySortedSign, o be set, t1,t2 be DecoratedTree holds (S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) = ((S variables_in t1) (\/) (S variables_in t2))

    proof

      let S be ManySortedSign, o be set, t1,t2 be DecoratedTree;

      now

        let s be object;

        assume

         A1: s in the carrier of S;

        

         A2: t1 in {t1, t2} by TARSKI:def 2;

        

         A3: t2 in {t1, t2} by TARSKI:def 2;

        now

          let x be object;

          ( rng <*t1, t2*>) = {t1, t2} by FINSEQ_2: 127;

          then x in ((S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) . s) iff ex q be DecoratedTree st q in {t1, t2} & x in ((S variables_in q) . s) by A1, MSAFREE3: 11;

          then x in ((S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) . s) iff x in ((S variables_in t1) . s) or x in ((S variables_in t2) . s) by A2, A3, TARSKI:def 2;

          then x in ((S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) . s) iff x in (((S variables_in t1) . s) \/ ((S variables_in t2) . s)) by XBOOLE_0:def 3;

          hence x in ((S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) . s) iff x in (((S variables_in t1) (\/) (S variables_in t2)) . s) by A1, PBOOLE:def 4;

        end;

        hence ((S variables_in ( [o, the carrier of S] -tree <*t1, t2*>)) . s) = (((S variables_in t1) (\/) (S variables_in t2)) . s) by TARSKI: 2;

      end;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:97

    

     Th97: ( variables_in (( ast C) term (a,t))) = (( variables_in a) \/ ( variables_in t))

    proof

      (( ast C) term (a,t)) = ( [ * , the carrier of C] -tree <*a, t*>) by Th46;

      then ( variables_in (( ast C) term (a,t))) = (((C variables_in a) (\/) (C variables_in t)) . a_Term ) by Th96;

      hence thesis by PBOOLE:def 4;

    end;

    theorem :: ABCMIZ_1:98

    ( vars (( ast C) term (a,t))) = (( vars a) \/ ( vars t))

    proof

      

      thus ( vars (( ast C) term (a,t))) = ( varcl (( variables_in a) \/ ( variables_in t))) by Th97

      .= (( vars a) \/ ( vars t)) by Th11;

    end;

    theorem :: ABCMIZ_1:99

    

     Th99: ( variables_in ( Non a)) = ( variables_in a)

    proof

      per cases ;

        suppose a is non positive;

        then

        consider a9 be expression of C, ( an_Adj C) such that

         A1: a = (( non_op C) term a9) and

         A2: ( Non a) = a9 by Th60;

        ( [( non_op C), the carrier of C] -tree <*a9*>) = a by A1, Th43;

        hence thesis by A2, Th93;

      end;

        suppose a is positive;

        

        then ( Non a) = (( non_op C) term a) by Th59

        .= ( [ non_op , the carrier of C] -tree <*a*>) by Th43;

        hence thesis by Th93;

      end;

    end;

    theorem :: ABCMIZ_1:100

    ( vars ( Non a)) = ( vars a) by Th99;

    definition

      let C;

      let T be quasi-type of C;

      :: ABCMIZ_1:def48

      func variables_in T -> Subset of Vars equals (( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T))) \/ ( variables_in ( the_base_of T)));

      coherence

      proof

        

         A1: (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T)) is Subset of ( bool Vars ) by Def25;

        ( union ( bool Vars )) = Vars by ZFMISC_1: 81;

        then ( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T))) c= Vars by A1, ZFMISC_1: 77;

        hence thesis by XBOOLE_1: 8;

      end;

    end

    registration

      let C;

      let T be quasi-type of C;

      cluster ( variables_in T) -> finite;

      coherence

      proof

        now

          let A be set;

          assume A in (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T));

          then

          consider x be object such that

           A1: x in ( Union the Sorts of ( Free (C,( MSVars C)))) and x in ( adjs T) and

           A2: A = (((( MSVars C),( a_Term C)) variables_in ) . x) by FUNCT_2: 64;

          reconsider x as expression of C by A1;

          A = ((C variables_in x) . ( a_Term C)) by A2, Def45;

          hence A is finite;

        end;

        then ( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T))) is finite by FINSET_1: 7;

        hence thesis;

      end;

    end

    definition

      let C;

      let T be quasi-type of C;

      :: ABCMIZ_1:def49

      func vars T -> finite Subset of Vars equals ( varcl ( variables_in T));

      coherence by Th24;

    end

    theorem :: ABCMIZ_1:101

    for T be quasi-type of C holds ( varcl ( vars T)) = ( vars T);

    theorem :: ABCMIZ_1:102

    

     Th102: for T be quasi-type of C holds for a be quasi-adjective of C holds ( variables_in (a ast T)) = (( variables_in a) \/ ( variables_in T))

    proof

      let T be quasi-type of C;

      let a be quasi-adjective of C;

      

       A1: ( dom ((( MSVars C),( a_Term C)) variables_in )) = ( Union the Sorts of ( Free (C,( MSVars C)))) by FUNCT_2:def 1;

      

      thus ( variables_in (a ast T)) = (( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs (a ast T)))) \/ ( variables_in ( the_base_of T)))

      .= (( union (((( MSVars C),( a_Term C)) variables_in ) .: ( {a} \/ ( adjs T)))) \/ ( variables_in ( the_base_of T)))

      .= (( union ((((( MSVars C),( a_Term C)) variables_in ) .: {a}) \/ (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T)))) \/ ( variables_in ( the_base_of T))) by RELAT_1: 120

      .= ((( union (((( MSVars C),( a_Term C)) variables_in ) .: {a})) \/ ( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs T)))) \/ ( variables_in ( the_base_of T))) by ZFMISC_1: 78

      .= (( union ( Im (((( MSVars C),( a_Term C)) variables_in ),a))) \/ ( variables_in T)) by XBOOLE_1: 4

      .= (( union {(((( MSVars C),( a_Term C)) variables_in ) . a)}) \/ ( variables_in T)) by A1, FUNCT_1: 59

      .= ((((( MSVars C),( a_Term C)) variables_in ) . a) \/ ( variables_in T)) by ZFMISC_1: 25

      .= (( variables_in a) \/ ( variables_in T)) by Def45;

    end;

    theorem :: ABCMIZ_1:103

    for T be quasi-type of C holds for a be quasi-adjective of C holds ( vars (a ast T)) = (( vars a) \/ ( vars T))

    proof

      let T be quasi-type of C;

      let a be quasi-adjective of C;

      

      thus ( vars (a ast T)) = ( varcl (( variables_in a) \/ ( variables_in T))) by Th102

      .= (( vars a) \/ ( vars T)) by Th11;

    end;

    theorem :: ABCMIZ_1:104

    

     Th104: ( variables_in (A ast q)) = (( union { ( variables_in a) where a be quasi-adjective of C : a in A }) \/ ( variables_in q))

    proof

      set X = (((( MSVars C),( a_Term C)) variables_in ) .: A);

      set Y = { ( variables_in a) where a be quasi-adjective of C : a in A };

      

       A1: X c= Y

      proof

        let z be object;

        assume z in X;

        then

        consider a be object such that a in ( dom ((( MSVars C),( a_Term C)) variables_in )) and

         A2: a in A and

         A3: z = (((( MSVars C),( a_Term C)) variables_in ) . a) by FUNCT_1:def 6;

        reconsider a as quasi-adjective of C by A2, Th63;

        z = ( variables_in a) by A3, Def45;

        hence thesis by A2;

      end;

      

       A4: Y c= X

      proof

        let z be object;

        assume z in Y;

        then

        consider a be quasi-adjective of C such that

         A5: z = ( variables_in a) and

         A6: a in A;

        

         A7: z = (((( MSVars C),( a_Term C)) variables_in ) . a) by A5, Def45;

        ( dom ((( MSVars C),( a_Term C)) variables_in )) = ( Union the Sorts of ( Free (C,( MSVars C)))) by FUNCT_2:def 1;

        hence thesis by A6, A7, FUNCT_1:def 6;

      end;

      

      thus ( variables_in (A ast q)) = (( union (((( MSVars C),( a_Term C)) variables_in ) .: ( adjs (A ast q)))) \/ ( variables_in q))

      .= (( union (((( MSVars C),( a_Term C)) variables_in ) .: A)) \/ ( variables_in q))

      .= (( union { ( variables_in a) where a be quasi-adjective of C : a in A }) \/ ( variables_in q)) by A1, A4, XBOOLE_0:def 10;

    end;

    theorem :: ABCMIZ_1:105

    ( vars (A ast q)) = (( union { ( vars a) where a be quasi-adjective of C : a in A }) \/ ( vars q))

    proof

      set X = { ( variables_in a) where a be quasi-adjective of C : a in A };

      set Y = { ( vars a) where a be quasi-adjective of C : a in A };

      

       A1: ( union X) c= ( union Y)

      proof

        let x be object;

        assume x in ( union X);

        then

        consider Z be set such that

         A2: x in Z and

         A3: Z in X by TARSKI:def 4;

        consider a be quasi-adjective of C such that

         A4: Z = ( variables_in a) and

         A5: a in A by A3;

        

         A6: Z c= ( vars a) by A4, Def1;

        ( vars a) in Y by A5;

        hence thesis by A2, A6, TARSKI:def 4;

      end;

      for x, y st [x, y] in ( union Y) holds x c= ( union Y)

      proof

        let x, y;

        assume [x, y] in ( union Y);

        then

        consider Z be set such that

         A7: [x, y] in Z and

         A8: Z in Y by TARSKI:def 4;

        ex a be quasi-adjective of C st (Z = ( vars a)) & (a in A) by A8;

        then

         A9: x c= Z by A7, Def1;

        Z c= ( union Y) by A8, ZFMISC_1: 74;

        hence thesis by A9;

      end;

      then

       A10: ( varcl ( union X)) c= ( union Y) by A1, Def1;

      

       A11: ( union Y) c= ( varcl ( union X))

      proof

        let x be object;

        assume x in ( union Y);

        then

        consider Z be set such that

         A12: x in Z and

         A13: Z in Y by TARSKI:def 4;

        consider a be quasi-adjective of C such that

         A14: Z = ( vars a) and

         A15: a in A by A13;

        ( variables_in a) in X by A15;

        then ( vars a) c= ( varcl ( union X)) by Th9, ZFMISC_1: 74;

        hence thesis by A12, A14;

      end;

      

      thus ( vars (A ast q)) = ( varcl (( union X) \/ ( variables_in q))) by Th104

      .= (( varcl ( union X)) \/ ( vars q)) by Th11

      .= (( union Y) \/ ( vars q)) by A10, A11, XBOOLE_0:def 10;

    end;

    theorem :: ABCMIZ_1:106

    

     Th106: ( variables_in (( {} ( QuasiAdjs C)) ast q)) = ( variables_in q)

    proof

      set A = ( {} ( QuasiAdjs C));

      set AA = { ( variables_in a) where a be quasi-adjective of C : a in A };

      AA c= {}

      proof

        let x be object;

        assume x in AA;

        then ex a be quasi-adjective of C st x = ( variables_in a) & a in A;

        hence thesis;

      end;

      then

       A1: AA = {} ;

      ( variables_in (A ast q)) = (( union AA) \/ ( variables_in q)) by Th104;

      hence thesis by A1, ZFMISC_1: 2;

    end;

    theorem :: ABCMIZ_1:107

    

     Th107: e is ground iff ( variables_in e) = {}

    proof

      thus e is ground implies ( variables_in e) = {} by Th1, XBOOLE_1: 3;

      assume that

       A1: ( variables_in e) = {} and

       A2: ( Union (C variables_in e)) <> {} ;

      set x = the Element of ( Union (C variables_in e));

      

       A3: ex y be object st (y in ( dom (C variables_in e))) & (x in ((C variables_in e) . y)) by A2, CARD_5: 2;

      

       A4: ( dom (C variables_in e)) = the carrier of C by PARTFUN1:def 2

      .= { a_Type , an_Adj , a_Term } by Def9;

      

       A5: (C variables_in e) c= ( MSVars C) by MSAFREE3: 27;

      

       A6: (( MSVars C) . an_Adj ) = {} by Def25;

      

       A7: (( MSVars C) . a_Type ) = {} by Def25;

      

       A8: ((C variables_in e) . ( an_Adj C)) c= {} by A5, A6;

      ((C variables_in e) . ( a_Type C)) c= {} by A5, A7;

      hence thesis by A1, A3, A4, A8, ENUMSET1:def 1;

    end;

    definition

      let C;

      let T be quasi-type of C;

      :: ABCMIZ_1:def50

      attr T is ground means

      : Def50: ( variables_in T) = {} ;

    end

    registration

      let C;

      cluster ground pure for expression of C, ( a_Type C);

      existence

      proof

        consider m,a be OperSymbol of C such that

         A1: ( the_result_sort_of m) = a_Type and

         A2: ( the_arity_of m) = {} and ( the_result_sort_of a) = an_Adj and ( the_arity_of a) = {} by Def12;

        ( root-tree [m, the carrier of C]) in (the Sorts of ( Free (C,( MSVars C))) . ( a_Type C)) by A1, A2, MSAFREE3: 5;

        then

        reconsider mm = ( root-tree [m, the carrier of C]) as expression of C, ( a_Type C) by Th41;

        take mm;

        set p = ( <*> ( Union the Sorts of ( Free (C,( MSVars C)))));

        

         A3: mm = ( [m, the carrier of C] -tree p) by TREES_4: 20;

        

         A4: m <> * by A2, Def9;

        m <> non_op by A1, Def9;

        then

         A5: m is constructor by A4;

        ( variables_in mm) c= {}

        proof

          let x be object;

          assume x in ( variables_in mm);

          then x in ( union { ( variables_in t) where t be quasi-term of C : t in ( rng p) }) by A3, A5, Th88;

          then

          consider Y such that x in Y and

           A6: Y in { ( variables_in t) where t be quasi-term of C : t in ( rng p) } by TARSKI:def 4;

          ex t be quasi-term of C st Y = ( variables_in t) & t in ( rng p) by A6;

          hence thesis;

        end;

        then ( variables_in mm) = {} ;

        hence mm is ground by Th107;

        ex t be expression of C, ( a_Type C) st t = ( root-tree [m, the carrier of C]) & t is pure by A1, A2, Th70;

        hence thesis;

      end;

      cluster ground for quasi-adjective of C;

      existence

      proof

        consider m,a be OperSymbol of C such that ( the_result_sort_of m) = a_Type and ( the_arity_of m) = {} and

         A7: ( the_result_sort_of a) = an_Adj and

         A8: ( the_arity_of a) = {} by Def12;

        consider mm be expression of C, ( an_Adj C) such that

         A9: mm = ( root-tree [a, the carrier of C]) and

         A10: mm is positive by A7, A8, Th71;

        reconsider mm as quasi-adjective of C by A10;

        take mm;

        set p = ( <*> ( Union the Sorts of ( Free (C,( MSVars C)))));

        

         A11: mm = ( [a, the carrier of C] -tree p) by A9, TREES_4: 20;

        

         A12: a <> * by A7, Def9;

        a <> non_op by A8, Def9;

        then

         A13: a is constructor by A12;

        ( variables_in mm) c= {}

        proof

          let x be object;

          assume x in ( variables_in mm);

          then x in ( union { ( variables_in t) where t be quasi-term of C : t in ( rng p) }) by A11, A13, Th88;

          then

          consider Y such that x in Y and

           A14: Y in { ( variables_in t) where t be quasi-term of C : t in ( rng p) } by TARSKI:def 4;

          ex t be quasi-term of C st Y = ( variables_in t) & t in ( rng p) by A14;

          hence thesis;

        end;

        then ( variables_in mm) = {} ;

        hence thesis by Th107;

      end;

    end

    theorem :: ABCMIZ_1:108

    

     Th108: for t be ground pure expression of C, ( a_Type C) holds (( {} ( QuasiAdjs C)) ast t) is ground

    proof

      let t be ground pure expression of C, ( a_Type C);

      set T = (( {} ( QuasiAdjs C)) ast t);

      

      thus ( variables_in T) = ( variables_in t) by Th106

      .= {} by Th107;

    end;

    registration

      let C;

      let t be ground pure expression of C, ( a_Type C);

      cluster (( {} ( QuasiAdjs C)) ast t) -> ground;

      coherence by Th108;

    end

    registration

      let C;

      cluster ground for quasi-type of C;

      existence

      proof

        set t = the ground pure expression of C, ( a_Type C);

        take (( {} ( QuasiAdjs C)) ast t);

        thus thesis;

      end;

    end

    registration

      let C;

      let T be ground quasi-type of C;

      let a be ground quasi-adjective of C;

      cluster (a ast T) -> ground;

      coherence

      proof

        

        thus ( variables_in (a ast T)) = (( variables_in a) \/ ( variables_in T)) by Th102

        .= ( {} \/ ( variables_in T)) by Th107

        .= {} by Def50;

      end;

    end

    begin

    definition

      :: ABCMIZ_1:def51

      func VarPoset -> strict non empty Poset equals (( InclPoset the set of all ( varcl A) where A be finite Subset of Vars ) opp );

      coherence

      proof

        set A0 = the finite Subset of Vars ;

        set V = the set of all ( varcl A) where A be finite Subset of Vars ;

        ( varcl A0) in V;

        then

        reconsider V as non empty set;

        reconsider P = ( InclPoset V) as non empty Poset;

        (P opp ) is non empty;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:109

    

     Th109: for x,y be Element of VarPoset holds x <= y iff y c= x

    proof

      let x,y be Element of VarPoset ;

      set V = the set of all ( varcl A) where A be finite Subset of Vars ;

      set A0 = the finite Subset of Vars ;

      ( varcl A0) in V;

      then

      reconsider V as non empty set;

      reconsider a = x, b = y as Element of (( InclPoset V) opp );

      x <= y iff ( ~ a) >= ( ~ b) by YELLOW_7: 1;

      hence thesis by YELLOW_1: 3;

    end;

    theorem :: ABCMIZ_1:110

    

     Th110: for x holds x is Element of VarPoset iff x is finite Subset of Vars & ( varcl x) = x

    proof

      let x;

      set V = the set of all ( varcl A) where A be finite Subset of Vars ;

      set A0 = the finite Subset of Vars ;

      ( varcl A0) in V;

      then

      reconsider V as non empty set;

      the carrier of ( InclPoset V) = V by YELLOW_1: 1;

      then x is Element of VarPoset iff x in V;

      then x is Element of VarPoset iff ex A be finite Subset of Vars st x = ( varcl A);

      hence thesis by Th24;

    end;

    registration

      cluster VarPoset -> with_infima with_suprema;

      coherence

      proof

        set V = the set of all ( varcl A) where A be finite Subset of Vars ;

        set A0 = the finite Subset of Vars ;

        ( varcl A0) in V;

        then

        reconsider V as non empty set;

        now

          let x, y;

          assume x in V;

          then

          consider A1 be finite Subset of Vars such that

           A1: x = ( varcl A1);

          assume y in V;

          then

          consider A2 be finite Subset of Vars such that

           A2: y = ( varcl A2);

          (x \/ y) = ( varcl (A1 \/ A2)) by A1, A2, Th11;

          hence (x \/ y) in V;

        end;

        then ( InclPoset V) is with_suprema by YELLOW_1: 11;

        hence VarPoset is with_infima by LATTICE3: 10;

        now

          let x, y;

          assume x in V;

          then

          consider A1 be finite Subset of Vars such that

           A3: x = ( varcl A1);

          assume y in V;

          then

          consider A2 be finite Subset of Vars such that

           A4: y = ( varcl A2);

          reconsider V1 = ( varcl A1), V2 = ( varcl A2) as finite Subset of Vars by Th24;

          (x /\ y) = ( varcl (V1 /\ V2)) by A3, A4, Th13;

          hence (x /\ y) in V;

        end;

        then ( InclPoset V) is with_infima by YELLOW_1: 12;

        hence thesis by YELLOW_7: 16;

      end;

    end

    theorem :: ABCMIZ_1:111

    

     Th111: for V1,V2 be Element of VarPoset holds (V1 "\/" V2) = (V1 /\ V2) & (V1 "/\" V2) = (V1 \/ V2)

    proof

      let V1,V2 be Element of VarPoset ;

      set V = the set of all ( varcl A) where A be finite Subset of Vars ;

      set A0 = the finite Subset of Vars ;

      ( varcl A0) in V;

      then

      reconsider V as non empty set;

      

       A1: VarPoset = (( InclPoset V) opp );

      

       A2: the carrier of ( InclPoset V) = V by YELLOW_1: 1;

      reconsider v1 = V1, v2 = V2 as Element of (( InclPoset V) opp );

      reconsider a1 = V1, a2 = V2 as Element of ( InclPoset V);

      V1 in V by A2;

      then

      consider A1 be finite Subset of Vars such that

       A3: V1 = ( varcl A1);

      V2 in V by A2;

      then

      consider A2 be finite Subset of Vars such that

       A4: V2 = ( varcl A2);

      

       A5: (a1 ~ ) = v1;

      

       A6: (a2 ~ ) = v2;

      

       A7: ( InclPoset V) is with_infima with_suprema by A1, LATTICE3: 10, YELLOW_7: 16;

      reconsider x1 = V1, x2 = V2 as finite Subset of Vars by A3, A4, Th24;

      (V1 /\ V2) = ( varcl (x1 /\ x2)) by A3, A4, Th13;

      then (V1 /\ V2) in V;

      then (a1 "/\" a2) = (V1 /\ V2) by YELLOW_1: 9;

      hence (V1 "\/" V2) = (V1 /\ V2) by A5, A6, A7, YELLOW_7: 21;

      (V1 \/ V2) = ( varcl (A1 \/ A2)) by A3, A4, Th11;

      then (a1 \/ a2) in V;

      then (a1 "\/" a2) = (V1 \/ V2) by YELLOW_1: 8;

      hence thesis by A5, A6, A7, YELLOW_7: 23;

    end;

    registration

      let V1,V2 be Element of VarPoset ;

      identify V1 /\ V2 with V1 "\/" V2;

      compatibility by Th111;

      identify V1 \/ V2 with V1 "/\" V2;

      compatibility by Th111;

    end

    theorem :: ABCMIZ_1:112

    

     Th112: for X be non empty Subset of VarPoset holds ex_sup_of (X, VarPoset ) & ( sup X) = ( meet X)

    proof

      let X be non empty Subset of VarPoset ;

      set a = the Element of X;

      

       A1: ( meet X) c= a by SETFAM_1: 3;

      

       A2: a is finite Subset of Vars by Th110;

      then

       A3: ( meet X) c= Vars by A1, XBOOLE_1: 1;

      for a be Element of X holds ( varcl a) = a by Th110;

      then ( varcl ( meet X)) = ( meet X) by Th12;

      then

      reconsider m = ( meet X) as Element of VarPoset by A1, A2, A3, Th110;

       A4:

      now

        thus X is_<=_than m by SETFAM_1: 3, Th109;

        let b be Element of VarPoset ;

        assume

         A5: X is_<=_than b;

        for Y st Y in X holds b c= Y by Th109, A5;

        then b c= m by SETFAM_1: 5;

        hence m <= b by Th109;

      end;

      hence ex_sup_of (X, VarPoset ) by YELLOW_0: 15;

      hence thesis by A4, YELLOW_0:def 9;

    end;

    registration

      cluster VarPoset -> up-complete;

      coherence

      proof

        for X be non empty directed Subset of VarPoset holds ex_sup_of (X, VarPoset ) by Th112;

        hence thesis by WAYBEL_0: 75;

      end;

    end

    theorem :: ABCMIZ_1:113

    ( Top VarPoset ) = {}

    proof

      set V = the set of all ( varcl A) where A be finite Subset of Vars ;

      

       A1: ( {} Vars ) in V by Th8;

      

       A2: ( VarPoset opp ) is lower-bounded by YELLOW_7: 31;

      (( Bottom ( InclPoset V)) ~ ) = {} by A1, YELLOW_1: 13;

      hence thesis by A2, YELLOW_7: 33;

    end;

    definition

      let C;

      :: ABCMIZ_1:def52

      func vars-function C -> Function of ( QuasiTypes C), the carrier of VarPoset means for T be quasi-type of C holds (it . T) = ( vars T);

      uniqueness

      proof

        let f1,f2 be Function of ( QuasiTypes C), the carrier of VarPoset such that

         A1: for T be quasi-type of C holds (f1 . T) = ( vars T) and

         A2: for T be quasi-type of C holds (f2 . T) = ( vars T);

        now

          let T be Element of ( QuasiTypes C);

          reconsider t = T as quasi-type of C by Def43;

          

          thus (f1 . T) = ( vars t) by A1

          .= (f2 . T) by A2;

        end;

        hence thesis by FUNCT_2: 63;

      end;

      existence

      proof

        defpred P[ object, object] means ex T be quasi-type of C st $1 = T & $2 = ( vars T);

        

         A3: for x be object st x in ( QuasiTypes C) holds ex y be object st P[x, y]

        proof

          let x be object;

          assume x in ( QuasiTypes C);

          then

          reconsider T = x as quasi-type of C by Def43;

          take ( vars T), T;

          thus thesis;

        end;

        consider f be Function such that

         A4: ( dom f) = ( QuasiTypes C) and

         A5: for x be object st x in ( QuasiTypes C) holds P[x, (f . x)] from CLASSES1:sch 1( A3);

        ( rng f) c= the carrier of VarPoset

        proof

          let y be object;

          assume y in ( rng f);

          then

          consider x be object such that

           A6: x in ( dom f) and

           A7: y = (f . x) by FUNCT_1:def 3;

          consider T be quasi-type of C such that x = T and

           A8: y = ( vars T) by A4, A5, A6, A7;

          ( varcl ( vars T)) = ( vars T);

          then y is Element of VarPoset by A8, Th110;

          hence thesis;

        end;

        then

        reconsider f as Function of ( QuasiTypes C), the carrier of VarPoset by A4, FUNCT_2: 2;

        take f;

        let x be quasi-type of C;

        x in ( QuasiTypes C) by Def43;

        then ex T be quasi-type of C st x = T & (f . x) = ( vars T) by A5;

        hence thesis;

      end;

    end

    definition

      let L be non empty Poset;

      :: ABCMIZ_1:def53

      attr L is smooth means ex C be initialized ConstructorSignature, f be Function of L, VarPoset st the carrier of L c= ( QuasiTypes C) & f = (( vars-function C) | the carrier of L) & for x,y be Element of L holds f preserves_sup_of {x, y};

    end

    registration

      let C be initialized ConstructorSignature;

      let T be ground quasi-type of C;

      cluster RelStr (# {T}, ( id {T}) #) -> smooth;

      coherence

      proof

        set L = RelStr (# {T}, ( id {T}) #);

        

         A1: T in ( QuasiTypes C) by Def43;

        then {T} c= ( QuasiTypes C) by ZFMISC_1: 31;

        then

        reconsider f = (( vars-function C) | {T}) as Function of L, VarPoset by FUNCT_2: 32;

        take C, f;

        thus the carrier of L c= ( QuasiTypes C) by A1, ZFMISC_1: 31;

        thus f = (( vars-function C) | the carrier of L);

        let x,y be Element of L;

        set F = {x, y};

        assume ex_sup_of (F,L);

        

         A2: x = T by TARSKI:def 1;

        y = T by TARSKI:def 1;

        then

         A3: F = {T} by A2, ENUMSET1: 29;

        ( dom f) = {T} by FUNCT_2:def 1;

        then

         A4: ( Im (f,T)) = {(f . x)} by A2, FUNCT_1: 59;

        hence ex_sup_of ((f .: F), VarPoset ) by A3, YELLOW_0: 38;

        

        thus ( sup (f .: F)) = (f . x) by A3, A4, YELLOW_0: 39

        .= (f . ( sup F)) by A2, TARSKI:def 1;

      end;

    end

    begin

    scheme :: ABCMIZ_1:sch2

    StructInd { C() -> initialized ConstructorSignature , P[ set], t() -> expression of C() } :

P[t()]

      provided

       A1: for x be variable holds P[(x -term C())]

       and

       A2: for c be constructor OperSymbol of C() holds for p be FinSequence of ( QuasiTerms C()) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C() st t in ( rng p) holds P[t] holds P[(c -trm p)]

       and

       A3: for a be expression of C(), ( an_Adj C()) st P[a] holds P[(( non_op C()) term a)]

       and

       A4: for a be expression of C(), ( an_Adj C()) st P[a] holds for t be expression of C(), ( a_Type C()) st P[t] holds P[(( ast C()) term (a,t))];

      defpred Q[ set] means $1 is expression of C() implies P[$1];

      set X = ( MSVars C());

      set V = (X (\/) (the carrier of C() --> { 0 }));

      set S = C(), C = C();

      

       A5: t() is Term of S, V by MSAFREE3: 8;

      

       A6: for s be SortSymbol of S, v be Element of (V . s) holds Q[( root-tree [v, s])]

      proof

        let s be SortSymbol of S;

        let v be Element of (V . s);

        set t = ( root-tree [v, s]);

        assume

         A7: t is expression of S;

        

         A8: (t . {} ) = [v, s] by TREES_4: 3;

        

         A9: s in the carrier of C;

        

         A10: ((t . {} ) `2 ) = s by A8;

        

         A11: s <> the carrier of C by A9;

        per cases by A7, Th53;

          suppose ex x be variable st t = (x -term C);

          hence thesis by A1;

        end;

          suppose ex c be constructor OperSymbol of C st ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & t = (c -trm p);

          then

          consider c be constructor OperSymbol of C, p be FinSequence of ( QuasiTerms C) such that

           A12: ( len p) = ( len ( the_arity_of c)) and

           A13: t = (c -trm p);

          t = ( [c, the carrier of C] -tree p) by A12, A13, Def35;

          then (t . {} ) = [c, the carrier of C] by TREES_4:def 4;

          hence thesis by A10, A11;

        end;

          suppose ex a be expression of C(), ( an_Adj C()) st t = (( non_op C) term a);

          then

          consider a be expression of C(), ( an_Adj C()) such that

           A14: t = (( non_op C) term a);

          

           A15: ( the_arity_of ( non_op C)) = <*( an_Adj C)*> by Def9;

          

           A16: ( <*( an_Adj C)*> . 1) = ( an_Adj C) by FINSEQ_1: 40;

          ( len <*( an_Adj C)*>) = 1 by FINSEQ_1: 40;

          then t = ( [( non_op C), the carrier of C] -tree <*a*>) by A14, A15, A16, Def30;

          then (t . {} ) = [( non_op C), the carrier of C] by TREES_4:def 4;

          hence thesis by A10, A11;

        end;

          suppose ex a be expression of C(), ( an_Adj C()) st ex q be expression of C, ( a_Type C) st t = (( ast C) term (a,q));

          then

          consider a be expression of C, ( an_Adj C), q be expression of C, ( a_Type C) such that

           A17: t = (( ast C) term (a,q));

          

           A18: ( the_arity_of ( ast C)) = <*( an_Adj C), ( a_Type C)*> by Def9;

          

           A19: ( <*( an_Adj C), ( a_Type C)*> . 1) = ( an_Adj C) by FINSEQ_1: 44;

          

           A20: ( <*( an_Adj C), ( a_Type C)*> . 2) = ( a_Type C) by FINSEQ_1: 44;

          ( len <*( an_Adj C), ( a_Type C)*>) = 2 by FINSEQ_1: 44;

          then t = ( [( ast C), the carrier of C] -tree <*a, q*>) by A17, A18, A19, A20, Def31;

          then (t . {} ) = [( ast C), the carrier of C] by TREES_4:def 4;

          hence thesis by A10, A11;

        end;

      end;

      

       A21: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,V)) st for t be Term of S, V st t in ( rng p) holds Q[t] holds Q[( [o, the carrier of S] -tree p)]

      proof

        let o be OperSymbol of S;

        let p be ArgumentSeq of ( Sym (o,V)) such that

         A22: for t be Term of S, V st t in ( rng p) holds Q[t];

        set t = ( [o, the carrier of S] -tree p);

        assume

         A23: t is expression of S;

        per cases by A23, Th53;

          suppose ex x be variable st t = (x -term C);

          hence thesis by A1;

        end;

          suppose ex c be constructor OperSymbol of C st ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & t = (c -trm p);

          then

          consider c be constructor OperSymbol of C, q be FinSequence of ( QuasiTerms C) such that

           A24: ( len q) = ( len ( the_arity_of c)) and

           A25: t = (c -trm q);

          t = ( [c, the carrier of C] -tree q) by A24, A25, Def35;

          then

           A26: p = q by TREES_4: 15;

          now

            let t be quasi-term of C;

            t is Term of S, V by MSAFREE3: 8;

            hence t in ( rng q) implies P[t] by A22, A26;

          end;

          hence thesis by A2, A24, A25;

        end;

          suppose ex a be expression of C(), ( an_Adj C()) st t = (( non_op C) term a);

          then

          consider a be expression of C(), ( an_Adj C()) such that

           A27: t = (( non_op C) term a);

          

           A28: ( the_arity_of ( non_op C)) = <*( an_Adj C)*> by Def9;

          

           A29: ( <*( an_Adj C)*> . 1) = ( an_Adj C) by FINSEQ_1: 40;

          ( len <*( an_Adj C)*>) = 1 by FINSEQ_1: 40;

          then t = ( [( non_op C), the carrier of C] -tree <*a*>) by A27, A28, A29, Def30;

          then

           A30: p = <*a*> by TREES_4: 15;

          

           A31: ( rng <*a*>) = {a} by FINSEQ_1: 39;

          

           A32: a in {a} by TARSKI:def 1;

          a is Term of S, V by MSAFREE3: 8;

          hence thesis by A3, A22, A27, A30, A31, A32;

        end;

          suppose ex a be expression of C(), ( an_Adj C()) st ex q be expression of C, ( a_Type C) st t = (( ast C) term (a,q));

          then

          consider a be expression of C, ( an_Adj C), q be expression of C, ( a_Type C) such that

           A33: t = (( ast C) term (a,q));

          

           A34: ( the_arity_of ( ast C)) = <*( an_Adj C), ( a_Type C)*> by Def9;

          

           A35: ( <*( an_Adj C), ( a_Type C)*> . 1) = ( an_Adj C) by FINSEQ_1: 44;

          

           A36: ( <*( an_Adj C), ( a_Type C)*> . 2) = ( a_Type C) by FINSEQ_1: 44;

          ( len <*( an_Adj C), ( a_Type C)*>) = 2 by FINSEQ_1: 44;

          then t = ( [( ast C), the carrier of C] -tree <*a, q*>) by A33, A34, A35, A36, Def31;

          then

           A37: p = <*a, q*> by TREES_4: 15;

          

           A38: ( rng <*a, q*>) = {a, q} by FINSEQ_2: 127;

          

           A39: a in {a, q} by TARSKI:def 2;

          

           A40: q in {a, q} by TARSKI:def 2;

          

           A41: a is Term of S, V by MSAFREE3: 8;

          

           A42: q is Term of S, V by MSAFREE3: 8;

          P[a] by A22, A37, A38, A39, A41;

          hence thesis by A4, A22, A33, A37, A38, A40, A42;

        end;

      end;

      for t be Term of S, V holds Q[t] from MSATERM:sch 1( A6, A21);

      hence thesis by A5;

    end;

    definition

      let S be ManySortedSign;

      :: ABCMIZ_1:def54

      attr S is with_an_operation_for_each_sort means

      : Def54: the carrier of S c= ( rng the ResultSort of S);

      let X be ManySortedSet of the carrier of S;

      :: ABCMIZ_1:def55

      attr X is with_missing_variables means (X " { {} }) c= ( rng the ResultSort of S);

    end

    theorem :: ABCMIZ_1:114

    

     Th114: for S be non void Signature holds for X be ManySortedSet of the carrier of S holds X is with_missing_variables iff for s be SortSymbol of S st (X . s) = {} holds ex o be OperSymbol of S st ( the_result_sort_of o) = s

    proof

      let S be non void Signature;

      let X be ManySortedSet of the carrier of S;

      

       A1: ( dom X) = the carrier of S by PARTFUN1:def 2;

      hereby

        assume X is with_missing_variables;

        then

         A2: (X " { {} }) c= ( rng the ResultSort of S);

        let s be SortSymbol of S;

        assume (X . s) = {} ;

        then (X . s) in { {} } by TARSKI:def 1;

        then s in (X " { {} }) by A1, FUNCT_1:def 7;

        then

        consider o be object such that

         A3: o in the carrier' of S and

         A4: (the ResultSort of S . o) = s by A2, FUNCT_2: 11;

        reconsider o as OperSymbol of S by A3;

        take o;

        thus ( the_result_sort_of o) = s by A4;

      end;

      assume

       A5: for s be SortSymbol of S st (X . s) = {} holds ex o be OperSymbol of S st ( the_result_sort_of o) = s;

      let x be object;

      assume

       A6: x in (X " { {} });

      then

       A7: (X . x) in { {} } by FUNCT_1:def 7;

      reconsider x as SortSymbol of S by A1, A6, FUNCT_1:def 7;

      (X . x) = {} by A7, TARSKI:def 1;

      then ex o be OperSymbol of S st ( the_result_sort_of o) = x by A5;

      hence thesis by FUNCT_2: 4;

    end;

    registration

      cluster MaxConstrSign -> with_an_operation_for_each_sort;

      coherence

      proof

        set C = MaxConstrSign ;

        set m = [ a_Type , [ {} , 0 ]], a = [ an_Adj , [ {} , 0 ]], f = [ a_Term , [ {} , 0 ]];

        

         A1: a_Type in { a_Type } by TARSKI:def 1;

        

         A2: an_Adj in { an_Adj } by TARSKI:def 1;

        

         A3: a_Term in { a_Term } by TARSKI:def 1;

        

         A4: [( <*> Vars ), 0 ] in [: QuasiLoci , NAT :] by Th29, ZFMISC_1:def 2;

        then

         A5: m in Modes by A1, ZFMISC_1:def 2;

        

         A6: a in Attrs by A2, A4, ZFMISC_1:def 2;

        

         A7: f in Funcs by A3, A4, ZFMISC_1:def 2;

        

         A8: m in ( Modes \/ Attrs ) by A5, XBOOLE_0:def 3;

        

         A9: a in ( Modes \/ Attrs ) by A6, XBOOLE_0:def 3;

        

         A10: m in Constructors by A8, XBOOLE_0:def 3;

        

         A11: a in Constructors by A9, XBOOLE_0:def 3;

        

         A12: f in Constructors by A7, XBOOLE_0:def 3;

        the carrier' of MaxConstrSign = ( { * , non_op } \/ Constructors ) by Def24;

        then

        reconsider m, a, f as OperSymbol of MaxConstrSign by A10, A11, A12, XBOOLE_0:def 3;

        

         A13: m is constructor;

        

         A14: a is constructor;

        

         A15: f is constructor;

        

         A16: (the ResultSort of C . m) = (m `1 ) by A13, Def24;

        

         A17: (the ResultSort of C . a) = (a `1 ) by A14, Def24;

        

         A18: (the ResultSort of C . f) = (f `1 ) by A15, Def24;

        

         A19: (the ResultSort of C . m) = a_Type by A16;

        

         A20: (the ResultSort of C . a) = an_Adj by A17;

        

         A21: (the ResultSort of C . f) = a_Term by A18;

        

         A22: the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

        let x be object;

        assume x in the carrier of C;

        then x = a_Type or x = an_Adj or x = a_Term by A22, ENUMSET1:def 1;

        hence thesis by A19, A20, A21, FUNCT_2: 4;

      end;

      let C be ConstructorSignature;

      cluster ( MSVars C) -> with_missing_variables;

      coherence

      proof

        set X = ( MSVars C);

        let x be object;

        assume

         A23: x in (X " { {} });

        then

         A24: x in ( dom X) by FUNCT_1:def 7;

        

         A25: (X . x) in { {} } by A23, FUNCT_1:def 7;

        x in the carrier of C by A24;

        then x in { a_Type , an_Adj , a_Term } by Def9;

        then

         A26: x = a_Type or x = an_Adj or x = a_Term by ENUMSET1:def 1;

        

         A27: (X . x) = {} by A25, TARSKI:def 1;

        

         A28: (the ResultSort of C . ( ast C)) = a_Type by Def9;

        (the ResultSort of C . ( non_op C)) = an_Adj by Def9;

        hence thesis by A26, A27, A28, Def25, FUNCT_2: 4;

      end;

    end

    registration

      let S be ManySortedSign;

      cluster non-empty -> with_missing_variables for ManySortedSet of the carrier of S;

      coherence

      proof

        let X be ManySortedSet of the carrier of S such that

         A1: X is non-empty;

        let x be object;

        assume

         A2: x in (X " { {} });

        then

         A3: x in ( dom X) by FUNCT_1:def 7;

        

         A4: (X . x) in { {} } by A2, FUNCT_1:def 7;

        

         A5: (X . x) in ( rng X) by A3, FUNCT_1:def 3;

        (X . x) = {} by A4, TARSKI:def 1;

        hence thesis by A1, A5;

      end;

    end

    registration

      let S be ManySortedSign;

      cluster with_missing_variables for ManySortedSet of the carrier of S;

      existence

      proof

        set A = the non-empty ManySortedSet of the carrier of S;

        take A;

        thus thesis;

      end;

    end

    registration

      cluster initialized with_an_operation_for_each_sort strict for ConstructorSignature;

      existence

      proof

        take MaxConstrSign ;

        thus thesis;

      end;

    end

    registration

      let C be with_an_operation_for_each_sort ManySortedSign;

      cluster -> with_missing_variables for ManySortedSet of the carrier of C;

      coherence

      proof

        let X be ManySortedSet of the carrier of C;

        

         A1: (X " { {} }) c= ( dom X) by RELAT_1: 132;

        

         A2: ( dom X) = the carrier of C by PARTFUN1:def 2;

        the carrier of C c= ( rng the ResultSort of C) by Def54;

        hence (X " { {} }) c= ( rng the ResultSort of C) by A1, A2;

      end;

    end

    definition

      let G be non empty DTConstrStr;

      :: original: Terminals

      redefine

      func Terminals G -> Subset of G ;

      coherence

      proof

        the carrier of G = (( Terminals G) \/ ( NonTerminals G)) by LANG1: 1;

        hence thesis by XBOOLE_1: 7;

      end;

      :: original: NonTerminals

      redefine

      func NonTerminals G -> Subset of G ;

      coherence

      proof

        the carrier of G = (( Terminals G) \/ ( NonTerminals G)) by LANG1: 1;

        hence thesis by XBOOLE_1: 7;

      end;

    end

    theorem :: ABCMIZ_1:115

    

     Th115: for D1,D2 be non empty DTConstrStr st the Rules of D1 c= the Rules of D2 holds ( NonTerminals D1) c= ( NonTerminals D2) & (the carrier of D1 /\ ( Terminals D2)) c= ( Terminals D1) & (( Terminals D1) c= ( Terminals D2) implies the carrier of D1 c= the carrier of D2)

    proof

      let D1,D2 be non empty DTConstrStr such that

       A1: the Rules of D1 c= the Rules of D2;

      thus

       A2: ( NonTerminals D1) c= ( NonTerminals D2)

      proof

        let x be object;

        assume x in ( NonTerminals D1);

        then ex s be Symbol of D1 st x = s & ex n be FinSequence st s ==> n;

        then

        consider s be Symbol of D1, n be FinSequence such that

         A3: x = s and

         A4: s ==> n;

        

         A5: [s, n] in the Rules of D1 by A4;

        then [s, n] in the Rules of D2 by A1;

        then

        reconsider s9 = s as Symbol of D2 by ZFMISC_1: 87;

        s9 ==> n by A1, A5;

        hence thesis by A3;

      end;

      hereby

        let x be object;

        assume

         A6: x in (the carrier of D1 /\ ( Terminals D2));

        then

         A7: x in ( Terminals D2) by XBOOLE_0:def 4;

        reconsider s9 = x as Symbol of D1 by A6, XBOOLE_0:def 4;

        reconsider s = x as Symbol of D2 by A6;

        assume not x in ( Terminals D1);

        then

        consider n be FinSequence such that

         A8: s9 ==> n;

         [s9, n] in the Rules of D1 by A8;

        then s ==> n by A1;

        then not ex s be Symbol of D2 st x = s & not ex n be FinSequence st s ==> n;

        hence contradiction by A7;

      end;

      assume ( Terminals D1) c= ( Terminals D2);

      then (( Terminals D1) \/ ( NonTerminals D1)) c= (( Terminals D2) \/ ( NonTerminals D2)) by A2, XBOOLE_1: 13;

      then (( Terminals D1) \/ ( NonTerminals D1)) c= the carrier of D2 by LANG1: 1;

      hence thesis by LANG1: 1;

    end;

    theorem :: ABCMIZ_1:116

    

     Th116: for D1,D2 be non empty DTConstrStr st ( Terminals D1) c= ( Terminals D2) & the Rules of D1 c= the Rules of D2 holds ( TS D1) c= ( TS D2)

    proof

      let G,G9 be non empty DTConstrStr such that

       A1: ( Terminals G) c= ( Terminals G9) and

       A2: the Rules of G c= the Rules of G9;

      

       A3: the carrier of G9 = (( Terminals G9) \/ ( NonTerminals G9)) by LANG1: 1;

      

       A4: the carrier of G c= the carrier of G9 by A1, A2, Th115;

      defpred P[ set] means $1 in ( TS G9);

      

       A5: for s be Symbol of G st s in ( Terminals G) holds P[( root-tree s)]

      proof

        let s be Symbol of G;

        assume

         A6: s in ( Terminals G);

        then

        reconsider s9 = s as Symbol of G9 by A1, A3, XBOOLE_0:def 3;

        ( root-tree s) = ( root-tree s9);

        hence thesis by A1, A6, DTCONSTR:def 1;

      end;

      

       A7: for nt be Symbol of G, ts be FinSequence of ( TS G) st nt ==> ( roots ts) & for t be DecoratedTree of the carrier of G st t in ( rng ts) holds P[t] holds P[(nt -tree ts)]

      proof

        let n be Symbol of G;

        let s be FinSequence of ( TS G) such that

         A8: [n, ( roots s)] in the Rules of G and

         A9: for t be DecoratedTree of the carrier of G st t in ( rng s) holds P[t];

        ( rng s) c= ( TS G9) by A9;

        then

        reconsider s9 = s as FinSequence of ( TS G9) by FINSEQ_1:def 4;

        reconsider n9 = n as Symbol of G9 by A4;

        n9 ==> ( roots s9) by A2, A8;

        hence thesis by DTCONSTR:def 1;

      end;

      

       A10: for t be DecoratedTree of the carrier of G st t in ( TS G) holds P[t] from DTCONSTR:sch 7( A5, A7);

      let x be object;

      assume

       A11: x in ( TS G);

      then

      reconsider t = x as Element of ( FinTrees the carrier of G);

       P[t] by A10, A11;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:117

    

     Th117: for S be ManySortedSign holds for X,Y be ManySortedSet of the carrier of S st X c= Y holds X is with_missing_variables implies Y is with_missing_variables

    proof

      let S be ManySortedSign;

      let X,Y be ManySortedSet of the carrier of S such that

       A1: X c= Y and

       A2: (X " { {} }) c= ( rng the ResultSort of S);

      let x be object;

      assume

       A3: x in (Y " { {} });

      then

       A4: x in ( dom Y) by FUNCT_1:def 7;

      

       A5: (Y . x) in { {} } by A3, FUNCT_1:def 7;

      

       A6: ( dom X) = the carrier of S by PARTFUN1:def 2;

      

       A7: (Y . x) = {} by A5, TARSKI:def 1;

      (X . x) c= (Y . x) by A1, A4;

      then (X . x) = {} by A7;

      then (X . x) in { {} } by TARSKI:def 1;

      then x in (X " { {} }) by A4, A6, FUNCT_1:def 7;

      hence thesis by A2;

    end;

    theorem :: ABCMIZ_1:118

    

     Th118: for S be set holds for X,Y be ManySortedSet of S st X c= Y holds ( Union ( coprod X)) c= ( Union ( coprod Y))

    proof

      let S be set;

      let X,Y be ManySortedSet of S such that

       A1: X c= Y;

      

       A2: ( dom Y) = S by PARTFUN1:def 2;

      let x be object;

      assume

       A3: x in ( Union ( coprod X));

      then

       A4: (x `2 ) in ( dom X) by CARD_3: 22;

      

       A5: (x `1 ) in (X . (x `2 )) by A3, CARD_3: 22;

      

       A6: x = [(x `1 ), (x `2 )] by A3, CARD_3: 22;

      (X . (x `2 )) c= (Y . (x `2 )) by A1, A4;

      hence thesis by A2, A4, A5, A6, CARD_3: 22;

    end;

    theorem :: ABCMIZ_1:119

    for S be non void Signature holds for X,Y be ManySortedSet of the carrier of S st X c= Y holds the carrier of ( DTConMSA X) c= the carrier of ( DTConMSA Y) by Th118, XBOOLE_1: 9;

    theorem :: ABCMIZ_1:120

    

     Th120: for S be non void Signature holds for X be ManySortedSet of the carrier of S st X is with_missing_variables holds ( NonTerminals ( DTConMSA X)) = [:the carrier' of S, {the carrier of S}:] & ( Terminals ( DTConMSA X)) = ( Union ( coprod X))

    proof

      let S be non void Signature;

      let X be ManySortedSet of the carrier of S such that

       A1: X is with_missing_variables;

      set D = ( DTConMSA X), A = ( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod X qua ManySortedSet of the carrier of S)));

      

       A2: ( Union ( coprod X)) misses [:the carrier' of S, {the carrier of S}:] by MSAFREE: 4;

      

       A3: ( Terminals D) misses ( NonTerminals D) by DTCONSTR: 8;

      thus ( NonTerminals ( DTConMSA X)) c= [:the carrier' of S, {the carrier of S}:] by MSAFREE: 6;

      thus

       A4: [:the carrier' of S, {the carrier of S}:] c= ( NonTerminals D)

      proof

        let o,x2 be object;

        assume

         A5: [o, x2] in [:the carrier' of S, {the carrier of S}:];

        then

         A6: x2 in {the carrier of S} by ZFMISC_1: 87;

        reconsider o as OperSymbol of S by A5, ZFMISC_1: 87;

        

         A7: the carrier of S = x2 by A6, TARSKI:def 1;

        then

        reconsider xa = [o, the carrier of S] as Element of the carrier of D by A5, XBOOLE_0:def 3;

        set O = ( the_arity_of o);

        defpred P[ object, object] means $2 in A & ((X . (O . $1)) <> {} implies $2 in ( coprod ((O . $1),X))) & ((X . (O . $1)) = {} implies ex o be OperSymbol of S st $2 = [o, the carrier of S] & ( the_result_sort_of o) = (O . $1));

        

         A8: for a be object st a in ( Seg ( len O)) holds ex b be object st P[a, b]

        proof

          let a be object;

          assume a in ( Seg ( len O));

          then

           A9: a in ( dom O) by FINSEQ_1:def 3;

          then

           A10: (O . a) in ( rng O) by FUNCT_1:def 3;

          then

          reconsider s = (O . a) as SortSymbol of S;

          per cases ;

            suppose (X . (O . a)) is non empty;

            then

            consider x be object such that

             A11: x in (X . (O . a)) by XBOOLE_0:def 1;

            take y = [x, (O . a)];

            

             A12: y in ( coprod ((O . a),X)) by A10, A11, MSAFREE:def 2;

            

             A13: (O . a) in ( rng O) by A9, FUNCT_1:def 3;

            ( dom ( coprod X)) = the carrier of S by PARTFUN1:def 2;

            then (( coprod X) . (O . a)) in ( rng ( coprod X)) by A13, FUNCT_1:def 3;

            then ( coprod ((O . a),X)) in ( rng ( coprod X)) by A13, MSAFREE:def 3;

            then y in ( Union ( coprod X)) by A12, TARSKI:def 4;

            hence thesis by A10, A11, MSAFREE:def 2, XBOOLE_0:def 3;

          end;

            suppose

             A14: (X . (O . a)) = {} ;

            then

            consider o be OperSymbol of S such that

             A15: ( the_result_sort_of o) = s by A1, Th114;

            take y = [o, the carrier of S];

            the carrier of S in {the carrier of S} by TARSKI:def 1;

            then y in [:the carrier' of S, {the carrier of S}:] by ZFMISC_1: 87;

            hence thesis by A14, A15, XBOOLE_0:def 3;

          end;

        end;

        consider b be Function such that

         A16: ( dom b) = ( Seg ( len O)) & for a be object st a in ( Seg ( len O)) holds P[a, (b . a)] from CLASSES1:sch 1( A8);

        reconsider b as FinSequence by A16, FINSEQ_1:def 2;

        ( rng b) c= A

        proof

          let a be object;

          assume a in ( rng b);

          then ex c be object st c in ( dom b) & (b . c) = a by FUNCT_1:def 3;

          hence thesis by A16;

        end;

        then

        reconsider b as FinSequence of A by FINSEQ_1:def 4;

        reconsider b as Element of (A * ) by FINSEQ_1:def 11;

        

         A17: ( len b) = ( len O) by A16, FINSEQ_1:def 3;

        now

          let c be set;

          assume

           A18: c in ( dom b);

          then

           A19: P[c, (b . c)] by A16;

          ( dom O) = ( Seg ( len O)) by FINSEQ_1:def 3;

          then

           A20: (O . c) in ( rng O) by A16, A18, FUNCT_1:def 3;

          ( dom ( coprod X)) = the carrier of S by PARTFUN1:def 2;

          then (( coprod X) . (O . c)) in ( rng ( coprod X)) by A20, FUNCT_1:def 3;

          then ( coprod ((O . c),X)) in ( rng ( coprod X)) by A20, MSAFREE:def 3;

          then (X . (O . c)) <> {} implies (b . c) in ( Union ( coprod X)) by A19, TARSKI:def 4;

          hence (b . c) in [:the carrier' of S, {the carrier of S}:] implies for o1 be OperSymbol of S st [o1, the carrier of S] = (b . c) holds ( the_result_sort_of o1) = (O . c) by A2, A19, XBOOLE_0: 3, XTUPLE_0: 1;

          assume

           A21: (b . c) in ( Union ( coprod X));

          now

            assume (X . (O . c)) = {} ;

            then

             A22: ex o be OperSymbol of S st ((b . c) = [o, the carrier of S]) & (( the_result_sort_of o) = (O . c)) by A16, A18;

            the carrier of S in {the carrier of S} by TARSKI:def 1;

            then (b . c) in [:the carrier' of S, {the carrier of S}:] by A22, ZFMISC_1: 87;

            hence contradiction by A2, A21, XBOOLE_0: 3;

          end;

          hence (b . c) in ( coprod ((O . c),X)) by A16, A18;

        end;

        then [xa, b] in ( REL X) by A17, MSAFREE: 5;

        then xa ==> b;

        hence thesis by A7;

      end;

      thus ( Terminals D) c= ( Union ( coprod X))

      proof

        let x be object;

        assume

         A23: x in ( Terminals D);

        then not x in [:the carrier' of S, {the carrier of S}:] by A3, A4, XBOOLE_0: 3;

        hence thesis by A23, XBOOLE_0:def 3;

      end;

      thus thesis by MSAFREE: 6;

    end;

    theorem :: ABCMIZ_1:121

    for S be non void Signature holds for X,Y be ManySortedSet of the carrier of S st X c= Y & X is with_missing_variables holds ( Terminals ( DTConMSA X)) c= ( Terminals ( DTConMSA Y)) & the Rules of ( DTConMSA X) c= the Rules of ( DTConMSA Y) & ( TS ( DTConMSA X)) c= ( TS ( DTConMSA Y))

    proof

      let S be non void Signature;

      let X,Y be ManySortedSet of the carrier of S such that

       A1: X c= Y and

       A2: X is with_missing_variables;

      

       A3: Y is with_missing_variables by A1, A2, Th117;

      set G = ( DTConMSA X), G9 = ( DTConMSA Y);

      

       A4: the carrier of G c= the carrier of G9 by A1, Th118, XBOOLE_1: 9;

      

       A5: ( Terminals G) = ( Union ( coprod X)) by A2, Th120;

      

       A6: ( Terminals G9) = ( Union ( coprod Y)) by A3, Th120;

      hence ( Terminals G) c= ( Terminals G9) by A1, A5, Th118;

      

       A7: (the carrier of G * ) c= (the carrier of G9 * ) by A4, FINSEQ_1: 62;

      thus the Rules of G c= the Rules of G9

      proof

        let a,b be object;

        assume

         A8: [a, b] in the Rules of G;

        then

         A9: a in [:the carrier' of S, {the carrier of S}:] by MSAFREE1: 2;

        reconsider a as Element of ( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod X))) by A9, XBOOLE_0:def 3;

        reconsider a9 = a as Element of ( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod Y))) by A9, XBOOLE_0:def 3;

        reconsider b as Element of (( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod X))) * ) by A8, MSAFREE1: 2;

        reconsider b9 = b as Element of (( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod Y))) * ) by A7;

        now

          let o be OperSymbol of S;

          assume

           A10: [o, the carrier of S] = a9;

          hence

           A11: ( len b9) = ( len ( the_arity_of o)) by A8, MSAFREE:def 7;

          let x be set;

          assume

           A12: x in ( dom b9);

          hence (b9 . x) in [:the carrier' of S, {the carrier of S}:] implies for o1 be OperSymbol of S st [o1, the carrier of S] = (b . x) holds ( the_result_sort_of o1) = (( the_arity_of o) . x) by A8, A10, MSAFREE:def 7;

          

           A13: ( Union ( coprod Y)) misses [:the carrier' of S, {the carrier of S}:] by MSAFREE: 4;

          

           A14: (b . x) in ( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod X))) by A12, DTCONSTR: 2;

          

           A15: ( dom b9) = ( Seg ( len b9)) by FINSEQ_1:def 3;

          ( dom ( the_arity_of o)) = ( Seg ( len b9)) by A11, FINSEQ_1:def 3;

          then

           A16: (( the_arity_of o) . x) in the carrier of S by A12, A15, DTCONSTR: 2;

          assume

           A17: (b9 . x) in ( Union ( coprod Y));

          (b . x) in [:the carrier' of S, {the carrier of S}:] or (b . x) in ( Union ( coprod X)) by A14, XBOOLE_0:def 3;

          then (b . x) in ( coprod ((( the_arity_of o) . x),X)) by A8, A10, A12, A13, A17, MSAFREE:def 7, XBOOLE_0: 3;

          then

           A18: ex a be set st (a in (X . (( the_arity_of o) . x))) & ((b . x) = [a, (( the_arity_of o) . x)]) by A16, MSAFREE:def 2;

          (X . (( the_arity_of o) . x)) c= (Y . (( the_arity_of o) . x)) by A1, A16;

          hence (b9 . x) in ( coprod ((( the_arity_of o) . x),Y)) by A16, A18, MSAFREE:def 2;

        end;

        hence thesis by A9, MSAFREE:def 7;

      end;

      hence thesis by A1, A5, A6, Th116, Th118;

    end;

    theorem :: ABCMIZ_1:122

    

     Th122: for t be set holds t in ( Terminals ( DTConMSA ( MSVars C))) iff ex x be variable st t = [x, ( a_Term C)]

    proof

      let t be set;

      set X = ( MSVars C);

      

       A1: ( Terminals ( DTConMSA X)) = ( Union ( coprod X)) by Th120;

      

       A2: ( dom X) = the carrier of C by PARTFUN1:def 2;

      

       A3: the carrier of C = { a_Type , an_Adj , a_Term } by Def9;

      

       A4: (X . a_Type ) = {} by Def25;

      

       A5: (X . an_Adj ) = {} by Def25;

      

       A6: (X . a_Term ) = Vars by Def25;

      hereby

        assume

         A7: t in ( Terminals ( DTConMSA X));

        then

         A8: (t `2 ) in ( dom X) by A1, CARD_3: 22;

        

         A9: (t `1 ) in (X . (t `2 )) by A1, A7, CARD_3: 22;

        

         A10: (t `2 ) = a_Type or (t `2 ) = an_Adj or (t `2 ) = a_Term by A3, A8, ENUMSET1:def 1;

        reconsider x = (t `1 ) as variable by A3, A4, A5, A6, A8, A9, ENUMSET1:def 1;

        take x;

        thus t = [x, ( a_Term C)] by A1, A4, A5, A7, A10, CARD_3: 22;

      end;

      given x be variable such that

       A11: t = [x, ( a_Term C)];

      

       A12: (t `1 ) = x by A11;

      (t `2 ) = a_Term by A11;

      hence thesis by A1, A2, A6, A11, A12, CARD_3: 22;

    end;

    theorem :: ABCMIZ_1:123

    

     Th123: for t be set holds t in ( NonTerminals ( DTConMSA ( MSVars C))) iff t = [( ast C), the carrier of C] or t = [( non_op C), the carrier of C] or ex c be constructor OperSymbol of C st t = [c, the carrier of C]

    proof

      let t be set;

      set X = ( MSVars C);

      

       A1: ( NonTerminals ( DTConMSA X)) = [:the carrier' of C, {the carrier of C}:] by Th120;

      hereby

        assume t in ( NonTerminals ( DTConMSA ( MSVars C)));

        then

        consider a,b be object such that

         A2: a in the carrier' of C and

         A3: b in {the carrier of C} and

         A4: t = [a, b] by A1, ZFMISC_1:def 2;

        reconsider a as OperSymbol of C by A2;

        

         A5: b = the carrier of C by A3, TARSKI:def 1;

        a is constructor or not a is constructor;

        hence t = [( ast C), the carrier of C] or t = [( non_op C), the carrier of C] or ex c be constructor OperSymbol of C st t = [c, the carrier of C] by A4, A5;

      end;

      the carrier of C in {the carrier of C} by TARSKI:def 1;

      hence thesis by A1, ZFMISC_1: 87;

    end;

    theorem :: ABCMIZ_1:124

    

     Th124: for S be non void Signature holds for X be with_missing_variables ManySortedSet of the carrier of S holds for t be set st t in ( Union the Sorts of ( Free (S,X))) holds t is Term of S, (X (\/) (the carrier of S --> { 0 }))

    proof

      let S be non void Signature;

      let X be with_missing_variables ManySortedSet of the carrier of S;

      set V = (X (\/) (the carrier of S --> { 0 }));

      set A = ( Free (S,X));

      set U = the Sorts of A;

      

       A1: U = (S -Terms (X,V)) by MSAFREE3: 24;

      let t be set;

      assume t in ( Union U);

      then

      consider s be object such that

       A2: s in ( dom U) and

       A3: t in (U . s) by CARD_5: 2;

      reconsider s as SortSymbol of S by A2;

      (U . s) = { r where r be Term of S, V : ( the_sort_of r) = s & ( variables_in r) c= X } by A1, MSAFREE3:def 5;

      then ex r be Term of S, V st t = r & ( the_sort_of r) = s & ( variables_in r) c= X by A3;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:125

    for S be non void Signature holds for X be with_missing_variables ManySortedSet of the carrier of S holds for t be Term of S, (X (\/) (the carrier of S --> { 0 })) st t in ( Union the Sorts of ( Free (S,X))) holds t in (the Sorts of ( Free (S,X)) . ( the_sort_of t))

    proof

      let S be non void Signature;

      let X be with_missing_variables ManySortedSet of the carrier of S;

      set V = (X (\/) (the carrier of S --> { 0 }));

      set A = ( Free (S,X));

      set U = the Sorts of A;

      

       A1: U = (S -Terms (X,V)) by MSAFREE3: 24;

      let t be Term of S, (X (\/) (the carrier of S --> { 0 }));

      assume t in ( Union U);

      then

      consider s be object such that

       A2: s in ( dom U) and

       A3: t in (U . s) by CARD_5: 2;

      reconsider s as SortSymbol of S by A2;

      (U . s) = { r where r be Term of S, V : ( the_sort_of r) = s & ( variables_in r) c= X } by A1, MSAFREE3:def 5;

      then ex r be Term of S, V st t = r & ( the_sort_of r) = s & ( variables_in r) c= X by A3;

      hence thesis by A3;

    end;

    theorem :: ABCMIZ_1:126

    for G be non empty DTConstrStr holds for s be Element of G holds for p be FinSequence st s ==> p holds p is FinSequence of the carrier of G

    proof

      let G be non empty DTConstrStr;

      let s be Element of G;

      let p be FinSequence;

      assume s ==> p;

      then [s, p] in the Rules of G;

      then p in (the carrier of G * ) by ZFMISC_1: 87;

      hence thesis by FINSEQ_1:def 11;

    end;

    theorem :: ABCMIZ_1:127

    

     Th127: for S be non void Signature holds for X,Y be ManySortedSet of the carrier of S holds for g1 be Symbol of ( DTConMSA X) holds for g2 be Symbol of ( DTConMSA Y) holds for p1 be FinSequence of the carrier of ( DTConMSA X) holds for p2 be FinSequence of the carrier of ( DTConMSA Y) st g1 = g2 & p1 = p2 & g1 ==> p1 holds g2 ==> p2

    proof

      let S be non void Signature;

      let X,Y be ManySortedSet of the carrier of S;

      

       A1: ( dom Y) = the carrier of S by PARTFUN1:def 2;

      set G1 = ( DTConMSA X);

      set G2 = ( DTConMSA Y);

      let g1 be Symbol of G1;

      let g2 be Symbol of G2;

      let p1 be FinSequence of the carrier of G1;

      let p2 be FinSequence of the carrier of G2;

      assume that

       A2: g1 = g2 and

       A3: p1 = p2 and

       A4: g1 ==> p1;

      

       A5: [g1, p1] in ( REL X) by A4;

      then

       A6: p1 in (( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod X))) * ) by ZFMISC_1: 87;

      then

       A7: g1 in [:the carrier' of S, {the carrier of S}:] by A5, MSAFREE:def 7;

      

       A8: p2 in (( [:the carrier' of S, {the carrier of S}:] \/ ( Union ( coprod Y))) * ) by FINSEQ_1:def 11;

      now

        let o9 be OperSymbol of S;

        assume

         A9: [o9, the carrier of S] = g2;

        hence

         A10: ( len p2) = ( len ( the_arity_of o9)) by A2, A3, A5, A6, MSAFREE:def 7;

        let x be set;

        assume

         A11: x in ( dom p2);

        hence (p2 . x) in [:the carrier' of S, {the carrier of S}:] implies for o1 be OperSymbol of S st [o1, the carrier of S] = (p2 . x) holds ( the_result_sort_of o1) = (( the_arity_of o9) . x) by A2, A3, A5, A6, A9, MSAFREE:def 7;

        x in ( dom ( the_arity_of o9)) by A10, A11, FINSEQ_3: 29;

        then (( the_arity_of o9) . x) in ( rng ( the_arity_of o9)) by FUNCT_1:def 3;

        then

        reconsider i = (( the_arity_of o9) . x) as SortSymbol of S;

        assume

         A12: (p2 . x) in ( Union ( coprod Y));

        then

         A13: ((p2 . x) `2 ) in ( dom Y) by CARD_3: 22;

        

         A14: ((p2 . x) `1 ) in (Y . ((p2 . x) `2 )) by A12, CARD_3: 22;

        

         A15: (p2 . x) = [((p2 . x) `1 ), ((p2 . x) `2 )] by A12, CARD_3: 22;

        reconsider nn = the carrier of S as set;

        

         A: not nn in nn;

        (p2 . x) in ( rng p1) by A3, A11, FUNCT_1:def 3;

        then the carrier of S nin the carrier of S & (p2 . x) in [:the carrier' of S, {the carrier of S}:] or (p2 . x) in ( Union ( coprod X)) by XBOOLE_0:def 3, A;

        then (p2 . x) in ( coprod (i,X)) by A1, A2, A3, A5, A6, A9, A11, A13, A15, MSAFREE:def 7, ZFMISC_1: 106;

        then ex a be set st (a in (X . i)) & ((p2 . x) = [a, i]) by MSAFREE:def 2;

        then i = ((p2 . x) `2 );

        hence (p2 . x) in ( coprod ((( the_arity_of o9) . x),Y)) by A14, A15, MSAFREE:def 2;

      end;

      then [g2, p2] in ( REL Y) by A2, A7, A8, MSAFREE:def 7;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:128

    

     Th128: for S be non void Signature holds for X be with_missing_variables ManySortedSet of the carrier of S holds ( Union the Sorts of ( Free (S,X))) = ( TS ( DTConMSA X))

    proof

      let S be non void Signature;

      let X be with_missing_variables ManySortedSet of the carrier of S;

      set V = (X (\/) (the carrier of S --> { 0 }));

      set A = ( Free (S,X));

      set U = the Sorts of A;

      set G = ( DTConMSA X);

      

       A1: U = (S -Terms (X,V)) by MSAFREE3: 24;

      

       A2: ( dom U) = the carrier of S by PARTFUN1:def 2;

      defpred P[ set] means $1 in ( Union U) implies $1 in ( TS G);

      

       A3: for s be SortSymbol of S, v be Element of (V . s) holds P[( root-tree [v, s])]

      proof

        let s be SortSymbol of S;

        let v be Element of (V . s);

        assume ( root-tree [v, s]) in ( Union U);

        then

        consider s1 be object such that

         A4: s1 in ( dom U) and

         A5: ( root-tree [v, s]) in (U . s1) by CARD_5: 2;

        reconsider s1 as SortSymbol of S by A4;

        (U . s1) = { t where t be Term of S, V : ( the_sort_of t) = s1 & ( variables_in t) c= X } by A1, MSAFREE3:def 5;

        then

        consider t be Term of S, V such that

         A6: ( root-tree [v, s]) = t and ( the_sort_of t) = s1 and

         A7: ( variables_in t) c= X by A5;

        (( variables_in t) . s) = {v} by A6, MSAFREE3: 10;

        then {v} c= (X . s) by A7;

        then v in (X . s) by ZFMISC_1: 31;

        then [v, s] in ( Terminals G) by MSAFREE: 7;

        hence thesis by DTCONSTR:def 1;

      end;

      

       A8: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,V)) st for t be Term of S, V st t in ( rng p) holds P[t] holds P[( [o, the carrier of S] -tree p)]

      proof

        let o be OperSymbol of S;

        let p be ArgumentSeq of ( Sym (o,V)) such that

         A9: for t be Term of S, V st t in ( rng p) holds P[t] and

         A10: ( [o, the carrier of S] -tree p) in ( Union U);

        consider s be object such that

         A11: s in ( dom U) and

         A12: ( [o, the carrier of S] -tree p) in (U . s) by A10, CARD_5: 2;

        reconsider s as SortSymbol of S by A11;

        (U . s) = { t where t be Term of S, V : ( the_sort_of t) = s & ( variables_in t) c= X } by A1, MSAFREE3:def 5;

        then

        consider t be Term of S, V such that

         A13: ( [o, the carrier of S] -tree p) = t and

         A14: ( the_sort_of t) = s and ( variables_in t) c= X by A12;

        (t . {} ) = [o, the carrier of S] by A13, TREES_4:def 4;

        then ( the_result_sort_of o) = s by A14, MSATERM: 17;

        then

         A15: ( rng p) c= ( Union U) by A1, A12, MSAFREE3: 19;

        ( rng p) c= ( TS G)

        proof

          let x be object;

          assume

           A16: x in ( rng p);

          then x is Term of S, V by A15, Th124;

          hence thesis by A9, A15, A16;

        end;

        then

        reconsider q = p as FinSequence of ( TS G) by FINSEQ_1:def 4;

        ( NonTerminals G) = [:the carrier' of S, {the carrier of S}:] by Th120;

        then [o, the carrier of S] in ( NonTerminals G) by ZFMISC_1: 106;

        then

        reconsider oo = [o, the carrier of S] as Symbol of G;

        ( Sym (o,V)) ==> ( roots p) by MSATERM: 21;

        then oo ==> ( roots q) by Th127;

        hence thesis by DTCONSTR:def 1;

      end;

      

       A17: for t be Term of S, V holds P[t] from MSATERM:sch 1( A3, A8);

      

       A18: ( NonTerminals ( DTConMSA X)) = [:the carrier' of S, {the carrier of S}:] by Th120;

      

       A19: ( Terminals ( DTConMSA X)) = ( Union ( coprod X)) by Th120;

      defpred Q[ set] means $1 in ( Union U);

      

       A20: for s be Symbol of G st s in ( Terminals G) holds Q[( root-tree s)]

      proof

        let s be Symbol of G;

        assume

         A21: s in ( Terminals G);

        then

         A22: (s `2 ) in ( dom X) by A19, CARD_3: 22;

        

         A23: (s `1 ) in (X . (s `2 )) by A19, A21, CARD_3: 22;

        

         A24: s = [(s `1 ), (s `2 )] by A19, A21, CARD_3: 22;

        

         A25: ( dom U) = the carrier of S by PARTFUN1:def 2;

        ( root-tree s) in (the Sorts of ( Free (S,X)) . (s `2 )) by A22, A23, A24, MSAFREE3: 4;

        hence thesis by A22, A25, CARD_5: 2;

      end;

      

       A26: for nt be Symbol of G, ts be FinSequence of ( TS G) st nt ==> ( roots ts) & for t be DecoratedTree of the carrier of G st t in ( rng ts) holds Q[t] holds Q[(nt -tree ts)]

      proof

        let nt be Symbol of G;

        let ts be FinSequence of ( TS G) such that

         A27: nt ==> ( roots ts) and

         A28: for t be DecoratedTree of the carrier of G st t in ( rng ts) holds Q[t];

        nt in ( NonTerminals G) by A27;

        then

        consider o,z be object such that

         A29: o in the carrier' of S and

         A30: z in {the carrier of S} and

         A31: nt = [o, z] by A18, ZFMISC_1:def 2;

        reconsider o as OperSymbol of S by A29;

        

         A32: ( rng ts) c= ( Union U) by A28;

        ( rng ts) c= ( TS ( DTConMSA V))

        proof

          let a be object;

          assume a in ( rng ts);

          then

           A33: a is Element of (S -Terms V) by A32, Th124;

          (S -Terms V) = ( TS ( DTConMSA V)) by MSATERM:def 1;

          hence thesis by A33;

        end;

        then

        reconsider p = ts as FinSequence of ( TS ( DTConMSA V)) by FINSEQ_1:def 4;

        reconsider q = p as FinSequence of (S -Terms V) by MSATERM:def 1;

        

         A34: z = the carrier of S by A30, TARSKI:def 1;

        then ( Sym (o,V)) ==> ( roots p) by A27, A31, Th127;

        then

        reconsider q as ArgumentSeq of ( Sym (o,V)) by MSATERM: 21;

        set t = (( Sym (o,V)) -tree q);

        t in (U . ( the_result_sort_of o)) by A1, A32, MSAFREE3: 19;

        hence thesis by A2, A31, A34, CARD_5: 2;

      end;

      

       A35: for t be DecoratedTree of the carrier of G st t in ( TS G) holds Q[t] from DTCONSTR:sch 7( A20, A26);

      thus ( Union U) c= ( TS ( DTConMSA X))

      proof

        let x be object;

        assume

         A36: x in ( Union U);

        then

        consider s be object such that

         A37: s in ( dom U) and

         A38: x in (U . s) by CARD_5: 2;

        reconsider s as SortSymbol of S by A37;

        x in (U . s) by A38;

        then x is Term of S, V by A1, MSAFREE3: 16;

        hence thesis by A17, A36;

      end;

      let x be object;

      assume

       A39: x in ( TS G);

      then

      reconsider TG = ( TS G) as non empty Subset of ( FinTrees the carrier of G);

      x is Element of TG by A39;

      hence thesis by A35;

    end;

    definition

      let S be non void Signature;

      let X be ManySortedSet of the carrier of S;

      :: ABCMIZ_1:def56

      mode term-transformation of S,X -> UnOp of ( Union the Sorts of ( Free (S,X))) means

      : Def56: for s be SortSymbol of S holds (it .: (the Sorts of ( Free (S,X)) . s)) c= (the Sorts of ( Free (S,X)) . s);

      existence

      proof

        set f = ( id ( Union the Sorts of ( Free (S,X))));

        

         A1: ( dom f) = ( Union the Sorts of ( Free (S,X)));

        ( rng f) = ( Union the Sorts of ( Free (S,X)));

        then

        reconsider f as UnOp of ( Union the Sorts of ( Free (S,X))) by A1, FUNCT_2: 2;

        take f;

        thus thesis by Th4;

      end;

    end

    theorem :: ABCMIZ_1:129

    

     Th129: for S be non void Signature holds for X be non empty ManySortedSet of the carrier of S holds for f be UnOp of ( Union the Sorts of ( Free (S,X))) holds f is term-transformation of S, X iff for s be SortSymbol of S holds for a be set st a in (the Sorts of ( Free (S,X)) . s) holds (f . a) in (the Sorts of ( Free (S,X)) . s)

    proof

      let S be non void Signature;

      let X be non empty ManySortedSet of the carrier of S;

      

       A1: ( dom the Sorts of ( Free (S,X))) = the carrier of S by PARTFUN1:def 2;

      let f be UnOp of ( Union the Sorts of ( Free (S,X)));

      

       A2: ( dom f) = ( Union the Sorts of ( Free (S,X))) by FUNCT_2: 52;

      hereby

        assume

         A3: f is term-transformation of S, X;

        let s be SortSymbol of S;

        

         A4: (f .: (the Sorts of ( Free (S,X)) . s)) c= (the Sorts of ( Free (S,X)) . s) by A3, Def56;

        (the Sorts of ( Free (S,X)) . s) in ( rng the Sorts of ( Free (S,X))) by A1, FUNCT_1:def 3;

        then

         A5: (the Sorts of ( Free (S,X)) . s) c= ( Union the Sorts of ( Free (S,X))) by ZFMISC_1: 74;

        let a be set;

        assume a in (the Sorts of ( Free (S,X)) . s);

        then (f . a) in (f .: (the Sorts of ( Free (S,X)) . s)) by A2, A5, FUNCT_1:def 6;

        hence (f . a) in (the Sorts of ( Free (S,X)) . s) by A4;

      end;

      assume

       A6: for s be SortSymbol of S holds for a be set st a in (the Sorts of ( Free (S,X)) . s) holds (f . a) in (the Sorts of ( Free (S,X)) . s);

      let s be SortSymbol of S;

      let x be object;

      assume x in (f .: (the Sorts of ( Free (S,X)) . s));

      then ex a be object st a in ( dom f) & a in (the Sorts of ( Free (S,X)) . s) & x = (f . a) by FUNCT_1:def 6;

      hence thesis by A6;

    end;

    theorem :: ABCMIZ_1:130

    

     Th130: for S be non void Signature holds for X be non empty ManySortedSet of the carrier of S holds for f be term-transformation of S, X holds for s be SortSymbol of S holds for p be FinSequence of (the Sorts of ( Free (S,X)) . s) holds (f * p) is FinSequence of (the Sorts of ( Free (S,X)) . s) & ( card (f * p)) = ( len p)

    proof

      let S be non void Signature;

      let X be non empty ManySortedSet of the carrier of S;

      set A = ( Free (S,X));

      let f be term-transformation of S, X;

      let s be SortSymbol of S;

      let p be FinSequence of (the Sorts of A . s);

      

       A1: ( Union the Sorts of A) = {} or ( Union the Sorts of A) <> {} ;

      

       A2: ( dom the Sorts of A) = the carrier of S by PARTFUN1:def 2;

      

       A3: ( dom f) = ( Union the Sorts of A) by A1, FUNCT_2:def 1;

      (the Sorts of A . s) in ( rng the Sorts of A) by A2, FUNCT_1:def 3;

      then (the Sorts of A . s) c= ( Union the Sorts of A) by ZFMISC_1: 74;

      then ( rng p) c= ( dom f) by A3;

      then

       A4: ( dom (f * p)) = ( dom p) by RELAT_1: 27;

      ( dom p) = ( Seg ( len p)) by FINSEQ_1:def 3;

      then

       A5: (f * p) is FinSequence by A4, FINSEQ_1:def 2;

      

       A6: ( rng (f * p)) c= (the Sorts of A . s)

      proof

        let z be object;

        assume z in ( rng (f * p));

        then

        consider i be object such that

         A7: i in ( dom (f * p)) and

         A8: z = ((f * p) . i) by FUNCT_1:def 3;

        (p . i) in ( rng p) by A4, A7, FUNCT_1:def 3;

        then (f . (p . i)) in (the Sorts of A . s) by Th129;

        hence thesis by A7, A8, FUNCT_1: 12;

      end;

      hence (f * p) is FinSequence of (the Sorts of ( Free (S,X)) . s) by A5, FINSEQ_1:def 4;

      reconsider q = (f * p) as FinSequence of (the Sorts of A . s) by A5, A6, FINSEQ_1:def 4;

      

      thus ( card (f * p)) = ( len q)

      .= ( len p) by A4, FINSEQ_3: 29;

    end;

    definition

      let S be non void Signature;

      let X be ManySortedSet of the carrier of S;

      let t be term-transformation of S, X;

      :: ABCMIZ_1:def57

      attr t is substitution means for o be OperSymbol of S holds for p,q be FinSequence of ( Free (S,X)) st ( [o, the carrier of S] -tree p) in ( Union the Sorts of ( Free (S,X))) & q = (t * p) holds (t . ( [o, the carrier of S] -tree p)) = ( [o, the carrier of S] -tree q);

    end

    scheme :: ABCMIZ_1:sch3

    StructDef { C() -> initialized ConstructorSignature , V,N( set) -> expression of C() , F,A( set, set) -> expression of C() } :

ex f be term-transformation of C(), ( MSVars C()) st (for x be variable holds (f . (x -term C())) = V(x)) & (for c be constructor OperSymbol of C() holds for p,q be FinSequence of ( QuasiTerms C()) st ( len p) = ( len ( the_arity_of c)) & q = (f * p) holds (f . (c -trm p)) = F(c,q)) & (for a be expression of C(), ( an_Adj C()) holds (f . (( non_op C()) term a)) = N(.)) & for a be expression of C(), ( an_Adj C()) holds for t be expression of C(), ( a_Type C()) holds (f . (( ast C()) term (a,t))) = A(.,.)

      provided

       A1: for x be variable holds V(x) is quasi-term of C()

       and

       A2: for c be constructor OperSymbol of C() holds for p be FinSequence of ( QuasiTerms C()) st ( len p) = ( len ( the_arity_of c)) holds F(c,p) is expression of C(), ( the_result_sort_of c)

       and

       A3: for a be expression of C(), ( an_Adj C()) holds N(a) is expression of C(), ( an_Adj C())

       and

       A4: for a be expression of C(), ( an_Adj C()) holds for t be expression of C(), ( a_Type C()) holds A(a,t) is expression of C(), ( a_Type C());

      set V = ( MSVars C());

      set X = (V (\/) (the carrier of C() --> { 0 }));

      set A = ( Free (C(),V));

      set U = the Sorts of A;

      set D = ( Union U);

      set G = ( DTConMSA V);

      deffunc TermVal( Symbol of G) = V(`1);

      deffunc NTermVal( Symbol of G, FinSequence, Function) = ( IFEQ (($1 `1 ), * ,A(.,.),( IFEQ (($1 `1 ), non_op ,N(.),F(`1,$3)))));

      consider f be Function of ( TS G), D such that

       A5: for t be Symbol of G st t in ( Terminals G) holds (f . ( root-tree t)) = TermVal(t) and

       A6: for nt be Symbol of G, ts be FinSequence of ( TS G) st nt ==> ( roots ts) holds (f . (nt -tree ts)) = NTermVal(nt,roots,*) from DTCONSTR:sch 8;

      D = ( TS G) by Th128;

      then

      reconsider f as Function of D, D;

      f is term-transformation of C(), V

      proof

        let s be SortSymbol of C();

        let x be object;

        assume x in (f .: (the Sorts of A . s));

        then

        consider a be Element of D such that

         A7: a in (the Sorts of A . s) and

         A8: x = (f . a) by FUNCT_2: 65;

        defpred P[ expression of C()] means for s be SortSymbol of C() st $1 in (the Sorts of A . s) holds (f . $1) in (the Sorts of A . s);

        

         A9: for x be variable holds P[(x -term C())]

        proof

          let y be variable;

          set a = (y -term C());

          let s be SortSymbol of C();

          assume

           A10: a in (the Sorts of A . s);

          

           A11: [y, ( a_Term C())] in ( Terminals G) by Th122;

          then

          reconsider t = [y, ( a_Term C())] as Symbol of G;

          (f . a) = TermVal(t) by A5, A11

          .= V(y);

          then

           A12: (f . a) is quasi-term of C() by A1;

          a is expression of C(), s by A10, Def28;

          then s = ( a_Term C()) by Th48;

          hence thesis by A12, Def28;

        end;

        

         A13: for c be constructor OperSymbol of C() holds for p be FinSequence of ( QuasiTerms C()) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C() st t in ( rng p) holds P[t] holds P[(c -trm p)]

        proof

          let c be constructor OperSymbol of C();

          let p be FinSequence of ( QuasiTerms C());

          assume that

           A14: ( len p) = ( len ( the_arity_of c)) and

           A15: for t be quasi-term of C() st t in ( rng p) holds P[t];

          set a = (c -trm p);

          set nt = [c, the carrier of C()];

          let s be SortSymbol of C() such that

           A16: a in (the Sorts of A . s);

          nt in ( NonTerminals G) by Th123;

          then

          reconsider nt as Symbol of G;

          reconsider ts = p as FinSequence of ( TS G) by Th128;

          

           A17: a = (nt -tree ts) by A14, Def35;

          reconsider aa = a as Term of C(), X by MSAFREE3: 8;

          the Sorts of A = (C() -Terms (V,X)) by MSAFREE3: 24;

          then the Sorts of A c= the Sorts of ( FreeMSA X) by PBOOLE:def 18;

          then (the Sorts of A . s) c= (the Sorts of ( FreeMSA X) . s);

          then aa in (( FreeSort X) . s) by A16;

          then aa in ( FreeSort (X,s)) by MSAFREE:def 11;

          then

           A18: ( the_sort_of aa) = s by MSATERM:def 5;

          

           A19: c <> * by Def11;

          

           A20: c <> non_op by Def11;

          

           A21: ( rng p) c= ( QuasiTerms C()) by FINSEQ_1:def 4;

          ( dom f) = D by FUNCT_2:def 1;

          then

           A22: ( rng p) c= ( dom f);

          ( rng (f * p)) c= ( QuasiTerms C())

          proof

            let z be object;

            assume z in ( rng (f * p));

            then

            consider i be object such that

             A23: i in ( dom (f * p)) and

             A24: z = ((f * p) . i) by FUNCT_1:def 3;

            i in ( dom p) by A22, A23, RELAT_1: 27;

            then

             A25: (p . i) in ( rng p) by FUNCT_1:def 3;

            then

            reconsider pi1 = (p . i) as quasi-term of C() by A21, Th41;

            pi1 in (the Sorts of A . ( a_Term C())) by Th41;

            then (f . pi1) in (the Sorts of A . ( a_Term C())) by A15, A25;

            hence thesis by A23, A24, FUNCT_1: 12;

          end;

          then

          reconsider q = (f * p) as FinSequence of ( QuasiTerms C()) by FINSEQ_1:def 4;

          ( rng p) c= (C() -Terms X)

          proof

            let z be object;

            assume z in ( rng p);

            then z is Element of (C() -Terms X) by MSAFREE3: 8;

            hence thesis;

          end;

          then

          reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

          

           A26: ( len q) = ( len p) by A22, FINSEQ_2: 29;

          a is Term of C(), X by MSAFREE3: 8;

          then

           A27: r is ArgumentSeq of ( Sym (c,X)) by A17, MSATERM: 1;

          then

           A28: ( the_result_sort_of c) = s by A17, A18, MSATERM: 20;

          ( Sym (c,X)) ==> ( roots r) by A27, MSATERM: 21;

          then nt ==> ( roots ts) by Th127;

          

          then (f . a) = NTermVal(nt,roots,*) by A6, A17

          .= ( IFEQ (c, non_op ,N(.),F(c,*))) by A19, FUNCOP_1:def 8

          .= F(c,*) by A20, FUNCOP_1:def 8;

          then (f . a) is expression of C(), ( the_result_sort_of c) by A2, A14, A26;

          hence thesis by A28, Def28;

        end;

        

         A29: for a be expression of C(), ( an_Adj C()) st P[a] holds P[(( non_op C()) term a)]

        proof

          let v be expression of C(), ( an_Adj C()) such that

           A30: P[v];

          

           A31: v in (U . ( an_Adj C())) by Def28;

          then (f . v) in (U . ( an_Adj C())) by A30;

          then

          reconsider fv = (f . v) as expression of C(), ( an_Adj C()) by Def28;

          let s be SortSymbol of C();

          assume

           A32: (( non_op C()) term v) in (U . s);

          

           A33: (( non_op C()) term v) is expression of C(), ( an_Adj C()) by Th43;

          (( non_op C()) term v) is expression of C(), s by A32, Def28;

          then

           A34: s = ( an_Adj C()) by A33, Th48;

          set QA = (U . ( an_Adj C()));

          ( rng <*v*>) = {v} by FINSEQ_1: 38;

          then ( rng <*v*>) c= QA by A31, ZFMISC_1: 31;

          then

          reconsider p = <*v*> as FinSequence of QA by FINSEQ_1:def 4;

          set c = ( non_op C());

          set a = (( non_op C()) term v);

          set nt = [c, the carrier of C()];

          nt in ( NonTerminals G) by Th123;

          then

          reconsider nt as Symbol of G;

          reconsider ts = p as FinSequence of ( TS G) by Th128;

          

           A35: a = (nt -tree ts) by Th43;

          ( dom f) = D by FUNCT_2:def 1;

          then

           A36: (f * p) = <*fv*> by FINSEQ_2: 34;

          ( rng p) c= (C() -Terms X)

          proof

            let z be object;

            assume z in ( rng p);

            then z is expression of C(), ( an_Adj C()) by Th41;

            then z is Element of (C() -Terms X) by MSAFREE3: 8;

            hence thesis;

          end;

          then

          reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

          a is Term of C(), X by MSAFREE3: 8;

          then r is ArgumentSeq of ( Sym (c,X)) by A35, MSATERM: 1;

          then ( Sym (c,X)) ==> ( roots r) by MSATERM: 21;

          then nt ==> ( roots ts) by Th127;

          

          then (f . a) = NTermVal(nt,roots,*) by A6, A35

          .= ( IFEQ (c, non_op ,N(.),F(c,*))) by FUNCOP_1:def 8

          .= N(.) by FUNCOP_1:def 8

          .= N(fv) by A36, FINSEQ_1: 40;

          then (f . a) is expression of C(), ( an_Adj C()) by A3;

          hence thesis by A34, Def28;

        end;

        

         A37: for a be expression of C(), ( an_Adj C()) st P[a] holds for t be expression of C(), ( a_Type C()) st P[t] holds P[(( ast C()) term (a,t))]

        proof

          let v be expression of C(), ( an_Adj C()) such that

           A38: P[v];

          let t be expression of C(), ( a_Type C()) such that

           A39: P[t];

          

           A40: v in (U . ( an_Adj C())) by Def28;

          

           A41: t in (U . ( a_Type C())) by Def28;

          

           A42: (f . v) in (U . ( an_Adj C())) by A38, A40;

          

           A43: (f . t) in (U . ( a_Type C())) by A39, A41;

          reconsider fv = (f . v) as expression of C(), ( an_Adj C()) by A42, Def28;

          reconsider ft = (f . t) as expression of C(), ( a_Type C()) by A43, Def28;

          let s be SortSymbol of C();

          assume

           A44: (( ast C()) term (v,t)) in (U . s);

          

           A45: (( ast C()) term (v,t)) is expression of C(), ( a_Type C()) by Th46;

          (( ast C()) term (v,t)) is expression of C(), s by A44, Def28;

          then

           A46: s = ( a_Type C()) by A45, Th48;

          reconsider p = <*v, t*> as FinSequence of D;

          set c = ( ast C());

          set a = (( ast C()) term (v,t));

          set nt = [c, the carrier of C()];

          nt in ( NonTerminals G) by Th123;

          then

          reconsider nt as Symbol of G;

          reconsider ts = p as FinSequence of ( TS G) by Th128;

          

           A47: a = (nt -tree ts) by Th46;

          

           A48: (f * p) = <*fv, ft*> by FINSEQ_2: 36;

          ( rng p) c= (C() -Terms X)

          proof

            let z be object;

            assume z in ( rng p);

            then z is Element of (C() -Terms X) by MSAFREE3: 8;

            hence thesis;

          end;

          then

          reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

          a is Term of C(), X by MSAFREE3: 8;

          then r is ArgumentSeq of ( Sym (c,X)) by A47, MSATERM: 1;

          then ( Sym (c,X)) ==> ( roots r) by MSATERM: 21;

          then nt ==> ( roots ts) by Th127;

          

          then (f . a) = NTermVal(nt,roots,*) by A6, A47

          .= A(.,.) by FUNCOP_1:def 8

          .= A(fv,.) by A48, FINSEQ_1: 44

          .= A(fv,ft) by A48, FINSEQ_1: 44;

          then (f . a) is expression of C(), ( a_Type C()) by A4;

          hence thesis by A46, Def28;

        end;

         P[a] from StructInd( A9, A13, A29, A37);

        hence thesis by A7, A8;

      end;

      then

      reconsider f as term-transformation of C(), ( MSVars C());

      take f;

      hereby

        let x be variable;

        x in Vars ;

        then

         A49: x in (V . ( a_Term C())) by Def25;

        reconsider x9 = x as Element of (V . ( a_Term C())) by Def25;

        reconsider xx = [x9, ( a_Term C())] as Symbol of G by A49, MSAFREE3: 2;

        xx in ( Terminals G) by A49, MSAFREE: 7;

        

        hence (f . (x -term C())) = V(`1) by A5

        .= V(x);

      end;

      hereby

        let c be constructor OperSymbol of C();

        let p,q be FinSequence of ( QuasiTerms C());

        assume that

         A50: ( len p) = ( len ( the_arity_of c)) and

         A51: q = (f * p);

        set a = (c -trm p);

        set nt = [c, the carrier of C()];

        nt in ( NonTerminals G) by Th123;

        then

        reconsider nt as Symbol of G;

        reconsider ts = p as FinSequence of ( TS G) by Th128;

        

         A52: a = (nt -tree ts) by A50, Def35;

        

         A53: c <> * by Def11;

        

         A54: c <> non_op by Def11;

        ( rng p) c= (C() -Terms X)

        proof

          let z be object;

          assume z in ( rng p);

          then z is Element of (C() -Terms X) by MSAFREE3: 8;

          hence thesis;

        end;

        then

        reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

        a is Term of C(), X by MSAFREE3: 8;

        then r is ArgumentSeq of ( Sym (c,X)) by A52, MSATERM: 1;

        then ( Sym (c,X)) ==> ( roots r) by MSATERM: 21;

        then nt ==> ( roots ts) by Th127;

        

        then (f . a) = NTermVal(nt,roots,*) by A6, A52

        .= ( IFEQ (c, non_op ,N(.),F(c,*))) by A53, FUNCOP_1:def 8

        .= F(c,*) by A54, FUNCOP_1:def 8;

        hence (f . (c -trm p)) = F(c,q) by A51;

      end;

      hereby

        let v be expression of C(), ( an_Adj C());

        

         A55: v in (U . ( an_Adj C())) by Def28;

        then (f . v) in (U . ( an_Adj C())) by Th129;

        then

        reconsider fv = (f . v) as expression of C(), ( an_Adj C()) by Def28;

        set QA = (U . ( an_Adj C()));

        ( rng <*v*>) = {v} by FINSEQ_1: 38;

        then ( rng <*v*>) c= QA by A55, ZFMISC_1: 31;

        then

        reconsider p = <*v*> as FinSequence of QA by FINSEQ_1:def 4;

        set c = ( non_op C());

        set a = (( non_op C()) term v);

        set nt = [c, the carrier of C()];

        nt in ( NonTerminals G) by Th123;

        then

        reconsider nt as Symbol of G;

        reconsider ts = p as FinSequence of ( TS G) by Th128;

        

         A56: a = (nt -tree ts) by Th43;

        ( dom f) = D by FUNCT_2:def 1;

        then

         A57: (f * p) = <*fv*> by FINSEQ_2: 34;

        ( rng p) c= (C() -Terms X)

        proof

          let z be object;

          assume z in ( rng p);

          then z is expression of C(), ( an_Adj C()) by Th41;

          then z is Element of (C() -Terms X) by MSAFREE3: 8;

          hence thesis;

        end;

        then

        reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

        a is Term of C(), X by MSAFREE3: 8;

        then r is ArgumentSeq of ( Sym (c,X)) by A56, MSATERM: 1;

        then ( Sym (c,X)) ==> ( roots r) by MSATERM: 21;

        then nt ==> ( roots ts) by Th127;

        

        then (f . a) = NTermVal(nt,roots,*) by A6, A56

        .= ( IFEQ (c, non_op ,N(.),F(c,*))) by FUNCOP_1:def 8

        .= N(.) by FUNCOP_1:def 8;

        hence (f . (( non_op C()) term v)) = N(.) by A57, FINSEQ_1: 40;

      end;

      let v be expression of C(), ( an_Adj C());

      let t be expression of C(), ( a_Type C());

      

       A58: v in (U . ( an_Adj C())) by Def28;

      

       A59: t in (U . ( a_Type C())) by Def28;

      

       A60: (f . v) in (U . ( an_Adj C())) by A58, Th129;

      

       A61: (f . t) in (U . ( a_Type C())) by A59, Th129;

      reconsider fv = (f . v) as expression of C(), ( an_Adj C()) by A60, Def28;

      reconsider ft = (f . t) as expression of C(), ( a_Type C()) by A61, Def28;

      reconsider p = <*v, t*> as FinSequence of D;

      set c = ( ast C());

      set a = (( ast C()) term (v,t));

      set nt = [c, the carrier of C()];

      nt in ( NonTerminals G) by Th123;

      then

      reconsider nt as Symbol of G;

      reconsider ts = p as FinSequence of ( TS G) by Th128;

      

       A62: a = (nt -tree ts) by Th46;

      

       A63: (f * p) = <*fv, ft*> by FINSEQ_2: 36;

      ( rng p) c= (C() -Terms X)

      proof

        let z be object;

        assume z in ( rng p);

        then z is Element of (C() -Terms X) by MSAFREE3: 8;

        hence thesis;

      end;

      then

      reconsider r = p as FinSequence of (C() -Terms X) by FINSEQ_1:def 4;

      a is Term of C(), X by MSAFREE3: 8;

      then r is ArgumentSeq of ( Sym (c,X)) by A62, MSATERM: 1;

      then ( Sym (c,X)) ==> ( roots r) by MSATERM: 21;

      then nt ==> ( roots ts) by Th127;

      

      then (f . a) = NTermVal(nt,roots,*) by A6, A62

      .= A(.,.) by FUNCOP_1:def 8

      .= A(fv,.) by A63, FINSEQ_1: 44;

      hence thesis by A63, FINSEQ_1: 44;

    end;

    begin

    definition

      let A be set;

      let x,y be set;

      let a,b be Element of A;

      :: original: IFIN

      redefine

      func IFIN (x,y,a,b) -> Element of A ;

      coherence by MATRIX_7:def 1;

    end

    definition

      let C be initialized ConstructorSignature;

      mode valuation of C is PartFunc of Vars , ( QuasiTerms C);

    end

    definition

      let C be initialized ConstructorSignature;

      let f be valuation of C;

      :: ABCMIZ_1:def58

      attr f is irrelevant means

      : Def58: for x be variable st x in ( dom f) holds ex y be variable st (f . x) = (y -term C);

    end

    notation

      let C be initialized ConstructorSignature;

      let f be valuation of C;

      antonym f is relevant for f is irrelevant;

    end

    registration

      let C be initialized ConstructorSignature;

      cluster empty -> irrelevant for valuation of C;

      coherence ;

    end

    registration

      let C be initialized ConstructorSignature;

      cluster empty for valuation of C;

      existence

      proof

        take ( {} ( Vars ,( QuasiTerms C)));

        thus thesis;

      end;

    end

    definition

      let C be initialized ConstructorSignature;

      let X be Subset of Vars ;

      :: ABCMIZ_1:def59

      func C idval X -> valuation of C equals { [x, (x -term C)] where x be variable : x in X };

      coherence

      proof

        set f = { [x, (x -term C)] where x be variable : x in X };

        defpred P[ variable, set] means $2 = ($1 -term C);

         A1:

        now

          let x be variable;

          reconsider t = (x -term C) as Element of ( QuasiTerms C) by Def28;

          take t;

          thus P[x, t];

        end;

        consider g be Function of Vars , ( QuasiTerms C) such that

         A2: for x be variable holds P[x, (g . x)] from FUNCT_2:sch 3( A1);

        f c= g

        proof

          let a be object;

          assume a in f;

          then

          consider x be variable such that

           A3: a = [x, (x -term C)] and x in X;

          

           A4: (g . x) = (x -term C) by A2;

          ( dom g) = Vars by FUNCT_2:def 1;

          hence thesis by A3, A4, FUNCT_1: 1;

        end;

        hence thesis by RELSET_1: 1;

      end;

    end

    theorem :: ABCMIZ_1:131

    

     Th131: for X be Subset of Vars holds ( dom (C idval X)) = X & for x be variable st x in X holds ((C idval X) . x) = (x -term C)

    proof

      let X be Subset of Vars ;

      set f = (C idval X);

      thus ( dom f) c= X

      proof

        let a be object;

        assume a in ( dom f);

        then [a, (f . a)] in f by FUNCT_1:def 2;

        then ex x be variable st [a, (f . a)] = [x, (x -term C)] & x in X;

        hence thesis by XTUPLE_0: 1;

      end;

      hereby

        let x be object;

        assume

         A1: x in X;

        then

        reconsider a = x as variable;

         [a, (a -term C)] in f by A1;

        hence x in ( dom f) by FUNCT_1: 1;

      end;

      let x be variable;

      assume x in X;

      then [x, (x -term C)] in (C idval X);

      hence thesis by FUNCT_1: 1;

    end;

    registration

      let C be initialized ConstructorSignature;

      let X be Subset of Vars ;

      cluster (C idval X) -> irrelevant one-to-one;

      coherence

      proof

        set f = (C idval X);

        

         A1: ( dom f) = X by Th131;

        hereby

          let x be variable;

          assume

           A2: x in ( dom f);

          take y = x;

          thus (f . x) = (y -term C) by A1, A2, Th131;

        end;

        let x,y be object;

        assume that

         A3: x in ( dom f) and

         A4: y in ( dom f);

        reconsider x, y as variable by A3, A4;

        

         A5: (f . x) = (x -term C) by A1, A3, Th131;

        (f . y) = (y -term C) by A1, A4, Th131;

        hence thesis by A5, Th50;

      end;

    end

    registration

      let C be initialized ConstructorSignature;

      let X be empty Subset of Vars ;

      cluster (C idval X) -> empty;

      coherence

      proof

        ( dom (C idval X)) = X by Th131;

        hence thesis;

      end;

    end

    definition

      let C;

      let f be valuation of C;

      :: ABCMIZ_1:def60

      func f # -> term-transformation of C, ( MSVars C) means

      : Def60: (for x be variable holds (x in ( dom f) implies (it . (x -term C)) = (f . x)) & ( not x in ( dom f) implies (it . (x -term C)) = (x -term C))) & (for c be constructor OperSymbol of C holds for p,q be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & q = (it * p) holds (it . (c -trm p)) = (c -trm q)) & (for a be expression of C, ( an_Adj C) holds (it . (( non_op C) term a)) = (( non_op C) term (it . a))) & for a be expression of C, ( an_Adj C) holds for t be expression of C, ( a_Type C) holds (it . (( ast C) term (a,t))) = (( ast C) term ((it . a),(it . t)));

      existence

      proof

        deffunc V( variable) = ( IFIN ($1,( dom f),(f /. $1) qua Element of ( QuasiTerms C) qua non empty Subset of ( Free (C,( MSVars C))) qua expression of C,($1 -term C)));

        deffunc F( constructor OperSymbol of C, FinSequence of ( QuasiTerms C)) = ($1 -trm $2);

        deffunc N( expression of C) = (( non_op C) term $1);

        deffunc A( expression of C, expression of C) = (( ast C) term ($1,$2));

        

         A1: for x be variable holds V(x) is quasi-term of C

        proof

          let x be variable;

          (f /. x) is quasi-term of C by Th41;

          hence thesis by MATRIX_7:def 1;

        end;

        

         A2: for c be constructor OperSymbol of C holds for p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) holds F(c,p) is expression of C, ( the_result_sort_of c) by Th52;

        

         A3: for a holds N(a) is expression of C, ( an_Adj C) by Th43;

        

         A4: for a, t holds A(a,t) is expression of C, ( a_Type C) by Th46;

        consider f9 be term-transformation of C, ( MSVars C) such that

         A5: (for x be variable holds (f9 . (x -term C)) = V(x)) & (for c be constructor OperSymbol of C holds for p,q be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & q = (f9 * p) holds (f9 . (c -trm p)) = F(c,q)) & (for a holds (f9 . (( non_op C) term a)) = N(.)) & for a, t holds (f9 . (( ast C) term (a,t))) = A(.,.) from StructDef( A1, A2, A3, A4);

        take f9;

        hereby

          let x be variable;

          

           A6: (f9 . (x -term C)) = V(x) by A5;

          x in ( dom f) implies (f /. x) = (f . x) by PARTFUN1:def 6;

          hence x in ( dom f) implies (f9 . (x -term C)) = (f . x) by A6, MATRIX_7:def 1;

          thus not x in ( dom f) implies (f9 . (x -term C)) = (x -term C) by A6, MATRIX_7:def 1;

        end;

        thus thesis by A5;

      end;

      correctness

      proof

        let f1,f2 be term-transformation of C, ( MSVars C) such that

         A7: for x be variable holds (x in ( dom f) implies (f1 . (x -term C)) = (f . x)) & ( not x in ( dom f) implies (f1 . (x -term C)) = (x -term C)) and

         A8: for c be constructor OperSymbol of C holds for p,q be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & q = (f1 * p) holds (f1 . (c -trm p)) = (c -trm q) and

         A9: for a be expression of C, ( an_Adj C) holds (f1 . (( non_op C) term a)) = (( non_op C) term (f1 . a)) and

         A10: for a be expression of C, ( an_Adj C) holds for t be expression of C, ( a_Type C) holds (f1 . (( ast C) term (a,t))) = (( ast C) term ((f1 . a),(f1 . t))) and

         A11: for x be variable holds (x in ( dom f) implies (f2 . (x -term C)) = (f . x)) & ( not x in ( dom f) implies (f2 . (x -term C)) = (x -term C)) and

         A12: for c be constructor OperSymbol of C holds for p,q be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & q = (f2 * p) holds (f2 . (c -trm p)) = (c -trm q) and

         A13: for a be expression of C, ( an_Adj C) holds (f2 . (( non_op C) term a)) = (( non_op C) term (f2 . a)) and

         A14: for a be expression of C, ( an_Adj C) holds for t be expression of C, ( a_Type C) holds (f2 . (( ast C) term (a,t))) = (( ast C) term ((f2 . a),(f2 . t)));

        set D = ( Union the Sorts of ( Free (C,( MSVars C))));

        

         A15: ( dom f1) = D by FUNCT_2:def 1;

        

         A16: ( dom f2) = D by FUNCT_2:def 1;

        defpred P[ expression of C] means (f1 . $1) = (f2 . $1);

        

         A17: for x be variable holds P[(x -term C)]

        proof

          let x be variable;

          x in ( dom f) & (f1 . (x -term C)) = (f . x) or x nin ( dom f) & (f1 . (x -term C)) = (x -term C) by A7;

          hence thesis by A11;

        end;

        

         A18: for c be constructor OperSymbol of C holds for p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C st t in ( rng p) holds P[t] holds P[(c -trm p)]

        proof

          let c be constructor OperSymbol of C;

          let p be FinSequence of ( QuasiTerms C);

          assume that

           A19: ( len p) = ( len ( the_arity_of c)) and

           A20: for t be quasi-term of C st t in ( rng p) holds P[t];

          

           A21: ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

          

           A22: ( rng (f1 * p)) = (f1 .: ( rng p)) by RELAT_1: 127;

          

           A23: ( rng (f2 * p)) = (f2 .: ( rng p)) by RELAT_1: 127;

          

           A24: ( rng (f1 * p)) c= (f1 .: ( QuasiTerms C)) by A21, A22, RELAT_1: 123;

          

           A25: ( rng (f2 * p)) c= (f2 .: ( QuasiTerms C)) by A21, A23, RELAT_1: 123;

          

           A26: (f1 .: ( QuasiTerms C)) c= ( QuasiTerms C) by Def56;

          

           A27: (f2 .: ( QuasiTerms C)) c= ( QuasiTerms C) by Def56;

          

           A28: ( rng (f1 * p)) c= ( QuasiTerms C) by A24, A26;

          ( rng (f2 * p)) c= ( QuasiTerms C) by A25, A27;

          then

          reconsider q1 = (f1 * p), q2 = (f2 * p) as FinSequence of ( QuasiTerms C) by A28, FINSEQ_1:def 4;

          

           A29: ( rng p) c= D;

          then

           A30: ( dom q1) = ( dom p) by A15, RELAT_1: 27;

          

           A31: ( dom q2) = ( dom p) by A16, A29, RELAT_1: 27;

          now

            let i be Nat;

            assume

             A32: i in ( dom p);

            then

             A33: (q1 . i) = (f1 . (p . i)) by FUNCT_1: 13;

            

             A34: (q2 . i) = (f2 . (p . i)) by A32, FUNCT_1: 13;

            

             A35: (p . i) in ( rng p) by A32, FUNCT_1:def 3;

            then (p . i) is quasi-term of C by A21, Th41;

            hence (q1 . i) = (q2 . i) by A20, A33, A34, A35;

          end;

          then (f1 . (c -trm p)) = (c -trm q2) by A8, A19, A30, A31, FINSEQ_1: 13;

          hence thesis by A12, A19;

        end;

        

         A36: for a be expression of C, ( an_Adj C) st P[a] holds P[(( non_op C) term a)]

        proof

          let a be expression of C, ( an_Adj C);

          assume P[a];

          then (f1 . (( non_op C) term a)) = (( non_op C) term (f2 . a)) by A9;

          hence thesis by A13;

        end;

        

         A37: for a be expression of C, ( an_Adj C) st P[a] holds for t be expression of C, ( a_Type C) st P[t] holds P[(( ast C) term (a,t))]

        proof

          let a be expression of C, ( an_Adj C) such that

           A38: P[a];

          let t be expression of C, ( a_Type C);

          assume P[t];

          then (f1 . (( ast C) term (a,t))) = (( ast C) term ((f2 . a),(f2 . t))) by A10, A38;

          hence thesis by A14;

        end;

        now

          let t be expression of C;

          thus P[t] from StructInd( A17, A18, A36, A37);

        end;

        hence thesis by FUNCT_2: 63;

      end;

    end

    registration

      let C;

      let f be valuation of C;

      cluster (f # ) -> substitution;

      coherence

      proof

        let o be OperSymbol of C;

        let p,q be FinSequence of ( Free (C,( MSVars C))) such that

         A1: ( [o, the carrier of C] -tree p) in ( Union the Sorts of ( Free (C,( MSVars C)))) and

         A2: q = ((f # ) * p);

        

         A3: ( dom (f # )) = ( Union the Sorts of ( Free (C,( MSVars C)))) by FUNCT_2:def 1;

        reconsider t = ( [o, the carrier of C] -tree p) as expression of C by A1;

        

         A4: (t . {} ) = [o, the carrier of C] by TREES_4:def 4;

        per cases ;

          suppose o is constructor;

          then

          reconsider c = o as constructor OperSymbol of C;

          

           A5: t = ( [c, the carrier of C] -tree p);

          then

           A6: ( len p) = ( len ( the_arity_of c)) by Th51;

          p in (( QuasiTerms C) * ) by A5, Th51;

          then

          reconsider p9 = p as FinSequence of ( QuasiTerms C) by FINSEQ_1:def 11;

          reconsider q9 = ((f # ) * p9) as FinSequence of ( QuasiTerms C) by Th130;

          

           A7: ( len q9) = ( len p) by Th130;

          

          thus ((f # ) . ( [o, the carrier of C] -tree p)) = ((f # ) . (c -trm p9)) by A6, Def35

          .= (c -trm q9) by A6, Def60

          .= ( [o, the carrier of C] -tree q) by A2, A6, A7, Def35;

        end;

          suppose

           A8: o = * ;

          then

          consider a be expression of C, ( an_Adj C), s be expression of C, ( a_Type C) such that

           A9: t = (( ast C) term (a,s)) by A4, Th58;

          a in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Def28;

          then ((f # ) . a) in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Th129;

          then

          reconsider fa = ((f # ) . a) as expression of C, ( an_Adj C) by Th41;

          s in (the Sorts of ( Free (C,( MSVars C))) . ( a_Type C)) by Def28;

          then ((f # ) . s) in (the Sorts of ( Free (C,( MSVars C))) . ( a_Type C)) by Th129;

          then

          reconsider fs = ((f # ) . s) as expression of C, ( a_Type C) by Th41;

          t = ( [( ast C), the carrier of C] -tree <*a, s*>) by A9, Th46;

          then p = <*a, s*> by TREES_4: 15;

          then q = <*fa, fs*> by A2, A3, FINSEQ_2: 125;

          then ( [o, the carrier of C] -tree q) = (( ast C) term (fa,fs)) by A8, Th46;

          hence thesis by A9, Def60;

        end;

          suppose

           A10: o = non_op ;

          then

          consider a such that

           A11: t = (( non_op C) term a) by A4, Th57;

          a in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Def28;

          then ((f # ) . a) in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Th129;

          then

          reconsider fa = ((f # ) . a) as expression of C, ( an_Adj C) by Th41;

          t = ( [( non_op C), the carrier of C] -tree <*a*>) by A11, Th43;

          then p = <*a*> by TREES_4: 15;

          then q = <*fa*> by A2, A3, FINSEQ_2: 34;

          then ( [o, the carrier of C] -tree q) = (( non_op C) term fa) by A10, Th43;

          hence thesis by A11, Def60;

        end;

      end;

    end

    reserve f for valuation of C;

    definition

      let C, f, e;

      :: ABCMIZ_1:def61

      func e at f -> expression of C equals ((f # ) . e);

      coherence ;

    end

    definition

      let C, f;

      let p be FinSequence;

      :: ABCMIZ_1:def62

      func p at f -> FinSequence equals

      : Def62: ((f # ) * p);

      coherence

      proof

        set A = ( Free (C,( MSVars C)));

        ( dom (f # )) = ( Union the Sorts of A) by FUNCT_2:def 1;

        then

         A2: ( dom ((f # ) * p)) = ( dom p) by A1, RELAT_1: 27;

        ( dom p) = ( Seg ( len p)) by FINSEQ_1:def 3;

        hence thesis by A2, FINSEQ_1:def 2;

      end;

    end

    definition

      let C, f;

      let p be FinSequence of ( QuasiTerms C);

      :: original: at

      redefine

      :: ABCMIZ_1:def63

      func p at f -> FinSequence of ( QuasiTerms C) equals ((f # ) * p);

      coherence

      proof

        

         A1: ((f # ) * p) is FinSequence of ( QuasiTerms C) by Th130;

        ( rng p) c= ( Union the Sorts of ( Free (C,( MSVars C))));

        hence thesis by A1, Def62;

      end;

      compatibility

      proof

        ( rng p) c= ( Union the Sorts of ( Free (C,( MSVars C))));

        hence thesis by Def62;

      end;

    end

    reserve x for variable;

    theorem :: ABCMIZ_1:132

     not x in ( dom f) implies ((x -term C) at f) = (x -term C) by Def60;

    theorem :: ABCMIZ_1:133

    x in ( dom f) implies ((x -term C) at f) = (f . x) by Def60;

    theorem :: ABCMIZ_1:134

    ( len p) = ( len ( the_arity_of c)) implies ((c -trm p) at f) = (c -trm (p at f)) by Def60;

    theorem :: ABCMIZ_1:135

    ((( non_op C) term a) at f) = (( non_op C) term (a at f)) by Def60;

    theorem :: ABCMIZ_1:136

    ((( ast C) term (a,t)) at f) = (( ast C) term ((a at f),(t at f))) by Def60;

    theorem :: ABCMIZ_1:137

    

     Th137: for X be Subset of Vars holds (e at (C idval X)) = e

    proof

      set t = e;

      let X be Subset of Vars ;

      set f = (C idval X);

      defpred P[ expression of C] means ($1 at f) = $1;

      

       A1: for x be variable holds P[(x -term C)]

      proof

        let x be variable;

        

         A2: x in X or x nin X;

        

         A3: ( dom f) = X by Th131;

        x in X implies (f . x) = (x -term C) by Th131;

        hence thesis by A2, A3, Def60;

      end;

      

       A4: for c be constructor OperSymbol of C holds for p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C st t in ( rng p) holds P[t] holds P[(c -trm p)]

      proof

        let c be constructor OperSymbol of C;

        let p be FinSequence of ( QuasiTerms C) such that

         A5: ( len p) = ( len ( the_arity_of c)) and

         A6: for t be quasi-term of C st t in ( rng p) holds P[t];

        ( len (p at f)) = ( len p) by Th130;

        then

         A7: ( dom (p at f)) = ( dom p) by FINSEQ_3: 29;

        now

          let i be Nat;

          assume

           A8: i in ( dom p);

          then

           A9: (p . i) in ( rng p) by FUNCT_1:def 3;

          ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

          then

          reconsider pi1 = (p . i) as quasi-term of C by A9, Th41;

          ((p at f) . i) = (pi1 at f) by A8, FUNCT_1: 13;

          hence ((p at f) . i) = (p . i) by A6, A9;

        end;

        then (p at f) = p by A7;

        hence thesis by A5, Def60;

      end;

      

       A10: for a be expression of C, ( an_Adj C) st P[a] holds P[(( non_op C) term a)] by Def60;

      

       A11: for a be expression of C, ( an_Adj C) st P[a] holds for t be expression of C, ( a_Type C) st P[t] holds P[(( ast C) term (a,t))] by Def60;

      thus P[t] from StructInd( A1, A4, A10, A11);

    end;

    theorem :: ABCMIZ_1:138

    for X be Subset of Vars holds ((C idval X) # ) = ( id ( Union the Sorts of ( Free (C,( MSVars C)))))

    proof

      let X be Subset of Vars ;

      set f = (C idval X);

      

       A1: ( dom (f # )) = ( Union the Sorts of ( Free (C,( MSVars C)))) by FUNCT_2:def 1;

      now

        let x be object;

        assume x in ( Union the Sorts of ( Free (C,( MSVars C))));

        then

        reconsider t = x as expression of C;

        

        thus ((f # ) . x) = (t at f)

        .= x by Th137;

      end;

      hence thesis by A1, FUNCT_1: 17;

    end;

    theorem :: ABCMIZ_1:139

    

     Th139: for f be empty valuation of C holds (e at f) = e

    proof

      let f be empty valuation of C;

      f = (C idval ( {} Vars ));

      hence thesis by Th137;

    end;

    theorem :: ABCMIZ_1:140

    for f be empty valuation of C holds (f # ) = ( id ( Union the Sorts of ( Free (C,( MSVars C)))))

    proof

      let f be empty valuation of C;

      

       A1: ( dom (f # )) = ( Union the Sorts of ( Free (C,( MSVars C)))) by FUNCT_2:def 1;

      now

        let x be object;

        assume x in ( Union the Sorts of ( Free (C,( MSVars C))));

        then

        reconsider t = x as expression of C;

        

        thus ((f # ) . x) = (t at f)

        .= x by Th139;

      end;

      hence thesis by A1, FUNCT_1: 17;

    end;

    definition

      let C, f;

      let t be quasi-term of C;

      :: original: at

      redefine

      func t at f -> quasi-term of C ;

      coherence

      proof

        t in ( QuasiTerms C) by Def28;

        then (t at f) in ( QuasiTerms C) by Th129;

        hence thesis by Th41;

      end;

    end

    definition

      let C, f;

      let a be expression of C, ( an_Adj C);

      :: original: at

      redefine

      func a at f -> expression of C, ( an_Adj C) ;

      coherence

      proof

        a in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Def28;

        then (a at f) in (the Sorts of ( Free (C,( MSVars C))) . ( an_Adj C)) by Th129;

        hence thesis by Th41;

      end;

    end

    registration

      let C, f;

      let a be positive expression of C, ( an_Adj C);

      cluster (a at f) -> positive;

      coherence

      proof

        consider v be constructor OperSymbol of C such that

         A1: ( the_result_sort_of v) = ( an_Adj C) and

         A2: ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of v)) & a = (v -trm p) by Th65;

        consider p be FinSequence of ( QuasiTerms C) such that

         A3: ( len p) = ( len ( the_arity_of v)) and

         A4: a = (v -trm p) by A2;

        

         A5: ( len (p at f)) = ( len p) by Th130;

        (a at f) = (v -trm (p at f)) by A3, A4, Def60;

        hence thesis by A1, A3, A5, Th66;

      end;

    end

    registration

      let C, f;

      let a be negative expression of C, ( an_Adj C);

      cluster (a at f) -> negative;

      coherence

      proof

        (( non_op C) term ( Non a)) = a by Th62;

        

        then (a at f) = (( non_op C) term (( Non a) at f)) by Def60

        .= ( Non (( Non a) at f)) by Th59;

        hence thesis;

      end;

    end

    definition

      let C, f;

      let a be quasi-adjective of C;

      :: original: at

      redefine

      func a at f -> quasi-adjective of C ;

      coherence

      proof

        per cases ;

          suppose a is positive;

          then

          reconsider a as positive quasi-adjective of C;

          (a at f) is positive;

          hence thesis;

        end;

          suppose a is negative;

          then

          reconsider a as negative quasi-adjective of C;

          (a at f) is negative;

          hence thesis;

        end;

      end;

    end

    theorem :: ABCMIZ_1:141

    (( Non a) at f) = ( Non (a at f))

    proof

      per cases ;

        suppose a is positive;

        then

        reconsider b = a as positive expression of C, ( an_Adj C);

        reconsider af = (b at f) as positive expression of C, ( an_Adj C);

        

        thus (( Non a) at f) = ((( non_op C) term b) at f) by Th59

        .= (( non_op C) term af) by Def60

        .= ( Non (a at f)) by Th59;

      end;

        suppose a is non positive;

        then

        consider b be expression of C, ( an_Adj C) such that

         A1: a = (( non_op C) term b) and

         A2: ( Non a) = b by Th60;

        

         A3: (a at f) = (( non_op C) term (b at f)) by A1, Def60;

        then (a at f) is non positive;

        then ex k be expression of C, ( an_Adj C) st (a at f) = (( non_op C) term k) & ( Non (a at f)) = k by Th60;

        hence thesis by A2, A3, Th44;

      end;

    end;

    definition

      let C, f;

      let t be expression of C, ( a_Type C);

      :: original: at

      redefine

      func t at f -> expression of C, ( a_Type C) ;

      coherence

      proof

        t in (the Sorts of ( Free (C,( MSVars C))) . ( a_Type C)) by Def28;

        then (t at f) in (the Sorts of ( Free (C,( MSVars C))) . ( a_Type C)) by Th129;

        hence thesis by Th41;

      end;

    end

    registration

      let C, f;

      let t be pure expression of C, ( a_Type C);

      cluster (t at f) -> pure;

      coherence

      proof

        consider m be constructor OperSymbol of C such that

         A1: ( the_result_sort_of m) = ( a_Type C) and

         A2: ex p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of m)) & t = (m -trm p) by Th74;

        consider p be FinSequence of ( QuasiTerms C) such that

         A3: ( len p) = ( len ( the_arity_of m)) and

         A4: t = (m -trm p) by A2;

        

         A5: ( len (p at f)) = ( len p) by Th130;

        (t at f) = (m -trm (p at f)) by A3, A4, Def60;

        hence thesis by A1, A3, A5, Th75;

      end;

    end

    theorem :: ABCMIZ_1:142

    for f be irrelevant one-to-one valuation of C holds ex g be irrelevant one-to-one valuation of C st for x,y be variable holds x in ( dom f) & (f . x) = (y -term C) iff y in ( dom g) & (g . y) = (x -term C)

    proof

      let f be irrelevant one-to-one valuation of C;

      set Y = { x where x be variable : (x -term C) in ( rng f) };

      defpred P[ object, object] means ex x be set st x in ( dom f) & (f . x) = ( root-tree [$1, a_Term ]) & $2 = ( root-tree [x, a_Term ]);

      

       A1: for x be object st x in Y holds ex y be object st P[x, y]

      proof

        let x be object;

        assume x in Y;

        then

         A2: ex z be variable st x = z & (z -term C) in ( rng f);

        then

        reconsider z = x as variable;

        consider y be object such that

         A3: y in ( dom f) and

         A4: (z -term C) = (f . y) by A2, FUNCT_1:def 3;

        reconsider y as variable by A3;

        take (y -term C);

        thus thesis by A3, A4;

      end;

      consider g be Function such that

       A5: ( dom g) = Y and

       A6: for y be object st y in Y holds P[y, (g . y)] from CLASSES1:sch 1( A1);

      

       A7: Y c= Vars

      proof

        let x be object;

        assume x in Y;

        then ex z be variable st x = z & (z -term C) in ( rng f);

        hence thesis;

      end;

      ( rng g) c= ( QuasiTerms C)

      proof

        let y be object;

        assume y in ( rng g);

        then

        consider x be object such that

         A8: x in ( dom g) and

         A9: y = (g . x) by FUNCT_1:def 3;

        reconsider x as variable by A5, A7, A8;

        consider z be set such that

         A10: z in ( dom f) and (f . z) = (x -term C) and

         A11: (g . x) = ( root-tree [z, a_Term ]) by A5, A6, A8;

        reconsider z as variable by A10;

        y = (z -term C) by A9, A11;

        hence thesis by Def28;

      end;

      then

      reconsider g as valuation of C by A5, A7, RELSET_1: 4;

      

       A12: g is irrelevant

      proof

        let x be variable;

        assume x in ( dom g);

        then

        consider y be set such that

         A13: y in ( dom f) and (f . y) = (x -term C) and

         A14: (g . x) = ( root-tree [y, a_Term ]) by A5, A6;

        reconsider y as variable by A13;

        take y;

        thus thesis by A14;

      end;

      g is one-to-one

      proof

        let z1,z2 be object;

        assume that

         A15: z1 in ( dom g) and

         A16: z2 in ( dom g) and

         A17: (g . z1) = (g . z2);

        reconsider z1, z2 as variable by A15, A16;

        consider x1 be set such that

         A18: x1 in ( dom f) and

         A19: (f . x1) = (z1 -term C) and

         A20: (g . z1) = ( root-tree [x1, a_Term ]) by A5, A6, A15;

        consider x2 be set such that

         A21: x2 in ( dom f) and

         A22: (f . x2) = (z2 -term C) and

         A23: (g . z1) = ( root-tree [x2, a_Term ]) by A5, A6, A16, A17;

        reconsider x1, x2 as variable by A18, A21;

        (x1 -term C) = (x2 -term C) by A20, A23;

        then x1 = x2 by Th50;

        hence thesis by A19, A22, Th50;

      end;

      then

      reconsider g as irrelevant one-to-one valuation of C by A12;

      take g;

      let x,y be variable;

      hereby

        assume that

         A24: x in ( dom f) and

         A25: (f . x) = (y -term C);

        (f . x) in ( rng f) by A24, FUNCT_1:def 3;

        hence y in ( dom g) by A5, A25;

        then P[y, (g . y)] by A5, A6;

        hence (g . y) = (x -term C) by A24, A25, FUNCT_1:def 4;

      end;

      assume that

       A26: y in ( dom g) and

       A27: (g . y) = (x -term C);

      consider z be set such that

       A28: z in ( dom f) and

       A29: (f . z) = ( root-tree [y, a_Term ]) and

       A30: (x -term C) = ( root-tree [z, a_Term ]) by A5, A6, A26, A27;

      reconsider z as variable by A28;

      (x -term C) = (z -term C) by A30;

      hence thesis by A28, A29, Th50;

    end;

    theorem :: ABCMIZ_1:143

    for f,g be irrelevant one-to-one valuation of C st for x,y be variable holds x in ( dom f) & (f . x) = (y -term C) implies y in ( dom g) & (g . y) = (x -term C) holds for e st ( variables_in e) c= ( dom f) holds ((e at f) at g) = e

    proof

      let f,g be irrelevant one-to-one valuation of C such that

       A1: for x,y be variable holds x in ( dom f) & (f . x) = (y -term C) implies y in ( dom g) & (g . y) = (x -term C);

      let t be expression of C;

      defpred P[ expression of C] means ( variables_in $1) c= ( dom f) implies (($1 at f) at g) = $1;

      

       A2: for x be variable holds P[(x -term C)]

      proof

        let x be variable;

        assume ( variables_in (x -term C)) c= ( dom f);

        then {x} c= ( dom f) by MSAFREE3: 10;

        then

         A3: x in ( dom f) by ZFMISC_1: 31;

        then

        consider y be variable such that

         A4: (f . x) = (y -term C) by Def58;

        

         A5: y in ( dom g) by A1, A3, A4;

        

         A6: (g . y) = (x -term C) by A1, A3, A4;

        ((x -term C) at f) = (y -term C) by A3, A4, Def60;

        hence thesis by A5, A6, Def60;

      end;

      

       A7: for c be constructor OperSymbol of C holds for p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C st t in ( rng p) holds P[t] holds P[(c -trm p)]

      proof

        let c be constructor OperSymbol of C;

        let p be FinSequence of ( QuasiTerms C) such that

         A8: ( len p) = ( len ( the_arity_of c)) and

         A9: for t be quasi-term of C st t in ( rng p) holds P[t] and

         A10: ( variables_in (c -trm p)) c= ( dom f);

        (c -trm p) = ( [c, the carrier of C] -tree p) by A8, Def35;

        then

         A11: ( variables_in (c -trm p)) = ( union { ( variables_in s) where s be quasi-term of C : s in ( rng p) }) by Th88;

        

         A12: ( len (p at f)) = ( len p) by Th130;

        

         A13: ( len ((p at f) at g)) = ( len (p at f)) by Th130;

        

         A14: ( dom (p at f)) = ( dom p) by A12, FINSEQ_3: 29;

        

         A15: ( dom ((p at f) at g)) = ( dom (p at f)) by A13, FINSEQ_3: 29;

        now

          let i be Nat;

          assume

           A16: i in ( dom p);

          then

           A17: ((p at f) . i) = ((f # ) . (p . i)) by FUNCT_1: 13;

          

           A18: (p . i) in ( rng p) by A16, FUNCT_1:def 3;

          ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

          then

          reconsider pi1 = (p . i) as quasi-term of C by A18, Th41;

          ( variables_in pi1) in { ( variables_in s) where s be quasi-term of C : s in ( rng p) } by A18;

          then

           A19: ( variables_in pi1) c= ( variables_in (c -trm p)) by A11, ZFMISC_1: 74;

          (((p at f) at g) . i) = ((pi1 at f) at g) by A14, A16, A17, FUNCT_1: 13;

          hence (((p at f) at g) . i) = (p . i) by A9, A10, A18, A19, XBOOLE_1: 1;

        end;

        then

         A20: ((p at f) at g) = p by A14, A15;

        ((c -trm p) at f) = (c -trm (p at f)) by A8, Def60;

        hence thesis by A8, A12, A20, Def60;

      end;

      

       A21: for a be expression of C, ( an_Adj C) st P[a] holds P[(( non_op C) term a)]

      proof

        let a be expression of C, ( an_Adj C) such that

         A22: P[a] and

         A23: ( variables_in (( non_op C) term a)) c= ( dom f);

        

         A24: (( non_op C) term a) = ( [ non_op , the carrier of C] -tree <*a*>) by Th43;

        

        thus (((( non_op C) term a) at f) at g) = ((( non_op C) term (a at f)) at g) by Def60

        .= (( non_op C) term a) by A22, A23, A24, Def60, Th93;

      end;

      

       A25: for a be expression of C, ( an_Adj C) st P[a] holds for t be expression of C, ( a_Type C) st P[t] holds P[(( ast C) term (a,t))]

      proof

        let a be expression of C, ( an_Adj C) such that

         A26: P[a];

        let t be expression of C, ( a_Type C) such that

         A27: P[t] and

         A28: ( variables_in (( ast C) term (a,t))) c= ( dom f);

        (( ast C) term (a,t)) = ( [ * , the carrier of C] -tree <*a, t*>) by Th46;

        

        then

         A29: ( variables_in (( ast C) term (a,t))) = (((C variables_in a) (\/) (C variables_in t)) . a_Term ) by Th96

        .= (( variables_in a) \/ ( variables_in t)) by PBOOLE:def 4;

        

        thus (((( ast C) term (a,t)) at f) at g) = ((( ast C) term ((a at f),(t at f))) at g) by Def60

        .= (( ast C) term (a,t)) by A26, A27, A28, A29, Def60, XBOOLE_1: 11;

      end;

      thus P[t] from StructInd( A2, A7, A21, A25);

    end;

    definition

      let C, f;

      let A be Subset of ( QuasiAdjs C);

      :: ABCMIZ_1:def64

      func A at f -> Subset of ( QuasiAdjs C) equals { (a at f) where a be quasi-adjective of C : a in A };

      coherence

      proof

        set X = { (a at f) where a be quasi-adjective of C : a in A };

        X c= ( QuasiAdjs C)

        proof

          let x be object;

          assume x in X;

          then ex a be quasi-adjective of C st x = (a at f) & a in A;

          hence thesis;

        end;

        hence thesis;

      end;

    end

    theorem :: ABCMIZ_1:144

    

     Th144: for A be Subset of ( QuasiAdjs C) holds for a be quasi-adjective of C st A = {a} holds (A at f) = {(a at f)}

    proof

      let A be Subset of ( QuasiAdjs C);

      let a be quasi-adjective of C such that

       A1: A = {a};

      thus (A at f) c= {(a at f)}

      proof

        let x be object;

        assume x in (A at f);

        then ex b be quasi-adjective of C st x = (b at f) & b in A;

        then x = (a at f) by A1, TARSKI:def 1;

        hence thesis by TARSKI:def 1;

      end;

      let x be object;

      assume x in {(a at f)};

      then

       A2: x = (a at f) by TARSKI:def 1;

      a in A by A1, TARSKI:def 1;

      hence thesis by A2;

    end;

    theorem :: ABCMIZ_1:145

    

     Th145: for A,B be Subset of ( QuasiAdjs C) holds ((A \/ B) at f) = ((A at f) \/ (B at f))

    proof

      let A,B be Subset of ( QuasiAdjs C);

      thus ((A \/ B) at f) c= ((A at f) \/ (B at f))

      proof

        let x be object;

        assume x in ((A \/ B) at f);

        then

        consider a be quasi-adjective of C such that

         A1: x = (a at f) and

         A2: a in (A \/ B);

        a in A or a in B by A2, XBOOLE_0:def 3;

        then x in (A at f) or x in (B at f) by A1;

        hence thesis by XBOOLE_0:def 3;

      end;

      let x be object;

      assume x in ((A at f) \/ (B at f));

      then x in (A at f) or x in (B at f) by XBOOLE_0:def 3;

      then A c= (A \/ B) & (ex a be quasi-adjective of C st x = (a at f) & a in A) or B c= (A \/ B) & ex a be quasi-adjective of C st x = (a at f) & a in B by XBOOLE_1: 7;

      hence thesis;

    end;

    theorem :: ABCMIZ_1:146

    for A,B be Subset of ( QuasiAdjs C) st A c= B holds (A at f) c= (B at f)

    proof

      let A,B be Subset of ( QuasiAdjs C);

      assume A c= B;

      then (A \/ B) = B by XBOOLE_1: 12;

      then (B at f) = ((A at f) \/ (B at f)) by Th145;

      hence thesis by XBOOLE_1: 7;

    end;

    registration

      let C be initialized ConstructorSignature;

      let f be valuation of C;

      let A be finite Subset of ( QuasiAdjs C);

      cluster (A at f) -> finite;

      coherence

      proof

        

         A1: A is finite;

        deffunc F( expression of C) = ($1 at f);

        

         A2: { F(w) where w be expression of C : w in A } is finite from FRAENKEL:sch 21( A1);

        (A at f) c= { F(w) where w be expression of C : w in A }

        proof

          let x be object;

          assume x in (A at f);

          then ex a be quasi-adjective of C st x = (a at f) & a in A;

          hence thesis;

        end;

        hence thesis by A2;

      end;

    end

    definition

      let C be initialized ConstructorSignature;

      let f be valuation of C;

      let T be quasi-type of C;

      :: ABCMIZ_1:def65

      func T at f -> quasi-type of C equals ((( adjs T) at f) ast (( the_base_of T) at f));

      coherence ;

    end

    theorem :: ABCMIZ_1:147

    for T be quasi-type of C holds ( adjs (T at f)) = (( adjs T) at f) & ( the_base_of (T at f)) = (( the_base_of T) at f);

    theorem :: ABCMIZ_1:148

    for T be quasi-type of C holds for a be quasi-adjective of C holds ((a ast T) at f) = ((a at f) ast (T at f))

    proof

      let T be quasi-type of C;

      let a be quasi-adjective of C;

      a in ( QuasiAdjs C);

      then

      reconsider A = {a} as Subset of ( QuasiAdjs C) by ZFMISC_1: 31;

      

      thus ((a ast T) at f) = [(( adjs (a ast T)) at f), (( the_base_of T) at f)]

      .= [((A \/ ( adjs T)) at f), (( the_base_of T) at f)]

      .= [((A at f) \/ (( adjs T) at f)), (( the_base_of T) at f)] by Th145

      .= [( {(a at f)} \/ (( adjs T) at f)), (( the_base_of T) at f)] by Th144

      .= [( {(a at f)} \/ ( adjs (T at f))), (( the_base_of T) at f)]

      .= ((a at f) ast (T at f));

    end;

    definition

      let C be initialized ConstructorSignature;

      let f,g be valuation of C;

      :: ABCMIZ_1:def66

      func f at g -> valuation of C means

      : Def66: ( dom it ) = (( dom f) \/ ( dom g)) & for x be variable st x in ( dom it ) holds (it . x) = (((x -term C) at f) at g);

      existence

      proof

        deffunc h( object) = (((( In ($1, Vars )) -term C) at f) at g);

        consider h be Function such that

         A1: ( dom h) = (( dom f) \/ ( dom g)) and

         A2: for x be object st x in (( dom f) \/ ( dom g)) holds (h . x) = h(x) from FUNCT_1:sch 3;

        ( rng h) c= ( QuasiTerms C)

        proof

          let y be object;

          assume y in ( rng h);

          then

          consider x be object such that

           A3: x in ( dom h) and

           A4: y = (h . x) by FUNCT_1:def 3;

          y = h(x) by A1, A2, A3, A4;

          hence thesis by Def28;

        end;

        then

        reconsider h as valuation of C by A1, RELSET_1: 4;

        take h;

        thus ( dom h) = (( dom f) \/ ( dom g)) by A1;

        let x be variable;

        assume x in ( dom h);

        then (h . x) = h(x) by A1, A2;

        hence thesis;

      end;

      uniqueness

      proof

        let h1,h2 be valuation of C such that

         A5: ( dom h1) = (( dom f) \/ ( dom g)) and

         A6: for x be variable st x in ( dom h1) holds (h1 . x) = (((x -term C) at f) at g) and

         A7: ( dom h2) = (( dom f) \/ ( dom g)) and

         A8: for x be variable st x in ( dom h2) holds (h2 . x) = (((x -term C) at f) at g);

        now

          let x be variable;

          assume

           A9: x in ( dom h1);

          then (h1 . x) = (((x -term C) at f) at g) by A6;

          hence (h1 . x) = (h2 . x) by A5, A7, A8, A9;

        end;

        hence thesis by A5, A7;

      end;

    end

    registration

      let C be initialized ConstructorSignature;

      let f,g be irrelevant valuation of C;

      cluster (f at g) -> irrelevant;

      coherence

      proof

        let x be variable;

        assume

         A1: x in ( dom (f at g));

        then

         A2: ((f at g) . x) = (((x -term C) at f) at g) by Def66;

        

         A3: ( dom (f at g)) = (( dom f) \/ ( dom g)) by Def66;

        per cases ;

          suppose

           A4: x in ( dom f);

          then

          consider y be variable such that

           A5: (f . x) = (y -term C) by Def58;

          

           A6: ((x -term C) at f) = (y -term C) by A4, A5, Def60;

          then

           A7: y in ( dom g) implies ((f at g) . x) = (g . y) by A2, Def60;

          y nin ( dom g) implies ((f at g) . x) = (y -term C) by A2, A6, Def60;

          hence thesis by A7, Def58;

        end;

          suppose

           A8: x nin ( dom f);

          then

           A9: ((x -term C) at f) = (x -term C) by Def60;

          

           A10: x in ( dom g) by A1, A3, A8, XBOOLE_0:def 3;

          then ((f at g) . x) = (g . x) by A2, A9, Def60;

          hence thesis by A10, Def58;

        end;

      end;

    end

    theorem :: ABCMIZ_1:149

    

     Th149: for f1,f2 be valuation of C holds ((e at f1) at f2) = (e at (f1 at f2))

    proof

      set t = e;

      let f1,f2 be valuation of C;

      

       A1: ( dom (f1 at f2)) = (( dom f1) \/ ( dom f2)) by Def66;

      defpred P[ expression of C] means (($1 at f1) at f2) = ($1 at (f1 at f2));

      

       A2: for x be variable holds P[(x -term C)]

      proof

        let x be variable;

        per cases ;

          suppose

           A3: x in ( dom (f1 at f2));

          then ((x -term C) at (f1 at f2)) = ((f1 at f2) . x) by Def60;

          hence thesis by A3, Def66;

        end;

          suppose

           A4: x nin ( dom (f1 at f2));

          then

           A5: x nin ( dom f1) by A1, XBOOLE_0:def 3;

          

           A6: x nin ( dom f2) by A1, A4, XBOOLE_0:def 3;

          

           A7: ((x -term C) at f1) = (x -term C) by A5, Def60;

          ((x -term C) at f2) = (x -term C) by A6, Def60;

          hence thesis by A4, A7, Def60;

        end;

      end;

      

       A8: for c be constructor OperSymbol of C holds for p be FinSequence of ( QuasiTerms C) st ( len p) = ( len ( the_arity_of c)) & for t be quasi-term of C st t in ( rng p) holds P[t] holds P[(c -trm p)]

      proof

        let c be constructor OperSymbol of C;

        let p be FinSequence of ( QuasiTerms C) such that

         A9: ( len p) = ( len ( the_arity_of c)) and

         A10: for t be quasi-term of C st t in ( rng p) holds P[t];

        

         A11: ( len (p at f1)) = ( len p) by Th130;

        

         A12: ( len (p at (f1 at f2))) = ( len p) by Th130;

        

         A13: ( len ((p at f1) at f2)) = ( len (p at f1)) by Th130;

        

         A14: ( dom (p at f1)) = ( dom p) by A11, FINSEQ_3: 29;

        

         A15: ( dom (p at (f1 at f2))) = ( dom p) by A12, FINSEQ_3: 29;

        

         A16: ( dom ((p at f1) at f2)) = ( dom p) by A11, A13, FINSEQ_3: 29;

        now

          let i be Nat;

          assume

           A17: i in ( dom p);

          then

           A18: (((p at f1) at f2) . i) = ((f2 # ) . ((p at f1) . i)) by A14, FUNCT_1: 13;

          

           A19: (p . i) in ( rng p) by A17, FUNCT_1:def 3;

          ( rng p) c= ( QuasiTerms C) by FINSEQ_1:def 4;

          then

          reconsider pi1 = (p . i) as quasi-term of C by A19, Th41;

          

          thus (((p at f1) at f2) . i) = ((pi1 at f1) at f2) by A17, A18, FUNCT_1: 13

          .= (pi1 at (f1 at f2)) by A10, A19

          .= ((p at (f1 at f2)) . i) by A17, FUNCT_1: 13;

        end;

        then

         A20: ((p at f1) at f2) = (p at (f1 at f2)) by A15, A16;

        

        thus (((c -trm p) at f1) at f2) = ((c -trm (p at f1)) at f2) by A9, Def60

        .= (c -trm (p at (f1 at f2))) by A9, A11, A20, Def60

        .= ((c -trm p) at (f1 at f2)) by A9, Def60;

      end;

      

       A21: for a be expression of C, ( an_Adj C) st P[a] holds P[(( non_op C) term a)]

      proof

        let a be expression of C, ( an_Adj C);

        assume P[a];

        

        then ((( non_op C) term (a at f1)) at f2) = (( non_op C) term (a at (f1 at f2))) by Def60

        .= ((( non_op C) term a) at (f1 at f2)) by Def60;

        hence thesis by Def60;

      end;

      

       A22: for a be expression of C, ( an_Adj C) st P[a] holds for t be expression of C, ( a_Type C) st P[t] holds P[(( ast C) term (a,t))]

      proof

        let a be expression of C, ( an_Adj C) such that

         A23: P[a];

        let t be expression of C, ( a_Type C);

        assume P[t];

        

        then ((( ast C) term ((a at f1),(t at f1))) at f2) = (( ast C) term ((a at (f1 at f2)),(t at (f1 at f2)))) by A23, Def60

        .= ((( ast C) term (a,t)) at (f1 at f2)) by Def60;

        hence thesis by Def60;

      end;

      thus P[t] from StructInd( A2, A8, A21, A22);

    end;

    theorem :: ABCMIZ_1:150

    

     Th150: for A be Subset of ( QuasiAdjs C) holds for f1,f2 be valuation of C holds ((A at f1) at f2) = (A at (f1 at f2))

    proof

      let A be Subset of ( QuasiAdjs C);

      let f1,f2 be valuation of C;

      thus ((A at f1) at f2) c= (A at (f1 at f2))

      proof

        let x be object;

        assume x in ((A at f1) at f2);

        then

        consider a be quasi-adjective of C such that

         A1: x = (a at f2) and

         A2: a in (A at f1);

        consider b be quasi-adjective of C such that

         A3: a = (b at f1) and

         A4: b in A by A2;

        x = (b at (f1 at f2)) by A1, A3, Th149;

        hence thesis by A4;

      end;

      let x be object;

      assume x in (A at (f1 at f2));

      then

      consider a be quasi-adjective of C such that

       A5: x = (a at (f1 at f2)) and

       A6: a in A;

      

       A7: x = ((a at f1) at f2) by A5, Th149;

      (a at f1) in (A at f1) by A6;

      hence thesis by A7;

    end;

    theorem :: ABCMIZ_1:151

    for T be quasi-type of C holds for f1,f2 be valuation of C holds ((T at f1) at f2) = (T at (f1 at f2))

    proof

      let T be quasi-type of C;

      let f1,f2 be valuation of C;

      

      thus ((T at f1) at f2) = (((( adjs T) at f1) at f2) ast (( the_base_of (T at f1)) at f2))

      .= ((( adjs T) at (f1 at f2)) ast (( the_base_of (T at f1)) at f2)) by Th150

      .= ((( adjs T) at (f1 at f2)) ast ((( the_base_of T) at f1) at f2))

      .= (T at (f1 at f2)) by Th149;

    end;