msafree4.miz



    begin

    reserve S for non empty non void ManySortedSign;

    reserve X for non-empty ManySortedSet of S;

    theorem :: MSAFREE4:1

    

     Th1: for I be set, f1,f2 be ManySortedSet of I st f1 c= f2 holds ( Union f1) c= ( Union f2)

    proof

      let I be set;

      let f1,f2 be ManySortedSet of I;

      assume

       A1: f1 c= f2;

      let x be object;

      assume x in ( Union f1);

      then

      consider y be object such that

       A2: y in ( dom f1) & x in (f1 . y) by CARD_5: 2;

      

       A3: ( dom f1) = I & ( dom f2) = I by PARTFUN1:def 2;

      (f1 . y) c= (f2 . y) by A1, A2;

      hence x in ( Union f2) by A2, A3, CARD_5: 2;

    end;

    reserve x,y,z for set,

i,j for Nat;

    deffunc cc( Function, set) = ($1 . $2);

    definition

      let I be set;

      let X be non-empty ManySortedSet of I;

      let A be Component of X;

      :: original: Element

      redefine

      mode Element of A -> Element of ( Union X) ;

      coherence

      proof

        let a be Element of A;

        per cases ;

          suppose I = {} ;

          then

           A1: ( rng X) = {} & X = {} & ( Union ( {} --> I)) = {} by FUNCT_6: 26;

          thus thesis by A1, SUBSET_1:def 1;

        end;

          suppose I <> {} ;

          then

          consider x be object such that

           A2: x in ( dom X) & A = (X . x) by FUNCT_1:def 3;

          thus thesis by A2, CARD_5: 2;

        end;

      end;

    end

    definition

      let I be set;

      let X be ManySortedSet of I;

      let i be Element of I;

      :: original: .

      redefine

      func X . i -> Component of X ;

      coherence

      proof

        

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

        per cases ;

          suppose I = {} ;

          hence thesis by SUBSET_1:def 1;

        end;

          suppose I <> {} ;

          hence thesis by A1, FUNCT_1:def 3;

        end;

      end;

    end

     Lm1:

    now

      let I be set;

      let X,Y be ManySortedSet of I;

      let f be ManySortedFunction of X, Y;

      let x be object;

      per cases ;

        suppose x in I;

        hence (f . x) is Function of (X . x), (Y . x) by PBOOLE:def 15;

      end;

        suppose

         A1: x nin I;

        ( dom f) = I & ( dom X) = I & ( dom Y) = I by PARTFUN1:def 2;

        then (f . x) = {} & (X . x) = {} & (Y . x) = {} & ( dom {} ) = {} & ( rng {} ) = {} by A1, FUNCT_1:def 2;

        hence (f . x) is Function of (X . x), (Y . x) by FUNCT_2: 2;

      end;

    end;

    definition

      let I be set;

      let X,Y be ManySortedSet of I;

      let f be ManySortedFunction of X, Y;

      let x be object;

      :: original: .

      redefine

      func f . x -> Function of (X . x), (Y . x) ;

      coherence by Lm1;

    end

    scheme :: MSAFREE4:sch1

    Sch1 { I() -> set , A() -> non-empty ManySortedSet of I() , F( object, object) -> set } :

ex f be ManySortedFunction of I() st for x st x in I() holds ( dom (f . x)) = (A() . x) & for y be Element of (A() . x) holds ((f . x) . y) = F(x,y);

      defpred P[ object, object] means ex f be Function st $2 = f & ( dom f) = (A() . $1) & for y be Element of (A() . $1) holds (f . y) = F($1,y);

      

       A1: for x be object st x in I() holds ex y be object st P[x, y]

      proof

        let x be object;

        assume

         A2: x in I();

        then

        reconsider s = x as Element of I();

        deffunc G( object) = F(x,$1);

        consider f be Function such that

         A3: ( dom f) = (A() . x) & for y be object st y in (A() . x) holds (f . y) = G(y) from FUNCT_1:sch 3;

        take f, f;

        thus thesis by A2, A3;

      end;

      consider g be Function such that

       A4: ( dom g) = I() & for x be object st x in I() holds P[x, (g . x)] from CLASSES1:sch 1( A1);

      g is Function-yielding

      proof

        let x be object;

        assume x in ( dom g);

        then P[x, (g . x)] by A4;

        hence thesis;

      end;

      then

      reconsider g as ManySortedFunction of I() by A4, RELAT_1:def 18, PARTFUN1:def 2;

      take g;

      let x;

      assume x in I();

      then P[x, (g . x)] & (A() . x) <> {} by A4;

      hence thesis;

    end;

    scheme :: MSAFREE4:sch2

    Sch2 { I() -> non empty set , A,B() -> non-empty ManySortedSet of I() , F( object, object) -> set } :

ex f be ManySortedFunction of A(), B() st for i be Element of I() holds for a be Element of (A() . i) holds ((f . i) . a) = F(i,a)

      provided

       A1: for i be Element of I() holds for a be Element of (A() . i) holds F(i,a) in (B() . i);

      defpred P[ object, object, object] means $1 = F($3,$2);

      

       A2: for i be object st i in I() holds for x be object st x in (A() . i) holds ex y be object st y in (B() . i) & P[y, x, i] by A1;

      consider F be ManySortedFunction of A(), B() such that

       A3: for i be object st i in I() holds ex f be Function of (A() . i), (B() . i) st f = (F . i) & for x be object st x in (A() . i) holds P[(f . x), x, i] from MSSUBFAM:sch 1( A2);

      take F;

      let i be Element of I();

      let a be Element of (A() . i);

      consider f be Function of (A() . i), (B() . i) such that

       A4: f = (F . i) & for x be object st x in (A() . i) holds P[(f . x), x, i] by A3;

      thus ((F . i) . a) = F(i,a) by A4;

    end;

    definition

      let X be non empty set;

      let O be set;

      let f be Function of O, X;

      let g be ManySortedSet of X;

      :: original: *

      redefine

      func g * f -> ManySortedSet of O ;

      coherence ;

    end

    registration

      let S, X;

      let F be ManySortedSet of (S -Terms X);

      let o be OperSymbol of S;

      let p be ArgumentSeq of ( Sym (o,X));

      cluster (F * p) -> FinSequence-like;

      coherence

      proof

        ( dom (F * p)) = ( dom p) by PARTFUN1:def 2;

        hence ex n be Nat st ( dom (F * p)) = ( Seg n) by FINSEQ_1:def 2;

      end;

    end

    theorem :: MSAFREE4:2

    

     Th2: ( Subtrees ( root-tree x)) = {( root-tree x)}

    proof

      

       A1: ( dom ( root-tree x)) = { {} } by TREES_4: 3, TREES_1: 29;

      thus ( Subtrees ( root-tree x)) c= {( root-tree x)}

      proof

        let y be object;

        assume y in ( Subtrees ( root-tree x));

        then

        consider p be Element of ( dom ( root-tree x)) such that

         A2: y = (( root-tree x) | p);

        p = {} by A1, TARSKI:def 1;

        then y = ( root-tree x) by A2, TREES_9: 1;

        hence thesis by TARSKI:def 1;

      end;

      reconsider p = {} as Element of ( dom ( root-tree x)) by A1, TARSKI:def 1;

      let y be object;

      assume y in {( root-tree x)};

      then y = ( root-tree x) by TARSKI:def 1;

      then y = (( root-tree x) | p) by TREES_9: 1;

      hence thesis;

    end;

    registration

      let f be DTree-yielding Function;

      cluster ( rng f) -> constituted-DTrees;

      coherence by TREES_3:def 11;

    end

    theorem :: MSAFREE4:3

    

     Th3: for p be non empty DTree-yielding FinSequence holds ( Subtrees (x -tree p)) = ( {(x -tree p)} \/ ( Subtrees ( rng p)))

    proof

      let p be non empty DTree-yielding FinSequence;

      thus ( Subtrees (x -tree p)) c= ( {(x -tree p)} \/ ( Subtrees ( rng p)))

      proof

        let y be object;

        assume y in ( Subtrees (x -tree p));

        then

        consider q be Element of ( dom (x -tree p)) such that

         A1: y = ((x -tree p) | q);

        

         A2: ( dom (x -tree p)) = ( tree ( doms p)) by TREES_4: 10;

        per cases by A2, TREES_3:def 15;

          suppose q = {} ;

          then y = (x -tree p) by A1, TREES_9: 1;

          then y in {(x -tree p)} by TARSKI:def 1;

          hence thesis by XBOOLE_0:def 3;

        end;

          suppose ex n be Nat, r be FinSequence st n < ( len ( doms p)) & r in (( doms p) . (n + 1)) & q = ( <*n*> ^ r);

          then

          consider n be Nat, r be FinSequence such that

           A3: n < ( len ( doms p)) & r in (( doms p) . (n + 1)) & q = ( <*n*> ^ r);

          

           A4: ( len ( doms p)) = ( len p) by TREES_3: 38;

          (n + 1) >= 1 & (n + 1) <= ( len p) by A3, A4, NAT_1: 11, NAT_1: 13;

          then

           A5: (n + 1) in ( dom p) by FINSEQ_3: 25;

          then

           A6: (p . (n + 1)) in ( rng p) by FUNCT_1:def 3;

          then

          reconsider t = (p . (n + 1)) as DecoratedTree;

          reconsider r as Element of ( dom t) by A3, A5, FUNCT_6: 22;

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

          (p . (n + 1)) = ((x -tree p) | <*n*>) by A3, A4, TREES_4:def 4;

          then y = (t | r) by A1, A3, TREES_9: 3;

          then y in ( Subtrees ( rng p)) by A6;

          hence thesis by XBOOLE_0:def 3;

        end;

      end;

      let z be object;

      assume z in ( {(x -tree p)} \/ ( Subtrees ( rng p)));

      then

       A7: z in {(x -tree p)} or z in ( Subtrees ( rng p)) by XBOOLE_0:def 3;

      reconsider q = {} as Element of ( dom (x -tree p)) by TREES_1: 22;

      per cases by A7, TARSKI:def 1;

        suppose z = (x -tree p);

        then z = ((x -tree p) | q) by TREES_9: 1;

        hence z in ( Subtrees (x -tree p));

      end;

        suppose z in ( Subtrees ( rng p));

        then

        consider t be Element of ( rng p), q be Element of ( dom t) such that

         A8: z = (t | q);

        consider y be object such that

         A9: y in ( dom p) & t = (p . y) by FUNCT_1:def 3;

        reconsider y as Nat by A9;

        consider n be Nat such that

         A10: y = (1 + n) by A9, FINSEQ_3: 25, NAT_1: 10;

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

        y <= ( len p) by A9, FINSEQ_3: 25;

        then

         A11: n < ( len p) by A10, NAT_1: 13;

        then

         A12: t = ((x -tree p) | <*n*>) by A9, A10, TREES_4:def 4;

        

         A13: ( tree ( doms p)) = ( dom (x -tree p)) by TREES_4: 10;

        ( dom t) = (( doms p) . y) & ( len ( doms p)) = ( len p) by A9, FUNCT_6: 22, TREES_3: 38;

        then

         A14: ( <*n*> ^ q) in ( dom (x -tree p)) by A10, A11, A13, TREES_3:def 15;

        then z = ((x -tree p) | ( <*n*> ^ q)) by A8, A12, TREES_9: 3;

        hence thesis by A14;

      end;

    end;

    theorem :: MSAFREE4:4

    

     Th4: ( Subtrees (x -tree {} )) = {(x -tree {} )}

    proof

      ( dom (x -tree {} )) = ( elementary_tree 0 ) by TREES_4: 10, FUNCT_6: 23, TREES_3: 52;

      

      then (x -tree {} ) = ( root-tree ((x -tree {} ) . {} )) by TREES_4: 5

      .= ( root-tree x) by TREES_4:def 4;

      hence thesis by Th2;

    end;

    theorem :: MSAFREE4:5

    (x -tree {} ) = ( root-tree x)

    proof

      ( dom (x -tree {} )) = ( elementary_tree 0 ) by TREES_4: 10, FUNCT_6: 23, TREES_3: 52;

      

      hence (x -tree {} ) = ( root-tree ((x -tree {} ) . {} )) by TREES_4: 5

      .= ( root-tree x) by TREES_4:def 4;

    end;

    registration

      cluster finite-yielding DTree-yielding non empty for FinSequence;

      existence

      proof

        set t = the finite DecoratedTree;

        take <*t*>;

        thus <*t*> is finite-yielding

        proof

          now

            let x;

            assume x in ( rng <*t*>);

            then x in {t} by FINSEQ_1: 39;

            hence x is finite;

          end;

          hence thesis;

        end;

        thus thesis;

      end;

      cluster finite-yielding Tree-yielding non empty for FinSequence;

      existence

      proof

        set t = the finite Tree;

        take <*t*>;

        thus <*t*> is finite-yielding

        proof

          now

            let x;

            assume x in ( rng <*t*>);

            then x in {t} by FINSEQ_1: 39;

            hence x is finite;

          end;

          hence thesis;

        end;

        thus thesis;

      end;

    end

    registration

      let f be finite-yielding Function-yielding Function;

      cluster ( doms f) -> finite-yielding;

      coherence

      proof

        now

          let y;

          assume y in ( rng ( doms f));

          then

          consider x be object such that

           A1: x in ( dom ( doms f)) & y = (( doms f) . x) by FUNCT_1:def 3;

          x in ( dom f) by A1, FUNCT_6:def 2;

          then

           A2: x in ( dom f) & (f . x) is Function & y = ( proj1 (f . x)) by A1, FUNCT_6:def 2;

          thus y is finite by A2;

        end;

        hence thesis;

      end;

    end

    registration

      let p be finite-yielding Tree-yielding FinSequence;

      cluster ( tree p) -> finite;

      coherence

      proof

        set X = { { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) } where i be Nat : i < ( len p) };

        

         A1: ( tree p) c= ( { {} } \/ ( union X))

        proof

          let x be object;

          assume

           A2: x in ( tree p);

          reconsider xx = x as set by TARSKI: 1;

          per cases by A2, TREES_3:def 15;

            suppose x = {} ;

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

            hence thesis by XBOOLE_0:def 3;

          end;

            suppose ex n be Nat, q be FinSequence st n < ( len p) & q in (p . (n + 1)) & x = ( <*n*> ^ q);

            then

            consider n be Nat, q be FinSequence such that

             A3: n < ( len p) & q in (p . (n + 1)) & x = ( <*n*> ^ q);

            1 <= (n + 1) & (n + 1) <= ( len p) by A3, NAT_1: 11, NAT_1: 13;

            then (n + 1) in ( dom p) by FINSEQ_3: 25;

            then (p . (n + 1)) in ( rng p) & ( rng p) is constituted-Trees by FUNCT_1:def 3, TREES_3:def 9;

            then

            reconsider t = (p . (n + 1)) as Tree;

            q is Element of t by A3;

            then q in ( NAT * ) by FINSEQ_1:def 11;

            then

             A4: x in { ( <*n*> ^ w) where w be Element of ( NAT * ) : w in (p . (n + 1)) } by A3;

            { ( <*n*> ^ w) where w be Element of ( NAT * ) : w in (p . (n + 1)) } in X by A3;

            then x in ( union X) by A4, TARSKI:def 4;

            hence thesis by XBOOLE_0:def 3;

          end;

        end;

        deffunc F( object) = { ( <*i*> ^ q) where q be Element of ( NAT * ), i be Nat : $1 = (i + 1) & q in (p . (i + 1)) };

        consider f be Function such that

         A5: ( dom f) = ( dom p) & for x be object st x in ( dom p) holds (f . x) = F(x) from FUNCT_1:sch 3;

        

         A6: ( rng f) = X

        proof

          thus ( rng f) c= X

          proof

            let x be object;

            reconsider xx = x as set by TARSKI: 1;

            assume x in ( rng f);

            then

            consider y be object such that

             A7: y in ( dom f) & x = (f . y) by FUNCT_1:def 3;

            

             A8: x = F(y) by A5, A7;

            reconsider y as Element of NAT by A5, A7;

            consider i be Nat such that

             A9: y = (1 + i) by A5, A7, FINSEQ_3: 25, NAT_1: 10;

            y <= ( len p) by A5, A7, FINSEQ_3: 25;

            then

             A10: i < ( len p) by A9, NAT_1: 13;

            xx = { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) }

            proof

              thus xx c= { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) }

              proof

                let z be object;

                assume z in xx;

                then

                consider q be Element of ( NAT * ), j be Nat such that

                 A11: z = ( <*j*> ^ q) & (i + 1) = (j + 1) & q in (p . (j + 1)) by A8, A9;

                thus thesis by A11;

              end;

              let z be object;

              assume z in { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) };

              then

              consider q be Element of ( NAT * ) such that

               A12: z = ( <*i*> ^ q) & q in (p . (i + 1));

              thus thesis by A8, A9, A12;

            end;

            hence x in X by A10;

          end;

          let x be object;

          reconsider xx = x as set by TARSKI: 1;

          assume x in X;

          then

          consider i be Nat such that

           A13: x = { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) } & i < ( len p);

          

           A14: xx = F(+)

          proof

            thus xx c= F(+)

            proof

              let z be object;

              assume z in xx;

              then

              consider q be Element of ( NAT * ) such that

               A15: z = ( <*i*> ^ q) & q in (p . (i + 1)) by A13;

              thus z in F(+) by A15;

            end;

            let z be object;

            assume z in F(+);

            then

            consider q be Element of ( NAT * ), j be Nat such that

             A16: z = ( <*j*> ^ q) & (i + 1) = (j + 1) & q in (p . (j + 1));

            thus z in xx by A13, A16;

          end;

          

           A17: (i + 1) >= 1 & (i + 1) <= ( len p) by A13, NAT_1: 11, NAT_1: 13;

          then

           A18: (i + 1) in ( dom f) by A5, FINSEQ_3: 25;

          (f . (i + 1)) = x by A5, A14, A17, FINSEQ_3: 25;

          hence x in ( rng f) by A18, FUNCT_1:def 3;

        end;

        now

          let x;

          assume x in X;

          then

          consider i be Nat such that

           A19: x = { ( <*i*> ^ q) where q be Element of ( NAT * ) : q in (p . (i + 1)) } & i < ( len p);

          (i + 1) >= 1 & (i + 1) <= ( len p) by A19, NAT_1: 11, NAT_1: 13;

          then (i + 1) in ( dom p) by FINSEQ_3: 25;

          then (p . (i + 1)) in ( rng p) & ( rng p) is constituted-Trees by FUNCT_1:def 3, TREES_3:def 9;

          then

          reconsider t = (p . (i + 1)) as finite Tree;

          deffunc G( Element of t) = ( <*i*> ^ $1);

          consider g be Function such that

           A20: ( dom g) = t & for x be Element of t holds (g . x) = G(x) from FUNCT_1:sch 4;

          

           A21: x c= ( rng g)

          proof

            let z be object;

            assume z in x;

            then

            consider q be Element of ( NAT * ) such that

             A22: z = ( <*i*> ^ q) & q in (p . (i + 1)) by A19;

            z = (g . q) by A20, A22;

            hence thesis by A20, A22, FUNCT_1:def 3;

          end;

          ( rng g) is finite by A20, FINSET_1: 8;

          hence x is finite by A21;

        end;

        then ( union X) is finite by A6, A5, FINSET_1: 7, FINSET_1: 8;

        hence ( tree p) is finite by A1;

      end;

    end

    registration

      let t be finite DecoratedTree;

      cluster ( Subtrees t) -> finite-membered;

      coherence ;

    end

    registration

      let p be finite-yielding DTree-yielding FinSequence;

      let x;

      cluster (x -tree p) -> finite;

      coherence

      proof

        ( dom (x -tree p)) = ( tree ( doms p)) by TREES_4: 10;

        hence thesis by FINSET_1: 10;

      end;

    end

    theorem :: MSAFREE4:6

    

     Th6: for t1,t2 be finite DecoratedTree st t1 in ( Subtrees t2) holds ( height ( dom t1)) <= ( height ( dom t2))

    proof

      let t1,t2 be finite DecoratedTree;

      assume t1 in ( Subtrees t2);

      then

      consider p be Element of ( dom t2) such that

       A1: t1 = (t2 | p);

      consider r be FinSequence of NAT such that

       A2: r in ( dom t1) & ( len r) = ( height ( dom t1)) by TREES_1:def 12;

      ( dom t1) = (( dom t2) | p) by A1, TREES_2:def 10;

      then (p ^ r) in ( dom t2) by A2, TREES_1:def 6;

      then ( len (p ^ r)) <= ( height ( dom t2)) by TREES_1:def 12;

      then (( len p) + ( len r)) <= ( height ( dom t2)) & ( len r) <= (( len p) + ( len r)) by NAT_1: 11, FINSEQ_1: 22;

      hence ( height ( dom t1)) <= ( height ( dom t2)) by A2, XXREAL_0: 2;

    end;

    theorem :: MSAFREE4:7

    

     Th7: for p be DTree-yielding FinSequence st p is finite-yielding holds for t be DecoratedTree st x in ( Subtrees t) & t in ( rng p) holds x <> (y -tree p)

    proof

      let p be DTree-yielding FinSequence such that

       A1: p is finite-yielding;

      let t be DecoratedTree;

      assume

       A2: x in ( Subtrees t) & t in ( rng p);

      reconsider t as finite DecoratedTree by A1, A2;

      x is Element of ( Subtrees t) by A2;

      then

      reconsider x as finite DecoratedTree;

      reconsider p as finite-yielding DTree-yielding FinSequence by A1;

      consider z be object such that

       A3: z in ( dom p) & t = (p . z) by A2, FUNCT_1:def 3;

      reconsider z as Nat by A3;

      consider i such that

       A4: z = (1 + i) by A3, FINSEQ_3: 25, NAT_1: 10;

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

      z <= ( len p) by A3, FINSEQ_3: 25;

      then

       A5: i < ( len p) by A4, NAT_1: 13;

      

       A6: ( dom (y -tree p)) = ( tree ( doms p)) by TREES_4: 10;

      

       A7: ( len ( doms p)) = ( len p) by TREES_3: 38;

      

       A8: ( dom t) = (( doms p) . z) by A3, FUNCT_6: 22;

      consider h be FinSequence of NAT such that

       A9: h in ( dom t) & ( len h) = ( height ( dom t)) by TREES_1:def 12;

      ( <*i*> ^ h) in ( dom (y -tree p)) by A4, A5, A6, A7, A8, A9, TREES_3: 48;

      then ( len ( <*i*> ^ h)) <= ( height ( dom (y -tree p))) by TREES_1:def 12;

      then (( len <*i*>) + ( len h)) <= ( height ( dom (y -tree p))) & ( len <*i*>) = 1 by FINSEQ_1: 22, FINSEQ_1: 40;

      hence thesis by A2, Th6, A9, NAT_1: 13;

    end;

    registration

      let S;

      let X be ManySortedSet of S;

      cluster -> finite-yielding for (S -Terms X) -valued Function;

      coherence

      proof

        let f be (S -Terms X) -valued Function;

        for x st x in ( rng f) holds x is finite;

        hence thesis;

      end;

    end

    theorem :: MSAFREE4:8

    

     Th8: for X be non empty constituted-DTrees set holds for t be DecoratedTree st t in X holds ( Subtrees t) c= ( Subtrees X)

    proof

      let X be non empty constituted-DTrees set;

      let t be DecoratedTree such that

       A1: t in X;

      let x be object;

      assume x in ( Subtrees t);

      then

      consider p be Element of ( dom t) such that

       A2: x = (t | p);

      thus thesis by A1, A2;

    end;

    theorem :: MSAFREE4:9

    

     Th9: for X be non empty constituted-DTrees set holds X c= ( Subtrees X)

    proof

      let X be non empty constituted-DTrees set;

      let x be object;

      assume x in X;

      then

      reconsider x as Element of X;

      reconsider p = {} as Element of ( dom x) by TREES_1: 22;

      x = (x | p) by TREES_9: 1;

      hence thesis;

    end;

    theorem :: MSAFREE4:10

    

     Th10: for t be Term of S, X holds for x st x in ( Subtrees t) holds x is Term of S, X

    proof

      let t be Term of S, X;

      let x;

      assume x in ( Subtrees t);

      then

      consider p be Element of ( dom t) such that

       A1: x = (t | p);

      thus x is Term of S, X by A1;

    end;

    theorem :: MSAFREE4:11

    

     Th11: for p be DTree-yielding FinSequence holds ( rng p) c= ( Subtrees (x -tree p))

    proof

      let p be DTree-yielding FinSequence;

      let z be object;

      assume z in ( rng p);

      then

      consider y be object such that

       A1: y in ( dom p) & z = (p . y) by FUNCT_1:def 3;

      reconsider y as Nat by A1;

      consider i be Nat such that

       A2: y = (1 + i) by A1, FINSEQ_3: 25, NAT_1: 10;

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

      y <= ( len p) by A1, FINSEQ_3: 25;

      then

       A3: i < ( len p) by A2, NAT_1: 13;

      then

       A4: z = ((x -tree p) | <*i*>) by A1, A2, TREES_4:def 4;

      then

      reconsider z as DecoratedTree;

      reconsider q = {} as Element of ( dom z) by TREES_1: 22;

      ( dom (x -tree p)) = ( tree ( doms p)) & ( dom z) = (( doms p) . y) & ( len ( doms p)) = ( len p) by A1, FUNCT_6: 22, TREES_4: 10, TREES_3: 38;

      then ( <*i*> ^ q) in ( dom (x -tree p)) by A2, A3, TREES_3:def 15;

      then <*i*> in ( dom (x -tree p)) by FINSEQ_1: 34;

      hence thesis by A4;

    end;

    theorem :: MSAFREE4:12

    

     Th12: for t1,t2 be DecoratedTree st t1 in ( Subtrees t2) holds ( Subtrees t1) c= ( Subtrees t2)

    proof

      let t1,t2 be DecoratedTree;

      assume t1 in ( Subtrees t2);

      then

      consider p be Element of ( dom t2) such that

       A1: t1 = (t2 | p);

      thus ( Subtrees t1) c= ( Subtrees t2) by A1, TREES_9: 13;

    end;

    theorem :: MSAFREE4:13

    

     Th13: for X be ManySortedSet of S holds for o be OperSymbol of S holds for p be FinSequence st p in ( Args (o,( Free (S,X)))) holds (( Den (o,( Free (S,X)))) . p) = ( [o, the carrier of S] -tree p)

    proof

      let X be ManySortedSet of S;

      let o be OperSymbol of S;

      let p be FinSequence such that

       A1: p in ( Args (o,( Free (S,X))));

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

      consider A be MSSubset of ( FreeMSA Y) such that

       A2: ( Free (S,X)) = ( GenMSAlg A) & A = (( Reverse Y) "" X) by MSAFREE3:def 1;

      

       A3: ( Free (S,Y)) = ( FreeMSA Y) by MSAFREE3: 31;

      then ( Args (o,( Free (S,X)))) c= ( Args (o,( Free (S,Y)))) by A2, MSAFREE3: 37;

      then (( Den (o,( Free (S,Y)))) . p) = ( [o, the carrier of S] -tree p) by A1, A3, INSTALG1: 3;

      hence (( Den (o,( Free (S,X)))) . p) = ( [o, the carrier of S] -tree p) by A1, A2, A3, EQUATION: 19;

    end;

    registration

      let I be set;

      let A,B be non-empty ManySortedSet of I;

      let f be ManySortedFunction of A, B;

      cluster ( rngs f) -> non-empty;

      coherence

      proof

        let x be object;

        assume

         A1: x in I;

        (( rngs f) . x) = ( rng (f . x)) & ( dom (f . x)) = (A . x) by A1, FUNCT_2:def 1, MSSUBFAM: 13;

        hence thesis by A1, RELAT_1: 42;

      end;

    end

    registration

      let S;

      cluster -> Relation-like Function-like for Element of ( TermAlg S);

      coherence

      proof

        ( Union the Sorts of ( TermAlg S)) = (S -Terms (the carrier of S --> NAT )) by MSATERM: 13;

        hence thesis;

      end;

    end

    registration

      let I be set;

      let A be ManySortedSet of I;

      let f be FinSequence of I;

      cluster (A * f) -> ( dom f) -defined;

      coherence

      proof

        ( rng f) c= I & ( dom A) = I by PARTFUN1:def 2;

        then ( dom (A * f)) = ( dom f) by RELAT_1: 27;

        hence thesis by RELAT_1:def 18;

      end;

    end

    registration

      let I be set;

      let A be ManySortedSet of I;

      let f be FinSequence of I;

      cluster (A * f) -> total;

      coherence

      proof

        ( rng f) c= I & ( dom A) = I by PARTFUN1:def 2;

        then ( dom (A * f)) = ( dom f) by RELAT_1: 27;

        hence thesis by PARTFUN1:def 2;

      end;

    end

    theorem :: MSAFREE4:14

    for I be non empty set, J be set holds for A,B be ManySortedSet of I st A c= B holds for f be Function of J, I holds (A * f) c= (B * f) qua ManySortedSet of J

    proof

      let I be non empty set, J be set;

      let A,B be ManySortedSet of I;

      assume

       A1: A c= B;

      let f be Function of J, I;

      let j be object;

      assume

       A2: j in J;

      then ((A * f) . j) = (A . (f . j)) & ((B * f) . j) = (B . (f . j)) by FUNCT_2: 15;

      hence ((A * f) . j) c= ((B * f) . j) by A1, A2, FUNCT_2: 5;

    end;

    theorem :: MSAFREE4:15

    

     Th15: for I be set holds for A,B be ManySortedSet of I st A c= B holds for f be FinSequence of I holds (A * f) c= (B * f) qua ManySortedSet of ( dom f)

    proof

      let I be set;

      let A,B be ManySortedSet of I;

      assume

       A1: A c= B;

      let f be FinSequence of I;

      let j be object;

      assume

       A2: j in ( dom f);

      then ((A * f) . j) = (A . (f . j)) & ((B * f) . j) = (B . (f . j)) by FUNCT_1: 13;

      hence ((A * f) . j) c= ((B * f) . j) by A1, A2, FUNCT_1: 102;

    end;

    theorem :: MSAFREE4:16

    

     Th16: for I be set holds for A,B be ManySortedSet of I st A c= B holds ( product A) c= ( product B)

    proof

      let I be set;

      let A,B be ManySortedSet of I;

      assume

       A1: A c= B;

      let x be object;

      assume x in ( product A);

      then

      consider g be Function such that

       A2: x = g & ( dom g) = ( dom A) & for y be object st y in ( dom A) holds (g . y) in (A . y) by CARD_3:def 5;

      

       A3: ( dom A) = I & ( dom B) = I by PARTFUN1:def 2;

      now

        let y be object;

        assume y in I;

        then (g . y) in (A . y) & (A . y) c= (B . y) by A1, A2, A3;

        hence (g . y) in (B . y);

      end;

      hence x in ( product B) by A2, A3, CARD_3: 9;

    end;

    theorem :: MSAFREE4:17

    

     Th17: for R be weakly-normalizing with_UN_property Relation st x is_a_normal_form_wrt R holds ( nf (x,R)) = x

    proof

      let R be weakly-normalizing with_UN_property Relation;

      assume

       A1: x is_a_normal_form_wrt R;

      

       A2: x is_a_normal_form_of (x,R) by A1, REWRITE1: 12;

      then

       A3: x has_a_normal_form_wrt R;

      for b,c be object st b is_a_normal_form_of (x,R) & c is_a_normal_form_of (x,R) holds b = c by REWRITE1: 53;

      hence ( nf (x,R)) = x by A2, A3, REWRITE1:def 12;

    end;

    theorem :: MSAFREE4:18

    

     Th18: for R be weakly-normalizing with_UN_property Relation holds ( nf (( nf (x,R)),R)) = ( nf (x,R))

    proof

      let R be weakly-normalizing with_UN_property Relation;

      ( nf (x,R)) is_a_normal_form_of (x,R) by REWRITE1: 54;

      then

       A1: ( nf (x,R)) is_a_normal_form_wrt R & R reduces (( nf (x,R)),( nf (x,R))) by REWRITE1: 12;

      then

       A2: ( nf (x,R)) is_a_normal_form_of (( nf (x,R)),R);

      ( nf (x,R)) has_a_normal_form_wrt R & for b,c be object st b is_a_normal_form_of (( nf (x,R)),R) & c is_a_normal_form_of (( nf (x,R)),R) holds b = c by A1, REWRITE1:def 6, REWRITE1: 53;

      hence ( nf (( nf (x,R)),R)) = ( nf (x,R)) by A2, REWRITE1:def 12;

    end;

    registration

      let S, X;

      let A be MSSubset of ( FreeMSA X);

      let x be object;

      cluster -> Relation-like Function-like for Element of (A . x);

      coherence

      proof

        let t be Element of (A . x);

        per cases ;

          suppose x nin ( dom A) or (A . x) = {} ;

          then (A . x) = {} by FUNCT_1:def 2;

          hence thesis;

        end;

          suppose

           A1: x in the carrier of S & (A . x) <> {} ;

          then

          reconsider s = x as SortSymbol of S;

          (A . s) c= (the Sorts of ( FreeMSA X) . s) & t in (A . s) by A1, PBOOLE:def 2, PBOOLE:def 18;

          then t is Element of (the Sorts of ( FreeMSA X) . s);

          then t is Term of S, X by MSATERM: 13;

          hence thesis;

        end;

      end;

    end

    definition

      let I be set;

      let A be ManySortedSet of I;

      :: MSAFREE4:def1

      attr A is countable means

      : Def1: for x st x in I holds (A . x) is countable;

    end

    registration

      let I be set;

      let X be countable set;

      cluster (I --> X) -> countable;

      coherence by FUNCOP_1: 7;

    end

    registration

      let I be set;

      cluster non-empty countable for ManySortedSet of I;

      existence

      proof

        take (I --> NAT );

        thus thesis;

      end;

    end

    registration

      let I be set;

      let X be countable ManySortedSet of I;

      let x be object;

      cluster (X . x) -> countable;

      coherence

      proof

        x in I or x nin ( dom X);

        hence thesis by Def1, FUNCT_1:def 2;

      end;

    end

    registration

      let A be countable set;

      cluster one-to-one for Function of A, NAT ;

      existence

      proof

        set f = the Enumeration of A;

        ( dom f) = A & ( rng f) c= NAT by AOFA_I00: 6, AOFA_I00: 11;

        then f is Function of A, NAT by FUNCT_2: 2;

        hence thesis;

      end;

    end

    registration

      let I be set;

      let X0 be countable ManySortedSet of I;

      cluster "1-1" for ManySortedFunction of X0, (I --> NAT );

      existence

      proof

        deffunc F( object) = the one-to-one Function of (X0 . $1), NAT ;

        consider f be ManySortedSet of I such that

         A1: for x be object st x in I holds (f . x) = F(x) from PBOOLE:sch 4;

        f is ManySortedFunction of X0, (I --> NAT )

        proof

          let x be object;

          assume x in I;

          then (f . x) = F(x) & ((I --> NAT ) . x) = NAT by A1, FUNCOP_1: 7;

          hence thesis;

        end;

        then

        reconsider f as ManySortedFunction of X0, (I --> NAT );

        take f;

        let x;

        let g be Function;

        assume x in ( dom f);

        then (f . x) = F(x) by A1;

        hence thesis;

      end;

    end

    theorem :: MSAFREE4:19

    

     Th19: for S be set holds for X be ManySortedSet of S holds for Y be non-empty ManySortedSet of S holds for w be ManySortedFunction of X, Y holds ( rngs w) is ManySortedSubset of Y

    proof

      let S be set;

      let X be ManySortedSet of S;

      let Y be non-empty ManySortedSet of S;

      let w be ManySortedFunction of X, Y;

      let x be object;

      assume x in S;

      then (( rngs w) . x) = ( rng (w . x)) by MSSUBFAM: 13;

      hence (( rngs w) . x) c= (Y . x);

    end;

    theorem :: MSAFREE4:20

    for S be set holds for X be countable ManySortedSet of S holds ex Y be ManySortedSubset of (S --> NAT ), w be ManySortedFunction of X, (S --> NAT ) st w is "1-1" & Y = ( rngs w) & for x st x in S holds (w . x) is Enumeration of (X . x) & (Y . x) = ( card (X . x))

    proof

      let S be set;

      let X be countable ManySortedSet of S;

      set Y = (S --> NAT );

      deffunc F( object) = the Enumeration of (X . $1);

      consider w be ManySortedSet of S such that

       A1: for s be object st s in S holds (w . s) = F(s) from PBOOLE:sch 4;

      w is Function-yielding

      proof

        let x be object;

        assume x in ( dom w);

        then (w . x) = F(x) by A1;

        hence thesis;

      end;

      then

      reconsider w as ManySortedFunction of S;

      w is ManySortedFunction of X, Y

      proof

        let x be object;

        assume

         A2: x in S;

        

         A3: ( card (X . x)) c= NAT by CARD_3:def 14;

        

         A4: (w . x) = F(x) by A1, A2;

        then

         A5: ( dom (w . x)) = (X . x) by AOFA_I00: 6;

        

         A6: (Y . x) = NAT by A2, FUNCOP_1: 7;

        ( rng (w . x)) c= (Y . x) by A4, A3, A6, AOFA_I00: 6;

        hence thesis by A5, FUNCT_2: 2;

      end;

      then

      reconsider w as ManySortedFunction of X, Y;

      reconsider Z = ( rngs w) as ManySortedSubset of Y by Th19;

      take Z, w;

      thus w is "1-1"

      proof

        let x;

        let f be Function;

        assume x in ( dom w);

        then (w . x) = F(x) by A1;

        hence thesis;

      end;

      thus Z = ( rngs w);

      let x;

      assume x in S;

      then (w . x) = F(x) & (Z . x) = ( rng (w . x)) by A1, MSSUBFAM: 13;

      hence (w . x) is Enumeration of (X . x) & (Z . x) = ( card (X . x)) by AOFA_I00: 6;

    end;

    theorem :: MSAFREE4:21

    

     Th21: for I be set holds for A be ManySortedSet of I holds for B be non-empty ManySortedSet of I holds A is_transformable_to B

    proof

      let I be set;

      let A be ManySortedSet of I;

      let B be non-empty ManySortedSet of I;

      for i be set st i in I holds (B . i) = {} implies (A . i) = {} ;

      hence A is_transformable_to B by PZFMISC1:def 3;

    end;

    theorem :: MSAFREE4:22

    

     Th22: for I be set holds for A,B,C be non-empty ManySortedSet of I holds for f be ManySortedFunction of A, B st B is ManySortedSubset of C holds f is ManySortedFunction of A, C

    proof

      let I be set;

      let A,B,C be non-empty ManySortedSet of I;

      let f be ManySortedFunction of A, B;

      assume

       A1: B c= C;

      let x be object;

      assume

       A2: x in I;

      then

       A3: (f . x) is Function of (A . x), (B . x) & (B . x) <> {} & (B . x) c= (C . x) by A1;

      ( dom (f . x)) = (A . x) & ( rng (f . x)) c= (B . x) by A2, FUNCT_2:def 1;

      hence (f . x) is Function of (A . x), (C . x) by A3, XBOOLE_1: 1, FUNCT_2: 2;

    end;

    theorem :: MSAFREE4:23

    

     Th23: for I be set, A,B be ManySortedSet of I st A is_transformable_to B holds for f be ManySortedFunction of A, B st f is "onto" holds ex g be ManySortedFunction of B, A st (f ** g) = ( id B)

    proof

      let I be set;

      let A,B be ManySortedSet of I;

      assume

       A1: A is_transformable_to B;

      let f be ManySortedFunction of A, B;

      assume

       A2: f is "onto";

      deffunc F( object) = the rng-retract of (f . $1);

      consider g be ManySortedSet of I such that

       A3: for i be object st i in I holds (g . i) = F(i) from PBOOLE:sch 4;

      g is Function-yielding

      proof

        let x be object;

        assume x in ( dom g);

        then (g . x) = F(x) by A3;

        hence thesis;

      end;

      then

      reconsider g as ManySortedFunction of I;

      g is ManySortedFunction of B, A

      proof

        let x be object;

        assume

         A4: x in I;

        then

         A5: (g . x) = F(x) by A3;

        then

         A6: ( dom (g . x)) = ( rng (f . x)) & ( rng (f . x)) = (B . x) by A2, A4, ALGSPEC1:def 2;

        (A . x) <> {} implies (B . x) <> {} by A4, A1, PZFMISC1:def 3;

        then

         A7: ( dom (f . x)) = (A . x) by FUNCT_2:def 1;

        

         A8: ((f . x) * (g . x)) = ( id (B . x)) & ( dom ( id (B . x))) = (B . x) by A5, A6, ALGSPEC1:def 2;

        ( rng (g . x)) c= ( dom (f . x))

        proof

          let y be object;

          assume y in ( rng (g . x));

          then

          consider z be object such that

           A9: z in ( dom (g . x)) & y = ((g . x) . z) by FUNCT_1:def 3;

          thus y in ( dom (f . x)) by A6, A8, A9, FUNCT_1: 11;

        end;

        hence thesis by A6, A7, FUNCT_2: 2;

      end;

      then

      reconsider g as ManySortedFunction of B, A;

      take g;

      now

        let x be object;

        assume

         A10: x in I;

        then (g . x) = F(x) by A3;

        then ((f . x) * (g . x)) = ( id ( rng (f . x))) & ( dom (g . x)) = ( rng (f . x)) & ( rng (f . x)) = (B . x) by A2, A10, ALGSPEC1:def 2;

        

        hence ((f ** g) . x) = ( id (B . x)) by A10, MSUALG_3: 2

        .= (( id B) . x) by A10, MSUALG_3:def 1;

      end;

      hence (f ** g) = ( id B);

    end;

     Lm2:

    now

      let p be FinSequence;

      let i;

      assume i < ( len p);

      then (i + 1) <= ( len p) & 1 <= (i + 1) by NAT_1: 13, NAT_1: 11;

      hence (i + 1) in ( dom p) by FINSEQ_3: 25;

    end;

    theorem :: MSAFREE4:24

    

     Th24: for A1,A2 be MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 holds for B1 be MSSubset of A1, B2 be MSSubset of A2 st B1 = B2 holds for o be OperSymbol of S st B1 is_closed_on o holds B2 is_closed_on o;

    theorem :: MSAFREE4:25

    

     Th25: for A1,A2 be MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 holds for B1 be MSSubset of A1, B2 be MSSubset of A2 st B1 = B2 holds for o be OperSymbol of S st B1 is_closed_on o holds (o /. B2) = (o /. B1)

    proof

      let A1,A2 be MSAlgebra over S;

      assume

       A1: the MSAlgebra of A1 = the MSAlgebra of A2;

      let B1 be MSSubset of A1;

      let B2 be MSSubset of A2;

      assume

       A2: B1 = B2;

      let o be OperSymbol of S;

      assume

       A3: B1 is_closed_on o;

      

      hence (o /. B2) = (( Den (o,A2)) | (((B2 # ) * the Arity of S) . o)) by A1, A2, Th24, MSUALG_2:def 7

      .= (( Den (o,A1)) | (((B1 # ) * the Arity of S) . o)) by A1, A2

      .= (o /. B1) by A3, MSUALG_2:def 7;

    end;

    theorem :: MSAFREE4:26

    

     Th26: for A1,A2 be MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 holds for B1 be MSSubset of A1, B2 be MSSubset of A2 st B1 = B2 & B1 is opers_closed holds ( Opers (A2,B2)) = ( Opers (A1,B1))

    proof

      let A1,A2 be MSAlgebra over S;

      assume

       A1: the MSAlgebra of A1 = the MSAlgebra of A2;

      let B1 be MSSubset of A1;

      let B2 be MSSubset of A2;

      assume

       A2: B1 = B2 & B1 is opers_closed;

      now

        let x be object;

        assume x in the carrier' of S;

        then

        reconsider o = x as OperSymbol of S;

        

        thus (( Opers (A2,B2)) . x) = (o /. B2) by MSUALG_2:def 8

        .= (o /. B1) by A1, A2, Th25

        .= (( Opers (A1,B1)) . x) by MSUALG_2:def 8;

      end;

      hence ( Opers (A2,B2)) = ( Opers (A1,B1));

    end;

    theorem :: MSAFREE4:27

    

     Th27: for A1,A2 be MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 holds for B1 be MSSubset of A1, B2 be MSSubset of A2 st B1 = B2 & B1 is opers_closed holds B2 is opers_closed by Th24;

    theorem :: MSAFREE4:28

    for A1,A2,B be MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 holds for B1 be MSSubAlgebra of A1 st the MSAlgebra of B = the MSAlgebra of B1 holds B is MSSubAlgebra of A2

    proof

      let A1,A2,B be MSAlgebra over S;

      assume

       A1: the MSAlgebra of A1 = the MSAlgebra of A2;

      let B1 be MSSubAlgebra of A1;

      assume

       A2: the MSAlgebra of B = the MSAlgebra of B1;

      thus the Sorts of B is MSSubset of A2 by A1, A2, MSUALG_2:def 9;

      let C be MSSubset of A2;

      reconsider C1 = C as MSSubset of A1 by A1;

      assume

       A3: C = the Sorts of B;

      hence C is opers_closed by A1, Th27, A2, MSUALG_2:def 9;

      the Charact of B1 = ( Opers (A1,C1)) by A2, A3, MSUALG_2:def 9;

      hence the Charact of B = ( Opers (A2,C)) by A1, A2, A3, MSUALG_2:def 9, Th26;

    end;

    theorem :: MSAFREE4:29

    for A1,A2 be MSAlgebra over S st A2 is empty holds for h be ManySortedFunction of A1, A2 holds h is_homomorphism (A1,A2)

    proof

      let A1,A2 be MSAlgebra over S such that

       A1: the Sorts of A2 is empty-yielding;

      let h be ManySortedFunction of A1, A2;

      let o be OperSymbol of S;

      assume ( Args (o,A1)) <> {} ;

      let x be Element of ( Args (o,A1));

      (the Sorts of A2 . ( the_result_sort_of o)) = {} by A1;

      then

       A2: ( Result (o,A2)) = {} by PRALG_2: 3;

      

      thus ((h . ( the_result_sort_of o)) . (( Den (o,A1)) . x)) = {} by A1

      .= (( Den (o,A2)) . (h # x)) by A2;

    end;

    theorem :: MSAFREE4:30

    

     Th30: for A1,A2,B1 be MSAlgebra over S, B2 be non-empty MSAlgebra over S st the MSAlgebra of A1 = the MSAlgebra of A2 & the MSAlgebra of B1 = the MSAlgebra of B2 holds for h1 be ManySortedFunction of A1, B1 holds for h2 be ManySortedFunction of A2, B2 st h1 = h2 & h1 is_homomorphism (A1,B1) holds h2 is_homomorphism (A2,B2)

    proof

      let A1,A2,B1 be MSAlgebra over S, B2 be non-empty MSAlgebra over S such that

       A1: the MSAlgebra of A1 = the MSAlgebra of A2 & the MSAlgebra of B1 = the MSAlgebra of B2;

      let h1 be ManySortedFunction of A1, B1;

      let h2 be ManySortedFunction of A2, B2 such that

       A2: h1 = h2 & h1 is_homomorphism (A1,B1);

      let o be OperSymbol of S such that

       A3: ( Args (o,A2)) <> {} ;

      let x be Element of ( Args (o,A2));

      reconsider x1 = x as Element of ( Args (o,A1)) by A1;

      

      thus ((h2 . ( the_result_sort_of o)) . (( Den (o,A2)) . x)) = ((h1 . ( the_result_sort_of o)) . (( Den (o,A1)) . x1)) by A1, A2

      .= (( Den (o,B1)) . (h1 # x1)) by A2, A1, A3

      .= (( Den (o,B2)) . (h2 # x)) by A1, A2, A3, INSTALG1: 5;

    end;

    begin

    definition

      let I be set;

      let X be ManySortedSet of I;

      :: original: trivial-yielding

      redefine

      :: MSAFREE4:def2

      attr X is trivial-yielding means

      : Def2: for x st x in I holds (X . x) is trivial;

      compatibility

      proof

        hereby

          assume

           A1: X is trivial-yielding;

          let x;

          assume x in I;

          then x in ( dom X) by PARTFUN1:def 2;

          then (X . x) in ( rng X) by FUNCT_1:def 3;

          hence (X . x) is trivial by A1, PENCIL_1:def 16;

        end;

        assume

         A2: for x st x in I holds (X . x) is trivial;

        now

          let y;

          assume y in ( rng X);

          then

          consider x be object such that

           A3: x in ( dom X) & y = (X . x) by FUNCT_1:def 3;

          thus y is trivial by A2, A3;

        end;

        hence thesis by PENCIL_1:def 16;

      end;

    end

    registration

      let I be set;

      cluster non-empty trivial-yielding for ManySortedSet of I;

      existence

      proof

        deffunc F( object) = {$1};

        consider S be ManySortedSet of I such that

         A1: for x be object st x in I holds (S . x) = F(x) from PBOOLE:sch 4;

        take S;

        hereby

          let x be object;

          assume x in I;

          then (S . x) = F(x) by A1;

          hence (S . x) is non empty;

        end;

        let x be set;

        assume x in I;

        then (S . x) = F(x) by A1;

        hence thesis;

      end;

    end

    registration

      let I be set;

      let S be trivial-yielding ManySortedSet of I;

      let x be object;

      cluster (S . x) -> trivial;

      coherence

      proof

        (x in I or x nin I) & ( dom S) = I by PARTFUN1:def 2;

        hence thesis by Def2, FUNCT_1:def 2;

      end;

    end

    definition

      let S;

      let A be MSAlgebra over S;

      :: MSAFREE4:def3

      attr A is trivial means

      : Def3: the Sorts of A is trivial-yielding;

    end

    registration

      let S;

      cluster trivial disjoint_valued non-empty for strict MSAlgebra over S;

      existence

      proof

        deffunc F( object) = {$1};

        consider X be ManySortedSet of S such that

         A1: for x be object st x in the carrier of S holds (X . x) = F(x) from PBOOLE:sch 4;

        set o = the ManySortedFunction of ((X # ) * the Arity of S), (X * the ResultSort of S);

        take A = MSAlgebra (# X, o #);

        thus the Sorts of A is trivial-yielding

        proof

          let x;

          assume x in the carrier of S;

          then (X . x) = F(x) by A1;

          hence thesis;

        end;

        thus the Sorts of A is disjoint_valued

        proof

          let x,y be object;

          assume

           A2: x <> y;

          (x in the carrier of S or x nin the carrier of S) & (y in the carrier of S or y nin the carrier of S) & ( dom the Sorts of A) = the carrier of S by PARTFUN1:def 2;

          then ( F(x) = (X . x) or (X . x) = {} ) & ( F(y) = (X . y) or (X . y) = {} ) by A1, FUNCT_1:def 2;

          hence thesis by A2, ZFMISC_1: 11;

        end;

        thus the Sorts of A is non-empty

        proof

          let x be object;

          assume x in the carrier of S;

          then (X . x) = F(x) by A1;

          hence thesis;

        end;

        thus thesis;

      end;

    end

    registration

      let S;

      let A be trivial MSAlgebra over S;

      cluster the Sorts of A -> trivial-yielding;

      coherence by Def3;

    end

    theorem :: MSAFREE4:31

    

     Th31: for A be trivial non-empty MSAlgebra over S holds for s be SortSymbol of S holds for e be Element of (( Equations S) . s) holds A |= e

    proof

      let A be trivial non-empty MSAlgebra over S;

      let s be SortSymbol of S;

      let e be Element of (( Equations S) . s);

      let h be ManySortedFunction of ( TermAlg S), A;

      assume h is_homomorphism (( TermAlg S),A);

      ((h . s) . (e `1 )) in (the Sorts of A . s) & ((h . s) . (e `2 )) in (the Sorts of A . s) by FUNCT_2: 5, EQUATION: 30, EQUATION: 29;

      hence ((h . s) . (e `1 )) = ((h . s) . (e `2 )) by ZFMISC_1:def 10;

    end;

    theorem :: MSAFREE4:32

    

     Th32: for A be trivial non-empty MSAlgebra over S holds for T be EqualSet of S holds A |= T by Th31;

    theorem :: MSAFREE4:33

    

     Th33: for A be non-empty MSAlgebra over S holds for T be non-empty trivial MSAlgebra over S holds for f be ManySortedFunction of A, T holds f is_homomorphism (A,T)

    proof

      let A be non-empty MSAlgebra over S;

      let T be non-empty trivial MSAlgebra over S;

      let f be ManySortedFunction of A, T;

      let o be OperSymbol of S;

      assume ( Args (o,A)) <> {} ;

      let x be Element of ( Args (o,A));

      

       A1: ( dom the ResultSort of S) = the carrier' of S by FUNCT_2:def 1;

      then

      reconsider a = (( Den (o,A)) . x) as Element of (the Sorts of A . ( the_result_sort_of o)) by FUNCT_1: 13;

      (( Den (o,T)) . (f # x)) in ( Result (o,T));

      then (the Sorts of T . ( the_result_sort_of o)) is trivial & (( Den (o,T)) . (f # x)) in (the Sorts of T . ( the_result_sort_of o)) & ((f . ( the_result_sort_of o)) . a) in (the Sorts of T . ( the_result_sort_of o)) by A1, FUNCT_1: 13;

      hence ((f . ( the_result_sort_of o)) . (( Den (o,A)) . x)) = (( Den (o,T)) . (f # x)) by ZFMISC_1:def 10;

    end;

    theorem :: MSAFREE4:34

    

     Th34: for T be non-empty trivial MSAlgebra over S holds for A be non-empty MSSubAlgebra of T holds the MSAlgebra of A = the MSAlgebra of T

    proof

      let T be non-empty trivial MSAlgebra over S;

      let A be non-empty MSSubAlgebra of T;

      

       A1: the Sorts of A is ManySortedSubset of the Sorts of T by MSUALG_2:def 9;

       A2:

      now

        let x be object;

        assume

         A3: x in the carrier of S;

        then

         A4: (the Sorts of A . x) c= (the Sorts of T . x) & (the Sorts of A . x) <> {} & (the Sorts of T . x) <> {} by A1, PBOOLE:def 2, PBOOLE:def 18;

        (the Sorts of A . x) is non empty trivial by A4;

        then

        consider a be object such that

         A5: (the Sorts of A . x) = {a} by ZFMISC_1: 131;

        consider b be object such that

         A6: (the Sorts of T . x) = {b} by A3, ZFMISC_1: 131;

        thus (the Sorts of A . x) = (the Sorts of T . x) by A4, A5, A6, ZFMISC_1: 3;

      end;

       the MSAlgebra of T = the MSAlgebra of T;

      then T is MSSubAlgebra of T & A is MSSubAlgebra of T by MSUALG_2: 5;

      hence the MSAlgebra of A = the MSAlgebra of T by A2, PBOOLE: 3, MSUALG_2: 9;

    end;

    begin

    definition

      let S;

      let A be non-empty MSAlgebra over S;

      let C be MSAlgebra over S;

      :: MSAFREE4:def4

      attr C is A -Image means ex B be non-empty MSAlgebra over S, h be ManySortedFunction of A, B st h is_homomorphism (A,B) & the MSAlgebra of C = ( Image h);

    end

    registration

      let S;

      let A be non-empty MSAlgebra over S;

      cluster A -Image -> non-empty for MSAlgebra over S;

      coherence

      proof

        let C be MSAlgebra over S;

        assume C is A -Image;

        then

        consider B be non-empty MSAlgebra over S, h be ManySortedFunction of A, B such that

         A1: h is_homomorphism (A,B) & the MSAlgebra of C = ( Image h);

        thus the Sorts of C is non-empty by A1;

      end;

      cluster A -Image for non-empty strict MSAlgebra over S;

      existence

      proof

        take C = ( Image ( id the Sorts of A)), A, h = ( id the Sorts of A);

        thus h is_homomorphism (A,A) by MSUALG_3: 9;

        thus thesis;

      end;

    end

    definition

      let S;

      let A be non-empty MSAlgebra over S;

      let C be non-empty MSAlgebra over S;

      :: original: -Image

      redefine

      :: MSAFREE4:def5

      attr C is A -Image means

      : Def5: ex h be ManySortedFunction of A, C st h is_epimorphism (A,C);

      compatibility

      proof

        thus C is A -Image implies ex h be ManySortedFunction of A, C st h is_epimorphism (A,C)

        proof

          given B be non-empty MSAlgebra over S, h be ManySortedFunction of A, B such that

           A1: h is_homomorphism (A,B) & the MSAlgebra of C = ( Image h);

          consider g0 be ManySortedFunction of A, ( Image h) such that

           A2: h = g0 & g0 is_epimorphism (A,( Image h)) by A1, MSUALG_3: 21;

          reconsider g = g0 as ManySortedFunction of A, C by A1;

          take g;

          thus g is_homomorphism (A,C)

          proof

            let o be OperSymbol of S;

            assume ( Args (o,A)) <> {} ;

            let x be Element of ( Args (o,A));

            

             A3: ( Args (o,( Image h))) = ( Args (o,C)) & ( Den (o,( Image h))) = ( Den (o,C)) by A1;

            (g0 # x) = (( Frege (g0 * ( the_arity_of o))) . x) by MSUALG_3:def 5

            .= (g # x) by MSUALG_3:def 5;

            hence ((g . ( the_result_sort_of o)) . (( Den (o,A)) . x)) = (( Den (o,C)) . (g # x)) by A2, A3, MSUALG_3:def 7;

          end;

          thus g is "onto" by A1, A2;

        end;

        given h be ManySortedFunction of A, C such that

         A4: h is_epimorphism (A,C);

        take C, h;

        thus h is_homomorphism (A,C) by A4;

        thus thesis by A4, MSUALG_3: 19;

      end;

    end

    definition

      let S;

      let A be non-empty MSAlgebra over S;

      mode image of A is A -Image non-empty MSAlgebra over S;

    end

    registration

      let S;

      let A be non-empty MSAlgebra over S;

      cluster disjoint_valued trivial for image of A;

      existence

      proof

        set T = the trivial disjoint_valued non-empty MSAlgebra over S;

        set h = the ManySortedFunction of A, T;

        reconsider T0 = T as MSAlgebra over S;

        T0 is A -Image

        proof

          take T, h;

          thus h is_homomorphism (A,T) by Th33;

          thus the MSAlgebra of T0 = ( Image h) by Th34;

        end;

        hence thesis;

      end;

    end

    theorem :: MSAFREE4:35

    

     Th35: for A be non-empty MSAlgebra over S holds for B be A -Image MSAlgebra over S holds for s be SortSymbol of S holds for e be Element of (( Equations S) . s) st A |= e holds B |= e

    proof

      let A be non-empty MSAlgebra over S;

      let B be A -Image MSAlgebra over S;

      consider f be ManySortedFunction of A, B such that

       A1: f is_epimorphism (A,B) by Def5;

      let s be SortSymbol of S;

      let e be Element of (( Equations S) . s);

      assume

       A2: A |= e;

      let h be ManySortedFunction of ( TermAlg S), B;

      assume

       A3: h is_homomorphism (( TermAlg S),B);

      consider g be ManySortedFunction of ( TermAlg S), A such that

       A4: g is_homomorphism (( TermAlg S),A) & h = (f ** g) by A1, A3, EQUATION: 24;

      (h . s) = ((f . s) * (g . s)) & (e `1 ) in (the Sorts of ( TermAlg S) . s) & (e `2 ) in (the Sorts of ( TermAlg S) . s) by A4, MSUALG_3: 2, EQUATION: 29, EQUATION: 30;

      then ((h . s) . (e `1 )) = ((f . s) . ((g . s) . (e `1 ))) & ((h . s) . (e `2 )) = ((f . s) . ((g . s) . (e `2 ))) by FUNCT_2: 15;

      hence ((h . s) . (e `1 )) = ((h . s) . (e `2 )) by A2, A4;

    end;

    theorem :: MSAFREE4:36

    

     Th36: for A be non-empty MSAlgebra over S holds for B be A -Image MSAlgebra over S holds for T be EqualSet of S st A |= T holds B |= T by Th35;

    begin

    definition

      let S, X;

      let A be MSAlgebra over S;

      :: MSAFREE4:def6

      attr A is X,S -terms means

      : Def6: the Sorts of A is ManySortedSubset of the Sorts of ( Free (S,X));

    end

    registration

      let S, X;

      cluster ( Free (S,X)) -> X, S -terms;

      coherence

      proof

        thus the Sorts of ( Free (S,X)) is ManySortedSubset of the Sorts of ( Free (S,X))

        proof

          thus the Sorts of ( Free (S,X)) c= the Sorts of ( Free (S,X));

        end;

      end;

    end

    registration

      let S, X;

      cluster ( Free (S,X)) -> non-empty disjoint_valued;

      coherence

      proof

        

         A1: ( Free (S,X)) = ( FreeMSA X) by MSAFREE3: 31;

        hence ( Free (S,X)) is non-empty;

        let x,y be object;

        assume

         A2: x <> y;

        assume (the Sorts of ( Free (S,X)) . x) meets (the Sorts of ( Free (S,X)) . y);

        then

        consider z be object such that

         A3: z in (the Sorts of ( Free (S,X)) . x) & z in (the Sorts of ( Free (S,X)) . y) by XBOOLE_0: 3;

        

         A4: ( dom the Sorts of ( Free (S,X))) = the carrier of S by PARTFUN1:def 2;

        then

        reconsider x, y as SortSymbol of S by A3, FUNCT_1:def 2;

        z in (the Sorts of ( Free (S,X)) . x) by A3;

        then

        reconsider z as Element of ( Union the Sorts of ( Free (S,X))) by A4, CARD_5: 2;

        reconsider z as Term of S, X by A1, MSAFREE3: 6;

        ( the_sort_of z) = x & ( the_sort_of z) = y by A1, A3, MSAFREE3: 7;

        hence contradiction by A2;

      end;

    end

    registration

      let S, X;

      cluster X, S -terms non-empty for strict MSAlgebra over S;

      existence

      proof

        take ( Free (S,X));

        thus thesis;

      end;

    end

    definition

      let S, X;

      let A be X, S -terms MSAlgebra over S;

      :: MSAFREE4:def7

      attr A is all_vars_including means

      : Def7: ( FreeGen X) is ManySortedSubset of the Sorts of A;

      :: MSAFREE4:def8

      attr A is inheriting_operations means

      : Def8: for o be OperSymbol of S, p be FinSequence holds (p in ( Args (o,( Free (S,X)))) & (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) implies p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p));

      :: MSAFREE4:def9

      attr A is free_in_itself means

      : Def9: for f be ManySortedFunction of ( FreeGen X), the Sorts of A holds for G be ManySortedSubset of the Sorts of A st G = ( FreeGen X) holds ex h be ManySortedFunction of A, A st h is_homomorphism (A,A) & f = (h || G);

    end

    theorem :: MSAFREE4:37

    for A,B be non-empty MSAlgebra over S st the MSAlgebra of A = the MSAlgebra of B holds A is X, S -terms implies B is X, S -terms;

    theorem :: MSAFREE4:38

    for A,B be X, S -terms non-empty MSAlgebra over S st the MSAlgebra of A = the MSAlgebra of B holds (A is all_vars_including implies B is all_vars_including) & (A is inheriting_operations implies B is inheriting_operations) & (A is free_in_itself implies B is free_in_itself)

    proof

      let A,B be X, S -terms non-empty MSAlgebra over S such that

       A1: the MSAlgebra of A = the MSAlgebra of B;

      thus A is all_vars_including implies B is all_vars_including by A1;

      thus A is inheriting_operations implies B is inheriting_operations

      proof

        assume

         A3: for o be OperSymbol of S, p be FinSequence holds (p in ( Args (o,( Free (S,X)))) & (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) implies p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p));

        let o be OperSymbol of S, p be FinSequence;

        ( Args (o,A)) = ( Args (o,B)) & ( Den (o,A)) = ( Den (o,B)) by A1;

        hence p in ( Args (o,( Free (S,X)))) & (( Den (o,( Free (S,X)))) . p) in (the Sorts of B . ( the_result_sort_of o)) implies p in ( Args (o,B)) & (( Den (o,B)) . p) = (( Den (o,( Free (S,X)))) . p) by A1, A3;

      end;

      assume

       A4: for f be ManySortedFunction of ( FreeGen X), the Sorts of A holds for G be ManySortedSubset of the Sorts of A st G = ( FreeGen X) holds ex h be ManySortedFunction of A, A st h is_homomorphism (A,A) & f = (h || G);

      let f be ManySortedFunction of ( FreeGen X), the Sorts of B;

      let G be ManySortedSubset of the Sorts of B such that

       A5: G = ( FreeGen X);

      reconsider G1 = G as ManySortedSubset of the Sorts of A by A1;

      consider h be ManySortedFunction of A, A such that

       A6: h is_homomorphism (A,A) & f = (h || G1) by A1, A4, A5;

      reconsider h2 = h as ManySortedFunction of B, B by A1;

      take h2;

      thus h2 is_homomorphism (B,B) by A6, A1, Th30;

      thus f = (h2 || G) by A1, A6;

    end;

    registration

      let J be non empty non void ManySortedSign;

      let T be non-empty MSAlgebra over J;

      cluster non-empty for GeneratorSet of T;

      existence

      proof

        the Sorts of T is GeneratorSet of T by MSAFREE2: 6;

        hence thesis;

      end;

    end

    registration

      let S, X;

      cluster ( Free (S,X)) -> all_vars_including inheriting_operations free_in_itself;

      coherence

      proof

        set A = ( Free (S,X));

        

         A1: A = ( FreeMSA X) by MSAFREE3: 31;

        thus ( FreeGen X) is ManySortedSubset of the Sorts of A & for o be OperSymbol of S, p be FinSequence holds (p in ( Args (o,( Free (S,X)))) & (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) implies p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p)) by MSAFREE3: 31;

        let f be ManySortedFunction of ( FreeGen X), the Sorts of A;

        let G be MSSubset of A;

        assume

         A2: G = ( FreeGen X);

        then

        reconsider H = G as non-empty GeneratorSet of A by MSAFREE3: 31;

        thus thesis by A2, A1, MSAFREE:def 5;

      end;

    end

    registration

      let S, X;

      cluster all_vars_including -> non-empty for X, S -terms MSAlgebra over S;

      coherence

      proof

        let A be X, S -terms MSAlgebra over S;

        assume

         A1: ( FreeGen X) is ManySortedSubset of the Sorts of A;

        let x be object;

        assume x in the carrier of S;

        then

        reconsider x as SortSymbol of S;

        (( FreeGen X) . x) c= (the Sorts of A . x) by A1, PBOOLE:def 2, PBOOLE:def 18;

        hence thesis;

      end;

      cluster all_vars_including inheriting_operations free_in_itself for X, S -terms strict MSAlgebra over S;

      existence

      proof

        take ( Free (S,X));

        thus thesis;

      end;

    end

    reserve A0 for X, S -terms non-empty MSAlgebra over S,

A1 for all_vars_includingX, S -terms MSAlgebra over S,

A2 for all_vars_including inheriting_operationsX, S -terms MSAlgebra over S,

A for all_vars_including inheriting_operations free_in_itselfX, S -terms MSAlgebra over S;

    theorem :: MSAFREE4:39

    

     Th39: (for t be Element of A0 holds t is Element of ( Free (S,X))) & for s be SortSymbol of S holds for t be Element of A0, s holds t is Element of ( Free (S,X)), s

    proof

      

       A1: the Sorts of A0 is MSSubset of ( Free (S,X)) by Def6;

      then ( Union the Sorts of A0) c= ( Union the Sorts of ( Free (S,X))) by Th1, PBOOLE:def 18;

      hence for t be Element of A0 holds t is Element of ( Free (S,X));

      let s be SortSymbol of S;

      let t be Element of A0, s;

      t in (the Sorts of A0 . s) & (the Sorts of A0 . s) c= (the Sorts of ( Free (S,X)) . s) by A1, PBOOLE:def 2, PBOOLE:def 18;

      hence thesis;

    end;

    theorem :: MSAFREE4:40

    

     Th40: for s be SortSymbol of S holds for x be Element of (X . s) holds ( root-tree [x, s]) is Element of A1, s

    proof

      let s be SortSymbol of S;

      let x be Element of (X . s);

      ( FreeGen X) is ManySortedSubset of the Sorts of A1 by Def7;

      then

       A1: (( FreeGen X) . s) c= (the Sorts of A1 . s) by PBOOLE:def 2, PBOOLE:def 18;

      ( root-tree [x, s]) in ( FreeGen (s,X)) by MSAFREE:def 15;

      then ( root-tree [x, s]) in (( FreeGen X) . s) by MSAFREE:def 16;

      hence ( root-tree [x, s]) is Element of A1, s by A1;

    end;

    theorem :: MSAFREE4:41

    

     Th41: for o be OperSymbol of S holds ( Args (o,A1)) c= ( Args (o,( Free (S,X))))

    proof

      let o be OperSymbol of S;

      let x be object;

      assume x in ( Args (o,A1));

      then

       A1: x in ( product (the Sorts of A1 * ( the_arity_of o))) by PRALG_2: 3;

      

       A2: ( dom (the Sorts of A1 * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

      

       A3: ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

      now

        let a be object;

        assume

         A4: a in ( dom ( the_arity_of o));

        then

         A5: (( the_arity_of o) . a) in the carrier of S by FUNCT_1: 102;

        

         A6: ((the Sorts of A1 * ( the_arity_of o)) . a) = (the Sorts of A1 . (( the_arity_of o) . a)) by A4, FUNCT_1: 13;

        

         A7: ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . a) = (the Sorts of ( Free (S,X)) . (( the_arity_of o) . a)) by A4, FUNCT_1: 13;

        the Sorts of A1 is MSSubset of ( Free (S,X)) by Def6;

        hence ((the Sorts of A1 * ( the_arity_of o)) . a) c= ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . a) by A5, A6, A7, PBOOLE:def 2, PBOOLE:def 18;

      end;

      then ( product (the Sorts of A1 * ( the_arity_of o))) c= ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by A2, A3, CARD_3: 27;

      then x in ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by A1;

      hence x in ( Args (o,( Free (S,X)))) by PRALG_2: 3;

    end;

    registration

      let S be set;

      cluster disjoint_valued non-empty for ManySortedSet of S;

      existence

      proof

        deffunc I( object) = {$1};

        consider f be Function such that

         A1: ( dom f) = S & for x be object st x in S holds (f . x) = I(x) from FUNCT_1:sch 3;

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

        take f;

        thus f is disjoint_valued

        proof

          let x,y be object;

          assume

           A2: x <> y;

          (x in S or x nin S) & (y in S or y nin S);

          then ((f . x) = {x} or (f . x) = {} ) & ((f . y) = {y} or (f . y) = {} ) by A1, FUNCT_1:def 2;

          hence (f . x) misses (f . y) by A2, ZFMISC_1: 11;

        end;

        let x be object;

        assume x in S;

        then (f . x) = {x} by A1;

        hence thesis;

      end;

    end

    registration

      let S be set;

      let T be disjoint_valued non-empty ManySortedSet of S;

      cluster -> disjoint_valued for ManySortedSubset of T;

      coherence

      proof

        let X be ManySortedSubset of T;

        let x,y be object;

        assume

         A1: x <> y;

        (x in S or x nin S) & (y in S or y nin S) & X c= T & ( dom X) = S by PBOOLE:def 18, PARTFUN1:def 2;

        then ((X . x) c= (T . x) or (X . x) = {} ) & ((X . y) c= (T . y) or (X . y) = {} ) by FUNCT_1:def 2;

        hence thesis by A1, PROB_2:def 2, XBOOLE_1: 64;

      end;

    end

    registration

      let S, X;

      cluster X, S -terms strict for MSAlgebra over S;

      existence

      proof

        take ( Free (S,X));

        thus thesis;

      end;

    end

    definition

      let S, X, A1;

      :: MSAFREE4:def10

      func canonical_homomorphism A1 -> ManySortedFunction of ( Free (S,X)), A1 means

      : Def10: it is_homomorphism (( Free (S,X)),A1) & for G be GeneratorSet of ( Free (S,X)) st G = ( FreeGen X) holds ( id G) = (it || G);

      existence

      proof

        

         A1: ( FreeMSA X) = ( Free (S,X)) by MSAFREE3: 31;

        reconsider H = ( FreeGen X) as non-empty GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

        H is MSSubset of A1 by Def7;

        then

        reconsider f = ( id H) as ManySortedFunction of H, the Sorts of A1 by Th22;

        consider g be ManySortedFunction of ( Free (S,X)), A1 such that

         A2: g is_homomorphism (( Free (S,X)),A1) & (g || H) = f by A1, MSAFREE:def 5;

        take g;

        thus thesis by A2;

      end;

      uniqueness

      proof

        let h1,h2 be ManySortedFunction of ( Free (S,X)), A1 such that

         A3: h1 is_homomorphism (( Free (S,X)),A1) & for G be GeneratorSet of ( Free (S,X)) st G = ( FreeGen X) holds ( id G) = (h1 || G) and

         A4: h2 is_homomorphism (( Free (S,X)),A1) & for G be GeneratorSet of ( Free (S,X)) st G = ( FreeGen X) holds ( id G) = (h2 || G);

        reconsider H = ( FreeGen X) as non-empty GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

        (h1 || H) = ( id H) by A3

        .= (h2 || H) by A4;

        hence h1 = h2 by A3, A4, EXTENS_1: 19;

      end;

    end

    registration

      let S, X, A0;

      cluster -> Function-like Relation-like for Element of A0;

      coherence

      proof

        let a be Element of A0;

        consider x be object such that

         A1: x in ( dom the Sorts of A0) & a in (the Sorts of A0 . x) by CARD_5: 2;

        reconsider x as SortSymbol of S by A1;

        the Sorts of A0 is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

        then (the Sorts of A0 . x) c= (the Sorts of ( Free (S,X)) . x) by PBOOLE:def 2, PBOOLE:def 18;

        then a is Element of (the Sorts of ( Free (S,X)) . x) by A1;

        hence thesis;

      end;

      let s be SortSymbol of S;

      cluster -> Function-like Relation-like for Element of A0, s;

      coherence

      proof

        let a be Element of A0, s;

        a is Element of (the Sorts of A0 . s);

        hence thesis;

      end;

    end

    registration

      let S, X, A0;

      cluster -> DecoratedTree-like for Element of A0;

      coherence

      proof

        let a be Element of A0;

        consider x be object such that

         A1: x in ( dom the Sorts of A0) & a in (the Sorts of A0 . x) by CARD_5: 2;

        reconsider x as SortSymbol of S by A1;

        the Sorts of A0 is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

        then (the Sorts of A0 . x) c= (the Sorts of ( Free (S,X)) . x) by PBOOLE:def 2, PBOOLE:def 18;

        then a is Element of (the Sorts of ( Free (S,X)) . x) by A1;

        hence thesis;

      end;

      let s be SortSymbol of S;

      cluster -> DecoratedTree-like for Element of A0, s;

      coherence

      proof

        let a be Element of A0, s;

        a is Element of (the Sorts of A0 . s);

        hence thesis;

      end;

    end

    registration

      let S, X;

      cluster X, S -terms -> disjoint_valued for MSAlgebra over S;

      coherence

      proof

        let A be MSAlgebra over S;

        assume A is X, S -terms;

        then the Sorts of A is ManySortedSubset of the Sorts of ( Free (S,X));

        hence the Sorts of A is disjoint_valued;

      end;

    end

    theorem :: MSAFREE4:42

    

     Th42: for t be Element of A0 holds t is Term of S, X

    proof

      let t be Element of A0;

      consider s be object such that

       A1: s in ( dom the Sorts of A0) & t in (the Sorts of A0 . s) by CARD_5: 2;

      reconsider s as SortSymbol of S by A1;

      the Sorts of A0 is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

      then (the Sorts of A0 . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

      then t is Element of (the Sorts of ( Free (S,X)) . s) by A1;

      then t is Element of ( FreeMSA X) by MSAFREE3: 31;

      hence t is Term of S, X by MSAFREE3: 6;

    end;

    theorem :: MSAFREE4:43

    

     Th43: for t be Element of A0 holds for s be SortSymbol of S st t in (the Sorts of ( Free (S,X)) . s) holds t in (the Sorts of A0 . s)

    proof

      let t be Element of A0;

      consider x be object such that

       A1: x in ( dom the Sorts of A0) & t in (the Sorts of A0 . x) by CARD_5: 2;

      reconsider x as SortSymbol of S by A1;

      the Sorts of A0 is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

      then

       A2: (the Sorts of A0 . x) c= (the Sorts of ( Free (S,X)) . x) by PBOOLE:def 2, PBOOLE:def 18;

      let s be SortSymbol of S;

      assume t in (the Sorts of ( Free (S,X)) . s);

      hence t in (the Sorts of A0 . s) by A1, A2, XBOOLE_0: 3, PROB_2:def 2;

    end;

    theorem :: MSAFREE4:44

    for t be Element of A2 holds for p be Element of ( dom t) holds (t | p) is Element of A2

    proof

      set A = A2;

      let t be Element of A;

      defpred P[ Nat] means for p be Element of ( dom t) st ( len p) = $1 holds (t | p) is Element of A;

      

       A1: P[ 0 ]

      proof

        let p be Element of ( dom t);

        assume ( len p) = 0 ;

        then p = {} ;

        hence thesis by TREES_9: 1;

      end;

      

       A2: P[i] implies P[(i + 1)]

      proof

        assume

         A3: P[i];

        let p be Element of ( dom t);

        assume

         A4: ( len p) = (i + 1);

        then

        consider q be FinSequence, a be object such that

         A5: p = (q ^ <*a*>) by FINSEQ_2: 18;

         <*a*> is FinSequence of NAT by A5, FINSEQ_1: 36;

        then ( rng <*a*>) c= NAT by FINSEQ_1:def 4;

        then {a} c= NAT by FINSEQ_1: 39;

        then

        reconsider a as Element of NAT by ZFMISC_1: 31;

        ( len <*a*>) = 1 by FINSEQ_1: 40;

        then

         A6: ( len p) = (( len q) + 1) by A5, FINSEQ_1: 22;

        reconsider q as FinSequence of NAT by A5, FINSEQ_1: 36;

        reconsider q as Element of ( dom t) by A5, TREES_1: 21;

        t is Term of S, X by Th42;

        then

        reconsider tq = (t | q), tp = (t | p) as Term of S, X by MSATERM: 29;

        

         A7: ( dom tq) = (( dom t) | q) by TREES_2:def 10;

        then <*a*> in ( dom tq) & {} in ( dom tq) by A5, TREES_1: 22, TREES_1:def 6;

        then not tq is trivial by ZFMISC_1:def 10;

        then tq is CompoundTerm of S, X by MSATERM: 28;

        then (tq . {} ) in [:the carrier' of S, {the carrier of S}:] by MSATERM:def 6;

        then

        consider o,s be object such that

         A8: o in the carrier' of S & s in {the carrier of S} & (tq . {} ) = [o, s] by ZFMISC_1:def 2;

        reconsider o as OperSymbol of S by A8;

        

         A9: s = the carrier of S by A8, TARSKI:def 1;

        then

        consider arg be ArgumentSeq of ( Sym (o,X)) such that

         A10: tq = ( [o, the carrier of S] -tree arg) by A8, MSATERM: 10;

         <*a*> in ( dom tq) & ( dom tq) = ( tree ( doms arg)) & <*a*> <> {} by A7, A5, A10, TREES_1:def 6, TREES_4: 10;

        then

        consider n be Nat, e be FinSequence such that

         A11: n < ( len ( doms arg)) & e in (( doms arg) . (n + 1)) & <*a*> = ( <*n*> ^ e) by TREES_3:def 15;

        

         A12: a = ( <*a*> . 1) by FINSEQ_1: 40

        .= n by A11, FINSEQ_1: 41;

        

         A13: ( Free (S,X)) = ( FreeMSA X) by MSAFREE3: 31;

        

         A14: tq is Element of A by A3, A6, A4;

        ( Sym (o,X)) ==> ( roots arg) & arg is FinSequence of ( TS ( DTConMSA X)) by MSATERM: 21, MSATERM:def 1;

        then (( DenOp (o,X)) . arg) = (( Sym (o,X)) -tree arg) by MSAFREE:def 12;

        then

         A15: (( Den (o,( Free (S,X)))) . arg) = tq by A10, A13, MSAFREE:def 13;

        ( the_sort_of tq) = ( the_result_sort_of o) by A8, A9, MSATERM: 17;

        then (( Den (o,( Free (S,X)))) . arg) in ( FreeSort (X,( the_result_sort_of o))) by A15, MSATERM:def 5;

        then (( Den (o,( Free (S,X)))) . arg) in (the Sorts of ( Free (S,X)) . ( the_result_sort_of o)) by A13, MSAFREE:def 11;

        then

         A16: (( Den (o,( Free (S,X)))) . arg) in (the Sorts of A . ( the_result_sort_of o)) by A14, A15, Th43;

        reconsider r = {} as Element of ( dom tq) by TREES_1: 22;

        

         A17: tp = (tq | <*a*>) & a < ( len arg) by A5, A11, A12, TREES_3: 38, TREES_9: 3;

        then

         A18: tp = (arg . (a + 1)) & (a + 1) in ( dom arg) by Lm2, A10, TREES_4:def 4;

        reconsider ar = arg as Element of ( Args (o,( Free (S,X)))) by A13, INSTALG1: 1;

        ar in ( Args (o,A)) & ( dom the Arity of S) = the carrier' of S by A16, Def8, FUNCT_2:def 1;

        then arg in cc(#,the_arity_of) by FUNCT_1: 13;

        then

         A19: arg in ( product (the Sorts of A * ( the_arity_of o))) by FINSEQ_2:def 5;

        then

         A20: ( dom arg) = ( dom (the Sorts of A * ( the_arity_of o))) by CARD_3: 9;

        ( dom (the Sorts of A * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PARTFUN1:def 2;

        then (( the_arity_of o) . (a + 1)) in ( rng ( the_arity_of o)) by A18, A20, FUNCT_1:def 3;

        then

        reconsider s = (( the_arity_of o) . (a + 1)) as SortSymbol of S;

        tp in ((the Sorts of A * ( the_arity_of o)) . (a + 1)) by A18, A19, A20, CARD_3: 9;

        then tp is Element of (the Sorts of A . s) by A17, Lm2, A20, FUNCT_1: 12;

        hence thesis;

      end;

      

       A21: P[i] from NAT_1:sch 2( A1, A2);

      let p be Element of ( dom t);

      ( len p) = ( len p);

      hence (t | p) is Element of A by A21;

    end;

    theorem :: MSAFREE4:45

    

     Th45: ( FreeGen X) is GeneratorSet of A2

    proof

      set A = A2;

      reconsider G = ( FreeGen X) as ManySortedSubset of the Sorts of A by Def7;

      defpred P[ set] means for s be SortSymbol of S st $1 in (the Sorts of A . s) holds $1 in (the Sorts of ( GenMSAlg G) . s);

      

       A1: ( FreeMSA X) = ( Free (S,X)) by MSAFREE3: 31;

      

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

      proof

        let s be SortSymbol of S;

        let v be Element of (X . s);

        reconsider t = ( root-tree [v, s]) as Term of S, X by MSATERM: 4;

        let r be SortSymbol of S;

        assume

         A3: ( root-tree [v, s]) in (the Sorts of A . r);

        the Sorts of A is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

        then (the Sorts of A . r) c= (the Sorts of ( Free (S,X)) . r) by PBOOLE:def 2, PBOOLE:def 18;

        then t in (the Sorts of ( Free (S,X)) . r) by A3;

        then t in ( FreeSort (X,r)) by A1, MSAFREE:def 11;

        

        then r = ( the_sort_of t) by MSATERM:def 5

        .= s by MSATERM: 14;

        then ( root-tree [v, s]) in ( FreeGen (r,X)) by MSAFREE:def 15;

        then

         A4: ( root-tree [v, s]) in (( FreeGen X) . r) by MSAFREE:def 16;

        ( FreeGen X) is ManySortedSubset of the Sorts of ( GenMSAlg G) by MSUALG_2:def 17;

        then (( FreeGen X) . r) c= (the Sorts of ( GenMSAlg G) . r) by PBOOLE:def 2, PBOOLE:def 18;

        hence thesis by A4;

      end;

      

       A5: 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;

        let p be ArgumentSeq of ( Sym (o,X));

        assume

         A6: for t be Term of S, X st t in ( rng p) holds P[t];

        let r be SortSymbol of S;

        assume ( [o, the carrier of S] -tree p) in (the Sorts of A . r);

        then

        reconsider t1 = ( [o, the carrier of S] -tree p) as Element of (the Sorts of A . r);

        p is SubtreeSeq of ( Sym (o,X)) by MSATERM:def 2;

        then ( Sym (o,X)) ==> ( roots p) & p is FinSequence of ( TS ( DTConMSA X)) by DTCONSTR:def 6;

        then

         A7: t1 = (( DenOp (o,X)) . p) by MSAFREE:def 12;

        p is Element of ( Args (o,( FreeMSA X))) qua non empty set by INSTALG1: 1;

        then p in ( Args (o,( FreeMSA X)));

        then

         A8: p in ( Args (o,( Free (S,X)))) by MSAFREE3: 31;

        then (( Den (o,( Free (S,X)))) . p) in ((the Sorts of ( Free (S,X)) * the ResultSort of S) . o) & ( dom the ResultSort of S) = the carrier' of S by FUNCT_2: 5, FUNCT_2:def 1;

        then

         A9: (( Den (o,( Free (S,X)))) . p) in (the Sorts of ( Free (S,X)) . ( the_result_sort_of o)) by FUNCT_1: 13;

        (( Den (o,( Free (S,X)))) . p) = t1 by A1, A7, MSAFREE:def 13;

        then (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) by A9, Th43;

        then

         A10: p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p) by A8, Def8;

        

         A11: ( dom the Arity of S) = the carrier' of S by FUNCT_2:def 1;

        

         A12: ( Args (o,( GenMSAlg G))) = cc(#,) by A11, FUNCT_1: 13

        .= ( product (the Sorts of ( GenMSAlg G) * ( the_arity_of o))) by FINSEQ_2:def 5;

        

         A13: ( Args (o,A)) = cc(#,the_arity_of) by A11, FUNCT_1: 13

        .= ( product (the Sorts of A * ( the_arity_of o))) by FINSEQ_2:def 5;

        

         A14: ( dom (the Sorts of ( GenMSAlg G) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PARTFUN1:def 2;

        

         A15: ( dom (the Sorts of A * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PARTFUN1:def 2;

        then

         A16: ( dom p) = ( dom ( the_arity_of o)) by A10, A13, CARD_3: 9;

        now

          let x be object;

          assume

           A17: x in ( dom ( the_arity_of o));

          then

           A18: (p . x) in ( rng p) & (p . x) in ((the Sorts of A * ( the_arity_of o)) . x) by A16, FUNCT_1:def 3, CARD_3: 9, A10, A15, A13;

          (( the_arity_of o) . x) in ( rng ( the_arity_of o)) & ( rng ( the_arity_of o)) c= the carrier of S by A17, FUNCT_1:def 3;

          then

          reconsider s = (( the_arity_of o) . x) as SortSymbol of S;

          reconsider px = (p . x) as Element of (the Sorts of A . s) by A18, A17, FUNCT_1: 13;

          px is Term of S, X by Th42;

          then px in (the Sorts of ( GenMSAlg G) . s) by A18, A6;

          hence (p . x) in ((the Sorts of ( GenMSAlg G) * ( the_arity_of o)) . x) by A17, FUNCT_1: 13;

        end;

        then

        reconsider q = p as Element of ( Args (o,( GenMSAlg G))) by A12, A16, A14, CARD_3: 9;

        reconsider B = the Sorts of ( GenMSAlg G) as ManySortedSubset of the Sorts of A by MSUALG_2:def 9;

        

         A19: B is opers_closed & the Charact of ( GenMSAlg G) = ( Opers (A,B)) by MSUALG_2:def 9;

        

         A20: B is_closed_on o by MSUALG_2:def 6, MSUALG_2:def 9;

        ( Den (o,( GenMSAlg G))) = (o /. B) by A19, MSUALG_2:def 8

        .= (( Den (o,A)) | (((B # ) * the Arity of S) . o)) by A20, MSUALG_2:def 7;

        then

         A21: (( Den (o,( GenMSAlg G))) . p) = (( Den (o,A)) . q) by FUNCT_1: 49;

        

         A22: (( Den (o,( GenMSAlg G))) . q) = ( [o, the carrier of S] -tree p) by A1, A21, A7, A10, MSAFREE:def 13;

        then

         A23: ( [o, the carrier of S] -tree p) in ( Result (o,( GenMSAlg G))) by FUNCT_2: 5;

        ( dom the ResultSort of S) = the carrier' of S by FUNCT_2:def 1;

        then

         A24: ( Result (o,( GenMSAlg G))) = (the Sorts of ( GenMSAlg G) . ( the_result_sort_of o)) & ( Result (o,A)) = (the Sorts of A . ( the_result_sort_of o)) by FUNCT_1: 13;

        t1 in ( Result (o,A)) & t1 in (the Sorts of A . r) by A10, A21, A22, FUNCT_2: 5;

        hence ( [o, the carrier of S] -tree p) in (the Sorts of ( GenMSAlg G) . r) by A23, A24, PROB_2:def 2, XBOOLE_0: 3;

      end;

      

       A25: for t be Term of S, X holds P[t] from MSATERM:sch 1( A2, A5);

      G is GeneratorSet of A

      proof

        now

          the Sorts of ( GenMSAlg G) is ManySortedSubset of the Sorts of A by MSUALG_2:def 9;

          hence the Sorts of ( GenMSAlg G) c= the Sorts of A by PBOOLE:def 18;

          thus the Sorts of A c= the Sorts of ( GenMSAlg G)

          proof

            let x be object;

            assume x in the carrier of S;

            then

            reconsider s = x as SortSymbol of S;

            let y be object;

            assume y in (the Sorts of A . x);

            then

            reconsider y as Element of (the Sorts of A . s);

            the Sorts of A is ManySortedSubset of the Sorts of ( Free (S,X)) by Def6;

            then (the Sorts of A . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

            then y is Element of (the Sorts of ( Free (S,X)) . s);

            then y is Element of ( FreeMSA X) by MSAFREE3: 31;

            then y is Term of S, X by MSAFREE3: 6;

            hence thesis by A25;

          end;

        end;

        hence the Sorts of ( GenMSAlg G) = the Sorts of A by PBOOLE: 146;

      end;

      hence thesis;

    end;

    theorem :: MSAFREE4:46

    for T be free_in_itself non-emptyX, S -terms MSAlgebra over S holds for A be image of T holds for G be GeneratorSet of T st G = ( FreeGen X) holds for f be ManySortedFunction of G, the Sorts of A holds ex h be ManySortedFunction of T, A st h is_homomorphism (T,A) & f = (h || G)

    proof

      let T be free_in_itself non-emptyX, S -terms MSAlgebra over S;

      let A be image of T;

      let G be GeneratorSet of T such that

       A1: G = ( FreeGen X);

      let f be ManySortedFunction of G, the Sorts of A;

      reconsider H = ( FreeGen X) as non-empty GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

      consider j be ManySortedFunction of T, A such that

       A2: j is_epimorphism (T,A) by Def5;

      

       A3: j is_homomorphism (T,A) & j is "onto" by A2;

      consider jj be ManySortedFunction of A, T such that

       A4: (j ** jj) = ( id the Sorts of A) by A3, Th23, Th21;

      consider h be ManySortedFunction of T, T such that

       A5: h is_homomorphism (T,T) & (jj ** f) = (h || G) by A1, Def9;

      take k = (j ** h);

      thus k is_homomorphism (T,A) by A3, A5, MSUALG_3: 10;

      

      thus f = (( id the Sorts of A) ** f) by MSUALG_3: 4

      .= (j ** (jj ** f)) by A4, PBOOLE: 140

      .= (k || G) by A5, EXTENS_1: 4;

    end;

    theorem :: MSAFREE4:47

    

     Th47: ( canonical_homomorphism A2) is_epimorphism (( Free (S,X)),A2) & for s be SortSymbol of S, t be Element of A2, s holds ((( canonical_homomorphism A2) . s) . t) = t

    proof

      set A = A2;

      

       A1: ( FreeMSA X) = ( Free (S,X)) by MSAFREE3: 31;

      reconsider G = ( FreeGen X) as GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

      set f = ( canonical_homomorphism A);

      

       A2: f is_homomorphism (( Free (S,X)),A) & (f || G) = ( id G) by Def10;

      defpred P[ set] means for s be SortSymbol of S st $1 in (the Sorts of A . s) holds ((f . s) . $1) = $1;

      

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

      proof

        let s be SortSymbol of S;

        let v be Element of (X . s);

        reconsider t = ( root-tree [v, s]) as Term of S, X by MSATERM: 4;

        let r be SortSymbol of S;

        assume

         A4: ( root-tree [v, s]) in (the Sorts of A . r);

        the Sorts of A is MSSubset of ( Free (S,X)) by Def6;

        then (the Sorts of A . r) c= (the Sorts of ( Free (S,X)) . r) by PBOOLE:def 2, PBOOLE:def 18;

        then ( root-tree [v, s]) in (( FreeSort X) . r) by A4, A1;

        then ( root-tree [v, s]) in ( FreeSort (X,r)) by MSAFREE:def 11;

        then

         A5: ( the_sort_of t) = r & s = ( the_sort_of t) by MSATERM:def 5, MSATERM: 14;

        ( root-tree [v, s]) in ( FreeGen (s,X)) by MSAFREE:def 15;

        then

         A6: ( root-tree [v, s]) in (( FreeGen X) . s) by MSAFREE:def 16;

        

         A7: (( id ( FreeGen X)) . s) = ( id (( FreeGen X) . s)) by MSUALG_3:def 1;

        (((f . s) | (( FreeGen X) . s)) . ( root-tree [v, s])) = ((f . s) . ( root-tree [v, s])) by A6, FUNCT_1: 49;

        

        then

         A8: ((f . s) . ( root-tree [v, s])) = (( id (( FreeGen X) . s)) . ( root-tree [v, s])) by A2, A7, MSAFREE:def 1

        .= ( root-tree [v, s]) by A6, FUNCT_1: 18;

        thus thesis by A5, A8;

      end;

      

       A9: 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;

        let p be ArgumentSeq of ( Sym (o,X));

        assume

         A10: for t be Term of S, X st t in ( rng p) holds P[t];

        let s be SortSymbol of S;

        assume

         A11: ( [o, the carrier of S] -tree p) in (the Sorts of A . s);

        ( Sym (o,X)) ==> ( roots p) & p is FinSequence of ( TS ( DTConMSA X)) by MSATERM:def 1, MSATERM: 21;

        then

         A12: (( DenOp (o,X)) . p) = (( Sym (o,X)) -tree p) & (( FreeOper X) . o) = ( DenOp (o,X)) by MSAFREE:def 12, MSAFREE:def 13;

        

         A13: p is Element of ( Args (o,( Free (S,X)))) by A1, INSTALG1: 1;

        reconsider t = (( Sym (o,X)) -tree p) as Term of S, X;

        the Sorts of A is MSSubset of ( Free (S,X)) by Def6;

        then

         A14: (the Sorts of A . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

        

         A15: ( the_sort_of t) = ( the_result_sort_of o) & ( FreeSort (X,s)) = (the Sorts of ( Free (S,X)) . s) by A1, MSATERM: 20, MSAFREE:def 11;

        then

         A16: s = ( the_result_sort_of o) by A11, A14, MSATERM:def 5;

        

         A17: (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) by A11, A12, A1, A15, A14, MSATERM:def 5;

        then

         A18: p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p) by A13, Def8;

        reconsider q = p as Element of ( Args (o,A)) by A17, A13, Def8;

        reconsider p0 = p as Element of ( Args (o,( Free (S,X)))) by A1, INSTALG1: 1;

        

         A19: ( dom q) = ( dom ( the_arity_of o)) & ( dom (f # p0)) = ( dom ( the_arity_of o)) & ( Args (o,A)) = ( product (the Sorts of A * ( the_arity_of o))) & ( dom (the Sorts of A * ( the_arity_of o))) = ( dom ( the_arity_of o)) by MSUALG_3: 6, PRALG_2: 3;

        now

          let i be Nat;

          assume

           A20: i in ( dom ( the_arity_of o));

          then

           A21: (( the_arity_of o) /. i) = (( the_arity_of o) . i) & (p0 . i) in ( rng p) by A19, FUNCT_1:def 3, PARTFUN1:def 6;

          

           A22: (p0 . i) in ((the Sorts of A * ( the_arity_of o)) . i) by A19, A20, CARD_3: 9;

          then

           A23: (p0 . i) in (the Sorts of A . (( the_arity_of o) . i)) by A20, FUNCT_1: 13;

          (p0 . i) is Element of (the Sorts of A . (( the_arity_of o) /. i)) by A21, A22, A20, FUNCT_1: 13;

          then (p0 . i) is Term of S, X by Th42;

          hence (q . i) = ((f . (( the_arity_of o) /. i)) . (p0 . i)) by A10, A21, A23;

        end;

        then (f # p0) = q by A19, MSUALG_3: 24;

        hence thesis by A16, A12, A1, A18, Def10, MSUALG_3:def 7;

      end;

      

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

      thus f is_epimorphism (( Free (S,X)),A)

      proof

        thus f is_homomorphism (( Free (S,X)),A) by Def10;

        let x;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        thus ( rng (f . x)) c= (the Sorts of A . x);

        let y be object;

        assume y in (the Sorts of A . x);

        then

        reconsider t = y as Element of (the Sorts of A . s);

        t is Term of S, X by Th42;

        then

         A25: ((f . s) . t) = t by A24;

        the Sorts of A is MSSubset of ( Free (S,X)) by Def6;

        then (the Sorts of A . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

        then t in (the Sorts of ( Free (S,X)) . s) & ( dom (f . s)) = (the Sorts of ( Free (S,X)) . s) by FUNCT_2:def 1;

        hence thesis by A25, FUNCT_1:def 3;

      end;

      let s be SortSymbol of S;

      let t be Element of (the Sorts of A . s);

      t is Term of S, X by Th42;

      hence ((f . s) . t) = t by A24;

    end;

    theorem :: MSAFREE4:48

    

     Th48: (( canonical_homomorphism A2) ** ( canonical_homomorphism A2)) = ( canonical_homomorphism A2)

    proof

      set A = A2;

      set f = ( canonical_homomorphism A);

      now

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        the Sorts of A is MSSubset of ( Free (S,X)) by Def6;

        then the Sorts of A c= the Sorts of ( Free (S,X)) & ( dom (f ** f)) = the carrier of S by PARTFUN1:def 2, PBOOLE:def 18;

        then

         A1: ((f ** f) . s) = ((f . s) * (f . s)) & ( dom (f . s)) = (the Sorts of ( Free (S,X)) . s) & ( rng (f . s)) c= (the Sorts of A . s) & (the Sorts of A . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 19, FUNCT_2:def 1;

        then

         A2: ( dom ((f ** f) . s)) = (the Sorts of ( Free (S,X)) . s) by XBOOLE_1: 1, RELAT_1: 27;

        now

          let y be object;

          assume

           A3: y in (the Sorts of ( Free (S,X)) . s);

          then

           A4: ((f . s) . y) in (the Sorts of A . s) by FUNCT_2: 5;

          

          thus (((f ** f) . s) . y) = ((f . s) . ((f . s) . y)) by A1, A3, FUNCT_1: 13

          .= ((f . s) . y) by A4, Th47;

        end;

        hence ((f ** f) . x) = (f . x) by A1, A2;

      end;

      hence thesis;

    end;

    theorem :: MSAFREE4:49

    A is ( Free (S,X)) -Image

    proof

      now

        take B = A;

        ( FreeGen X) is ManySortedSubset of the Sorts of A by Def7;

        then ( FreeGen X) is free & ( id ( FreeGen X)) is ManySortedFunction of ( FreeGen X), the Sorts of A by Th22;

        then

        consider f be ManySortedFunction of ( FreeMSA X), A such that

         A1: f is_homomorphism (( FreeMSA X),A) & (f || ( FreeGen X)) = ( id ( FreeGen X));

        

         A2: ( Free (S,X)) = ( FreeMSA X) by MSAFREE3: 31;

        reconsider f0 = f as ManySortedFunction of ( Free (S,X)), B by MSAFREE3: 31;

        take f0;

        thus

         A3: f0 is_homomorphism (( Free (S,X)),B) by A1, MSAFREE3: 31;

        reconsider C = the MSAlgebra of B as strict non-empty MSSubAlgebra of A by MSUALG_2: 5;

        the Sorts of C = (f0 .:.: the Sorts of ( Free (S,X)))

        proof

          defpred P[ set] means for s be SortSymbol of S st $1 in (the Sorts of C . s) holds $1 in ((f0 .:.: the Sorts of ( Free (S,X))) . s) & ((f0 . s) . $1) = $1;

          

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

          proof

            let s be SortSymbol of S;

            let v be Element of (X . s);

            reconsider t = ( root-tree [v, s]) as Term of S, X by MSATERM: 4;

            let r be SortSymbol of S;

            assume

             A5: ( root-tree [v, s]) in (the Sorts of C . r);

            the Sorts of C is MSSubset of ( Free (S,X)) by Def6;

            then (the Sorts of C . r) c= (the Sorts of ( Free (S,X)) . r) by PBOOLE:def 2, PBOOLE:def 18;

            then ( root-tree [v, s]) in (( FreeSort X) . r) by A5, A2;

            then ( root-tree [v, s]) in ( FreeSort (X,r)) by MSAFREE:def 11;

            then

             A6: ( the_sort_of t) = r & s = ( the_sort_of t) by MSATERM:def 5, MSATERM: 14;

            ( root-tree [v, s]) in ( FreeGen (s,X)) by MSAFREE:def 15;

            then

             A7: ( root-tree [v, s]) in (( FreeGen X) . s) by MSAFREE:def 16;

            

             A8: ((f0 .:.: the Sorts of ( Free (S,X))) . s) = ((f0 . s) .: (the Sorts of ( Free (S,X)) . s)) by PBOOLE:def 20;

            

             A9: (( id ( FreeGen X)) . s) = ( id (( FreeGen X) . s)) by MSUALG_3:def 1;

            (((f . s) | (( FreeGen X) . s)) . ( root-tree [v, s])) = ((f . s) . ( root-tree [v, s])) by A7, FUNCT_1: 49;

            

            then

             A10: ((f . s) . ( root-tree [v, s])) = (( id (( FreeGen X) . s)) . ( root-tree [v, s])) by A1, A9, MSAFREE:def 1

            .= ( root-tree [v, s]) by A7, FUNCT_1: 18;

            ( FreeGen X) is MSSubset of ( Free (S,X)) by MSAFREE3: 31;

            then (( FreeGen X) . s) c= (the Sorts of ( Free (S,X)) . s) & ( dom (f0 . s)) = (the Sorts of ( Free (S,X)) . s) by FUNCT_2:def 1, PBOOLE:def 2, PBOOLE:def 18;

            hence thesis by A6, A8, A7, A10, FUNCT_1:def 6;

          end;

          

           A11: 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;

            let p be ArgumentSeq of ( Sym (o,X));

            assume

             A12: for t be Term of S, X st t in ( rng p) holds P[t];

            let s be SortSymbol of S;

            assume

             A13: ( [o, the carrier of S] -tree p) in (the Sorts of C . s);

            ( Sym (o,X)) ==> ( roots p) & p is FinSequence of ( TS ( DTConMSA X)) by MSATERM:def 1, MSATERM: 21;

            then

             A14: (( DenOp (o,X)) . p) = (( Sym (o,X)) -tree p) & (( FreeOper X) . o) = ( DenOp (o,X)) by MSAFREE:def 12, MSAFREE:def 13;

            

             A15: p is Element of ( Args (o,( Free (S,X)))) by A2, INSTALG1: 1;

            reconsider t = (( Sym (o,X)) -tree p) as Term of S, X;

            the Sorts of C is MSSubset of ( Free (S,X)) by Def6;

            then

             A16: (the Sorts of C . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

            

             A17: ( the_sort_of t) = ( the_result_sort_of o) & ( FreeSort (X,s)) = (the Sorts of ( Free (S,X)) . s) by A2, MSATERM: 20, MSAFREE:def 11;

            then

             A18: s = ( the_result_sort_of o) by A13, A16, MSATERM:def 5;

            

             A19: (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o)) by A13, A14, A2, A17, A16, MSATERM:def 5;

            then

             A20: p in ( Args (o,A)) & (( Den (o,A)) . p) = (( Den (o,( Free (S,X)))) . p) by A15, Def8;

            reconsider q = p as Element of ( Args (o,A)) by A19, A15, Def8;

            reconsider p0 = p as Element of ( Args (o,( Free (S,X)))) by A2, INSTALG1: 1;

            

             A21: ( dom q) = ( dom ( the_arity_of o)) & ( dom (f0 # p0)) = ( dom ( the_arity_of o)) & ( Args (o,A)) = ( product (the Sorts of A * ( the_arity_of o))) & ( dom (the Sorts of A * ( the_arity_of o))) = ( dom ( the_arity_of o)) by MSUALG_3: 6, PRALG_2: 3;

            now

              let i;

              assume

               A22: i in ( dom ( the_arity_of o));

              then

               A23: (( the_arity_of o) /. i) = (( the_arity_of o) . i) & (p0 . i) in ( rng p) by A21, FUNCT_1:def 3, PARTFUN1:def 6;

              

               A24: (p0 . i) in ((the Sorts of A * ( the_arity_of o)) . i) by A21, A22, CARD_3: 9;

              then

               A25: (p0 . i) in (the Sorts of A . (( the_arity_of o) . i)) by A22, FUNCT_1: 13;

              (p0 . i) is Element of (the Sorts of A . (( the_arity_of o) /. i)) by A23, A24, A22, FUNCT_1: 13;

              then (p0 . i) is Term of S, X by Th42;

              hence (q . i) = ((f0 . (( the_arity_of o) /. i)) . (p0 . i)) by A12, A23, A25;

            end;

            then

             A26: (f0 # p0) = q by A21, MSUALG_3: 24;

            then

             A27: ((f0 . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . p)) = (( Den (o,A)) . p) by A3;

            

             A28: ((f0 .:.: the Sorts of ( Free (S,X))) . s) = ((f0 . s) .: (the Sorts of ( Free (S,X)) . s)) by PBOOLE:def 20;

            ( dom (f0 . s)) = (the Sorts of ( Free (S,X)) . s) & ( [o, the carrier of S] -tree p) in (the Sorts of ( Free (S,X)) . s) & ((f0 . s) . ( [o, the carrier of S] -tree p)) = ( [o, the carrier of S] -tree p) by A14, A2, A16, A27, A18, A13, A15, Def8, FUNCT_2:def 1;

            hence ( [o, the carrier of S] -tree p) in ((f0 .:.: the Sorts of ( Free (S,X))) . s) by A28, FUNCT_1:def 6;

            thus thesis by A18, A14, A2, A20, A26, A1;

          end;

          

           A29: for t be Term of S, X holds P[t] from MSATERM:sch 1( A4, A11);

          now

            thus the Sorts of C c= (f0 .:.: the Sorts of ( Free (S,X)))

            proof

              let x be object;

              assume x in the carrier of S;

              then

              reconsider s = x as SortSymbol of S;

              let y be object;

              assume y in (the Sorts of C . x);

              then

              reconsider t = y as Element of (the Sorts of C . s);

              t is Term of S, X by Th42;

              hence thesis by A29;

            end;

            (f0 .:.: the Sorts of ( Free (S,X))) is ManySortedSubset of the Sorts of C by EQUATION: 7;

            hence (f0 .:.: the Sorts of ( Free (S,X))) c= the Sorts of C by PBOOLE:def 18;

          end;

          hence the Sorts of C = (f0 .:.: the Sorts of ( Free (S,X))) by PBOOLE: 146;

        end;

        hence the MSAlgebra of A = ( Image f0) by A3, MSUALG_3:def 12;

      end;

      hence thesis;

    end;

    begin

    theorem :: MSAFREE4:50

    for A be non-empty MSAlgebra over S holds for s be SortSymbol of S holds for t be Element of ( TermAlg S), s holds A |= (t '=' t);

    theorem :: MSAFREE4:51

    for A be non-empty MSAlgebra over S holds for s be SortSymbol of S holds for t1,t2 be Element of ( TermAlg S), s holds A |= (t1 '=' t2) implies A |= (t2 '=' t1);

    theorem :: MSAFREE4:52

    for A be non-empty MSAlgebra over S holds for s be SortSymbol of S holds for t1,t2,t3 be Element of ( TermAlg S), s holds A |= (t1 '=' t2) & A |= (t2 '=' t3) implies A |= (t1 '=' t3)

    proof

      let A be non-empty MSAlgebra over S;

      let s be SortSymbol of S;

      let t1,t2,t3 be Element of ( TermAlg S), s;

      assume

       A1: A |= (t1 '=' t2) & A |= (t2 '=' t3);

      let h be ManySortedFunction of ( TermAlg S), A such that

       A2: h is_homomorphism (( TermAlg S),A);

      ((h . s) . t1) = ((h . s) . t2) & ((h . s) . t2) = ((h . s) . t3) by A1, A2;

      hence thesis;

    end;

    theorem :: MSAFREE4:53

    for A be non-empty MSAlgebra over S holds for o be OperSymbol of S holds for a1,a2 be FinSequence st a1 in ( Args (o,( TermAlg S))) & a2 in ( Args (o,( TermAlg S))) & for i be Nat st i in ( dom ( the_arity_of o)) holds for s be SortSymbol of S st s = (( the_arity_of o) . i) holds for t1,t2 be Element of ( TermAlg S), s st t1 = (a1 . i) & t2 = (a2 . i) holds A |= (t1 '=' t2) holds for t1,t2 be Element of ( TermAlg S), ( the_result_sort_of o) st t1 = ( [o, the carrier of S] -tree a1) & t2 = ( [o, the carrier of S] -tree a2) holds A |= (t1 '=' t2)

    proof

      let A be non-empty MSAlgebra over S;

      let o be OperSymbol of S;

      let a1,a2 be FinSequence;

      assume

       A1: a1 in ( Args (o,( TermAlg S)));

      assume

       A2: a2 in ( Args (o,( TermAlg S)));

      then

      reconsider b1 = a1, b2 = a2 as Element of ( Args (o,( TermAlg S))) by A1;

      assume

       A3: for i be Nat st i in ( dom ( the_arity_of o)) holds for s be SortSymbol of S st s = (( the_arity_of o) . i) holds for t1,t2 be Element of ( TermAlg S), s st t1 = (a1 . i) & t2 = (a2 . i) holds A |= (t1 '=' t2);

      set s = ( the_result_sort_of o);

      let t1,t2 be Element of ( TermAlg S), s;

      assume

       A4: t1 = ( [o, the carrier of S] -tree a1);

      assume

       A5: t2 = ( [o, the carrier of S] -tree a2);

      let h be ManySortedFunction of ( TermAlg S), A;

      assume

       A6: h is_homomorphism (( TermAlg S),A);

       A7:

      now

        let n be Nat;

        assume

         A8: n in ( dom b1);

        

         A9: ( dom b1) = ( dom ( the_arity_of o)) & ( dom b2) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

        reconsider s = (( the_arity_of o) . n) as SortSymbol of S by A8, A9, FUNCT_1: 102;

        ( dom (the Sorts of ( TermAlg S) * ( the_arity_of o))) = ( dom ( the_arity_of o)) & ((the Sorts of ( TermAlg S) * ( the_arity_of o)) . n) = (the Sorts of ( TermAlg S) . s) by A8, A9, FUNCT_1: 13, PRALG_2: 3;

        then

        reconsider t1 = (a1 . n), t2 = (a2 . n) as Element of ( TermAlg S), s by A8, A9, MSUALG_3: 6;

        ((h . s) . ((t1 '=' t2) `1 )) = ((h . s) . ((t1 '=' t2) `2 )) by A3, A8, A9, A6, EQUATION:def 5;

        

        then

         A10: ((h . s) . t1) = ((h . s) . ((t1 '=' t2) `2 ))

        .= ((h . s) . t2);

        

         A11: s = (( the_arity_of o) /. n) by A8, A9, PARTFUN1:def 6;

        thus ((h # b2) . n) = ((h . (( the_arity_of o) /. n)) . (b1 . n)) by A10, A11, A8, A9, MSUALG_3:def 6;

      end;

      

      thus ((h . s) . ((t1 '=' t2) `1 )) = ((h . s) . (( Den (o,( TermAlg S))) . a1)) by A1, A4, INSTALG1: 3

      .= (( Den (o,A)) . (h # b1)) by A6

      .= (( Den (o,A)) . (h # b2)) by A7, MSUALG_3:def 6

      .= ((h . s) . (( Den (o,( TermAlg S))) . a2)) by A6

      .= ((h . s) . ((t1 '=' t2) `2 )) by A2, A5, INSTALG1: 3;

    end;

    definition

      let S;

      let T be EqualSet of S;

      let A be MSAlgebra over S;

      :: MSAFREE4:def11

      attr A is T -satisfying means

      : Def11: A |= T;

    end

    registration

      let S;

      let T be EqualSet of S;

      cluster T -satisfying non-empty trivial for MSAlgebra over S;

      existence

      proof

        set A = the non-empty trivial MSAlgebra over S;

        take A;

        thus A |= T by Th32;

        thus thesis;

      end;

    end

    registration

      let S;

      let T be EqualSet of S;

      let A be T -satisfying non-empty MSAlgebra over S;

      cluster A -Image -> T -satisfying for non-empty MSAlgebra over S;

      coherence by Def11, Th36;

    end

    definition

      let S;

      let A be MSAlgebra over S;

      let T be EqualSet of S;

      let G be GeneratorSet of A;

      :: MSAFREE4:def12

      attr G is T -free means for B be T -satisfying non-empty MSAlgebra over S holds for f be ManySortedFunction of G, the Sorts of B holds ex h be ManySortedFunction of A, B st h is_homomorphism (A,B) & (h || G) = f;

    end

    definition

      let S;

      let T be EqualSet of S;

      let A be MSAlgebra over S;

      :: MSAFREE4:def13

      attr A is T -free means ex G be GeneratorSet of A st G is T -free;

    end

    definition

      let S;

      let A be MSAlgebra over S;

      :: MSAFREE4:def14

      func Equations (S,A) -> EqualSet of S means

      : Def14: for s be SortSymbol of S holds (it . s) = { e where e be Element of (( Equations S) . s) : A |= e };

      existence

      proof

        deffunc X( SortSymbol of S) = { e where e be Element of (( Equations S) . $1) : A |= e };

        consider f be ManySortedSet of S such that

         A1: for s be SortSymbol of S holds (f . s) = X(s) from PBOOLE:sch 5;

        f is EqualSet of S

        proof

          let x be object;

          assume x in the carrier of S;

          then

          reconsider s = x as SortSymbol of S;

          

           A2: (f . s) = X(s) by A1;

          let y be object;

          assume y in (f . x);

          then ex e be Element of (( Equations S) . s) st y = e & A |= e by A2;

          hence thesis;

        end;

        hence thesis by A1;

      end;

      uniqueness

      proof

        let f1,f2 be EqualSet of S such that

         A3: for s be SortSymbol of S holds (f1 . s) = { e where e be Element of (( Equations S) . s) : A |= e } and

         A4: for s be SortSymbol of S holds (f2 . s) = { e where e be Element of (( Equations S) . s) : A |= e };

        now

          let x be object;

          assume x in the carrier of S;

          then

          reconsider s = x as SortSymbol of S;

          

          thus (f1 . x) = { e where e be Element of (( Equations S) . s) : A |= e } by A3

          .= (f2 . x) by A4;

        end;

        hence thesis;

      end;

    end

    theorem :: MSAFREE4:54

    

     Th54: for A be MSAlgebra over S holds A |= ( Equations (S,A))

    proof

      let A be MSAlgebra over S;

      let s be SortSymbol of S;

      let r be Element of (( Equations S) . s);

      assume r in (( Equations (S,A)) . s);

      then r in { e where e be Element of (( Equations S) . s) : A |= e } by Def14;

      then

      consider e be Element of (( Equations S) . s) such that

       A1: r = e & A |= e;

      thus thesis by A1;

    end;

    registration

      let S;

      let A be non-empty MSAlgebra over S;

      cluster -> ( Equations (S,A)) -satisfying for A -Image MSAlgebra over S;

      coherence

      proof

        let B be A -Image MSAlgebra over S;

        A is ( Equations (S,A)) -satisfying by Th54;

        hence thesis;

      end;

    end

    begin

    scheme :: MSAFREE4:sch3

    TermDefEx { S() -> non empty non void ManySortedSign , X() -> non-empty ManySortedSet of S() , R( set, set) -> set , F( set, set) -> set } :

ex F be ManySortedSet of (S() -Terms X()) st (for s be SortSymbol of S(), x be Element of (X() . s) holds (F . ( root-tree [x, s])) = R(x,s)) & for o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X())) holds (F . (( Sym (o,X())) -tree p)) = F(o,*);

      defpred Q[ DecoratedTree, Function] means ( dom $2) = ( Subtrees $1) & (for s be SortSymbol of S(), x be Element of (X() . s) st ( root-tree [x, s]) in ( Subtrees $1) holds ($2 . ( root-tree [x, s])) = R(x,s)) & for o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X())) st (( Sym (o,X())) -tree p) in ( Subtrees $1) holds ($2 . (( Sym (o,X())) -tree p)) = F(o,*);

      defpred P[ DecoratedTree] means ex f be Function st Q[$1, f];

      

       A1: for t1,t2 be Term of S(), X() holds for f1,f2 be Function st Q[t1, f1] & Q[t2, f2] holds f1 tolerates f2

      proof

        let t1,t2 be Term of S(), X();

        let f1,f2 be Function;

        assume

         A2: Q[t1, f1] & Q[t2, f2];

        let x be object;

        assume x in (( dom f1) /\ ( dom f2));

        then

         A3: x in ( Subtrees t1) & x in ( Subtrees t2) by A2, XBOOLE_0:def 4;

        then

         A4: ex r be Element of ( dom t1) st x = (t1 | r);

        defpred R[ DecoratedTree] means $1 in ( Subtrees t1) & $1 in ( Subtrees t2) implies (f1 . $1) = (f2 . $1);

        

         A5: for s be SortSymbol of S(), v be Element of (X() . s) holds R[( root-tree [v, s])]

        proof

          let s be SortSymbol of S(), x be Element of (X() . s);

          assume

           A6: ( root-tree [x, s]) in ( Subtrees t1) & ( root-tree [x, s]) in ( Subtrees t2);

          then (f1 . ( root-tree [x, s])) = R(x,s) by A2;

          hence thesis by A6, A2;

        end;

        

         A7: 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 R[t] holds R[( [o, the carrier of S()] -tree p)]

        proof

          let o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X())) such that

           A8: for t be Term of S(), X() st t in ( rng p) holds R[t];

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

          assume

           A9: t in ( Subtrees t1) & t in ( Subtrees t2);

          ( rng p) c= ( Subtrees t1)

          proof

            let x be object;

            assume

             A10: x in ( rng p);

            then

            consider y be object such that

             A11: y in ( dom p) & x = (p . y) by FUNCT_1:def 3;

            reconsider y as Nat by A11;

            consider n be Nat such that

             A12: y = (1 + n) by A11, FINSEQ_3: 25, NAT_1: 10;

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

            ( rng p) c= (S() -Terms X()) by FINSEQ_1:def 4;

            then

            reconsider tn = (p . y) as Term of S(), X() by A11, A10;

            reconsider q = {} as Element of ( dom tn) by TREES_1: 22;

            consider r be Element of ( dom t1) such that

             A13: t = (t1 | r) by A9;

            (n + 1) <= ( len p) by A11, A12, FINSEQ_3: 25;

            then n < ( len p) & ( <*n*> ^ q) = <*n*> by NAT_1: 13, FINSEQ_1: 34;

            then (t | <*n*>) = x & <*n*> in ( dom t) by A11, A12, TREES_4:def 4, TREES_4: 11;

            then x in ( Subtrees t) & ( Subtrees t) c= ( Subtrees t1) by A13, TREES_9: 13;

            hence x in ( Subtrees t1);

          end;

          then

           A14: ( dom (f1 * p)) = ( dom p) by A2, RELAT_1: 27;

          ( rng p) c= ( Subtrees t2)

          proof

            let x be object;

            assume

             A15: x in ( rng p);

            then

            consider y be object such that

             A16: y in ( dom p) & x = (p . y) by FUNCT_1:def 3;

            reconsider y as Nat by A16;

            consider n be Nat such that

             A17: y = (1 + n) by A16, FINSEQ_3: 25, NAT_1: 10;

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

            ( rng p) c= (S() -Terms X()) by FINSEQ_1:def 4;

            then

            reconsider tn = (p . y) as Term of S(), X() by A16, A15;

            reconsider q = {} as Element of ( dom tn) by TREES_1: 22;

            consider r be Element of ( dom t2) such that

             A18: t = (t2 | r) by A9;

            (n + 1) <= ( len p) by A16, A17, FINSEQ_3: 25;

            then n < ( len p) & ( <*n*> ^ q) = <*n*> by NAT_1: 13, FINSEQ_1: 34;

            then (t | <*n*>) = x & <*n*> in ( dom t) by A16, A17, TREES_4:def 4, TREES_4: 11;

            then x in ( Subtrees t) & ( Subtrees t) c= ( Subtrees t2) by A18, TREES_9: 13;

            hence x in ( Subtrees t2);

          end;

          then

           A19: ( dom (f2 * p)) = ( dom p) by A2, RELAT_1: 27;

          now

            let x be object;

            assume

             A20: x in ( dom p);

            then

             A21: (p . x) in ( rng p) by FUNCT_1:def 3;

            ( rng p) c= (S() -Terms X()) by FINSEQ_1:def 4;

            then

            reconsider w = (p . x) as Term of S(), X() by A21;

            

             A22: R[w] by A8, A21;

            reconsider y = x as Nat by A20;

            consider n be Nat such that

             A23: y = (1 + n) by A20, FINSEQ_3: 25, NAT_1: 10;

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

            reconsider q = {} as Element of ( dom w) by TREES_1: 22;

            consider r1 be Element of ( dom t1) such that

             A24: t = (t1 | r1) by A9;

            consider r2 be Element of ( dom t2) such that

             A25: t = (t2 | r2) by A9;

            (n + 1) <= ( len p) by A20, A23, FINSEQ_3: 25;

            then n < ( len p) & ( <*n*> ^ q) = <*n*> by NAT_1: 13, FINSEQ_1: 34;

            then (t | <*n*>) = w & <*n*> in ( dom t) by A23, TREES_4:def 4, TREES_4: 11;

            then w in ( Subtrees t) & ( Subtrees t) c= ( Subtrees t2) & ( Subtrees t) c= ( Subtrees t1) by A24, A25, TREES_9: 13;

            

            hence ((f1 * p) . x) = (f2 . w) by A20, A22, FUNCT_1: 13

            .= ((f2 * p) . x) by A20, FUNCT_1: 13;

          end;

          then (f1 * p) = (f2 * p) by A14, A19;

          

          hence (f1 . t) = F(o,*) by A2, A9

          .= (f2 . t) by A2, A9;

        end;

        for t be Term of S(), X() holds R[t] from MSATERM:sch 1( A5, A7);

        hence thesis by A3, A4;

      end;

      

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

      proof

        let s be SortSymbol of S(), x be Element of (X() . s);

        

         A27: ( Subtrees ( root-tree [x, s])) = {( root-tree [x, s])} by Th2;

        take f = ( {( root-tree [x, s])} --> R(x,s));

        thus ( dom f) = ( Subtrees ( root-tree [x, s])) by A27;

        hereby

          let s1 be SortSymbol of S(), x1 be Element of (X() . s1);

          assume

           A28: ( root-tree [x1, s1]) in ( Subtrees ( root-tree [x, s]));

          then ( root-tree [x1, s1]) = ( root-tree [x, s]) by A27, TARSKI:def 1;

          then [x1, s1] = [x, s] by TREES_4: 4;

          then x1 = x & s1 = s by XTUPLE_0: 1;

          hence (f . ( root-tree [x1, s1])) = R(x1,s1) by A27, A28, FUNCOP_1: 7;

        end;

        let o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X()));

        assume (( Sym (o,X())) -tree p) in ( Subtrees ( root-tree [x, s]));

        then (( Sym (o,X())) -tree p) = ( root-tree [x, s]) by A27, TARSKI:def 1;

        then ( Sym (o,X())) = [x, s] by TREES_4: 17;

        then s = the carrier of S() & s in the carrier of S() by XTUPLE_0: 1;

        hence thesis;

      end;

      

       A29: 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

         A30: for t be Term of S(), X() st t in ( rng p) holds P[t];

        defpred W[ object, object] means ex f be Function, t be Term of S(), X() st t = (p . $1) & $2 = f & Q[t, f];

        

         A31: for x be object st x in ( dom p) holds ex y be object st W[x, y]

        proof

          let x be object;

          assume x in ( dom p);

          then

           A32: (p . x) in ( rng p) & ( rng p) c= (S() -Terms X()) by FUNCT_1:def 3, FINSEQ_1:def 4;

          then

          reconsider t = (p . x) as Term of S(), X();

          consider f be Function such that

           A33: Q[t, f] by A30, A32;

          take f, f, t;

          thus thesis by A33;

        end;

        consider g be Function such that

         A34: ( dom g) = ( dom p) & for x be object st x in ( dom p) holds W[x, (g . x)] from CLASSES1:sch 1( A31);

         A35:

        now

          thus ( rng g) is functional

          proof

            let y be object;

            assume y in ( rng g);

            then

            consider x be object such that

             A36: x in ( dom g) & y = (g . x) by FUNCT_1:def 3;

             W[x, y] by A34, A36;

            hence thesis;

          end;

          let x,y be Function;

          assume

           A37: x in ( rng g) & y in ( rng g);

          then

          consider x0 be object such that

           A38: x0 in ( dom g) & x = (g . x0) by FUNCT_1:def 3;

          consider y0 be object such that

           A39: y0 in ( dom g) & y = (g . y0) by A37, FUNCT_1:def 3;

           W[x0, x] & W[y0, y] by A34, A38, A39;

          hence x tolerates y by A1;

        end;

        then

        reconsider f1 = ( union ( rng g)) as Function by PARTFUN1: 78;

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

        set f = (f1 +* ( {t} --> F(o,*)));

        take f;

        defpred S[ object, object] means ex I be set st I = $1 & $2 = ( proj1 I);

        

         A40: for x,y,z be object st S[x, y] & S[x, z] holds y = z;

        consider Y be set such that

         A41: for x be object holds x in Y iff ex y be object st y in ( rng g) & S[y, x] from TARSKI:sch 1( A40);

        

         A42: ( dom f1) = ( union Y)

        proof

          thus ( dom f1) c= ( union Y)

          proof

            let x be object;

            assume x in ( dom f1);

            then [x, (f1 . x)] in f1 by FUNCT_1: 1;

            then

            consider Z be set such that

             A43: [x, (f1 . x)] in Z & Z in ( rng g) by TARSKI:def 4;

            x in ( proj1 Z) & ( proj1 Z) in Y by A43, A41, XTUPLE_0:def 12;

            hence thesis by TARSKI:def 4;

          end;

          let z be object;

          assume z in ( union Y);

          then

          consider Z be set such that

           A44: z in Z & Z in Y by TARSKI:def 4;

          consider y be object such that

           A45: y in ( rng g) & ex I be set st I = y & Z = ( proj1 I) by A44, A41;

          reconsider y as Function by A45, A35;

           [z, (y . z)] in y by A44, A45, FUNCT_1: 1;

          then [z, (y . z)] in f1 by A45, TARSKI:def 4;

          hence thesis by FUNCT_1: 1;

        end;

        

         A46: ( dom f) = (( dom f1) \/ ( dom ( {(( Sym (o,X())) -tree p)} --> F(o,*)))) by FUNCT_4:def 1

        .= (( dom f1) \/ {(( Sym (o,X())) -tree p)});

        ( dom f1) misses ( dom ( {t} --> F(o,*)))

        proof

          set x = the Element of (( dom f1) /\ ( dom ( {t} --> F(o,*))));

          assume (( dom f1) /\ ( dom ( {t} --> F(o,*)))) <> {} ;

          then

           A47: x in ( dom f1) & x in ( dom ( {t} --> F(o,*))) by XBOOLE_0:def 4;

          then [x, (f1 . x)] in f1 by FUNCT_1: 1;

          then

          consider Y be set such that

           A48: [x, (f1 . x)] in Y & Y in ( rng g) by TARSKI:def 4;

          consider y be object such that

           A49: y in ( dom g) & Y = (g . y) by A48, FUNCT_1:def 3;

          

           A50: W[y, Y] by A34, A49;

          then

          reconsider t1 = (p . y) as Term of S(), X();

          x in ( Subtrees t1) & t1 in ( rng p) by A34, A49, A48, A50, XTUPLE_0:def 12, FUNCT_1:def 3;

          then x <> t by Th7;

          hence thesis by A47, TARSKI:def 1;

        end;

        then

         A51: f1 c= f by FUNCT_4: 28, PARTFUN1: 56;

        per cases ;

          suppose

           A52: p = {} ;

          then

           A53: ( Subtrees (( Sym (o,X())) -tree p)) = {(( Sym (o,X())) -tree p)} by Th4;

          ( dom p) = {} by A52;

          then ( rng g) = {} by A34, RELAT_1: 42;

          

          hence ( dom f) = ( {} \/ ( Subtrees t)) by A53, A46, ZFMISC_1: 2

          .= ( Subtrees t);

          hereby

            let s be SortSymbol of S(), x be Element of (X() . s);

            assume ( root-tree [x, s]) in ( Subtrees t);

            then ( root-tree [x, s]) = t by A53, TARSKI:def 1;

            then [x, s] = ( Sym (o,X())) by TREES_4: 17;

            then s = the carrier of S() & s in the carrier of S() by XTUPLE_0: 1;

            hence (f . ( root-tree [x, s])) = R(x,s);

          end;

          let o0 be OperSymbol of S(), p0 be ArgumentSeq of ( Sym (o0,X()));

          assume (( Sym (o0,X())) -tree p0) in ( Subtrees t);

          then

           A54: (( Sym (o0,X())) -tree p0) = t by A53, TARSKI:def 1;

          (( rng p) /\ ( dom f)) c= ( dom f1)

          proof

            let z be object;

            assume z in (( rng p) /\ ( dom f));

            then

             A55: z in ( rng p) & ( rng p) c= (S() -Terms X()) by XBOOLE_0:def 4, FINSEQ_1:def 4;

            then

            reconsider z as Term of S(), X();

            consider y be object such that

             A56: y in ( dom p) & z = (p . y) by A55, FUNCT_1:def 3;

             W[y, (g . y)] by A34, A56;

            then

             A57: z in ( proj1 (g . y)) & (g . y) in ( rng g) by A34, A56, TREES_9: 11, FUNCT_1:def 3;

            then ( proj1 (g . y)) in Y by A41;

            hence thesis by A42, A57, TARSKI:def 4;

          end;

          then

           A58: (f1 * p) = (f * p) by A51, ALGSPEC1: 2;

          ( Sym (o0,X())) = ( Sym (o,X())) & p = p0 by A54, TREES_4: 15;

          then

           A59: p0 = p & o0 = o by XTUPLE_0: 1;

          

           A60: t in {t} by TARSKI:def 1;

          t in ( dom ( {t} --> F(o,*))) by TARSKI:def 1;

          

          hence (f . (( Sym (o0,X())) -tree p0)) = (( {t} --> F(o,*)) . t) by A54, FUNCT_4: 13

          .= F(o0,*) by A58, A59, A60, FUNCOP_1: 7;

        end;

          suppose p <> {} ;

          then

          reconsider p as non empty DTree-yielding FinSequence;

          

           A61: ( union Y) = ( Subtrees ( rng p))

          proof

            thus ( union Y) c= ( Subtrees ( rng p))

            proof

              let z be object;

              assume z in ( union Y);

              then

              consider W be set such that

               A62: z in W & W in Y by TARSKI:def 4;

              consider y be object such that

               A63: y in ( rng g) & S[y, W] by A62, A41;

              consider a be object such that

               A64: a in ( dom g) & y = (g . a) by A63, FUNCT_1:def 3;

              reconsider a as Nat by A34, A64;

              consider f be Function, t be Term of S(), X() such that

               A65: t = (p . a) & y = f & Q[t, f] by A34, A64;

              W = ( Subtrees t) & t in ( rng p) by A34, A63, A64, A65, FUNCT_1:def 3;

              then W c= ( Subtrees ( rng p)) by Th8;

              hence thesis by A62;

            end;

            let z be object;

            assume z in ( Subtrees ( rng p));

            then

            consider t be Element of ( rng p), q be Element of ( dom t) such that

             A66: z = (t | q);

            

             A67: z in ( Subtrees t) by A66;

            consider a be object such that

             A68: a in ( dom p) & t = (p . a) by FUNCT_1:def 3;

            reconsider a as Nat by A68;

            consider f3 be Function, t1 be Term of S(), X() such that

             A69: t1 = (p . a) & (g . a) = f3 & Q[t1, f3] by A68, A34;

            f3 in ( rng g) by A34, A68, A69, FUNCT_1:def 3;

            then ( Subtrees t) in Y by A68, A69, A41;

            hence thesis by A67, TARSKI:def 4;

          end;

          ( dom ( {t} --> F(o,*))) = {t};

          then ( dom f) = (( union Y) \/ {t}) by A42, FUNCT_4:def 1;

          hence ( dom f) = ( Subtrees t) by A61, Th3;

          hereby

            let s be SortSymbol of S(), x be Element of (X() . s);

            assume

             A70: ( root-tree [x, s]) in ( Subtrees t);

            s in the carrier of S();

            then s <> the carrier of S();

            then [x, s] <> ( Sym (o,X())) by XTUPLE_0: 1;

            then

             A71: ( root-tree [x, s]) <> t by TREES_4: 17;

            then ( root-tree [x, s]) nin {t} & ( Subtrees t) = ( {t} \/ ( Subtrees ( rng p))) by Th3, TARSKI:def 1;

            then ( root-tree [x, s]) in ( Subtrees ( rng p)) by A70, XBOOLE_0:def 3;

            then

            consider h be Element of ( rng p), r be Element of ( dom h) such that

             A72: ( root-tree [x, s]) = (h | r);

            h in ( rng p) & ( rng p) c= (S() -Terms X()) by FINSEQ_1:def 4;

            then

            reconsider h as Term of S(), X();

            consider f2 be Function such that

             A73: Q[h, f2] by A30;

            consider a be object such that

             A74: a in ( dom p) & h = (p . a) by FUNCT_1:def 3;

            reconsider a as Nat by A74;

            consider f3 be Function, t1 be Term of S(), X() such that

             A75: t1 = (p . a) & (g . a) = f3 & Q[t1, f3] by A74, A34;

            

             A76: f3 = f2 by A73, A74, A75, A1, PARTFUN1: 55;

            

             A77: ( root-tree [x, s]) in ( Subtrees h) by A72;

            then (f2 . ( root-tree [x, s])) = R(x,s) by A73;

            then [( root-tree [x, s]), R(x,s)] in f2 & f2 in ( rng g) by A77, A74, A75, A76, A34, FUNCT_1: 1, FUNCT_1:def 3;

            then [( root-tree [x, s]), R(x,s)] in f1 by TARSKI:def 4;

            then (f1 . ( root-tree [x, s])) = R(x,s) & ( root-tree [x, s]) nin ( dom ( {t} --> F(o,*))) by A71, TARSKI:def 1, FUNCT_1: 1;

            hence (f . ( root-tree [x, s])) = R(x,s) by FUNCT_4: 11;

          end;

          let o1 be OperSymbol of S(), p1 be ArgumentSeq of ( Sym (o1,X()));

          set t1 = (( Sym (o1,X())) -tree p1);

          assume (( Sym (o1,X())) -tree p1) in ( Subtrees t);

          then

           A78: (( Sym (o1,X())) -tree p1) in ( {t} \/ ( Subtrees ( rng p))) by Th3;

          ( rng p) c= ( Subtrees ( rng p)) & (( rng p) /\ ( dom f)) c= ( rng p) by Th9, XBOOLE_1: 17;

          then (( rng p) /\ ( dom f)) c= ( dom f1) by A42, A61;

          then

           A79: (f1 * p) = (f * p) by A51, ALGSPEC1: 2;

          per cases by A78, A61, XBOOLE_0:def 3;

            suppose

             A80: t1 in {t};

            then t1 = t by TARSKI:def 1;

            then

             A81: ( Sym (o,X())) = ( Sym (o1,X())) & p = p1 by TREES_4: 15;

            ( dom ( {t} --> F(o,*))) = {t};

            

            then (f . t1) = (( {t} --> F(o,*)) . t1) by A80, FUNCT_4: 13

            .= F(o,*) by A80, FUNCOP_1: 7;

            hence (f . (( Sym (o1,X())) -tree p1)) = F(o1,*) by A81, A79, XTUPLE_0: 1;

          end;

            suppose t1 in ( union Y);

            then

            consider W be set such that

             A82: t1 in W & W in Y by TARSKI:def 4;

            consider y be object such that

             A83: y in ( rng g) & S[y, W] by A41, A82;

            consider z be object such that

             A84: z in ( dom g) & y = (g . z) by A83, FUNCT_1:def 3;

            reconsider z as Nat by A34, A84;

            consider f2 be Function, t2 be Term of S(), X() such that

             A85: t2 = (p . z) & y = f2 & Q[t2, f2] by A34, A84;

            

             A86: (f2 . t1) = F(o1,*) by A85, A82, A83;

            

             A87: ( rng p1) c= ( Subtrees t1) & (( rng p1) /\ ( dom f)) c= ( rng p1) by XBOOLE_1: 17, Th11;

            ( Subtrees t1) c= ( Subtrees t2) by A82, A83, A85, Th12;

            then

             A88: ( rng p1) c= ( dom f2) by A87, A85;

            f2 c= f1 by A83, A85, ZFMISC_1: 74;

            then

             A89: (( rng p1) /\ ( dom f)) c= ( dom f2) & f2 c= f by A51, A87, A88;

            

            thus (f . (( Sym (o1,X())) -tree p1)) = (f2 . t1) by A82, A83, A89, A85, FOMODEL0: 51

            .= F(o1,*) by A86, A89, ALGSPEC1: 2;

          end;

        end;

      end;

      

       A90: for t be Term of S(), X() holds P[t] from MSATERM:sch 1( A26, A29);

      defpred G[ object, object] means ex t be Term of S(), X(), f be Function st t = $1 & f = $2 & Q[t, f];

      

       A91: for x be object st x in (S() -Terms X()) holds ex y be object st G[x, y]

      proof

        let x be object;

        assume x in (S() -Terms X());

        then

        reconsider t = x as Term of S(), X();

         P[t] by A90;

        hence thesis;

      end;

      consider F be Function such that

       A92: ( dom F) = (S() -Terms X()) & for x be object st x in (S() -Terms X()) holds G[x, (F . x)] from CLASSES1:sch 1( A91);

      ( rng F) is functional compatible

      proof

        thus ( rng F) is functional

        proof

          let x be object;

          assume x in ( rng F);

          then

          consider x0 be object such that

           A93: x0 in ( dom F) & x = (F . x0) by FUNCT_1:def 3;

           G[x0, x] by A92, A93;

          hence thesis;

        end;

        let h1,h2 be Function;

        assume

         A94: h1 in ( rng F) & h2 in ( rng F);

        then

        consider x0 be object such that

         A95: x0 in ( dom F) & h1 = (F . x0) by FUNCT_1:def 3;

        consider y0 be object such that

         A96: y0 in ( dom F) & h2 = (F . y0) by A94, FUNCT_1:def 3;

         G[x0, h1] & G[y0, h2] by A92, A95, A96;

        hence h1 tolerates h2 by A1;

      end;

      then

      reconsider rF = ( rng F) as non empty functional compatible set by A92, RELAT_1: 42;

      reconsider f = ( union rF) as Function;

      ( dom f) = (S() -Terms X())

      proof

        

         A97: ( dom f) = ( union the set of all ( dom h) where h be Element of rF) by COMPUT_1: 12;

        thus ( dom f) c= (S() -Terms X())

        proof

          let x be object;

          assume x in ( dom f);

          then

          consider W be set such that

           A98: x in W & W in the set of all ( dom h) where h be Element of rF by A97, TARSKI:def 4;

          consider h be Element of rF such that

           A99: W = ( dom h) by A98;

          consider x0 be object such that

           A100: x0 in ( dom F) & h = (F . x0) by FUNCT_1:def 3;

          reconsider x0 as Term of S(), X() by A92, A100;

           G[x0, h] by A92, A100;

          then x is Term of S(), X() by A98, A99, Th10;

          hence thesis;

        end;

        let x be object;

        assume x in (S() -Terms X());

        then

        reconsider x as Term of S(), X();

        consider t be Term of S(), X(), h be Function such that

         A101: t = x & h = (F . x) & Q[t, h] by A92;

        reconsider h as Element of rF by A92, A101, FUNCT_1:def 3;

        x in ( dom h) & ( dom h) in the set of all ( dom g) where g be Element of rF by A101, TREES_9: 11;

        hence thesis by A97, TARSKI:def 4;

      end;

      then

      reconsider f as ManySortedSet of (S() -Terms X()) by PARTFUN1:def 2, RELAT_1:def 18;

      take f;

      hereby

        let s be SortSymbol of S(), x be Element of (X() . s);

        reconsider t = ( root-tree [x, s]) as Term of S(), X() by MSATERM: 4;

         G[t, (F . t)] by A92;

        then

        consider g be Function such that

         A102: g = (F . t) & Q[t, g];

        g in rF by A92, A102, FUNCT_1:def 3;

        then

         A103: g c= f by ZFMISC_1: 74;

        t in ( dom g) by A102, TREES_9: 11;

        

        hence (f . ( root-tree [x, s])) = (g . t) by A103, FOMODEL0: 51

        .= R(x,s) by A102, TREES_9: 11;

      end;

      let o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X()));

      reconsider t = (( Sym (o,X())) -tree p) as Term of S(), X();

       G[t, (F . t)] by A92;

      then

      consider g be Function such that

       A104: g = (F . t) & Q[t, g];

      

       A105: g in rF by A92, A104, FUNCT_1:def 3;

      then

       A106: g c= f by ZFMISC_1: 74;

      

       A107: t in ( dom g) by A104, TREES_9: 11;

      ( rng p) c= ( Subtrees t) & (( rng p) /\ ( dom f)) c= ( rng p) by Th11, XBOOLE_1: 17;

      then (( rng p) /\ ( dom f)) c= ( dom g) by A104;

      then

       A108: (g * p) = (f * p) by A105, ZFMISC_1: 74, ALGSPEC1: 2;

      

      thus (f . (( Sym (o,X())) -tree p)) = (g . t) by A106, A107, FOMODEL0: 51

      .= F(o,*) by A104, TREES_9: 11, A108;

    end;

    scheme :: MSAFREE4:sch4

    TermDefUniq { S() -> non empty non void ManySortedSign , X() -> non-empty ManySortedSet of S() , R( set, set) -> set , F( set, FinSequence) -> set , F1,F2() -> ManySortedSet of (S() -Terms X()) } :

F1() = F2()

      provided

       A1: (for s be SortSymbol of S(), x be Element of (X() . s) holds (F1() . ( root-tree [x, s])) = R(x,s))

       and

       A2: for o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X())) holds (F1() . (( Sym (o,X())) -tree p)) = F(o,*)

       and

       A3: (for s be SortSymbol of S(), x be Element of (X() . s) holds (F2() . ( root-tree [x, s])) = R(x,s))

       and

       A4: for o be OperSymbol of S(), p be ArgumentSeq of ( Sym (o,X())) holds (F2() . (( Sym (o,X())) -tree p)) = F(o,*);

      defpred P[ object] means (F1() . $1) = (F2() . $1);

      

       A5: for s be SortSymbol of S(), x be Element of (X() . s) holds P[( root-tree [x, s])]

      proof

        let s be SortSymbol of S();

        let x be Element of (X() . s);

        

        thus (F1() . ( root-tree [x, s])) = R(x,s) by A1

        .= (F2() . ( root-tree [x, s])) by A3;

      end;

      

       A6: 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();

        let p be ArgumentSeq of ( Sym (o,X()));

        assume

         A7: for t be Term of S(), X() st t in ( rng p) holds P[t];

        

         A8: ( dom (F1() * p)) = ( dom p) & ( dom (F2() * p)) = ( dom p) by PARTFUN1:def 2;

        now

          let x be object;

          assume

           A9: x in ( dom p);

          then

          reconsider i = x as Element of NAT ;

          reconsider t = (p . i) as Term of S(), X() by A9, MSATERM: 22;

          t in ( rng p) by A9, FUNCT_1:def 3;

          then P[t] by A7;

          

          hence ((F1() * p) . x) = (F2() . t) by A9, FUNCT_1: 13

          .= ((F2() * p) . x) by A9, FUNCT_1: 13;

        end;

        then (F1() * p) = (F2() * p) by A8;

        

        hence (F1() . ( [o, the carrier of S()] -tree p)) = F(o,*) by A2

        .= (F2() . ( [o, the carrier of S()] -tree p)) by A4;

      end;

      

       A10: for t be Term of S(), X() holds P[t] from MSATERM:sch 1( A5, A6);

      for x be object st x in (S() -Terms X()) holds P[x] by A10;

      hence thesis;

    end;

    definition

      let S, X;

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      let t be Function;

      deffunc R( set, set) = ( root-tree [((w . $2) . $1), $2]);

      deffunc F( OperSymbol of S, FinSequence) = (( Sym ($1,(the carrier of S --> NAT ))) -tree $2);

      :: MSAFREE4:def15

      func # (t,w) -> Element of ( TermAlg S) means

      : Def15: ex F be ManySortedSet of (S -Terms X) st it = (F . t) & (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p));

      existence

      proof

        consider F be ManySortedSet of (S -Terms X) such that

         A2: for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = R(x,s) and

         A3: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = F(o,*) from TermDefEx;

        set Y = (the carrier of S --> NAT );

        defpred P[ set] means ex t be Term of S, Y, q be Term of S, X st t = (F . $1) & q = $1 & ( the_sort_of t) = ( the_sort_of q);

         A4:

        now

          let s be SortSymbol of S;

          let x be Element of (X . s);

          

           A5: ((w . s) . x) in NAT & (F . ( root-tree [x, s])) = R(x,s) by A2;

          then

          reconsider t = (F . ( root-tree [x, s])) as Term of S, Y by MSATERM: 4;

          reconsider q = ( root-tree [x, s]) as Term of S, X by MSATERM: 4;

          thus P[( root-tree [x, s])]

          proof

            take t, q;

            ( the_sort_of t) = s by A5, MSATERM: 14;

            hence thesis by MSATERM: 14;

          end;

        end;

         A6:

        now

          let o be OperSymbol of S;

          let p be ArgumentSeq of ( Sym (o,X));

          assume

           A7: for t be Term of S, X st t in ( rng p) holds P[t];

          

           A8: ( dom (F * p)) = ( dom p) & ( dom p) = ( dom ( the_arity_of o)) by MSATERM: 22, PARTFUN1:def 2;

          now

            let i be Nat;

            assume

             A9: i in ( dom p);

            then

            reconsider q = (p . i) as Term of S, X by PARTFUN1: 4;

            

             A10: ((F * p) . i) = (F . (p . i)) & (p . i) in ( rng p) & (p . i) in (S -Terms X) by A9, FUNCT_1:def 3, FUNCT_1: 13, PARTFUN1: 4;

            then

             A11: P[(p . i)] by A7;

            then

            reconsider t = ((F * p) . i) as Term of S, Y by A9, FUNCT_1: 13;

            reconsider q = (p . i) as Term of S, X by A9, PARTFUN1: 4;

            take t;

            thus t = ((F * p) . i);

            thus ( the_sort_of t) = (( the_arity_of o) . i) by A9, A10, A11, MSATERM: 23;

          end;

          then

          reconsider Fp = (F * p) as ArgumentSeq of ( Sym (o,Y)) by A8, MSATERM: 24;

          reconsider q = (( Sym (o,X)) -tree p) as Term of S, X;

          reconsider t = (( Sym (o,Y)) -tree Fp) as Term of S, Y;

          thus P[( [o, the carrier of S] -tree p)]

          proof

            take t, q;

            thus t = (F . ( [o, the carrier of S] -tree p)) & q = ( [o, the carrier of S] -tree p) by A3;

            

             A12: (q . {} ) = ( Sym (o,X)) by TREES_4:def 4;

            (t . {} ) = ( Sym (o,Y)) by TREES_4:def 4;

            

            hence ( the_sort_of t) = ( the_result_sort_of o) by MSATERM: 17

            .= ( the_sort_of q) by A12, MSATERM: 17;

          end;

        end;

        

         A13: for t be Term of S, X holds P[t] from MSATERM:sch 1( A4, A6);

        t is Term of S, X by A1, Th42;

        then

        consider tt be Term of S, Y, q be Term of S, X such that

         A14: tt = (F . t) & q = t & ( the_sort_of tt) = ( the_sort_of q) by A13;

        reconsider Ft = (F . t) as Element of ( TermAlg S) by A14, MSATERM: 13;

        take Ft, F;

        thus thesis by A2, A3;

      end;

      uniqueness

      proof

        let t1,t2 be Element of ( TermAlg S);

        given F1 be ManySortedSet of (S -Terms X) such that

         A15: t1 = (F1 . t) and

         A16: (for s be SortSymbol of S, x be Element of (X . s) holds (F1 . ( root-tree [x, s])) = R(x,s)) and

         A17: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F1 . (( Sym (o,X)) -tree p)) = F(o,*);

        given F2 be ManySortedSet of (S -Terms X) such that

         A18: t2 = (F2 . t) and

         A19: (for s be SortSymbol of S, x be Element of (X . s) holds (F2 . ( root-tree [x, s])) = R(x,s)) and

         A20: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F2 . (( Sym (o,X)) -tree p)) = F(o,*);

        F1 = F2 from TermDefUniq( A16, A17, A19, A20);

        hence thesis by A15, A18;

      end;

    end

    theorem :: MSAFREE4:55

    

     Th55: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds for F be ManySortedSet of (S -Terms X) st (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) holds for t be Element of ( Free (S,X)) holds (F . t) = ( # (t,w))

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      deffunc R( set, set) = ( root-tree [((w . $2) . $1), $2]);

      deffunc F( OperSymbol of S, FinSequence) = (( Sym ($1,(the carrier of S --> NAT ))) -tree $2);

      let F be ManySortedSet of (S -Terms X) such that

       A1: (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = R(x,s)) and

       A2: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = F(o,*);

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

      consider G be ManySortedSet of (S -Terms X) such that

       A3: ( # (t,w)) = (G . t) and

       A4: (for s be SortSymbol of S, x be Element of (X . s) holds (G . ( root-tree [x, s])) = R(x,s)) and

       A5: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (G . (( Sym (o,X)) -tree p)) = F(o,*) by Def15;

      F = G from TermDefUniq( A1, A2, A4, A5);

      hence (F . t) = ( # (t,w)) by A3;

    end;

    registration

      let S, X;

      let G be non-empty MSSubset of ( Free (S,X));

      let s be SortSymbol of S;

      cluster -> Relation-like Function-like for Element of (G . s);

      coherence

      proof

        let x be Element of (G . s);

        (G . s) c= (the Sorts of ( Free (S,X)) . s) & x in (G . s) by PBOOLE:def 2, PBOOLE:def 18;

        hence thesis;

      end;

    end

    theorem :: MSAFREE4:56

    

     Th56: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds ex h be ManySortedFunction of ( Free (S,X)), ( TermAlg S) st h is_homomorphism (( Free (S,X)),( TermAlg S)) & for s be SortSymbol of S, t be Element of ( Free (S,X)), s holds ( # (t,w)) = ((h . s) . t)

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      

       A1: ( TermAlg S) = ( Free (S,(the carrier of S --> NAT ))) by MSAFREE3: 31;

      reconsider G = ( FreeGen X) as non-empty GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

      deffunc F( SortSymbol of S, Element of (G . $1)) = ( root-tree [((w . $1) . (($2 . {} ) `1 )), $1]);

      

       A2: for s be SortSymbol of S, x be Element of (G . s) holds F(s,x) in (the Sorts of ( TermAlg S) . s)

      proof

        let s be SortSymbol of S, x be Element of (G . s);

        (G . s) = ( FreeGen (s,X)) by MSAFREE:def 16;

        then

        consider y such that

         A3: y in (X . s) & x = ( root-tree [y, s]) by MSAFREE:def 15;

        (x . {} ) = [y, s] by A3, TREES_4: 3;

        then

        reconsider x1 = ((x . {} ) `1 ) as Element of (X . s) by A3;

        

         A4: ((w . s) . x1) in ((the carrier of S --> NAT ) . s);

        then

        reconsider t = F(s,x) as Term of S, (the carrier of S --> NAT ) by MSATERM: 4;

        t in ( FreeSort ((the carrier of S --> NAT ),( the_sort_of t))) by MSATERM:def 5;

        then t in ( FreeSort ((the carrier of S --> NAT ),s)) by A4;

        hence thesis by MSAFREE:def 11;

      end;

      consider f be ManySortedFunction of G, the Sorts of ( TermAlg S) such that

       A5: for s be SortSymbol of S holds for x be Element of (G . s) holds ((f . s) . x) = F(s,x) from Sch2( A2);

      ( FreeGen X) is free & ( FreeMSA X) = ( Free (S,X)) by MSAFREE3: 31;

      then

      consider h be ManySortedFunction of ( Free (S,X)), ( TermAlg S) such that

       A6: h is_homomorphism (( Free (S,X)),( TermAlg S)) & (h || G) = f;

      set t = the Element of ( Free (S,X));

      consider F be ManySortedSet of (S -Terms X) such that

       A7: ( # (t,w)) = (F . t) & (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) by Def15;

      take h;

      thus h is_homomorphism (( Free (S,X)),( TermAlg S)) by A6;

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

      defpred P[ DecoratedTree] means for s be SortSymbol of S st $1 in (the Sorts of ( Free (S,X)) . s) holds ( # ($1,w)) = ((h . s) . $1);

      

       A8: for s be SortSymbol of S, x be Element of (X . s) holds P[( root-tree [x, s])]

      proof

        let s be SortSymbol of S, x be Element of (X . s);

        reconsider t = ( root-tree [x, s]) as Term of S, X by MSATERM: 4;

        let s1 be SortSymbol of S;

        assume ( root-tree [x, s]) in (the Sorts of ( Free (S,X)) . s1);

        then t in (the Sorts of ( FreeMSA X) . s1) by MSAFREE3: 31;

        then s = ( the_sort_of t) & t in ( FreeSort (X,s1)) by MSAFREE:def 11, MSATERM: 14;

        then

         A9: s = s1 by MSATERM:def 5;

        t in ( FreeGen (s,X)) by MSAFREE:def 15;

        then

        reconsider q = t as Element of (G . s) by MSAFREE:def 16;

        t is Element of ( FreeMSA X) by MSATERM: 13;

        then t is Element of ( Free (S,X)) by MSAFREE3: 31;

        

        hence ( # (( root-tree [x, s]),w)) = (F . t) by A7, Th55

        .= ( root-tree [((w . s) . x), s]) by A7

        .= ( root-tree [((w . s) . ( [x, s] `1 )), s])

        .= F(s,q) by TREES_4: 3

        .= ((f . s) . t) by A5

        .= (((h . s) | (G . s)) . q) by A6, MSAFREE:def 1

        .= ((h . s1) . ( root-tree [x, s])) by A9, FUNCT_1: 49;

      end;

      

       A10: 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;

        let p be ArgumentSeq of ( Sym (o,X)) such that

         A11: for t be Term of S, X st t in ( rng p) holds P[t];

        let s be SortSymbol of S;

        reconsider t = (( Sym (o,X)) -tree p) as Term of S, X;

        assume ( [o, the carrier of S] -tree p) in (the Sorts of ( Free (S,X)) . s);

        then t in (the Sorts of ( FreeMSA X) . s) by MSAFREE3: 31;

        then t in ( FreeSort (X,s)) by MSAFREE:def 11;

        then ( the_sort_of t) = s & (t . {} ) = ( Sym (o,X)) by TREES_4:def 4, MSATERM:def 5;

        then

         A12: s = ( the_result_sort_of o) by MSATERM: 17;

        ( FreeMSA X) = ( Free (S,X)) by MSAFREE3: 31;

        then

        reconsider q = p as Element of ( Args (o,( Free (S,X)))) by INSTALG1: 1;

        ( rng p) c= ( dom F)

        proof

          let y be object;

          assume y in ( rng p);

          then

          consider x be object such that

           A13: x in ( dom p) & y = (p . x) by FUNCT_1:def 3;

          reconsider x as Nat by A13;

          (p . x) is Term of S, X & ( dom F) = (S -Terms X) by A13, MSATERM: 22, PARTFUN1:def 2;

          hence thesis by A13;

        end;

        then

         A14: ( dom (F * p)) = ( dom p) & ( dom (h # q)) = ( dom ( the_arity_of o)) & ( dom q) = ( dom ( the_arity_of o)) by RELAT_1: 27, MSUALG_3: 6;

        now

          let x be object;

          assume

           A15: x in ( dom p);

          then

          reconsider i = x as Nat;

          reconsider t = (p . i) as Term of S, X by A15, MSATERM: 22;

          t is Element of ( FreeMSA X) by MSATERM: 13;

          then

          reconsider u = t as Element of ( Free (S,X)) by MSAFREE3: 31;

          reconsider s = (( the_arity_of o) /. i) as SortSymbol of S;

          

           A16: t in ( rng p) by A15, FUNCT_1:def 3;

          ( the_sort_of t) = s by A15, MSATERM: 23;

          then t in ( FreeSort (X,s)) by MSATERM:def 5;

          then t in (the Sorts of ( FreeMSA X) . s) by MSAFREE:def 11;

          then

           A17: t in (the Sorts of ( Free (S,X)) . s) by MSAFREE3: 31;

          

          thus ((F * p) . x) = (F . t) by A15, FUNCT_1: 13

          .= ( # (u,w)) by A7, Th55

          .= ((h . s) . u) by A11, A16, A17

          .= ((h # q) . x) by A15, MSUALG_3:def 6;

        end;

        then

         A18: (F * p) = (h # q) by A14;

        t is Element of ( FreeMSA X) by MSATERM: 13;

        then t is Element of ( Free (S,X)) by MSAFREE3: 31;

        

        hence ( # (( [o, the carrier of S] -tree p),w)) = (F . t) by Th55, A7

        .= (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) by A7

        .= (( Den (o,( Free (S,(the carrier of S --> NAT ))))) . (h # q)) by A18, A1, Th13

        .= ((h . s) . (( Den (o,( Free (S,X)))) . q)) by A1, A6, A12

        .= ((h . s) . ( [o, the carrier of S] -tree p)) by Th13;

      end;

      

       A19: for t be Term of S, X holds P[t] from MSATERM:sch 1( A8, A10);

      t is Element of (the Sorts of ( Free (S,X)) . s);

      then t is Element of ( FreeMSA X) by MSAFREE3: 31;

      then t is Term of S, X by MSATERM: 13;

      hence ( # (t,w)) = ((h . s) . t) by A19;

    end;

    theorem :: MSAFREE4:57

    

     Th57: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds for s be SortSymbol of S, x be Element of (X . s) holds ( # (( root-tree [x, s]),w)) = ( root-tree [((w . s) . x), s])

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      let s be SortSymbol of S, x be Element of (X . s);

      reconsider t = ( root-tree [x, s]) as Term of S, X by MSATERM: 4;

      deffunc R( set, set) = ( root-tree [((w . $2) . $1), $2]);

      deffunc F( OperSymbol of S, FinSequence) = (( Sym ($1,(the carrier of S --> NAT ))) -tree $2);

      (S -Terms X) = ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13;

      then t is Element of ( Free (S,X)) by MSAFREE3: 31;

      then

      consider G be ManySortedSet of (S -Terms X) such that

       A1: ( # (t,w)) = (G . t) and

       A2: (for s be SortSymbol of S, x be Element of (X . s) holds (G . ( root-tree [x, s])) = R(x,s)) and for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (G . (( Sym (o,X)) -tree p)) = F(o,*) by Def15;

      thus ( # (( root-tree [x, s]),w)) = ( root-tree [((w . s) . x), s]) by A1, A2;

    end;

    theorem :: MSAFREE4:58

    

     Th58: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds for q be FinSequence st ( dom q) = ( dom p) & for i be Nat, t be Element of ( Free (S,X)) st i in ( dom p) & t = (p . i) holds (q . i) = ( # (t,w)) holds ( # ((( Sym (o,X)) -tree p),w)) = (( Sym (o,(the carrier of S --> NAT ))) -tree q)

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      let o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X));

      let q be FinSequence such that

       A1: ( dom q) = ( dom p) and

       A2: for i be Nat, t be Element of ( Free (S,X)) st i in ( dom p) & t = (p . i) holds (q . i) = ( # (t,w));

      reconsider t = (( Sym (o,X)) -tree p) as Term of S, X;

      deffunc R( set, set) = ( root-tree [((w . $2) . $1), $2]);

      deffunc F( OperSymbol of S, FinSequence) = (( Sym ($1,(the carrier of S --> NAT ))) -tree $2);

      

       A3: (S -Terms X) = ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13;

      then t is Element of ( Free (S,X)) by MSAFREE3: 31;

      then

      consider G be ManySortedSet of (S -Terms X) such that

       A4: ( # (t,w)) = (G . t) and

       A5: (for s be SortSymbol of S, x be Element of (X . s) holds (G . ( root-tree [x, s])) = R(x,s)) and

       A6: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (G . (( Sym (o,X)) -tree p)) = F(o,*) by Def15;

      ( rng p) c= ( dom G)

      proof

        let y be object;

        assume y in ( rng p);

        then

        consider x be object such that

         A7: x in ( dom p) & y = (p . x) by FUNCT_1:def 3;

        reconsider x as Nat by A7;

        y is Term of S, X by A7, MSATERM: 22;

        then y in (S -Terms X);

        hence thesis by PARTFUN1:def 2;

      end;

      then

       A8: ( dom (G * p)) = ( dom p) by RELAT_1: 27;

      now

        let x be object;

        assume

         A9: x in ( dom p);

        then

        reconsider i = x as Nat;

        reconsider t = (p . i) as Term of S, X by A9, MSATERM: 22;

        reconsider t as Element of ( Free (S,X)) by A3, MSAFREE3: 31;

        

        thus (q . x) = ( # (t,w)) by A2, A9

        .= (G . t) by A5, A6, Th55

        .= ((G * p) . x) by A9, FUNCT_1: 13;

      end;

      then q = (G * p) by A1, A8;

      hence ( # ((( Sym (o,X)) -tree p),w)) = (( Sym (o,(the carrier of S --> NAT ))) -tree q) by A4, A6;

    end;

    theorem :: MSAFREE4:59

    

     Th59: for Y be ManySortedSubset of X holds ( Free (S,Y)) is MSSubAlgebra of ( Free (S,X))

    proof

      let Y be ManySortedSubset of X;

      thus

       A1: the Sorts of ( Free (S,Y)) c= the Sorts of ( Free (S,X))

      proof

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        let z be object;

        assume

         A2: z in (the Sorts of ( Free (S,Y)) . x);

        then

        reconsider t = z as Element of (the Sorts of ( Free (S,Y)) . x);

        

         A3: t in ((S -Terms (Y,(Y (\/) (the carrier of S --> { 0 })))) . s) by A2, MSAFREE3: 24;

        then

        reconsider t1 = t as Term of S, (Y (\/) (the carrier of S --> { 0 })) by MSAFREE3: 16;

        

         A4: t = t1 & ( the_sort_of t1) = x & ( variables_in t1) c= Y by A3, MSAFREE3: 17;

        

         A5: Y c= X by PBOOLE:def 18;

        (Y (\/) (the carrier of S --> { 0 })) c= (X (\/) (the carrier of S --> { 0 })) by PBOOLE: 18, PBOOLE:def 18;

        then

        reconsider t2 = t1 as Term of S, (X (\/) (the carrier of S --> { 0 })) by MSATERM: 26;

        ( variables_in t2) = (S variables_in t2) by MSAFREE3:def 4

        .= ( variables_in t1) by MSAFREE3:def 4;

        then ( variables_in t2) c= X & ( the_sort_of t2) = ( the_sort_of t1) by A4, A5, PBOOLE: 13, MSAFREE3: 29;

        then t2 in { t3 where t3 be Term of S, (X (\/) (the carrier of S --> { 0 })) : ( the_sort_of t3) = s & ( variables_in t3) c= X } by A4;

        then t2 in ((S -Terms (X,(X (\/) (the carrier of S --> { 0 })))) . s) by MSAFREE3:def 5;

        hence z in (the Sorts of ( Free (S,X)) . x) by MSAFREE3: 24;

      end;

      let B be MSSubset of ( Free (S,X));

      assume

       A6: B = the Sorts of ( Free (S,Y));

      consider A1 be MSSubset of ( FreeMSA (Y (\/) (the carrier of S --> { 0 }))) such that

       A7: ( Free (S,Y)) = ( GenMSAlg A1) & A1 = (( Reverse (Y (\/) (the carrier of S --> { 0 }))) "" Y) by MSAFREE3:def 1;

      thus

       A8: B is opers_closed

      proof

        let o be OperSymbol of S;

        let z be object;

        assume z in ( rng (( Den (o,( Free (S,X)))) | (((B # ) * the Arity of S) . o)));

        then

        consider a be object such that

         A9: a in ( dom (( Den (o,( Free (S,X)))) | (((B # ) * the Arity of S) . o))) & z = ((( Den (o,( Free (S,X)))) | (((B # ) * the Arity of S) . o)) . a) by FUNCT_1:def 3;

        

         A10: a in (( dom ( Den (o,( Free (S,X))))) /\ (((B # ) * the Arity of S) . o)) by A9, RELAT_1: 61;

        then

         A11: a in ( dom ( Den (o,( Free (S,X))))) & a in (((B # ) * the Arity of S) . o) by XBOOLE_0:def 4;

        reconsider a as Element of ( Args (o,( Free (S,X)))) by A10;

        

         A12: (((B # ) * the Arity of S) . o) = ((B # ) . ( the_arity_of o)) by FUNCT_2: 15;

        

         A13: ((B # ) . ( the_arity_of o)) = ( product (B * ( the_arity_of o))) by FINSEQ_2:def 5;

        

         A14: ( Args (o,( Free (S,X)))) = ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) & ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) & ( Args (o,( Free (S,Y)))) = ( product (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) & ( dom (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

        then

         A15: ( dom a) = ( dom ( the_arity_of o)) by PARTFUN1:def 2;

        z = (( Den (o,( Free (S,X)))) . a) by A9, A11, FUNCT_1: 49;

        then

         A16: z = (( Sym (o,X)) -tree a) by Th13;

        

         A17: for x be object st x in ( dom (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) holds (a . x) in ((the Sorts of ( Free (S,Y)) * ( the_arity_of o)) . x) by A11, A12, A13, A6, CARD_3: 9;

        then

         A18: a in ( Args (o,( Free (S,Y)))) by A14, A15, CARD_3: 9;

        

         A19: (( Den (o,( Free (S,Y)))) . a) = ( [o, the carrier of S] -tree a) by A17, A14, A15, CARD_3: 9, Th13;

        thus z in ((B * the ResultSort of S) . o) by A6, A16, A18, A19, FUNCT_2: 5, MSUALG_6:def 1;

      end;

      now

        let o be OperSymbol of S;

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

        reconsider A2 = the Sorts of ( Free (S,Y)) as MSSubset of ( FreeMSA Z) by A7, MSUALG_2:def 9;

        

         A20: A2 is_closed_on o by A7, MSUALG_2:def 6, MSUALG_2:def 9;

        ( Free (S,Z)) = ( FreeMSA Z) by MSAFREE3: 31;

        then

         A21: ( Args (o,( Free (S,Y)))) c= ( Args (o,( Free (S,Z)))) & ( dom ( Den (o,( Free (S,Z))))) = ( Args (o,( Free (S,Z)))) by A7, FUNCT_2:def 1, MSAFREE3: 37;

        then

         A22: ( dom (( Den (o,( Free (S,Z)))) | ( Args (o,( Free (S,Y)))))) = ( Args (o,( Free (S,Y)))) by RELAT_1: 62;

        

         A23: ( Args (o,( Free (S,Y)))) c= ( Args (o,( Free (S,X))))

        proof

          let x be object;

          assume x in ( Args (o,( Free (S,Y))));

          then

           A24: x in ( product (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) & ( dom (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) & ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

          then

          consider f be Function such that

           A25: x = f & ( dom f) = ( dom ( the_arity_of o)) & for y be object st y in ( dom ( the_arity_of o)) holds (f . y) in ((the Sorts of ( Free (S,Y)) * ( the_arity_of o)) . y) by CARD_3:def 5;

          now

            let y be object;

            assume

             A26: y in ( dom ( the_arity_of o));

            (f . y) in ((the Sorts of ( Free (S,Y)) * ( the_arity_of o)) . y) & (( the_arity_of o) . y) in the carrier of S by A25, A26, FUNCT_1: 102;

            then (f . y) in (the Sorts of ( Free (S,Y)) . (( the_arity_of o) . y)) & (the Sorts of ( Free (S,Y)) . (( the_arity_of o) . y)) c= (the Sorts of ( Free (S,X)) . (( the_arity_of o) . y)) by A1, A26, FUNCT_1: 13;

            then (f . y) in (the Sorts of ( Free (S,X)) . (( the_arity_of o) . y));

            hence (f . y) in ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . y) by A26, FUNCT_1: 13;

          end;

          then x in ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by A25, A24, CARD_3:def 5;

          hence x in ( Args (o,( Free (S,X)))) by PRALG_2: 3;

        end;

        ( dom ( Den (o,( Free (S,X))))) = ( Args (o,( Free (S,X)))) by FUNCT_2:def 1;

        then

         A27: ( dom (( Den (o,( Free (S,X)))) | ( Args (o,( Free (S,Y)))))) = ( Args (o,( Free (S,Y)))) by A23, RELAT_1: 62;

         A28:

        now

          let x be object;

          assume

           A29: x in ( Args (o,( Free (S,Y))));

          then

           A30: x in ( product (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) by PRALG_2: 3;

          reconsider p = x as Element of ( product (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) by A29, PRALG_2: 3;

          ( dom p) = ( dom (the Sorts of ( Free (S,Y)) * ( the_arity_of o))) & ( rng ( the_arity_of o)) c= the carrier of S & ( dom the Sorts of ( Free (S,Y))) = the carrier of S by A30, CARD_3: 9, PARTFUN1:def 2;

          then ( dom p) = ( dom ( the_arity_of o)) by RELAT_1: 27;

          then ( dom p) = ( Seg ( len ( the_arity_of o))) by FINSEQ_1:def 3;

          then

          reconsider p = x as FinSequence by FINSEQ_1:def 2;

          

           A31: ((( Den (o,( Free (S,X)))) | ( Args (o,( Free (S,Y))))) . x) = (( Den (o,( Free (S,X)))) . x) by A29, FUNCT_1: 49

          .= ( [o, the carrier of S] -tree p) by A23, A29, Th13;

          

          thus ((( Den (o,( Free (S,Z)))) | ( Args (o,( Free (S,Y))))) . x) = (( Den (o,( Free (S,Z)))) . x) by A29, FUNCT_1: 49

          .= ((( Den (o,( Free (S,X)))) | ( Args (o,( Free (S,Y))))) . x) by A21, A29, A31, Th13;

        end;

        

        thus (the Charact of ( Free (S,Y)) . o) = (( Opers (( FreeMSA Z),A2)) . o) by A7, MSUALG_2:def 9

        .= (o /. A2) by MSUALG_2:def 8

        .= (( Den (o,( FreeMSA Z))) | (((A2 # ) * the Arity of S) . o)) by A20, MSUALG_2:def 7

        .= (( Den (o,( Free (S,Z)))) | (((A2 # ) * the Arity of S) . o)) by MSAFREE3: 31

        .= (( Den (o,( Free (S,X)))) | (((B # ) * the Arity of S) . o)) by A6, A28, A27, A22

        .= (o /. B) by A8, MSUALG_2:def 7;

      end;

      hence the Charact of ( Free (S,Y)) = ( Opers (( Free (S,X)),B)) by A6, MSUALG_2:def 8;

    end;

    theorem :: MSAFREE4:60

    

     Th60: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds for t be Term of S, X holds ( # (t,w)) is Element of ( Free (S,( rngs w))), ( the_sort_of t) & ( # (t,w)) is Element of ( TermAlg S), ( the_sort_of t)

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      let t be Term of S, X;

      defpred P[ DecoratedTree] means ex t be Term of S, X st $1 = t & ( # (t,w)) is Element of ( Free (S,( rngs w))), ( the_sort_of t);

      

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

      proof

        let s be SortSymbol of S, x be Element of (X . s);

        reconsider t = ( root-tree [x, s]) as Term of S, X by MSATERM: 4;

        take t;

        thus ( root-tree [x, s]) = t;

        (S -Terms X) = ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13;

        then t is Element of ( Free (S,X)) by MSAFREE3: 31;

        then

        consider F be ManySortedSet of (S -Terms X) such that

         A2: ( # (t,w)) = (F . t) & (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) by Def15;

        

         A3: ( # (t,w)) = ( root-tree [((w . s) . x), s]) by A2;

        ( dom w) = the carrier of S by PARTFUN1:def 2;

        then ( rng (w . s)) = (( rngs w) . s) by FUNCT_6: 22;

        then

         A4: ((w . s) . x) in (( rngs w) . s) by FUNCT_2: 4;

        then

        reconsider tw = ( # (t,w)) as Term of S, ( rngs w) by A3, MSATERM: 4;

        ( the_sort_of tw) = s & ( the_sort_of t) = s by A3, A4, MSATERM: 14;

        then tw in ( FreeSort (( rngs w),( the_sort_of t))) by MSATERM:def 5;

        then tw in (the Sorts of ( FreeMSA ( rngs w)) . ( the_sort_of t)) by MSAFREE:def 11;

        hence thesis by MSAFREE3: 31;

        thus thesis;

      end;

      

       A5: 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

         A6: for t be Term of S, X st t in ( rng p) holds P[t];

        take tt = (( Sym (o,X)) -tree p);

        thus tt = ( [o, the carrier of S] -tree p);

        (S -Terms X) = ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13;

        then tt is Element of ( Free (S,X)) by MSAFREE3: 31;

        then

        consider F be ManySortedSet of (S -Terms X) such that

         A7: ( # (tt,w)) = (F . tt) & (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) by Def15;

        

         A8: ( # (tt,w)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) by A7;

        

         A9: ( Args (o,( Free (S,( rngs w))))) = ( product (the Sorts of ( Free (S,( rngs w))) * ( the_arity_of o))) & ( dom (the Sorts of ( Free (S,( rngs w))) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

        p is Element of ( Args (o,( FreeMSA X))) by INSTALG1: 1;

        then p is Element of ( Args (o,( Free (S,X)))) & ( Args (o,( Free (S,X)))) = ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by PRALG_2: 3, MSAFREE3: 31;

        then

         A10: p in ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) & ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

        then

         A11: ( dom p) = ( dom ( the_arity_of o)) by CARD_3: 9;

        

         A12: ( dom F) = (S -Terms X) by PARTFUN1:def 2

        .= ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13

        .= ( Union the Sorts of ( Free (S,X))) by MSAFREE3: 31;

        

         A13: ( rng p) c= ( Union the Sorts of ( Free (S,X)))

        proof

          let y be object;

          assume y in ( rng p);

          then

          consider x be object such that

           A14: x in ( dom p) & y = (p . x) by FUNCT_1:def 3;

          y in ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . x) by A10, A14, A11, CARD_3: 9;

          then y in (the Sorts of ( Free (S,X)) . (( the_arity_of o) . x)) & (( the_arity_of o) . x) in the carrier of S & ( dom the Sorts of ( Free (S,X))) = the carrier of S by A14, A11, FUNCT_1: 13, FUNCT_1: 102, PARTFUN1:def 2;

          hence thesis by CARD_5: 2;

        end;

        

        then

         A15: ( dom (F * p)) = ( dom p) by A12, RELAT_1: 27

        .= ( dom ( the_arity_of o)) by A10, CARD_3: 9;

         A16:

        now

          let y be object;

          assume

           A17: y in ( dom ( the_arity_of o));

          then

           A18: (p . y) in ( rng p) by A11, FUNCT_1:def 3;

          (p . y) is Element of ( FreeMSA X) by A18, A13, MSAFREE3: 31;

          then

          reconsider t = (p . y) as Term of S, X by MSAFREE3: 6;

          

           A19: P[t] & (F . t) = ( # (t,w)) by A7, A6, A18, A13, Th55;

          reconsider i = y as Nat by A17;

          (( the_arity_of o) . i) = ( the_sort_of t) by A11, A17, MSATERM: 23;

          then (F . t) in (the Sorts of ( Free (S,( rngs w))) . (( the_arity_of o) . i)) by A19;

          then (F . t) in ((the Sorts of ( Free (S,( rngs w))) * ( the_arity_of o)) . i) by A17, FUNCT_1: 13;

          hence ((F * p) . y) in ((the Sorts of ( Free (S,( rngs w))) * ( the_arity_of o)) . y) by A11, A17, FUNCT_1: 13;

        end;

        (( Den (o,( Free (S,( rngs w))))) . (F * p)) = ( [o, the carrier of S] -tree (F * p)) by A16, A9, A15, CARD_3: 9, Th13;

        then ( [o, the carrier of S] -tree (F * p)) in ( Result (o,( Free (S,( rngs w))))) & ( dom the ResultSort of S) = the carrier' of S by A16, A9, A15, CARD_3: 9, FUNCT_2: 5, FUNCT_2:def 1;

        then ( # (tt,w)) in (the Sorts of ( Free (S,( rngs w))) . ( the_result_sort_of o)) & (tt . {} ) = ( Sym (o,X)) by A8, FUNCT_1: 13, TREES_4:def 4;

        hence thesis by MSATERM: 17;

      end;

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

      then P[t];

      hence ( # (t,w)) is Element of ( Free (S,( rngs w))), ( the_sort_of t);

      then

       A20: ( # (t,w)) in (the Sorts of ( Free (S,( rngs w))) . ( the_sort_of t));

      X is_transformable_to (the carrier of S --> NAT ) by Th21;

      then ( rngs w) is ManySortedSubset of (the carrier of S --> NAT ) by PBOOLE:def 18, MSSUBFAM: 17;

      then ( Free (S,( rngs w))) is MSSubAlgebra of ( Free (S,(the carrier of S --> NAT ))) by Th59;

      then the Sorts of ( Free (S,( rngs w))) is MSSubset of ( Free (S,(the carrier of S --> NAT ))) by MSUALG_2:def 9;

      then the Sorts of ( Free (S,( rngs w))) is MSSubset of ( TermAlg S) by MSAFREE3: 31;

      then (the Sorts of ( Free (S,( rngs w))) . ( the_sort_of t)) c= (the Sorts of ( TermAlg S) . ( the_sort_of t)) by PBOOLE:def 2, PBOOLE:def 18;

      hence thesis by A20;

    end;

    theorem :: MSAFREE4:61

    for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds for F be ManySortedSet of (S -Terms X) st (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = ( root-tree [((w . s) . x), s])) & for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = (( Sym (o,(the carrier of S --> NAT ))) -tree (F * p)) holds for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F * p) in ( Args (o,( Free (S,( rngs w))))) & (F * p) in ( Args (o,( Free (S,(the carrier of S --> NAT )))))

    proof

      let w be ManySortedFunction of X, (the carrier of S --> NAT );

      deffunc R( set, set) = ( root-tree [((w . $2) . $1), $2]);

      deffunc F( OperSymbol of S, FinSequence) = (( Sym ($1,(the carrier of S --> NAT ))) -tree $2);

      let F be ManySortedSet of (S -Terms X) such that

       A1: (for s be SortSymbol of S, x be Element of (X . s) holds (F . ( root-tree [x, s])) = R(x,s)) and

       A2: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X)) holds (F . (( Sym (o,X)) -tree p)) = F(o,*);

      let o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X));

      ( rng p) c= ( dom F)

      proof

        let y be object;

        assume y in ( rng p);

        then

        consider x be object such that

         A3: x in ( dom p) & y = (p . x) by FUNCT_1:def 3;

        reconsider x as Nat by A3;

        y is Term of S, X by A3, MSATERM: 22;

        then y in (S -Terms X);

        hence thesis by PARTFUN1:def 2;

      end;

      then

       A4: ( dom (F * p)) = ( dom p) by RELAT_1: 27;

      

       A5: ( dom p) = ( dom ( the_arity_of o)) by MSATERM: 22;

      

       A6: (S -Terms X) = ( Union the Sorts of ( FreeMSA X)) by MSATERM: 13

      .= ( Union the Sorts of ( Free (S,X))) by MSAFREE3: 31;

      X is_transformable_to (the carrier of S --> NAT ) by Th21;

      then ( rngs w) is ManySortedSubset of (the carrier of S --> NAT ) by PBOOLE:def 18, MSSUBFAM: 17;

      then

       A7: ( Free (S,( rngs w))) is MSSubAlgebra of ( Free (S,(the carrier of S --> NAT ))) by Th59;

      now

        let i be Nat;

        assume

         A8: i in ( dom p);

        then

        reconsider t = (p . i) as Term of S, X by MSATERM: 22;

        (F . t) = ( # (t,w)) by A1, A2, A6, Th55;

        then

        reconsider tt = (F . t) as Element of (the Sorts of ( Free (S,( rngs w))) . ( the_sort_of t)) by Th60;

        

         A9: the Sorts of ( Free (S,( rngs w))) is MSSubset of ( Free (S,(the carrier of S --> NAT ))) by A7, MSUALG_2:def 9;

        reconsider tt as Term of S, ( rngs w) by Th42;

        take tt;

        thus tt = ((F * p) . i) by A8, FUNCT_1: 13;

        (the Sorts of ( Free (S,( rngs w))) . ( the_sort_of t)) c= (the Sorts of ( Free (S,(the carrier of S --> NAT ))) . ( the_sort_of t)) & tt in (the Sorts of ( Free (S,( rngs w))) . ( the_sort_of t)) by A9, PBOOLE:def 2, PBOOLE:def 18;

        then tt in (the Sorts of ( FreeMSA ( rngs w)) . ( the_sort_of t)) by MSAFREE3: 31;

        then tt in ( FreeSort (( rngs w),( the_sort_of t))) by MSAFREE:def 11;

        

        hence ( the_sort_of tt) = ( the_sort_of t) by MSATERM:def 5

        .= (( the_arity_of o) . i) by A8, MSATERM: 23;

      end;

      then (F * p) is ArgumentSeq of ( Sym (o,( rngs w))) by A4, A5, MSATERM: 24;

      then (F * p) is Element of ( Args (o,( FreeMSA ( rngs w)))) by INSTALG1: 1;

      then (F * p) is Element of ( Args (o,( Free (S,( rngs w))))) by MSAFREE3: 31;

      then (F * p) in ( Args (o,( Free (S,( rngs w))))) & ( Args (o,( Free (S,( rngs w))))) c= ( Args (o,( Free (S,(the carrier of S --> NAT ))))) by A7, MSAFREE3: 37;

      hence thesis;

    end;

    theorem :: MSAFREE4:62

    

     Th62: for w be ManySortedFunction of (the carrier of S --> NAT ), X holds ex h be ManySortedFunction of ( TermAlg S), A st h is_homomorphism (( TermAlg S),A) & for s be SortSymbol of S, i be Nat holds ((h . s) . ( root-tree [i, s])) = ( root-tree [((w . s) . i), s])

    proof

      set Y = (the carrier of S --> NAT );

      let w be ManySortedFunction of Y, X;

      deffunc F( set, Function) = ( root-tree [((w . $1) . (($2 . {} ) `1 )), $1]);

      consider ww be ManySortedFunction of the carrier of S such that

       A1: for x st x in the carrier of S holds ( dom (ww . x)) = (( FreeGen Y) . x) & for y be Element of (( FreeGen Y) . x) holds ((ww . x) . y) = F(x,y) from Sch1;

      

       A2: ww is ManySortedFunction of ( FreeGen Y), ( FreeGen X)

      proof

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A3: ( dom (ww . s)) = (( FreeGen Y) . s) by A1;

        

         A4: (( FreeGen X) . s) = ( FreeGen (s,X)) & (( FreeGen Y) . s) = ( FreeGen (s,Y)) by MSAFREE:def 16;

        ( rng (ww . s)) c= (( FreeGen X) . s)

        proof

          let y be object;

          assume y in ( rng (ww . s));

          then

          consider z be object such that

           A5: z in ( dom (ww . s)) & y = ((ww . s) . z) by FUNCT_1:def 3;

          reconsider z as Element of (( FreeGen Y) . s) by A1, A5;

          consider v be set such that

           A6: v in (Y . s) & z = ( root-tree [v, s]) by A4, MSAFREE:def 15;

          

           A7: y = F(s,z) by A1, A5;

          (z . {} ) = [v, s] by A6, TREES_4: 3;

          then ((z . {} ) `1 ) = v;

          then ((w . s) . ((z . {} ) `1 )) in (X . s) by A6, FUNCT_2: 5;

          hence thesis by A4, A7, MSAFREE:def 15;

        end;

        hence thesis by A3, FUNCT_2: 2;

      end;

      reconsider G = ( FreeGen Y) as GeneratorSet of ( TermAlg S);

      ( FreeGen X) is MSSubset of A by Def7;

      then

      reconsider ww as ManySortedFunction of G, the Sorts of A by A2, Th22;

      consider h be ManySortedFunction of ( TermAlg S), A such that

       A8: h is_homomorphism (( TermAlg S),A) & ww = (h || G) by MSAFREE:def 5;

      take h;

      thus h is_homomorphism (( TermAlg S),A) by A8;

      let s be SortSymbol of S, i be Nat;

      

       A9: (ww . s) = ((h . s) | (G . s)) by A8, MSAFREE:def 1;

      i in NAT & NAT = (Y . s) by ORDINAL1:def 12;

      then ( root-tree [i, s]) in ( FreeGen (s,Y)) & ( FreeGen (s,Y)) = (G . s) by MSAFREE:def 15, MSAFREE:def 16;

      then

      reconsider z = ( root-tree [i, s]) as Element of (( FreeGen Y) . s);

      

      thus ((h . s) . ( root-tree [i, s])) = ((ww . s) . z) by A9, FUNCT_1: 49

      .= F(s,z) by A1

      .= ( root-tree [((w . s) . ( [i, s] `1 )), s]) by TREES_4: 3

      .= ( root-tree [((w . s) . i), s]);

    end;

    theorem :: MSAFREE4:63

    

     Th63: for w be ManySortedFunction of X, (the carrier of S --> NAT ) holds ex h be ManySortedFunction of ( FreeGen X), the Sorts of ( TermAlg S) st for s be SortSymbol of S, i be Element of (X . s) holds ((h . s) . ( root-tree [i, s])) = ( root-tree [((w . s) . i), s])

    proof

      set Y = (the carrier of S --> NAT );

      let w be ManySortedFunction of X, Y;

      deffunc F( set, Function) = ( root-tree [((w . $1) . (($2 . {} ) `1 )), $1]);

      consider ww be ManySortedFunction of the carrier of S such that

       A1: for x st x in the carrier of S holds ( dom (ww . x)) = (( FreeGen X) . x) & for y be Element of (( FreeGen X) . x) holds ((ww . x) . y) = F(x,y) from Sch1;

      

       A2: ww is ManySortedFunction of ( FreeGen X), ( FreeGen Y)

      proof

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A3: ( dom (ww . s)) = (( FreeGen X) . s) by A1;

        

         A4: (( FreeGen X) . s) = ( FreeGen (s,X)) & (( FreeGen Y) . s) = ( FreeGen (s,Y)) by MSAFREE:def 16;

        ( rng (ww . s)) c= (( FreeGen Y) . s)

        proof

          let y be object;

          assume y in ( rng (ww . s));

          then

          consider z be object such that

           A5: z in ( dom (ww . s)) & y = ((ww . s) . z) by FUNCT_1:def 3;

          reconsider z as Element of (( FreeGen X) . s) by A1, A5;

          consider v be set such that

           A6: v in (X . s) & z = ( root-tree [v, s]) by A4, MSAFREE:def 15;

          

           A7: y = F(s,z) by A1, A5;

          (z . {} ) = [v, s] by A6, TREES_4: 3;

          then ((z . {} ) `1 ) = v;

          then ((w . s) . ((z . {} ) `1 )) in (Y . s) by A6, FUNCT_2: 5;

          hence thesis by A4, A7, MSAFREE:def 15;

        end;

        hence thesis by A3, FUNCT_2: 2;

      end;

      set A = the all_vars_including inheriting_operations free_in_itselfX, S -terms MSAlgebra over S;

      reconsider G = ( FreeGen X) as GeneratorSet of A by Th45;

      reconsider ww as ManySortedFunction of ( FreeGen X), the Sorts of ( TermAlg S) by A2, Th22;

      take ww;

      let s be SortSymbol of S, i be Element of (X . s);

      ( root-tree [i, s]) in ( FreeGen (s,X)) & ( FreeGen (s,X)) = (G . s) by MSAFREE:def 15, MSAFREE:def 16;

      then

      reconsider z = ( root-tree [i, s]) as Element of (( FreeGen X) . s);

      

      thus ((ww . s) . ( root-tree [i, s])) = F(s,z) by A1

      .= ( root-tree [((w . s) . ( [i, s] `1 )), s]) by TREES_4: 3

      .= ( root-tree [((w . s) . i), s]);

    end;

    begin

    reserve X0 for non-empty countable ManySortedSet of S;

    reserve A0 for all_vars_including inheriting_operations free_in_itselfX0, S -terms MSAlgebra over S;

    theorem :: MSAFREE4:64

    for h be ManySortedFunction of ( TermAlg S), A0 st h is_homomorphism (( TermAlg S),A0) holds for w be ManySortedFunction of X0, (the carrier of S --> NAT ) st w is "1-1" holds ex Y be non-empty ManySortedSubset of (the carrier of S --> NAT ), B be MSSubset of ( TermAlg S), ww be ManySortedFunction of ( Free (S,Y)), A0, g be ManySortedFunction of A0, A0 st Y = ( rngs w) & B = the Sorts of ( Free (S,Y)) & ( FreeGen ( rngs w)) c= B & ww is_homomorphism (( Free (S,Y)),A0) & g is_homomorphism (A0,A0) & (h || B) = (g ** ww) & for s be SortSymbol of S, i be Nat st i in (Y . s) holds ex x be Element of (X0 . s) st ((w . s) . x) = i & ((ww . s) . ( root-tree [i, s])) = ( root-tree [x, s])

    proof

      set A = A0;

      let h be ManySortedFunction of ( TermAlg S), A such that

       A1: h is_homomorphism (( TermAlg S),A);

      let v be ManySortedFunction of X0, (the carrier of S --> NAT ) such that

       A2: v is "1-1";

      set Z = (the carrier of S --> NAT );

      deffunc F( object) = (( NAT --> the Element of (X0 . $1)) +* ((v . $1) " ));

      consider w be ManySortedSet of S such that

       A3: for s be SortSymbol of S holds (w . s) = F(s) from PBOOLE:sch 5;

      w is Function-yielding

      proof

        let x be object;

        assume x in ( dom w);

        then (w . x) = F(x) by A3;

        hence thesis;

      end;

      then

      reconsider w as ManySortedFunction of the carrier of S;

      w is ManySortedFunction of Z, X0

      proof

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        ( dom v) = the carrier of S by PARTFUN1:def 2;

        then

         A4: (w . x) = F(s) & (v . s) is one-to-one & (Z . s) = NAT & ( rng (v . s)) c= (Z . s) by A2, A3;

        

        then

         A5: ( dom (w . s)) = (( dom ( NAT --> the Element of (X0 . s))) \/ ( dom ((v . s) " ))) by FUNCT_4:def 1

        .= ( NAT \/ ( dom ((v . s) " )))

        .= ( NAT \/ ( rng (v . s))) by A4, FUNCT_1: 33

        .= NAT by XBOOLE_1: 12;

        ( rng (w . s)) c= (X0 . s)

        proof

          let x be object;

          assume x in ( rng (w . s));

          then

          consider y be object such that

           A7: y in ( dom (w . s)) & x = ((w . s) . y) by FUNCT_1:def 3;

          y in ( dom ((v . s) " )) or y nin ( dom ((v . s) " ));

          then x = (((v . s) " ) . y) & y in ( dom ((v . s) " )) & ( dom v) = the carrier of S or x = (( NAT --> the Element of (X0 . s)) . y) by A4, A7, FUNCT_4: 11, FUNCT_4: 13, PARTFUN1:def 2;

          then x = (((v . s) " ) . y) & y in ( dom ((v . s) " )) & (v . s) is one-to-one or x = the Element of (X0 . s) by A2, A5, A7, FUNCOP_1: 7;

          then x in ( rng ((v . s) " )) & ( rng ((v . s) " )) = ( dom (v . s)) & ( dom (v . s)) c= (X0 . s) or x in (X0 . s) by FUNCT_1: 33, FUNCT_1:def 3;

          hence thesis;

        end;

        hence thesis by A5, FUNCT_2: 2;

      end;

      then

      reconsider w as ManySortedFunction of Z, X0;

      consider ww be ManySortedFunction of ( TermAlg S), A such that

       A8: ww is_homomorphism (( TermAlg S),A) & for s be SortSymbol of S, i be Nat holds ((ww . s) . ( root-tree [i, s])) = ( root-tree [((w . s) . i), s]) by Th62;

      

       A9: ( dom v) = the carrier of S by PARTFUN1:def 2;

      ( rngs v) c= Z

      proof

        let s be object;

        assume s in the carrier of S;

        then (( rngs v) . s) = ( rng (v . s)) by A9, FUNCT_6: 22;

        hence (( rngs v) . s) c= (Z . s);

      end;

      then

      reconsider Y = ( rngs v) as non-empty ManySortedSubset of Z by PBOOLE:def 18;

      take Y;

      

       A10: ( Free (S,Z)) = ( TermAlg S) by MSAFREE3: 31;

      

       A11: ( Free (S,Y)) is MSSubAlgebra of ( Free (S,Z)) by Th59;

      then

      reconsider B = the Sorts of ( Free (S,Y)) as MSSubset of ( TermAlg S) by A10, MSUALG_2:def 9;

      take B;

      reconsider wB = (ww || B) as ManySortedFunction of ( Free (S,Y)), A;

      take wB;

      reconsider G = ( FreeGen X0) as GeneratorSet of A by Th45;

      consider vv be ManySortedFunction of G, the Sorts of ( TermAlg S) such that

       A12: for s be SortSymbol of S, i be Element of (X0 . s) holds ((vv . s) . ( root-tree [i, s])) = ( root-tree [((v . s) . i), s]) by Th63;

      consider g be ManySortedFunction of A, A such that

       A13: g is_homomorphism (A,A) & (g || G) = (h ** vv) by Def9;

      take g;

      thus Y = ( rngs v) & B = the Sorts of ( Free (S,Y));

      ( Free (S,Y)) = ( FreeMSA ( rngs v)) by MSAFREE3: 31;

      hence ( FreeGen ( rngs v)) c= B by PBOOLE:def 18;

      thus wB is_homomorphism (( Free (S,Y)),A) & g is_homomorphism (A,A) by A13, A8, A10, A11, EQUATION: 22;

      then

       A14: (g ** wB) is_homomorphism (( Free (S,Y)),A) by MSUALG_3: 10;

      reconsider H = ( FreeGen Y) as GeneratorSet of ( Free (S,Y)) by MSAFREE3: 31;

      reconsider hB = (h || B) as ManySortedFunction of ( Free (S,Y)), A;

       A15:

      now

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A16: ( dom ((hB || H) . s)) = (H . s) & ( dom (((g ** wB) || H) . s)) = (H . s) by FUNCT_2:def 1;

        now

          let y be object;

          assume

           A17: y in (H . s);

          then y in ( FreeGen (s,Y)) by MSAFREE:def 16;

          then

          consider z such that

           A18: z in (Y . s) & y = ( root-tree [z, s]) by MSAFREE:def 15;

          

           A19: (H . s) c= (B . s) & (Y . s) c= (Z . s) by PBOOLE:def 2, PBOOLE:def 18;

          then

           A20: ((w . s) . z) in (X0 . s) by A18, FUNCT_2: 5;

          (wB . s) = ((ww . s) | (B . s)) & z in (Z . s) by A18, A19, MSAFREE:def 1;

          then

           A21: ((wB . s) . y) = ((ww . s) . y) & z in NAT by A17, A19, FUNCT_1: 49;

          then ((wB . s) . y) = ( root-tree [((w . s) . z), s]) by A8, A18;

          then ((wB . s) . y) in ( FreeGen (s,X0)) by A20, MSAFREE:def 15;

          then

           A22: ((wB . s) . y) in (G . s) by MSAFREE:def 16;

          z in (Z . s) by A18, A19;

          then z in NAT ;

          

          then

           A23: ((vv . s) . ((ww . s) . y)) = ((vv . s) . ( root-tree [((w . s) . z), s])) by A8, A18

          .= ( root-tree [((v . s) . ((w . s) . z)), s]) by A12, A20

          .= ( root-tree [((v . s) . ((( NAT --> the Element of (X0 . s)) +* ((v . s) " )) . z)), s]) by A3;

          ( dom v) = the carrier of S by PARTFUN1:def 2;

          then

           A24: (v . s) is one-to-one & ( rng (v . s)) = (Y . s) by A2, FUNCT_6: 22;

          

           A25: z in ( dom ((v . s) " )) by A18, A24, FUNCT_1: 33;

          

           A26: ((vv . s) . ((ww . s) . y)) = ( root-tree [((v . s) . (((v . s) " ) . z)), s]) by A23, A25, FUNCT_4: 13

          .= y by A18, A24, FUNCT_1: 35;

          

           A27: ( rngs vv) c= B

          proof

            let x be object;

            assume x in the carrier of S;

            then

            reconsider s = x as SortSymbol of S;

            let y be object;

            assume

             A28: y in (( rngs vv) . x);

            ( dom vv) = the carrier of S by PARTFUN1:def 2;

            then y in ( rng (vv . s)) by A28, FUNCT_6: 22;

            then

            consider z be object such that

             A29: z in ( dom (vv . s)) & y = ((vv . s) . z) by FUNCT_1:def 3;

            ( dom (vv . s)) = (G . s) by FUNCT_2:def 1

            .= ( FreeGen (s,X0)) by MSAFREE:def 16;

            then

            consider a be set such that

             A30: a in (X0 . s) & z = ( root-tree [a, s]) by A29, MSAFREE:def 15;

            ((v . s) . a) in ( rng (v . s)) & ( dom v) = the carrier of S by A30, FUNCT_2: 4, PARTFUN1:def 2;

            then ((v . s) . a) in (Y . s) & y = ( root-tree [((v . s) . a), s]) by A29, A30, A12, FUNCT_6: 22;

            then y in ( FreeGen (s,Y)) by MSAFREE:def 15;

            then y in (H . s) & (H . s) c= (B . s) by MSAFREE:def 16, PBOOLE:def 2, PBOOLE:def 18;

            hence thesis;

          end;

          

           A31: ( dom (hB ** vv)) = (the carrier of S /\ the carrier of S) by PARTFUN1:def 2;

          

           A32: ( dom (g ** wB)) = (the carrier of S /\ the carrier of S) by PARTFUN1:def 2;

          

          thus (((hB || H) . x) . y) = (((hB . s) | (H . s)) . y) by MSAFREE:def 1

          .= ((hB . s) . y) by A17, FUNCT_1: 49

          .= (((hB . s) * (vv . s)) . ((wB . s) . y)) by A26, A21, A22, FUNCT_2: 15

          .= (((hB ** vv) . s) . ((wB . s) . y)) by A31, PBOOLE:def 19

          .= (((g || G) . s) . ((wB . s) . y)) by A13, A27, EXTENS_1: 11

          .= (((g . s) | (G . s)) . ((wB . s) . y)) by MSAFREE:def 1

          .= ((g . s) . ((wB . s) . y)) by A22, FUNCT_1: 49

          .= (((g . s) * (wB . s)) . y) by A19, A17, FUNCT_2: 15

          .= (((g ** wB) . s) . y) by A32, PBOOLE:def 19

          .= ((((g ** wB) . s) | (H . s)) . y) by A17, FUNCT_1: 49

          .= ((((g ** wB) || H) . x) . y) by MSAFREE:def 1;

        end;

        hence ((hB || H) . x) = (((g ** wB) || H) . x) by A16;

      end;

      hB is_homomorphism (( Free (S,Y)),A) by A1, A11, A10, EQUATION: 22;

      hence (h || B) = (g ** wB) by A15, A14, EXTENS_1: 19, PBOOLE: 3;

      let s be SortSymbol of S, i be Nat;

      assume

       A33: i in (Y . s);

      

       A34: ( dom v) = the carrier of S by PARTFUN1:def 2;

      then

       A35: (v . s) is one-to-one by A2;

      then

       A36: ( rng ((v . s) " )) = ( dom (v . s)) & ( dom (v . s)) = (X0 . s) & ( rng (v . s)) = (Y . s) & ( dom ((v . s) " )) = ( rng (v . s)) by A34, FUNCT_1: 33, FUNCT_2:def 1, FUNCT_6: 22;

      then

      reconsider x = (((v . s) " ) . i) as Element of (X0 . s) by A33, FUNCT_1:def 3;

      take x;

      thus ((v . s) . x) = i by A33, A35, A36, FUNCT_1: 35;

      ( root-tree [i, s]) in ( FreeGen (s,Y)) & H c= B by A33, PBOOLE:def 18, MSAFREE:def 15;

      then

       A37: ( root-tree [i, s]) in (H . s) & (H . s) c= (B . s) by MSAFREE:def 16;

      (w . s) = F(s) by A3;

      then x = ((w . s) . i) by A33, A36, FUNCT_4: 13;

      

      then ( root-tree [x, s]) = ((ww . s) . ( root-tree [i, s])) by A8

      .= (((ww . s) | (B . s)) . ( root-tree [i, s])) by A37, FUNCT_1: 49;

      hence ((wB . s) . ( root-tree [i, s])) = ( root-tree [x, s]) by MSAFREE:def 1;

    end;

    theorem :: MSAFREE4:65

    

     Th65: for h be ManySortedFunction of ( Free (S,X)), A st h is_homomorphism (( Free (S,X)),A) holds ex g be ManySortedFunction of A, A st g is_homomorphism (A,A) & h = (g ** ( canonical_homomorphism A))

    proof

      set X0 = X;

      let h be ManySortedFunction of ( Free (S,X0)), A such that

       A1: h is_homomorphism (( Free (S,X0)),A);

      set ww = ( canonical_homomorphism A);

      reconsider H = ( FreeGen X0) as GeneratorSet of ( Free (S,X0)) by Th45;

      reconsider G = ( FreeGen X0) as GeneratorSet of A by Th45;

       A2:

      now

        let s be SortSymbol of S, i be Element of (X0 . s);

        ( root-tree [i, s]) in ( FreeGen (s,X0)) by MSAFREE:def 15;

        then

         A3: ( root-tree [i, s]) in (H . s) by MSAFREE:def 16;

        G c= the Sorts of A by PBOOLE:def 18;

        then (H . s) c= (the Sorts of A . s);

        hence ((ww . s) . ( root-tree [i, s])) = ( root-tree [i, s]) by A3, Th47;

      end;

      then

       A4: ww is_homomorphism (( Free (S,X0)),A) & for s be SortSymbol of S, i be Element of (X0 . s) holds ((ww . s) . ( root-tree [i, s])) = ( root-tree [i, s]) by Def10;

      reconsider hG = (h || H) as ManySortedFunction of G qua ManySortedSet of S, the Sorts of A;

      consider g be ManySortedFunction of A, A such that

       A5: g is_homomorphism (A,A) & (g || G) = hG by Def9;

      take g;

      thus g is_homomorphism (A,A) by A5;

      

       A6: (g ** ww) is_homomorphism (( Free (S,X0)),A) by A4, A5, MSUALG_3: 10;

      now

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A7: ( dom ((h || H) . s)) = (H . s) & ( dom (((g ** ww) || H) . s)) = (H . s) by FUNCT_2:def 1;

        now

          let y be object;

          assume

           A8: y in (H . s);

          then y in ( FreeGen (s,X0)) by MSAFREE:def 16;

          then

          consider z such that

           A9: z in (X0 . s) & y = ( root-tree [z, s]) by MSAFREE:def 15;

          

           A10: ((ww . s) . y) = ( root-tree [z, s]) by A2, A9;

          then ((ww . s) . y) in ( FreeGen (s,X0)) by A9, MSAFREE:def 15;

          then

           A11: ((ww . s) . y) in (G . s) by MSAFREE:def 16;

          

           A12: (H . s) c= (the Sorts of ( Free (S,X0)) . s) by PBOOLE:def 2, PBOOLE:def 18;

          

           A13: ( dom (g ** ww)) = (the carrier of S /\ the carrier of S) by PARTFUN1:def 2;

          

          thus (((h || H) . x) . y) = (((g . s) | (G . s)) . ((ww . s) . y)) by A9, A10, A5, MSAFREE:def 1

          .= ((g . s) . ((ww . s) . y)) by A11, FUNCT_1: 49

          .= (((g . s) * (ww . s)) . y) by A8, A12, FUNCT_2: 15

          .= (((g ** ww) . s) . y) by A13, PBOOLE:def 19

          .= ((((g ** ww) . s) | (H . s)) . y) by A8, FUNCT_1: 49

          .= ((((g ** ww) || H) . x) . y) by MSAFREE:def 1;

        end;

        hence ((h || H) . x) = (((g ** ww) || H) . x) by A7;

      end;

      hence h = (g ** ww) by A1, A6, EXTENS_1: 19, PBOOLE: 3;

    end;

    theorem :: MSAFREE4:66

    

     Th66: for o be OperSymbol of S holds for x be Element of ( Args (o,A)) holds for x0 be Element of ( Args (o,( Free (S,X)))) st x0 = x holds (( canonical_homomorphism A) # x0) = x

    proof

      let o be OperSymbol of S;

      let x be Element of ( Args (o,A));

      let x0 be Element of ( Args (o,( Free (S,X))));

      assume

       A1: x0 = x;

      set k = ( canonical_homomorphism A);

      now

        let n be Nat;

        assume

         A2: n in ( dom x0);

        

         A3: ( dom x) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

        then

         A4: (( the_arity_of o) /. n) = (( the_arity_of o) . n) by A1, A2, PARTFUN1:def 6;

        ( dom (the Sorts of A * ( the_arity_of o))) = ( dom x) by A3, PRALG_2: 3;

        then (x . n) in ((the Sorts of A * ( the_arity_of o)) . n) by A1, A2, MSUALG_3: 6;

        then (x . n) is Element of A, (( the_arity_of o) /. n) by A4, A2, A1, A3, FUNCT_1: 13;

        hence (x . n) = ((k . (( the_arity_of o) /. n)) . (x0 . n)) by A1, Th47;

      end;

      hence (( canonical_homomorphism A) # x0) = x by MSUALG_3:def 6;

    end;

    theorem :: MSAFREE4:67

    

     Th67: for o be OperSymbol of S holds for x be Element of ( Args (o,A)) holds (( Den (o,A)) . x) = ((( canonical_homomorphism A) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . x))

    proof

      let o be OperSymbol of S;

      let x be Element of ( Args (o,A));

      set k = ( canonical_homomorphism A);

      set s = ( the_result_sort_of o);

      x in ( Args (o,A)) & ( Args (o,A)) c= ( Args (o,( Free (S,X)))) by Th41;

      then

      reconsider x0 = x as Element of ( Args (o,( Free (S,X))));

      (k # x0) = x by Th66;

      hence (( Den (o,A)) . x) = ((k . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . x)) by Def10, MSUALG_3:def 7;

    end;

    theorem :: MSAFREE4:68

    

     Th68: for h be ManySortedFunction of ( Free (S,X)), A st h is_homomorphism (( Free (S,X)),A) holds for o be OperSymbol of S holds for x be Element of ( Args (o,A)) holds ((h . ( the_result_sort_of o)) . (( Den (o,A)) . x)) = ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . x))

    proof

      set X0 = X;

      let h be ManySortedFunction of ( Free (S,X0)), A;

      assume h is_homomorphism (( Free (S,X0)),A);

      then

      consider g be ManySortedFunction of A, A such that

       A1: g is_homomorphism (A,A) & h = (g ** ( canonical_homomorphism A)) by Th65;

      let o be OperSymbol of S;

      let x be Element of ( Args (o,A));

      

       A2: ( dom h) = the carrier of S & ( dom ( canonical_homomorphism A)) = the carrier of S by PARTFUN1:def 2;

      

       A3: ( dom (h ** ( canonical_homomorphism A))) = (( dom h) /\ ( dom ( canonical_homomorphism A))) by PBOOLE:def 19;

      

       A4: x in ( Args (o,A)) & ( Args (o,A)) c= ( Args (o,( Free (S,X0)))) by Th41;

      

      thus ((h . ( the_result_sort_of o)) . (( Den (o,A)) . x)) = ((h . ( the_result_sort_of o)) . ((( canonical_homomorphism A) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x))) by Th67

      .= (((h . ( the_result_sort_of o)) * (( canonical_homomorphism A) . ( the_result_sort_of o))) . (( Den (o,( Free (S,X0)))) . x)) by A4, MSUALG_9: 18, FUNCT_2: 15

      .= (((h ** ( canonical_homomorphism A)) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x)) by A2, A3, PBOOLE:def 19

      .= (((g ** (( canonical_homomorphism A) ** ( canonical_homomorphism A))) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x)) by A1, PBOOLE: 140

      .= ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x)) by A1, Th48;

    end;

    theorem :: MSAFREE4:69

    

     Th69: for h be ManySortedFunction of ( Free (S,X)), A st h is_homomorphism (( Free (S,X)),A) holds for o be OperSymbol of S holds for x be Element of ( Args (o,( Free (S,X)))) holds ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . x)) = ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X)))) . (( canonical_homomorphism A) # x)))

    proof

      set X0 = X;

      let h be ManySortedFunction of ( Free (S,X0)), A;

      assume h is_homomorphism (( Free (S,X0)),A);

      then

      consider g be ManySortedFunction of A, A such that

       A1: g is_homomorphism (A,A) & h = (g ** ( canonical_homomorphism A)) by Th65;

      let o be OperSymbol of S;

      let x be Element of ( Args (o,( Free (S,X0))));

      set k = ( canonical_homomorphism A);

      

       A2: (k # x) in ( Args (o,A)) & ( Args (o,A)) c= ( Args (o,( Free (S,X0)))) by Th41;

      

      thus ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x)) = (((g . ( the_result_sort_of o)) * (( canonical_homomorphism A) . ( the_result_sort_of o))) . (( Den (o,( Free (S,X0)))) . x)) by A1, MSUALG_3: 2

      .= ((g . ( the_result_sort_of o)) . ((( canonical_homomorphism A) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . x))) by MSUALG_9: 18, FUNCT_2: 15

      .= ((g . ( the_result_sort_of o)) . (( Den (o,A)) . (( canonical_homomorphism A) # x))) by Def10, MSUALG_3:def 7

      .= ((g . ( the_result_sort_of o)) . ((( canonical_homomorphism A) . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . (( canonical_homomorphism A) # x)))) by Th67

      .= (((g . ( the_result_sort_of o)) * (( canonical_homomorphism A) . ( the_result_sort_of o))) . (( Den (o,( Free (S,X0)))) . (( canonical_homomorphism A) # x))) by A2, MSUALG_9: 18, FUNCT_2: 15

      .= ((h . ( the_result_sort_of o)) . (( Den (o,( Free (S,X0)))) . (( canonical_homomorphism A) # x))) by A1, MSUALG_3: 2;

    end;

    theorem :: MSAFREE4:70

    for X0,Y0 be non-empty countable ManySortedSet of S holds for A be all_vars_including inheriting_operationsX0, S -terms MSAlgebra over S holds for h be ManySortedFunction of ( Free (S,Y0)), A st h is_homomorphism (( Free (S,Y0)),A) holds ex g be ManySortedFunction of ( Free (S,Y0)), ( Free (S,X0)) st g is_homomorphism (( Free (S,Y0)),( Free (S,X0))) & h = (( canonical_homomorphism A) ** g) & for G be GeneratorSet of ( Free (S,Y0)) st G = ( FreeGen Y0) holds (g || G) = (h || G)

    proof

      let X0,Y be non-empty countable ManySortedSet of S;

      let A be all_vars_including inheriting_operationsX0, S -terms MSAlgebra over S;

      let h be ManySortedFunction of ( Free (S,Y)), A such that

       A1: h is_homomorphism (( Free (S,Y)),A);

      set ww = ( canonical_homomorphism A);

      reconsider F = ( FreeGen Y) as GeneratorSet of ( Free (S,Y)) by Th45;

      reconsider H = ( FreeGen X0) as GeneratorSet of ( Free (S,X0)) by Th45;

      reconsider G = ( FreeGen X0) as GeneratorSet of A by Th45;

      now

        let s be SortSymbol of S, i be Element of (X0 . s);

        ( root-tree [i, s]) in ( FreeGen (s,X0)) by MSAFREE:def 15;

        then

         A2: ( root-tree [i, s]) in (H . s) by MSAFREE:def 16;

        G c= the Sorts of A by PBOOLE:def 18;

        then (H . s) c= (the Sorts of A . s);

        hence ((ww . s) . ( root-tree [i, s])) = ( root-tree [i, s]) by A2, Th47;

      end;

      then

       A3: ww is_homomorphism (( Free (S,X0)),A) & for s be SortSymbol of S, i be Element of (X0 . s) holds ((ww . s) . ( root-tree [i, s])) = ( root-tree [i, s]) by Def10;

      the Sorts of A is MSSubset of ( Free (S,X0)) by Def6;

      then

      reconsider hG = (h || F) as ManySortedFunction of F qua ManySortedSet of S, the Sorts of ( Free (S,X0)) by Th22;

      ( FreeGen Y) is free & ( FreeMSA Y) = ( Free (S,Y)) by MSAFREE3: 31;

      then

      consider g be ManySortedFunction of ( Free (S,Y)), ( Free (S,X0)) such that

       A4: g is_homomorphism (( Free (S,Y)),( Free (S,X0))) & (g || F) = hG;

      take g;

      thus g is_homomorphism (( Free (S,Y)),( Free (S,X0))) by A4;

      

       A5: (ww ** g) is_homomorphism (( Free (S,Y)),A) by A3, A4, MSUALG_3: 10;

      now

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A6: ( dom ((h || F) . s)) = (F . s) & ( dom (((ww ** g) || F) . s)) = (F . s) by FUNCT_2:def 1;

        now

          let y be object;

          assume

           A7: y in (F . s);

          

           A8: ((g . s) . y) = (((g . s) | (F . s)) . y) by A7, FUNCT_1: 49

          .= (((h || F) . s) . y) by A4, MSAFREE:def 1;

          then

           A9: ((g . s) . y) in (the Sorts of A . s) by A7, FUNCT_2: 5;

          

           A10: (F . s) c= (the Sorts of ( Free (S,Y)) . s) by PBOOLE:def 2, PBOOLE:def 18;

          

           A11: ( dom (ww ** g)) = (the carrier of S /\ the carrier of S) by PARTFUN1:def 2;

          

          thus (((h || F) . x) . y) = ((ww . s) . ((g . s) . y)) by A8, A9, Th47

          .= (((ww . s) * (g . s)) . y) by A7, A10, FUNCT_2: 15

          .= (((ww ** g) . s) . y) by A11, PBOOLE:def 19

          .= ((((ww ** g) . s) | (F . s)) . y) by A7, FUNCT_1: 49

          .= ((((ww ** g) || F) . x) . y) by MSAFREE:def 1;

        end;

        hence ((h || F) . x) = (((ww ** g) || F) . x) by A6;

      end;

      hence h = (ww ** g) by A1, A5, EXTENS_1: 19, PBOOLE: 3;

      thus thesis by A4;

    end;

    theorem :: MSAFREE4:71

    

     Th71: for w be ManySortedFunction of X0, (the carrier of S --> NAT ) holds for s be SortSymbol of S holds for t be Element of ( Free (S,X0)), s holds for t1,t2 be Element of ( TermAlg S), s st t1 = ( # (t,w)) & t2 = ( # (((( canonical_homomorphism A0) . s) . t),w)) holds A0 |= (t1 '=' t2)

    proof

      set A = A0;

      let w be ManySortedFunction of X0, (the carrier of S --> NAT );

      let s be SortSymbol of S;

      set k = ( canonical_homomorphism A);

      set Y = (the carrier of S --> NAT );

      defpred P[ DecoratedTree-like Function] means for s be SortSymbol of S holds for t1,t2 be Element of ( TermAlg S), s holds for t3 be Term of S, X0 st t3 = ((k . s) . $1) & t1 = ( # ($1,w)) & t2 = ( # (t3,w)) holds A |= (t1 '=' t2);

      

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

      proof

        let s1 be SortSymbol of S;

        let v be Element of (X0 . s1);

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

        let s be SortSymbol of S;

        let t1,t2 be Element of ( TermAlg S), s;

        let t3 be Term of S, X0;

        assume

         A2: t3 = ((k . s) . t);

        assume

         A3: t1 = ( # (t,w));

        assume

         A4: t2 = ( # (t3,w));

        t1 = ( root-tree [((w . s1) . v), s1]) & ( FreeMSA Y) = ( Free (S,Y)) by A3, Th57, MSAFREE3: 31;

        then t1 in (the Sorts of ( Free (S,Y)) . s1) & t1 in (the Sorts of ( Free (S,Y)) . s) by MSAFREE3: 4;

        then (the Sorts of ( Free (S,Y)) . s1) meets (the Sorts of ( Free (S,Y)) . s) & (s <> s1 implies (the Sorts of ( Free (S,Y)) . s1) misses (the Sorts of ( Free (S,Y)) . s)) by XBOOLE_0: 3, PROB_2:def 2;

        then t is Element of A, s by Th40;

        then t3 = t by A2, Th47;

        hence A |= (t1 '=' t2) by A3, A4;

      end;

      

       A5: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X0)) st for t be Term of S, X0 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,X0));

        assume for t be Term of S, X0 st t in ( rng p) holds P[t];

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

        let s be SortSymbol of S;

        let t1,t2 be Element of ( TermAlg S), s;

        let t3 be Term of S, X0;

        assume

         A6: t3 = ((k . s) . t);

        assume

         A7: t1 = ( # (t,w));

        assume

         A8: t2 = ( # (t3,w));

        

         A9: ( FreeMSA X0) = ( Free (S,X0)) by MSAFREE3: 31;

        then

        reconsider a = p as Element of ( Args (o,( Free (S,X0)))) by INSTALG1: 1;

        

         A10: t = (( Den (o,( Free (S,X0)))) . a) by A9, INSTALG1: 3;

        t1 is Element of (the Sorts of ( Free (S,Y)) . s) by MSAFREE3: 31;

        then

        reconsider tq = t1 as Term of S, Y by Th42;

        defpred Q[ Nat, object] means for t be Element of ( Free (S,X0)) st t = (p . $1) holds $2 = ( # (t,w));

        

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

        

         A12: for i be Nat st i in ( Seg ( len p)) holds ex x be object st Q[i, x]

        proof

          let i be Nat;

          assume i in ( Seg ( len p));

          then (p . i) is Term of S, X0 by A11, MSATERM: 22;

          then (p . i) is Element of ( FreeMSA X0) by MSATERM: 13;

          then

          reconsider t = (p . i) as Element of ( Free (S,X0)) by MSAFREE3: 31;

          take x = ( # (t,w));

          thus Q[i, x];

        end;

        consider q be FinSequence such that

         A13: ( dom q) = ( Seg ( len p)) & for i be Nat st i in ( Seg ( len p)) holds Q[i, (q . i)] from FINSEQ_1:sch 1( A12);

        ( dom q) = ( dom p) & for i be Nat, t be Element of ( Free (S,X0)) st i in ( dom p) & t = (p . i) holds (q . i) = ( # (t,w)) by A11, A13;

        then

         A14: t1 = (( Sym (o,Y)) -tree q) by A7, Th58;

        now

          let i be object;

          assume

           A15: i in ( dom q);

          then (p . i) is Term of S, X0 by A11, A13, MSATERM: 22;

          then (p . i) is Element of ( FreeMSA X0) by MSATERM: 13;

          then

          reconsider t = (p . i) as Element of ( Free (S,X0)) by MSAFREE3: 31;

          (q . i) = ( # (t,w)) by A13, A15;

          then (q . i) is Element of ( Free (S,Y)) by MSAFREE3: 31;

          hence (q . i) is DecoratedTree;

        end;

        then q is DTree-yielding by TREES_3: 24;

        then (tq . {} ) = ( Sym (o,Y)) by A14, TREES_4:def 4;

        then ( the_sort_of tq) = ( the_result_sort_of o) by MSATERM: 17;

        then tq in ( FreeSort (Y,( the_result_sort_of o))) by MSATERM:def 5;

        then t1 in (the Sorts of ( TermAlg S) . s) & t1 in (the Sorts of ( TermAlg S) . ( the_result_sort_of o)) by MSAFREE:def 11;

        then

         A16: s = ( the_result_sort_of o) by PROB_2:def 2, XBOOLE_0: 3;

        reconsider tt = t as Element of ( Free (S,X0)), s by A16, A10, MSUALG_9: 18;

        

         A17: the Sorts of A is MSSubset of ( Free (S,X0)) by Def6;

        ((k . s) . tt) in (the Sorts of A . s) & (the Sorts of A . s) c= (the Sorts of ( Free (S,X0)) . s) by A17, PBOOLE:def 2, PBOOLE:def 18;

        then

        reconsider kt = ((k . s) . tt) as Element of ( Free (S,X0)), s;

        let h be ManySortedFunction of ( TermAlg S), A such that

         A18: h is_homomorphism (( TermAlg S),A);

        consider hh be ManySortedFunction of ( Free (S,X0)), ( TermAlg S) such that

         A19: hh is_homomorphism (( Free (S,X0)),( TermAlg S)) & for s be SortSymbol of S, t be Element of ( Free (S,X0)), s holds ( # (t,w)) = ((hh . s) . t) by Th56;

        

         A20: ((k . s) . (( Den (o,( Free (S,X0)))) . a)) in (the Sorts of A . s) & (the Sorts of A . s) c= (the Sorts of ( Free (S,X0)) . s) by A17, PBOOLE:def 2, PBOOLE:def 18, FUNCT_2: 5, A16, MSUALG_9: 18;

        

        thus ((h . s) . ((t1 '=' t2) `1 )) = ((h . s) . ((hh . s) . tt)) by A7, A19

        .= ((h . s) . ((hh . s) . (( Den (o,( Free (S,X0)))) . a))) by A9, INSTALG1: 3

        .= (((h . s) * (hh . s)) . (( Den (o,( Free (S,X0)))) . a)) by A16, MSUALG_9: 18, FUNCT_2: 15

        .= (((h ** hh) . s) . (( Den (o,( Free (S,X0)))) . a)) by MSUALG_3: 2

        .= (((h ** hh) . s) . (( Den (o,( Free (S,X0)))) . (k # a))) by A16, Th69, A18, A19, MSUALG_3: 10

        .= (((h ** hh) . s) . (( Den (o,A)) . (k # a))) by Th68, A18, A19, MSUALG_3: 10, A16

        .= (((h ** hh) . s) . ((k . s) . (( Den (o,( Free (S,X0)))) . a))) by A16, Def10, MSUALG_3:def 7

        .= (((h . s) * (hh . s)) . ((k . s) . (( Den (o,( Free (S,X0)))) . a))) by MSUALG_3: 2

        .= ((h . s) . ((hh . s) . ((k . s) . (( Den (o,( Free (S,X0)))) . a)))) by A20, FUNCT_2: 15

        .= ((h . s) . ((hh . s) . kt)) by A9, INSTALG1: 3

        .= ((h . s) . t2) by A6, A8, A19

        .= ((h . s) . ((t1 '=' t2) `2 ));

      end;

      

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

      let t be Element of (the Sorts of ( Free (S,X0)) . s);

      

       A22: t is Term of S, X0 by Th42;

      let t1,t2 be Element of ( TermAlg S), s;

      assume

       A23: t1 = ( # (t,w));

      assume

       A24: t2 = ( # (((k . s) . t),w));

      ((k . s) . t) is Element of (the Sorts of A . s);

      then ((k . s) . t) is Term of S, X0 by Th42;

      hence A |= (t1 '=' t2) by A22, A21, A23, A24;

    end;

    theorem :: MSAFREE4:72

    for w be ManySortedFunction of X0, (the carrier of S --> NAT ) holds for o be OperSymbol of S holds for p be Element of ( Args (o,( Free (S,X0)))) holds for q be Element of ( Args (o,A0)) st (( canonical_homomorphism A0) # p) = q holds for t1,t2 be Term of S, X0 st t1 = (( Den (o,( Free (S,X0)))) . p) & t2 = (( Den (o,A0)) . q) holds for t3,t4 be Element of ( TermAlg S), ( the_result_sort_of o) st t3 = ( # (t1,w)) & t4 = ( # (t2,w)) holds A0 |= (t3 '=' t4)

    proof

      set A = A0;

      let w be ManySortedFunction of X0, (the carrier of S --> NAT );

      set Y = (the carrier of S --> NAT );

      let o be OperSymbol of S;

      let p be Element of ( Args (o,( Free (S,X0))));

      let q be Element of ( Args (o,A)) such that

       A1: (( canonical_homomorphism A) # p) = q;

      ( Free (S,X0)) = ( FreeMSA X0) by MSAFREE3: 31;

      then

      reconsider p0 = p as ArgumentSeq of ( Sym (o,X0)) by INSTALG1: 1;

      let t1,t2 be Term of S, X0 such that

       A2: t1 = (( Den (o,( Free (S,X0)))) . p) & t2 = (( Den (o,A)) . q);

      let t3,t4 be Element of ( TermAlg S), ( the_result_sort_of o);

      assume

       A3: t3 = ( # (t1,w)) & t4 = ( # (t2,w));

      reconsider t1 as Element of ( Free (S,X0)), ( the_result_sort_of o) by A2, MSUALG_9: 18;

      t2 = ((( canonical_homomorphism A) . ( the_result_sort_of o)) . t1) by A1, A2, Def10, MSUALG_3:def 7;

      hence A |= (t3 '=' t4) by A3, Th71;

    end;

    theorem :: MSAFREE4:73

    

     Th73: for w be ManySortedFunction of X0, (the carrier of S --> NAT ) st w is "1-1" holds ex g be ManySortedFunction of ( TermAlg S), ( Free (S,X0)) st g is_homomorphism (( TermAlg S),( Free (S,X0))) & for s be SortSymbol of S holds for t be Element of ( Free (S,X0)), s holds ((g . s) . ( # (t,w))) = t

    proof

      let w be ManySortedFunction of X0, (the carrier of S --> NAT );

      assume

       A1: w is "1-1";

      

       A2: ( Free (S,X0)) = ( FreeMSA X0) by MSAFREE3: 31;

      reconsider G = ( FreeGen (the carrier of S --> NAT )) as non-empty GeneratorSet of ( TermAlg S);

      set Y = (the carrier of S --> NAT );

      defpred P[ set, set, set] means for x be Element of (Y . $1) st $2 = ( root-tree [x, $1]) holds (x in ( rng (w . $1)) implies $3 = ( root-tree [(((w . $1) " ) . x), $1])) & (x nin ( rng (w . $1)) implies $3 = the Element of (the Sorts of ( Free (S,X0)) . $1));

      

       A3: for s be SortSymbol of S, t be Element of (G . s) holds ex T be Element of (the Sorts of ( Free (S,X0)) . s) st P[s, t, T]

      proof

        let s be SortSymbol of S;

        let t be Element of (G . s);

        t in (G . s);

        then t in ( FreeGen (s,Y)) by MSAFREE:def 16;

        then

        consider x be set such that

         A4: x in (Y . s) & t = ( root-tree [x, s]) by MSAFREE:def 15;

        reconsider x as Element of (Y . s) by A4;

        per cases ;

          suppose

           A5: x in ( rng (w . s));

          then

          consider a be object such that

           A6: a in ( dom (w . s)) & x = ((w . s) . a) by FUNCT_1:def 3;

          reconsider T = ( root-tree [a, s]) as Element of (the Sorts of ( Free (S,X0)) . s) by A6, MSAFREE3: 4;

          take T;

          let x0 be Element of (Y . s);

          assume t = ( root-tree [x0, s]);

          then

           A7: [x0, s] = [x, s] by A4, TREES_4: 4;

          then

           A8: x = x0 by XTUPLE_0: 1;

          (w . s) is one-to-one by A1, MSUALG_3: 1;

          hence x0 in ( rng (w . s)) implies T = ( root-tree [(((w . s) " ) . x0), s]) by A6, A8, FUNCT_1: 34;

          thus thesis by A5, A7, XTUPLE_0: 1;

        end;

          suppose

           A9: x nin ( rng (w . s));

          set T = the Element of (the Sorts of ( Free (S,X0)) . s);

          take T;

          let x0 be Element of (Y . s);

          assume t = ( root-tree [x0, s]);

          then [x0, s] = [x, s] by A4, TREES_4: 4;

          hence thesis by A9, XTUPLE_0: 1;

        end;

      end;

      consider gg be ManySortedFunction of G, the Sorts of ( Free (S,X0)) such that

       A10: for s be SortSymbol of S holds for t be Element of (G . s) holds P[s, t, ((gg . s) . t)] from CIRCTRM1:sch 1( A3);

      consider g be ManySortedFunction of ( TermAlg S), ( Free (S,X0)) such that

       A11: g is_homomorphism (( TermAlg S),( Free (S,X0))) & (g || G) = gg by MSAFREE:def 5;

      take g;

      thus g is_homomorphism (( TermAlg S),( Free (S,X0))) by A11;

      defpred P[ DecoratedTree] means for s be SortSymbol of S st $1 in (the Sorts of ( Free (S,X0)) . s) holds ((g . s) . ( # ($1,w))) = $1;

      

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

      proof

        let s be SortSymbol of S;

        let v be Element of (X0 . s);

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

        let s0 be SortSymbol of S;

        assume

         A13: t in (the Sorts of ( Free (S,X0)) . s0);

        t in (the Sorts of ( Free (S,X0)) . s) by MSAFREE3: 4;

        then

         A14: s = s0 by A13, XBOOLE_0: 3, PROB_2:def 2;

        then

         A15: ((w . s0) . v) in ( rng (w . s0)) & ((w . s0) . v) in (Y . s0) by FUNCT_2: 4, FUNCT_2: 5;

        then ( root-tree [((w . s0) . v), s0]) in ( FreeGen (s0,Y)) by MSAFREE:def 15;

        then

         A16: ( root-tree [((w . s0) . v), s0]) in (G . s0) by MSAFREE:def 16;

        then

         A17: ((gg . s0) . ( root-tree [((w . s0) . v), s0])) = ( root-tree [(((w . s0) " ) . ((w . s0) . v)), s0]) by A15, A10;

        

         A18: ( # (t,w)) = ( root-tree [((w . s0) . v), s0]) by A14, Th57;

        (gg . s0) = ((g . s0) | (G . s0)) by A11, MSAFREE:def 1;

        then

         A19: ((g . s0) . ( root-tree [((w . s0) . v), s0])) = ( root-tree [(((w . s0) " ) . ((w . s0) . v)), s0]) by A16, A17, FUNCT_1: 49;

        (w . s0) is one-to-one by A1, MSUALG_3: 1;

        hence thesis by A14, A18, A19, FUNCT_2: 26;

      end;

      

       A20: for o be OperSymbol of S, p be ArgumentSeq of ( Sym (o,X0)) st for t be Term of S, X0 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,X0));

        assume

         A21: for t be Term of S, X0 st t in ( rng p) holds P[t];

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

        let s be SortSymbol of S;

        assume

         A22: t in (the Sorts of ( Free (S,X0)) . s);

        (t . {} ) = [o, the carrier of S] by TREES_4:def 4;

        then ( the_sort_of (( Sym (o,X0)) -tree p)) = ( the_result_sort_of o) by MSATERM: 17;

        then t in ( FreeSort (X0,( the_result_sort_of o))) by MSATERM:def 5;

        then t in (the Sorts of ( Free (S,X0)) . ( the_result_sort_of o)) by A2, MSAFREE:def 11;

        then

         A23: s = ( the_result_sort_of o) by A22, XBOOLE_0: 3, PROB_2:def 2;

        defpred Q[ Nat, object] means for t be Element of ( Free (S,X0)) st t = (p . $1) holds $2 = ( # (t,w));

        

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

        

         A25: for i be Nat st i in ( Seg ( len p)) holds ex x be object st Q[i, x]

        proof

          let i be Nat;

          assume i in ( Seg ( len p));

          then (p . i) is Term of S, X0 by A24, MSATERM: 22;

          then (p . i) is Element of ( FreeMSA X0) by MSATERM: 13;

          then

          reconsider t = (p . i) as Element of ( Free (S,X0)) by MSAFREE3: 31;

          take x = ( # (t,w));

          thus Q[i, x];

        end;

        consider q be FinSequence such that

         A26: ( dom q) = ( Seg ( len p)) & for i be Nat st i in ( Seg ( len p)) holds Q[i, (q . i)] from FINSEQ_1:sch 1( A25);

        ( dom q) = ( dom p) & for i be Nat, t be Element of ( Free (S,X0)) st i in ( dom p) & t = (p . i) holds (q . i) = ( # (t,w)) by A24, A26;

        then

         A27: ( # (t,w)) = (( Sym (o,Y)) -tree q) by Th58;

        now

          let i be object;

          assume

           A28: i in ( dom q);

          then (p . i) is Term of S, X0 by A24, A26, MSATERM: 22;

          then (p . i) is Element of ( FreeMSA X0) by MSATERM: 13;

          then

          reconsider t = (p . i) as Element of ( Free (S,X0)) by MSAFREE3: 31;

          (q . i) = ( # (t,w)) by A26, A28;

          then (q . i) is Element of ( Free (S,Y)) by MSAFREE3: 31;

          hence (q . i) is DecoratedTree;

        end;

        then

         A29: q is DTree-yielding by TREES_3: 24;

        ( TermAlg S) = ( Free (S,Y)) by MSAFREE3: 31;

        then (( # (t,w)) . {} ) = ( Sym (o,Y)) & ( # (t,w)) is Term of S, Y by Th42, A29, A27, TREES_4:def 4;

        then

        consider r be ArgumentSeq of ( Sym (o,Y)) such that

         A30: ( # (t,w)) = ( [o, the carrier of S] -tree r) by MSATERM: 10;

        r = q by A29, A27, A30, TREES_4: 15;

        then

        reconsider q as Element of ( Args (o,( TermAlg S))) by INSTALG1: 1;

        reconsider a = p as Element of ( Args (o,( Free (S,X0)))) by A2, INSTALG1: 1;

        for n be Nat st n in ( dom q) holds (a . n) = ((g . (( the_arity_of o) /. n)) . (q . n))

        proof

          let n be Nat;

          assume

           A31: n in ( dom q);

          

           A32: ( dom q) = ( dom ( the_arity_of o)) & ( dom a) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

          then

          reconsider tn = (a . n) as Term of S, X0 by A31, MSATERM: 22;

          

           A33: tn in ( rng p) by A31, A32, FUNCT_1:def 3;

          ( the_sort_of tn) = (( the_arity_of o) /. n) by A31, A32, MSATERM: 23;

          then tn in ( FreeSort (X0,(( the_arity_of o) /. n))) by MSATERM:def 5;

          then tn in (the Sorts of ( Free (S,X0)) . (( the_arity_of o) /. n)) by A2, MSAFREE:def 11;

          then

           A34: ((g . (( the_arity_of o) /. n)) . ( # (tn,w))) = tn by A21, A33;

           Q[n, (q . n)] & tn is Element of ( Free (S,X0)) by A2, A26, A31, MSATERM: 13;

          hence (a . n) = ((g . (( the_arity_of o) /. n)) . (q . n)) by A34;

        end;

        then

         A35: (g # q) = a by MSUALG_3:def 6;

        

        thus ((g . s) . ( # (t,w))) = ((g . s) . (( Den (o,( TermAlg S))) . q)) by A27, INSTALG1: 3

        .= (( Den (o,( Free (S,X0)))) . (g # q)) by A11, A23

        .= t by A2, A35, INSTALG1: 3;

      end;

      

       A36: for t be Term of S, X0 holds P[t] from MSATERM:sch 1( A12, A20);

      let s be SortSymbol of S;

      let t be Element of (the Sorts of ( Free (S,X0)) . s);

      t is Term of S, X0 by Th42;

      hence ((g . s) . ( # (t,w))) = t by A36;

    end;

    theorem :: MSAFREE4:74

    

     Th74: for B be non-empty MSAlgebra over S holds for h be ManySortedFunction of ( Free (S,X0)), B st h is_homomorphism (( Free (S,X0)),B) holds for w be ManySortedFunction of X0, (the carrier of S --> NAT ) st w is "1-1" holds for s be SortSymbol of S holds for t1,t2 be Element of ( Free (S,X0)), s holds for t3,t4 be Element of ( TermAlg S), s st t3 = ( # (t1,w)) & t4 = ( # (t2,w)) holds B |= (t3 '=' t4) implies ((h . s) . t1) = ((h . s) . t2)

    proof

      let A be non-empty MSAlgebra over S;

      let h be ManySortedFunction of ( Free (S,X0)), A;

      assume

       A1: h is_homomorphism (( Free (S,X0)),A);

      let w be ManySortedFunction of X0, (the carrier of S --> NAT );

      assume w is "1-1";

      then

      consider g be ManySortedFunction of ( TermAlg S), ( Free (S,X0)) such that

       A2: g is_homomorphism (( TermAlg S),( Free (S,X0))) & for s be SortSymbol of S holds for t be Element of ( Free (S,X0)), s holds ((g . s) . ( # (t,w))) = t by Th73;

      let s be SortSymbol of S;

      let t1,t2 be Element of ( Free (S,X0)), s;

      let t3,t4 be Element of ( TermAlg S), s;

      assume

       A3: t3 = ( # (t1,w));

      assume

       A4: t4 = ( # (t2,w));

      assume A |= (t3 '=' t4);

      then

       A6: (((h ** g) . s) . ((t3 '=' t4) `1 )) = (((h ** g) . s) . ((t3 '=' t4) `2 )) by A2, A1, MSUALG_3: 10;

      ((h ** g) . s) = ((h . s) * (g . s)) by MSUALG_3: 2;

      then (((h ** g) . s) . t3) = ((h . s) . ((g . s) . t3)) & (((h ** g) . s) . t4) = ((h . s) . ((g . s) . t4)) by FUNCT_2: 15;

      

      hence ((h . s) . t1) = ((h . s) . ((g . s) . t4)) by A2, A6, A3

      .= ((h . s) . t2) by A2, A4;

    end;

    theorem :: MSAFREE4:75

    

     Th75: for G be GeneratorSet of A0 st G = ( FreeGen X0) holds G is ( Equations (S,A0)) -free

    proof

      set A = A0;

      

       A1: ( FreeMSA X0) = ( Free (S,X0)) by MSAFREE3: 31;

      let G be GeneratorSet of A;

      assume

       A2: G = ( FreeGen X0);

      set T = ( Equations (S,A));

      let B be T -satisfying non-empty MSAlgebra over S;

      let f be ManySortedFunction of G, the Sorts of B;

      reconsider f0 = f as ManySortedFunction of ( FreeGen X0), the Sorts of B by A2;

      reconsider H = ( FreeGen X0) as free GeneratorSet of ( Free (S,X0)) by A1;

      consider g be ManySortedFunction of ( Free (S,X0)), B such that

       A3: g is_homomorphism (( Free (S,X0)),B) & (g || H) = f0 by MSAFREE:def 5;

      the Sorts of A is MSSubset of ( Free (S,X0)) by Def6;

      then

      reconsider i = ( id the Sorts of A) as ManySortedFunction of A, ( Free (S,X0)) by Th22;

      take h = (g ** i);

      thus h is_homomorphism (A,B)

      proof

        let o be OperSymbol of S such that ( Args (o,A)) <> {} ;

        let x be Element of ( Args (o,A));

        set s = ( the_result_sort_of o);

        (( Den (o,A)) . x) in ( Result (o,A));

        then

         A4: (( Den (o,A)) . x) in (the Sorts of A . s) by FUNCT_2: 15;

        

         A5: (i . s) = ( id (the Sorts of A . s)) by MSUALG_3:def 1;

        x in ( Args (o,A)) & ( Args (o,A)) c= ( Args (o,( Free (S,X0)))) by Th41;

        then

        reconsider x0 = x as Element of ( Args (o,( Free (S,X0))));

        set w = the "1-1" ManySortedFunction of X0, (the carrier of S --> NAT );

        (( Den (o,A)) . x) is Element of ( Result (o,A)) & (( Den (o,( Free (S,X0)))) . x0) is Element of ( Result (o,( Free (S,X0))));

        then

        reconsider f1 = (( Den (o,A)) . x), f2 = (( Den (o,( Free (S,X0)))) . x0) as Term of S, X0 by Th42;

        reconsider f = (( Den (o,( Free (S,X0)))) . x0) as Element of ( Free (S,X0)), s by MSUALG_9: 18;

        reconsider fa = ((( canonical_homomorphism A) . s) . f) as Element of ( Free (S,X0)), s by Th39;

        f1 in (the Sorts of A . s) by MSUALG_9: 18;

        then f1 is Element of ( Free (S,X0)), s by Th39;

        then f1 in (the Sorts of ( Free (S,X0)) . s) & f2 in (the Sorts of ( Free (S,X0)) . s) by MSUALG_9: 18;

        then f1 in ( FreeSort (X0,s)) & f2 in ( FreeSort (X0,s)) by A1, MSAFREE:def 11;

        then ( the_sort_of f1) = s & ( the_sort_of f2) = s by MSATERM:def 5;

        then

        reconsider t2 = ( # (f1,w)), t1 = ( # (f2,w)) as Element of ( TermAlg S), s by Th60;

        

         A6: f1 = ((( canonical_homomorphism A) . s) . f) by Th67;

        A |= (t1 '=' t2) by A6, Th71;

        then (t1 '=' t2) in { e where e be Element of (( Equations S) . s) : A |= e };

        then (t1 '=' t2) in (T . s) & B |= T by Def14, Def11;

        then

         A7: ((g . s) . f) = ((g . s) . fa) by A6, A3, Th74;

         A8:

        now

          let n be Nat;

          set an = (( the_arity_of o) /. n);

          assume

           A9: n in ( dom x);

          

           A10: ( dom (the Sorts of A * ( the_arity_of o))) = ( dom ( the_arity_of o)) & ( dom x) = ( dom ( the_arity_of o)) by MSUALG_3: 6, PRALG_2: 3;

          then (x . n) in ((the Sorts of A * ( the_arity_of o)) . n) by A9, MSUALG_3: 6;

          then (x . n) in (the Sorts of A . (( the_arity_of o) . n)) by A9, A10, FUNCT_1: 13;

          then

           A11: (x . n) in (the Sorts of A . an) by A9, A10, PARTFUN1:def 6;

          

          thus ((h # x) . n) = ((h . an) . (x . n)) by A9, MSUALG_3:def 6

          .= (((g . an) * (i . an)) . (x . n)) by MSUALG_3: 2

          .= ((g . an) . ((i . an) . (x . n))) by A11, FUNCT_2: 15

          .= ((g . an) . (( id (the Sorts of A . an)) . (x . n))) by MSUALG_3:def 1

          .= ((g . (( the_arity_of o) /. n)) . (x . n)) by A11, FUNCT_1: 17;

        end;

        

        thus ((h . s) . (( Den (o,A)) . x)) = (((g . s) * (i . s)) . (( Den (o,A)) . x)) by MSUALG_3: 2

        .= ((g . s) . ((i . s) . (( Den (o,A)) . x))) by A4, FUNCT_2: 15

        .= ((g . s) . (( Den (o,A)) . x)) by A5, A4, FUNCT_1: 18

        .= ((g . s) . (( Den (o,( Free (S,X0)))) . x0)) by A7, Th67

        .= (( Den (o,B)) . (g # x0)) by A3

        .= (( Den (o,B)) . (h # x)) by A8, MSUALG_3:def 6;

      end;

      now

        let x be object;

        assume x in the carrier of S;

        then

        reconsider s = x as SortSymbol of S;

        

         A12: (G . s) c= (the Sorts of A . s) by PBOOLE:def 2, PBOOLE:def 18;

        ( dom (g . s)) = (the Sorts of ( Free (S,X0)) . s) & ( rng (i . s)) c= (the Sorts of ( Free (S,X0)) . s) by FUNCT_2:def 1;

        

        then ( dom ((g . s) * (i . s) qua Function)) = ( dom (i . s)) by RELAT_1: 27

        .= (the Sorts of A . s) by FUNCT_2:def 1;

        then

         A13: ( dom (((g . s) * (i . s)) | (G . s))) = (G . s) by A12, RELAT_1: 62;

        the Sorts of A is MSSubset of ( Free (S,X0)) by Def6;

        then (the Sorts of A . s) c= (the Sorts of ( Free (S,X0)) . s) by PBOOLE:def 2, PBOOLE:def 18;

        then (G . s) c= (the Sorts of ( Free (S,X0)) . s) & ( dom (g . s)) = (the Sorts of ( Free (S,X0)) . s) by A12, FUNCT_2:def 1;

        then

         A14: ( dom ((g . s) | (H . s))) = (G . s) by A2, RELAT_1: 62;

         A15:

        now

          let x be object;

          assume

           A16: x in (G . s);

          

          hence ((((g . s) * (i . s)) | (G . s)) . x) = (((g . s) * (i . s)) . x) by FUNCT_1: 49

          .= ((g . s) . ((i . s) . x)) by A12, A16, FUNCT_2: 15

          .= ((g . s) . (( id (the Sorts of A . s)) . x)) by MSUALG_3:def 1

          .= ((g . s) . x) by A12, A16, FUNCT_1: 17

          .= (((g . s) | (H . s)) . x) by A2, A16, FUNCT_1: 49;

        end;

        

        thus ((h || G) . x) = ((h . s) | (G . s)) by MSAFREE:def 1

        .= (((g . s) * (i . s)) | (G . s)) by MSUALG_3: 2

        .= ((g . s) | (H . s)) by A13, A14, A15

        .= (f . x) by A3, MSAFREE:def 1;

      end;

      hence (h || G) = f;

    end;

    theorem :: MSAFREE4:76

    A0 is ( Equations (S,A0)) -free

    proof

      reconsider G = ( FreeGen X0) as GeneratorSet of A0 by Th45;

      take G;

      thus thesis by Th75;

    end;

    begin

    definition

      let I be set;

      let X,Y be ManySortedSet of I;

      let R be ManySortedRelation of X, Y;

      let x be object;

      :: original: .

      redefine

      func R . x -> Relation of (X . x), (Y . x) ;

      coherence

      proof

        per cases ;

          suppose x in I;

          hence thesis by MSUALG_4:def 1;

        end;

          suppose x nin ( dom R);

          then (R . x) = {} by FUNCT_1:def 2;

          hence thesis by XBOOLE_1: 2;

        end;

      end;

    end

    definition

      let I be set;

      let X be ManySortedSet of I;

      let R be ManySortedRelation of X;

      :: MSAFREE4:def16

      attr R is terminating means

      : Def16: for x be set st x in I holds (R . x) is strongly-normalizing;

      :: MSAFREE4:def17

      attr R is with_UN_property means

      : Def17: for x be set st x in I holds (R . x) is with_UN_property;

    end

    registration

      cluster -> strongly-normalizing with_UN_property for empty set;

      coherence ;

    end

    theorem :: MSAFREE4:77

    

     Th77: for I be set holds for A be ManySortedSet of I holds ex R be ManySortedRelation of A st R = (I --> {} ) & R is terminating

    proof

      let I be set;

      let A be ManySortedSet of I;

      set R = (I --> {} );

      for i be set st i in I holds (R . i) is Relation of (A . i) by XBOOLE_1: 2;

      then

      reconsider R as ManySortedRelation of A by MSUALG_4:def 1;

      take R;

      thus R = (I --> {} );

      let i be set;

      thus thesis;

    end;

    registration

      let I be set;

      let X be ManySortedSet of I;

      cluster empty-yielding -> with_UN_property terminating for ManySortedRelation of X;

      coherence ;

      cluster empty-yielding for ManySortedRelation of X;

      existence

      proof

        consider R be ManySortedRelation of X such that

         A1: R = (I --> {} ) & R is terminating by Th77;

        take R;

        ( rng R) c= { {} } by A1, FUNCOP_1: 13;

        hence thesis by RELAT_1:def 15;

      end;

    end

    registration

      let I be set;

      let X be ManySortedSet of I;

      let R be terminating ManySortedRelation of X;

      let i be object;

      cluster (R . i) -> strongly-normalizing;

      coherence

      proof

        per cases ;

          suppose i in I;

          hence thesis by Def16;

        end;

          suppose i nin ( dom R);

          hence thesis by FUNCT_1:def 2;

        end;

      end;

    end

    registration

      let I be set;

      let X be ManySortedSet of I;

      let R be with_UN_property ManySortedRelation of X;

      let i be object;

      cluster (R . i) -> with_UN_property;

      coherence

      proof

        per cases ;

          suppose i in I;

          hence thesis by Def17;

        end;

          suppose i nin ( dom R);

          hence thesis by FUNCT_1:def 2;

        end;

      end;

    end

    definition

      let S, X;

      let R be ManySortedRelation of ( Free (S,X));

      :: MSAFREE4:def18

      attr R is NF-var means

      : Def18: for s be SortSymbol of S holds for x be Element of (( FreeGen X) . s) holds x is_a_normal_form_wrt (R . s);

    end

    theorem :: MSAFREE4:78

    x is_a_normal_form_wrt {} ;

    registration

      let S, X;

      cluster empty-yielding -> NF-var invariant stable for ManySortedRelation of ( Free (S,X));

      coherence

      proof

        let R be ManySortedRelation of ( Free (S,X));

        assume

         A1: R is empty-yielding;

        thus R is NF-var

        proof

          let s be SortSymbol of S;

          (R . s) is empty by A1;

          hence thesis;

        end;

        thus R is invariant by A1;

        let h be Endomorphism of ( Free (S,X));

        let s be SortSymbol of S;

        thus thesis by A1;

      end;

    end

    registration

      let S, X;

      cluster NF-var terminating with_UN_property for invariant stable ManySortedRelation of ( Free (S,X));

      existence

      proof

        take R = the empty-yielding ManySortedRelation of ( Free (S,X));

        thus thesis;

      end;

    end

    scheme :: MSAFREE4:sch5

    A { x1,x2() -> set , R() -> Relation , P[ set] } :

P[x2()]

      provided

       A1: P[x1()]

       and

       A2: R() reduces (x1(),x2())

       and

       A3: for y,z be set st R() reduces (x1(),y) & [y, z] in R() & P[y] holds P[z];

      consider t be RedSequence of R() such that

       A4: (t . 1) = x1() & (t . ( len t)) = x2() by A2;

      defpred Q[ Nat] means $1 in ( dom t) implies P[(t . $1)];

      

       A5: Q[ 0 ] by FINSEQ_3: 24;

       A6:

      now

        let i;

        assume

         A7: Q[i];

        thus Q[(i + 1)]

        proof

          assume

           A8: (i + 1) in ( dom t) & not P[(t . (i + 1))];

          per cases by NAT_1: 3;

            suppose i = 0 ;

            hence thesis by A1, A4, A8;

          end;

            suppose i > 0 ;

            then

            consider j be Nat such that

             A9: i = (j + 1) by NAT_1: 6;

            i <= (i + 1) & (i + 1) <= ( len t) by A8, FINSEQ_3: 25, NAT_1: 11;

            then

             A10: 1 <= i & i <= ( len t) & ( rng t) <> {} by A9, NAT_1: 11, XXREAL_0: 2;

            then

             A11: i in ( dom t) & 1 in ( dom t) by FINSEQ_3: 25, FINSEQ_3: 32;

             [(t . i), (t . (i + 1))] in R() by A8, A11, REWRITE1:def 2;

            hence thesis by A3, A7, A8, A11, A4, A10, REWRITE1: 17;

          end;

        end;

      end;

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

      hence thesis by A4, FINSEQ_5: 6;

    end;

    scheme :: MSAFREE4:sch6

    B { x1,x2() -> set , R() -> Relation , P[ set] } :

P[x1()]

      provided

       A1: P[x2()]

       and

       A2: R() reduces (x1(),x2())

       and

       A3: for y,z be set st [y, z] in R() & P[z] holds P[y];

      

       A4: (R() ~ ) reduces (x2(),x1()) by A2, REWRITE1: 24;

      

       A5: for y,z be set st (R() ~ ) reduces (x2(),y) & [y, z] in (R() ~ ) & P[y] holds P[z]

      proof

        let y,z be set;

        assume (R() ~ ) reduces (x2(),y);

        assume [y, z] in (R() ~ );

        then [z, y] in R() by RELAT_1:def 7;

        hence thesis by A3;

      end;

      thus P[x1()] from A( A1, A4, A5);

    end;

    definition

      let X be non empty set;

      let R be with_UN_property strongly-normalizing Relation of X;

      let x be Element of X;

      :: original: nf

      redefine

      func nf (x,R) -> Element of X ;

      coherence

      proof

        defpred P[ set] means $1 in X;

        

         A1: P[x];

        ( nf (x,R)) is_a_normal_form_of (x,R) by REWRITE1: 54;

        then

         A2: R reduces (x,( nf (x,R)));

        

         A3: for y,z be set st R reduces (x,y) & [y, z] in R & P[y] holds P[z]

        proof

          let y,z be set;

          assume R reduces (x,y);

          assume

           A4: [y, z] in R;

          z in ( field R) & ( field R) c= (X \/ X) by A4, RELAT_1: 15, RELSET_1: 8;

          hence thesis;

        end;

         P[( nf (x,R))] from A( A1, A2, A3);

        hence thesis;

      end;

    end

    definition

      let I be non empty set;

      let X be non-empty ManySortedSet of I;

      let R be with_UN_property terminating ManySortedRelation of X;

      :: MSAFREE4:def19

      func NForms R -> non-empty ManySortedSubset of X means

      : Def19: for i be Element of I holds (it . i) = the set of all ( nf (x,(R . i))) where x be Element of (X . i);

      existence

      proof

        deffunc F( Element of I) = the set of all ( nf (x,(R . $1))) where x be Element of (X . $1);

        consider A be ManySortedSet of I such that

         A1: for i be Element of I holds (A . i) = F(i) from PBOOLE:sch 5;

        

         A2: A is ManySortedSubset of X

        proof

          let i be object;

          assume i in I;

          then

          reconsider j = i as Element of I;

          

           A3: (A . j) = the set of all ( nf (x,(R . j))) where x be Element of (X . j) by A1;

          let x be object;

          assume x in (A . i);

          then ex y be Element of (X . j) st x = ( nf (y,(R . j))) by A3;

          hence thesis;

        end;

        A is non-empty

        proof

          let i be object;

          assume i in I;

          then

          reconsider j = i as Element of I;

          

           A4: (A . j) = the set of all ( nf (x,(R . j))) where x be Element of (X . j) by A1;

          set x = the Element of (X . j);

          ( nf (x,(R . j))) in (A . i) by A4;

          hence thesis;

        end;

        hence thesis by A1, A2;

      end;

      uniqueness

      proof

        let A1,A2 be non-empty ManySortedSubset of X such that

         A5: for i be Element of I holds (A1 . i) = the set of all ( nf (x,(R . i))) where x be Element of (X . i) and

         A6: for i be Element of I holds (A2 . i) = the set of all ( nf (x,(R . i))) where x be Element of (X . i);

        let i be Element of I;

        

        thus (A1 . i) = the set of all ( nf (x,(R . i))) where x be Element of (X . i) by A5

        .= (A2 . i) by A6;

      end;

    end

    scheme :: MSAFREE4:sch7

    MSFLambda { B() -> non empty set , D( object) -> non empty set , F( object, object) -> set } :

ex f be ManySortedFunction of B() st for o be Element of B() holds ( dom (f . o)) = D(o) & for x be Element of D(o) holds ((f . o) . x) = F(o,x);

      defpred P[ object, object] means ex g be Function st $2 = g & ( dom g) = D($1) & for x be Element of D($1) holds (g . x) = F($1,x);

      

       A1: for o be object st o in B() holds ex g be object st P[o, g]

      proof

        let o be object;

        assume o in B();

        deffunc G( object) = F(o,$1);

        consider g be Function such that

         A2: ( dom g) = D(o) & for x be object st x in D(o) holds (g . x) = G(x) from FUNCT_1:sch 3;

        take g, g;

        thus g = g & ( dom g) = D(o) by A2;

        thus for x be Element of D(o) holds (g . x) = F(o,x) by A2;

      end;

      consider f be ManySortedSet of B() such that

       A3: for o be object st o in B() holds P[o, (f . o)] from PBOOLE:sch 3( A1);

      f is Function-yielding

      proof

        let o be object;

        assume o in ( dom f);

        then P[o, (f . o)] by A3;

        hence (f . o) is Function;

      end;

      then

      reconsider f as ManySortedFunction of B();

      take f;

      let o be Element of B();

      

       A4: P[o, (f . o)] by A3;

      hence ( dom (f . o)) = D(o);

      let x be Element of D(o);

      thus ((f . o) . x) = F(o,x) by A4;

    end;

    definition

      let S, X;

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      :: MSAFREE4:def20

      func NFAlgebra R -> non-empty strict MSAlgebra over S means

      : Def20: the Sorts of it = ( NForms R) & for o be OperSymbol of S, a be Element of ( Args (o,it )) holds (( Den (o,it )) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o))));

      existence

      proof

        deffunc D( OperSymbol of S) = ( product (( NForms R) * ( the_arity_of $1)));

        deffunc F( OperSymbol of S, Element of D($1)) = ( nf ((( Den ($1,( Free (S,X)))) . $2),(R . ( the_result_sort_of $1))));

        consider f be ManySortedFunction of the carrier' of S such that

         A1: for o be OperSymbol of S holds ( dom (f . o)) = D(o) & for x be Element of D(o) holds ((f . o) . x) = F(o,x) from MSFLambda;

        f is ManySortedFunction of ((( NForms R) # ) * the Arity of S), (( NForms R) * the ResultSort of S)

        proof

          let i be object;

          assume i in the carrier' of S;

          then

          reconsider o = i as OperSymbol of S;

          ( dom (f . o)) = D(o) by A1;

          

          then

           A2: ( dom (f . o)) = ((( NForms R) # ) qua Function . ( the_arity_of o)) by FINSEQ_2:def 5

          .= (((( NForms R) # ) * the Arity of S) . o) by FUNCT_2: 15;

          ( rng (f . o)) c= ((( NForms R) * the ResultSort of S) . o)

          proof

            let x be object;

            assume x in ( rng (f . o));

            then

            consider y be object such that

             A3: y in ( dom (f . o)) & x = ((f . o) . y) by FUNCT_1:def 3;

            reconsider y as Element of D(o) by A1, A3;

            

             A4: x = F(o,y) by A1, A3;

            (( NForms R) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) c= (the Sorts of ( Free (S,X)) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) by Th15, PBOOLE:def 18;

            then ( product (( NForms R) * ( the_arity_of o))) c= ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by Th16;

            then ( product (( NForms R) * ( the_arity_of o))) c= ( Args (o,( Free (S,X)))) by PRALG_2: 3;

            then (( Den (o,( Free (S,X)))) . y) in ( Result (o,( Free (S,X)))) by FUNCT_2: 5;

            then

            reconsider a = (( Den (o,( Free (S,X)))) . y) as Element of ( Free (S,X)), ( the_result_sort_of o) by FUNCT_2: 15;

            ( nf (a,(R . ( the_result_sort_of o)))) in the set of all ( nf (z,(R . ( the_result_sort_of o)))) where z be Element of ( Free (S,X)), ( the_result_sort_of o);

            then ( nf (a,(R . ( the_result_sort_of o)))) in (( NForms R) . ( the_result_sort_of o)) by Def19;

            hence thesis by A4, FUNCT_2: 15;

          end;

          hence (f . i) is Function of (((( NForms R) # ) * the Arity of S) . i), ((( NForms R) * the ResultSort of S) . i) by A2, FUNCT_2: 2;

        end;

        then

        reconsider f as ManySortedFunction of ((( NForms R) # ) * the Arity of S), (( NForms R) * the ResultSort of S);

        reconsider A = MSAlgebra (# ( NForms R), f #) as non-empty strict MSAlgebra over S by MSUALG_1:def 3;

        take A;

        thus the Sorts of A = ( NForms R);

        let o be OperSymbol of S, a be Element of ( Args (o,A));

        ( Args (o,A)) = ( product (the Sorts of A * ( the_arity_of o))) by PRALG_2: 3;

        hence (( Den (o,A)) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o)))) by A1;

      end;

      uniqueness

      proof

        let A1,A2 be non-empty strict MSAlgebra over S such that

         A5: the Sorts of A1 = ( NForms R) & for o be OperSymbol of S, a be Element of ( Args (o,A1)) holds (( Den (o,A1)) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o)))) and

         A6: the Sorts of A2 = ( NForms R) & for o be OperSymbol of S, a be Element of ( Args (o,A2)) holds (( Den (o,A2)) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o))));

        the Charact of A1 = the Charact of A2

        proof

          let o be OperSymbol of S;

          

           A7: ( dom ( Den (o,A1))) = ( Args (o,A1)) & ( dom ( Den (o,A2))) = ( Args (o,A2)) by FUNCT_2:def 1;

          now

            let a be object;

            assume a in ( Args (o,A1));

            then (( Den (o,A1)) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o)))) & (( Den (o,A2)) . a) = ( nf ((( Den (o,( Free (S,X)))) . a),(R . ( the_result_sort_of o)))) by A5, A6;

            hence (( Den (o,A1)) . a) = (( Den (o,A2)) . a);

          end;

          hence thesis by A5, A6, A7, FUNCT_1: 2;

        end;

        hence thesis by A5, A6;

      end;

    end

    theorem :: MSAFREE4:79

    

     Th79: for R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X)) holds for a be SortSymbol of S st x in (( NForms R) . a) holds ( nf (x,(R . a))) = x

    proof

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      let a be SortSymbol of S;

      assume x in (( NForms R) . a);

      then x in the set of all ( nf (z,(R . a))) where z be Element of ( Free (S,X)), a by Def19;

      then ex z be Element of ( Free (S,X)), a st x = ( nf (z,(R . a)));

      hence ( nf (x,(R . a))) = x by Th18;

    end;

     Lm3:

    now

      let S, X;

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      let o be OperSymbol of S;

      set A = ( NFAlgebra R);

      

       A1: the Sorts of A = ( NForms R) by Def20;

      (( NForms R) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) c= (the Sorts of ( Free (S,X)) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) by Th15, PBOOLE:def 18;

      then ( product (( NForms R) * ( the_arity_of o))) c= ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by Th16;

      then ( product (( NForms R) * ( the_arity_of o))) c= ( Args (o,( Free (S,X)))) by PRALG_2: 3;

      hence ( Args (o,A)) c= ( Args (o,( Free (S,X)))) by A1, PRALG_2: 3;

    end;

    theorem :: MSAFREE4:80

    

     Th80: for R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X)) holds for g be ManySortedFunction of ( Free (S,X)), ( Free (S,X)) st g is_homomorphism (( Free (S,X)),( Free (S,X))) holds for s be SortSymbol of S holds for a be Element of ( Free (S,X)), s holds ( nf (((g . s) . ( nf (a,(R . s)))),(R . s))) = ( nf (((g . s) . a),(R . s)))

    proof

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      let g be ManySortedFunction of ( Free (S,X)), ( Free (S,X));

      assume g is_homomorphism (( Free (S,X)),( Free (S,X)));

      then

       A1: g is Endomorphism of ( Free (S,X)) by MSUALG_6:def 2;

      let s be SortSymbol of S;

      let a be Element of ( Free (S,X)), s;

      ( nf (a,(R . s))) is_a_normal_form_of (a,(R . s)) by REWRITE1: 54;

      then

       A2: (R . s) reduces (a,( nf (a,(R . s))));

      defpred P[ set] means ( nf (((g . s) . ( nf (a,(R . s)))),(R . s))) = ( nf (((g . s) . $1),(R . s)));

      

       A3: P[( nf (a,(R . s)))];

      

       A4: for b,c be set st [b, c] in (R . s) & P[c] holds P[b]

      proof

        let b,c be set;

        assume

         A5: [b, c] in (R . s);

        then

        reconsider x = b, y = c as Element of ( Free (S,X)), s by ZFMISC_1: 87;

        

         A6: [((g . s) . x), ((g . s) . y)] in (R . s) by A1, A5, MSUALG_6:def 9;

        assume P[c];

        hence P[b] by A6, REWRITE1: 29, REWRITE1: 55;

      end;

       P[a] from B( A3, A2, A4);

      hence ( nf (((g . s) . ( nf (a,(R . s)))),(R . s))) = ( nf (((g . s) . a),(R . s)));

    end;

    theorem :: MSAFREE4:81

    

     Th81: for p be FinSequence holds (p /^ 0 ) = p & for i be Nat st i >= ( len p) holds (p /^ i) = {}

    proof

      let p be FinSequence;

      

       A1: 0 <= ( len p) by NAT_1: 2;

       A2:

      now

        let i be Nat;

        assume 1 <= i & i <= ( len (p /^ 0 ));

        then i in ( dom (p /^ 0 )) by FINSEQ_3: 25;

        

        hence ((p /^ 0 ) . i) = (p . (i + 0 )) by A1, RFINSEQ:def 1

        .= (p . i);

      end;

      ( len (p /^ 0 )) = (( len p) - 0 ) by A1, RFINSEQ:def 1

      .= ( len p);

      hence (p /^ 0 ) = p by A2;

      let i be Nat;

      assume i >= ( len p);

      then i = ( len p) & ( len (p /^ ( len p))) = (( len p) - ( len p)) or i > ( len p) by XXREAL_0: 1, RFINSEQ:def 1;

      hence (p /^ i) = {} by RFINSEQ:def 1;

    end;

    theorem :: MSAFREE4:82

    

     Th82: for p,q be FinSequence holds (((p ^ <*x*>) ^ q) +* ((( len p) + 1),y)) = ((p ^ <*y*>) ^ q)

    proof

      let p,q be FinSequence;

      

       A1: ( dom ((p ^ <*x*>) ^ q)) = ( Seg ( len ((p ^ <*x*>) ^ q))) by FINSEQ_1:def 3

      .= ( Seg (( len (p ^ <*x*>)) + ( len q))) by FINSEQ_1: 22

      .= ( Seg ((( len p) + ( len <*x*>)) + ( len q))) by FINSEQ_1: 22

      .= ( Seg ((( len p) + 1) + ( len q))) by FINSEQ_1: 40;

      

       A2: ( dom ((p ^ <*y*>) ^ q)) = ( Seg ( len ((p ^ <*y*>) ^ q))) by FINSEQ_1:def 3

      .= ( Seg (( len (p ^ <*y*>)) + ( len q))) by FINSEQ_1: 22

      .= ( Seg ((( len p) + ( len <*y*>)) + ( len q))) by FINSEQ_1: 22

      .= ( Seg ((( len p) + 1) + ( len q))) by FINSEQ_1: 40;

      

       A3: ( dom (((p ^ <*x*>) ^ q) +* ((( len p) + 1),y))) = ( dom ((p ^ <*x*>) ^ q)) by FUNCT_7: 30;

      now

        let a be object;

        assume

         A4: a in ( dom ((p ^ <*x*>) ^ q));

        then

        reconsider i = a as Nat;

        

         A5: i >= 1 & i <= ( len ((p ^ <*x*>) ^ q)) by A4, FINSEQ_3: 25;

        per cases by XXREAL_0: 1;

          suppose

           A6: i < (( len p) + 1);

          then i <= ( len p) by NAT_1: 13;

          then i in ( dom p) & ( dom p) c= ( dom (p ^ <*x*>)) & ( dom p) c= ( dom (p ^ <*y*>)) by A5, FINSEQ_1: 26, FINSEQ_3: 25;

          then ((p ^ <*x*>) . i) = (p . i) & (((p ^ <*x*>) ^ q) . i) = ((p ^ <*x*>) . i) & (( len p) + 1) <> i & ((p ^ <*y*>) . i) = (p . i) & (((p ^ <*y*>) ^ q) . i) = ((p ^ <*y*>) . i) by A6, FINSEQ_1:def 7;

          hence ((((p ^ <*x*>) ^ q) +* ((( len p) + 1),y)) . a) = (((p ^ <*y*>) ^ q) . a) by FUNCT_7: 32;

        end;

          suppose

           A7: i = (( len p) + 1);

          ( len <*x*>) = 1 & ( len <*y*>) = 1 by FINSEQ_1: 40;

          then i >= 1 & ( len (p ^ <*x*>)) = (( len p) + 1) & ( len (p ^ <*y*>)) = (( len p) + 1) by A7, FINSEQ_1: 22, NAT_1: 11;

          then i in ( dom (p ^ <*x*>)) & i in ( dom (p ^ <*y*>)) by A7, FINSEQ_3: 25;

          then (((p ^ <*x*>) ^ q) . i) = ((p ^ <*x*>) . i) & ((p ^ <*x*>) . i) = x & (((p ^ <*y*>) ^ q) . i) = ((p ^ <*y*>) . i) & ((p ^ <*y*>) . i) = y by A7, FINSEQ_1:def 7, FINSEQ_1: 42;

          hence ((((p ^ <*x*>) ^ q) +* ((( len p) + 1),y)) . a) = (((p ^ <*y*>) ^ q) . a) by A4, A7, FUNCT_7: 31;

        end;

          suppose

           A8: i > (( len p) + 1);

          then i >= ((( len p) + 1) + 1) by NAT_1: 13;

          then

          consider j be Nat such that

           A9: i = (((( len p) + 1) + 1) + j) by NAT_1: 10;

          

           A10: i = ((( len p) + 1) + (1 + j)) by A9;

          ( len <*x*>) = 1 & ( len <*y*>) = 1 by FINSEQ_1: 40;

          then

           A11: ( len (p ^ <*x*>)) = (( len p) + 1) & ( len (p ^ <*y*>)) = (( len p) + 1) by FINSEQ_1: 22;

          then ( len ((p ^ <*x*>) ^ q)) = ((( len p) + 1) + ( len q)) by FINSEQ_1: 22;

          then 1 <= (1 + j) & (1 + j) <= ( len q) by A10, A4, FINSEQ_3: 25, XREAL_1: 6, NAT_1: 11;

          then (1 + j) in ( dom q) by FINSEQ_3: 25;

          then (((p ^ <*x*>) ^ q) . i) = (q . (1 + j)) & (((p ^ <*y*>) ^ q) . i) = (q . (1 + j)) by A10, A11, FINSEQ_1:def 7;

          hence ((((p ^ <*x*>) ^ q) +* ((( len p) + 1),y)) . a) = (((p ^ <*y*>) ^ q) . a) by A8, FUNCT_7: 32;

        end;

      end;

      hence (((p ^ <*x*>) ^ q) +* ((( len p) + 1),y)) = ((p ^ <*y*>) ^ q) by A1, A2, A3;

    end;

    theorem :: MSAFREE4:83

    

     Th83: for p be FinSequence, i be Nat st (i + 1) <= ( len p) holds (p | (i + 1)) = ((p | i) ^ <*(p . (i + 1))*>)

    proof

      let p be FinSequence;

      let i be Nat;

      assume

       A1: (i + 1) <= ( len p);

      then

       A2: ( len (p | (i + 1))) = (i + 1) by FINSEQ_1: 59;

      i < ( len p) by A1, NAT_1: 13;

      then

       A3: ( len (p | i)) = i & ( len <*(p . (i + 1))*>) = 1 by FINSEQ_1: 40, FINSEQ_1: 59;

      then

       A4: ( len ((p | i) ^ <*(p . (i + 1))*>)) = (i + 1) by FINSEQ_1: 22;

      thus ( len (p | (i + 1))) = ( len ((p | i) ^ <*(p . (i + 1))*>)) by A1, A4, FINSEQ_1: 59;

      let j be Nat;

      assume

       A5: 1 <= j & j <= ( len (p | (i + 1)));

      per cases by A5, A2, NAT_1: 8;

        suppose

         A6: j <= i;

        

         A7: j in ( dom (p | i)) by A3, A5, A6, FINSEQ_3: 25;

        

        thus ((p | (i + 1)) . j) = (p . j) by A2, A5, FINSEQ_1: 1, FUNCT_1: 49

        .= ((p | i) . j) by A6, A5, FINSEQ_1: 1, FUNCT_1: 49

        .= (((p | i) ^ <*(p . (i + 1))*>) . j) by A7, FINSEQ_1:def 7;

      end;

        suppose

         A8: j = (i + 1);

        then j >= 1 by NAT_1: 11;

        

        hence ((p | (i + 1)) . j) = (p . (i + 1)) by A8, FINSEQ_1: 1, FUNCT_1: 49

        .= (((p | i) ^ <*(p . (i + 1))*>) . j) by A3, A8, FINSEQ_1: 42;

      end;

    end;

    theorem :: MSAFREE4:84

    

     Th84: for p be FinSequence, i be Nat st (i + 1) <= ( len p) holds (p /^ i) = ( <*(p . (i + 1))*> ^ (p /^ (i + 1)))

    proof

      let p be FinSequence;

      let i be Nat;

      assume

       A1: (i + 1) <= ( len p);

      then

       A2: i < ( len p) by NAT_1: 13;

      then

       A3: ( len (p /^ i)) = (( len p) - i) by RFINSEQ:def 1;

      ( len ( <*(p . (i + 1))*> ^ (p /^ (i + 1)))) = (( len <*(p . (i + 1))*>) + ( len (p /^ (i + 1)))) by FINSEQ_1: 22

      .= (1 + ( len (p /^ (i + 1)))) by FINSEQ_1: 40

      .= (1 + (( len p) - (i + 1))) by A1, RFINSEQ:def 1

      .= (( len p) - i);

      hence ( len (p /^ i)) = ( len ( <*(p . (i + 1))*> ^ (p /^ (i + 1)))) by A2, RFINSEQ:def 1;

      let j be Nat;

      assume

       A4: 1 <= j & j <= ( len (p /^ i));

      then

       A5: j in ( dom (p /^ i)) by FINSEQ_3: 25;

      per cases by A4, XXREAL_0: 1;

        suppose

         A6: j = 1;

        

        hence ((p /^ i) . j) = (p . (i + 1)) by A2, A5, RFINSEQ:def 1

        .= (( <*(p . (i + 1))*> ^ (p /^ (i + 1))) . j) by A6, FINSEQ_1: 41;

      end;

        suppose j > 1;

        then j >= (1 + 1) by NAT_1: 13;

        then

        consider k be Nat such that

         A7: j = ((1 + 1) + k) by NAT_1: 10;

        

         A8: ( len <*(p . (i + 1))*>) = 1 by FINSEQ_1: 40;

        

         A9: ( len (p /^ (i + 1))) = (( len p) - (i + 1)) & ((( len p) - (i + 1)) + 1) = (( len p) - i) & j = ((1 + k) + 1) by A1, A7, RFINSEQ:def 1;

        then 1 <= (1 + k) & (1 + k) <= ( len (p /^ (i + 1))) by A3, A4, XREAL_1: 6, NAT_1: 11;

        then

         A10: (1 + k) in ( dom (p /^ (i + 1))) by FINSEQ_3: 25;

        

        thus ((p /^ i) . j) = (p . (i + j)) by A2, A5, RFINSEQ:def 1

        .= (p . ((i + 1) + (1 + k))) by A7

        .= ((p /^ (i + 1)) . (1 + k)) by A1, A10, RFINSEQ:def 1

        .= (( <*(p . (i + 1))*> ^ (p /^ (i + 1))) . j) by A8, A10, A9, FINSEQ_1:def 7;

      end;

    end;

    theorem :: MSAFREE4:85

    

     Th85: for R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X)) holds for g be ManySortedFunction of ( Free (S,X)), ( Free (S,X)) st g is_homomorphism (( Free (S,X)),( Free (S,X))) holds for h be ManySortedFunction of ( NFAlgebra R), ( NFAlgebra R) st for s be SortSymbol of S, x be Element of ( NFAlgebra R), s holds ((h . s) . x) = ( nf (((g . s) . x),(R . s))) holds for s be SortSymbol of S holds for o be OperSymbol of S st s = ( the_result_sort_of o) holds for x be Element of ( Args (o,( NFAlgebra R))) holds for y be Element of ( Args (o,( Free (S,X)))) st x = y holds ( nf ((( Den (o,( NFAlgebra R))) . (h # x)),(R . s))) = ( nf ((( Den (o,( Free (S,X)))) . (g # y)),(R . s)))

    proof

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      let g be ManySortedFunction of ( Free (S,X)), ( Free (S,X));

      assume g is_homomorphism (( Free (S,X)),( Free (S,X)));

      let h be ManySortedFunction of ( NFAlgebra R), ( NFAlgebra R);

      assume

       A1: for s be SortSymbol of S, x be Element of ( NFAlgebra R), s holds ((h . s) . x) = ( nf (((g . s) . x),(R . s)));

      let s be SortSymbol of S;

      let o be OperSymbol of S such that

       A2: s = ( the_result_sort_of o);

      let x be Element of ( Args (o,( NFAlgebra R)));

      let y be Element of ( Args (o,( Free (S,X)))) such that

       A3: x = y;

      defpred P[ Nat] means $1 <= ( len ( the_arity_of o)) implies ( nf ((( Den (o,( Free (S,X)))) . (((g # y) | $1) ^ ((h # x) /^ $1))),(R . s))) = ( nf ((( Den (o,( NFAlgebra R))) . (h # x)),(R . s)));

      ( dom (h # x)) = ( dom ( the_arity_of o)) & ( dom (g # y)) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

      then

       A4: ( len (h # x)) = ( len ( the_arity_of o)) & ( len (g # y)) = ( len ( the_arity_of o)) by FINSEQ_3: 29;

      ((g # y) | 0 ) = {} & ((h # x) /^ 0 ) = (h # x) by Th81;

      then

       A5: (((g # y) | 0 ) ^ ((h # x) /^ 0 )) = (h # x) by FINSEQ_1: 34;

      

       A6: ( Args (o,( NFAlgebra R))) c= ( Args (o,( Free (S,X)))) & (h # x) in ( Args (o,( NFAlgebra R))) by Lm3;

      then

      reconsider hx = (h # x) as Element of ( Args (o,( Free (S,X))));

      ( NForms R) c= the Sorts of ( Free (S,X)) & the Sorts of ( NFAlgebra R) = ( NForms R) by Def20, PBOOLE:def 18;

      then ( Result (o,( Free (S,X)))) = (the Sorts of ( Free (S,X)) . s) & ( Result (o,( NFAlgebra R))) = (the Sorts of ( NFAlgebra R) . s) & (the Sorts of ( NFAlgebra R) . s) c= (the Sorts of ( Free (S,X)) . s) & (( Den (o,( NFAlgebra R))) . (h # x)) in ( Result (o,( NFAlgebra R))) by A2, FUNCT_2: 15;

      then

      reconsider Dx = (( Den (o,( Free (S,X)))) . hx), Dnx = (( Den (o,( NFAlgebra R))) . (h # x)) as Element of ( Free (S,X)), s;

      ( nf (( nf (Dx,(R . s))),(R . s))) = ( nf (Dnx,(R . s))) by A2, Def20;

      then

       A7: P[ 0 ] by A5, Th18;

       A8:

      now

        let i be Nat;

        assume

         A9: P[i];

        thus P[(i + 1)]

        proof

          assume

           A10: (i + 1) <= ( len ( the_arity_of o));

          then

           A11: i < ( len ( the_arity_of o)) by NAT_1: 13;

          

           A12: ( len ((h # x) | i)) = i & ( len ((g # y) | i)) = i by A4, A11, FINSEQ_1: 59;

          

           A13: ((g # y) | (i + 1)) = (((g # y) | i) ^ <*((g # y) . (i + 1))*>) by A4, A10, Th83;

          

           A14: ((h # x) /^ i) = ( <*((h # x) . (i + 1))*> ^ ((h # x) /^ (i + 1))) by A4, A10, Th84;

          

           A15: (i + 1) in ( dom ( the_arity_of o)) & ( dom (the Sorts of ( NFAlgebra R) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by A10, NAT_1: 11, FINSEQ_3: 25, PRALG_2: 3;

          

           A16: (x . (i + 1)) in ((the Sorts of ( NFAlgebra R) * ( the_arity_of o)) . (i + 1)) & (( the_arity_of o) /. (i + 1)) = (( the_arity_of o) . (i + 1)) by A15, PARTFUN1:def 6, MSUALG_3: 6;

          then

          reconsider xi1 = (x . (i + 1)) as Element of ( NFAlgebra R), (( the_arity_of o) /. (i + 1)) by A15, FUNCT_1: 13;

          ( dom x) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

          

          then ((h # x) . (i + 1)) = ((h . (( the_arity_of o) /. (i + 1))) . xi1) by A15, MSUALG_3:def 6

          .= ( nf (((g . (( the_arity_of o) /. (i + 1))) . xi1),(R . (( the_arity_of o) /. (i + 1))))) by A1;

          then (hx . (i + 1)) is_a_normal_form_of (((g . (( the_arity_of o) /. (i + 1))) . xi1),(R . (( the_arity_of o) /. (i + 1)))) by REWRITE1: 54;

          then

           A17: (R . (( the_arity_of o) /. (i + 1))) reduces (((g . (( the_arity_of o) /. (i + 1))) . xi1),(hx . (i + 1)));

          

           A18: ( dom (h # x)) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

          then

           A19: ( len (h # x)) = ( len ( the_arity_of o)) by FINSEQ_3: 29;

          defpred Q[ set] means ( nf ((( Den (o,( Free (S,X)))) . ((((g # y) | i) ^ <*$1*>) ^ ((h # x) /^ (i + 1)))),(R . s))) = ( nf ((( Den (o,( NFAlgebra R))) . (h # x)),(R . s)));

          

           A20: Q[(hx . (i + 1))] by A9, A10, NAT_1: 13, A14, FINSEQ_1: 32;

          

           A21: for a,b be set st [a, b] in (R . (( the_arity_of o) /. (i + 1))) & Q[b] holds Q[a]

          proof

            let a,b be set;

            assume

             A22: [a, b] in (R . (( the_arity_of o) /. (i + 1)));

            then

            reconsider c = a, d = b as Element of (the Sorts of ( Free (S,X)) . (( the_arity_of o) /. (i + 1))) by ZFMISC_1: 87;

            reconsider j = (i + 1) as Element of NAT by ORDINAL1:def 12;

            set f = ( transl (o,j,((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))),( Free (S,X))));

            now

              

               A23: ( len (((g # y) | i) ^ <*d*>)) = (i + ( len <*d*>)) by A12, FINSEQ_1: 22

              .= (i + 1) by FINSEQ_1: 40;

              thus

               A24: ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by PRALG_2: 3;

              ( len ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1)))) = (( len (((g # y) | i) ^ <*d*>)) + ( len ((h # x) /^ (i + 1)))) by FINSEQ_1: 22

              .= ((i + 1) + (( len (h # x)) - (i + 1))) by A10, A19, A23, RFINSEQ:def 1

              .= ( len ( the_arity_of o)) by A18, FINSEQ_3: 29;

              hence ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1)))) by A24, FINSEQ_3: 29;

              let a be object;

              assume

               A25: a in ( dom ( the_arity_of o));

              then

              reconsider b = a as Nat;

              

               A26: b <= ( len ( the_arity_of o)) & b >= 1 by A25, FINSEQ_3: 25;

              per cases by NAT_1: 8;

                suppose

                 A27: b <= i;

                then

                 A28: b in ( dom ((g # y) | i)) & ( dom ((g # y) | i)) c= ( dom (((g # y) | i) ^ <*d*>)) & b in ( Seg i) by A26, A12, FINSEQ_3: 25, FINSEQ_1: 26;

                

                then (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) = ((((g # y) | i) ^ <*d*>) . a) by FINSEQ_1:def 7

                .= (((g # y) | i) . a) by A28, FINSEQ_1:def 7

                .= ((g # y) . a) by A27, A26, FINSEQ_1: 1, FUNCT_1: 49;

                hence (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) in ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . a) by A24, A25, MSUALG_3: 6;

              end;

                suppose

                 A29: b = (i + 1);

                then b in ( dom (((g # y) | i) ^ <*d*>)) by A26, A23, FINSEQ_3: 25;

                

                then (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) = ((((g # y) | i) ^ <*d*>) . a) by FINSEQ_1:def 7

                .= d by A12, A29, FINSEQ_1: 42;

                then (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) in (the Sorts of ( Free (S,X)) . (( the_arity_of o) /. (i + 1)));

                hence (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) in ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . a) by A16, A25, A29, FUNCT_1: 13;

              end;

                suppose

                 A30: b > (i + 1);

                then

                consider k be Nat such that

                 A31: b = ((i + 1) + k) by NAT_1: 10;

                ((i + 1) + k) > ((i + 1) + 0 ) by A30, A31;

                then k > 0 & (b - (i + 1)) <= (( len ( the_arity_of o)) - (i + 1)) by A26, XREAL_1: 9, XREAL_1: 6;

                then k >= ( 0 + 1) & k <= ( len ((h # x) /^ (i + 1))) by A10, A19, RFINSEQ:def 1, A31, NAT_1: 13;

                then

                 A32: k in ( dom ((h # x) /^ (i + 1))) by FINSEQ_3: 25;

                

                then (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) = (((h # x) /^ (i + 1)) . k) by A23, A31, FINSEQ_1:def 7

                .= ((h # x) . a) by A31, A19, A32, A10, RFINSEQ:def 1;

                hence (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) . a) in ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . a) by A24, A25, A6, MSUALG_3: 6;

              end;

            end;

            then

             A33: ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) in ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by CARD_3: 9;

            then ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) in ( Args (o,( Free (S,X)))) by PRALG_2: 3;

            then

             A34: [(f . c), (f . d)] in (R . s) by A2, A15, A22, MSUALG_6:def 5, MSUALG_6:def 8;

            reconsider ad = ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) as Element of ( Args (o,( Free (S,X)))) by A33, PRALG_2: 3;

            reconsider Dd = (( Den (o,( Free (S,X)))) . ad) as Element of ( Free (S,X)), s by A2, FUNCT_2: 15;

            

             A35: (f . c) = (( Den (o,( Free (S,X)))) . (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) +* (j,c))) by MSUALG_6:def 4

            .= (( Den (o,( Free (S,X)))) . ((((g # y) | i) ^ <*c*>) ^ ((h # x) /^ (i + 1)))) by A12, Th82;

            (f . d) = (( Den (o,( Free (S,X)))) . (((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))) +* (j,d))) by MSUALG_6:def 4

            .= (( Den (o,( Free (S,X)))) . ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1)))) by A12, Th82;

            then

             A36: ((( Den (o,( Free (S,X)))) . ((((g # y) | i) ^ <*c*>) ^ ((h # x) /^ (i + 1)))),(( Den (o,( Free (S,X)))) . ((((g # y) | i) ^ <*d*>) ^ ((h # x) /^ (i + 1))))) are_convertible_wrt (R . s) by A34, A35, REWRITE1: 29;

            assume Q[b];

            hence Q[a] by A36, REWRITE1: 55;

          end;

          

           A37: Q[((g . (( the_arity_of o) /. (i + 1))) . xi1)] from B( A20, A17, A21);

          ( dom y) = ( dom ( the_arity_of o)) by MSUALG_3: 6;

          hence ( nf ((( Den (o,( Free (S,X)))) . (((g # y) | (i + 1)) ^ ((h # x) /^ (i + 1)))),(R . s))) = ( nf ((( Den (o,( NFAlgebra R))) . (h # x)),(R . s))) by A13, A3, A15, A37, MSUALG_3:def 6;

        end;

      end;

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

      then

       A38: ( nf ((( Den (o,( Free (S,X)))) . (((g # y) | ( len ( the_arity_of o))) ^ ((h # x) /^ ( len ( the_arity_of o))))),(R . s))) = ( nf ((( Den (o,( NFAlgebra R))) . (h # x)),(R . s)));

      ((g # y) | ( len ( the_arity_of o))) = (g # y) & ((h # x) /^ ( len ( the_arity_of o))) = {} by A4, FINSEQ_1: 58, Th81;

      hence thesis by A38, FINSEQ_1: 34;

    end;

    registration

      let S, X;

      let R be terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      cluster ( NFAlgebra R) -> X, S -terms;

      coherence

      proof

        set A = ( NFAlgebra R);

        the Sorts of A = ( NForms R) by Def20;

        hence the Sorts of A is ManySortedSubset of the Sorts of ( Free (S,X));

      end;

    end

    registration

      let S, X;

      let R be NF-var terminating with_UN_property invariant stable ManySortedRelation of ( Free (S,X));

      cluster ( NFAlgebra R) -> all_vars_including inheriting_operations free_in_itself;

      coherence

      proof

        set A = ( NFAlgebra R);

        

         A1: the Sorts of A = ( NForms R) by Def20;

        thus ( FreeGen X) is ManySortedSubset of the Sorts of A

        proof

          let i be object;

          assume i in the carrier of S;

          then

          reconsider s = i as SortSymbol of S;

          let x be object;

          assume

           A2: x in (( FreeGen X) . i);

          ( Free (S,X)) = ( FreeMSA X) by MSAFREE3: 31;

          then (( FreeGen X) . s) c= (the Sorts of ( Free (S,X)) . s) by PBOOLE:def 2, PBOOLE:def 18;

          then

          reconsider x as Element of ( Free (S,X)), s by A2;

          x is_a_normal_form_wrt (R . s) & (R . s) reduces (x,x) by A2, Def18, REWRITE1: 12;

          then x is_a_normal_form_of (x,(R . s)) & ( nf (x,(R . s))) is_a_normal_form_of (x,(R . s)) by REWRITE1: 54;

          then x = ( nf (x,(R . s))) & (( NForms R) . s) = the set of all ( nf (y,(R . s))) where y be Element of ( Free (S,X)), s by Def19, REWRITE1: 53;

          hence thesis by A1;

        end;

        hereby

          let o be OperSymbol of S, p be FinSequence;

          assume

           A3: p in ( Args (o,( Free (S,X)))) & (( Den (o,( Free (S,X)))) . p) in (the Sorts of A . ( the_result_sort_of o));

          then

           A4: ( dom p) = ( dom ( the_arity_of o)) & ( dom (the Sorts of ( Free (S,X)) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by MSUALG_3: 6, PRALG_2: 3;

          reconsider q = p as FinSequence;

          (( Den (o,( Free (S,X)))) . p) in the set of all ( nf (z,(R . ( the_result_sort_of o)))) where z be Element of (the Sorts of ( Free (S,X)) . ( the_result_sort_of o)) by A1, A3, Def19;

          then

          consider z be Element of (the Sorts of ( Free (S,X)) . ( the_result_sort_of o)) such that

           A5: (( Den (o,( Free (S,X)))) . p) = ( nf (z,(R . ( the_result_sort_of o))));

          

           A6: (( Den (o,( Free (S,X)))) . p) is_a_normal_form_of (z,(R . ( the_result_sort_of o))) by A5, REWRITE1: 54;

           A7:

          now

            let i be object;

            assume

             A8: i in ( dom p);

            then

             A9: (the Sorts of ( Free (S,X)) . (( the_arity_of o) . i)) = ((the Sorts of ( Free (S,X)) * ( the_arity_of o)) . i) by A4, FUNCT_1: 13;

            reconsider j = i as Element of NAT by A8;

            reconsider ai = (( the_arity_of o) . i) as SortSymbol of S by A4, A8, FUNCT_1: 102;

            

             A10: ai = (( the_arity_of o) /. j) by A8, A4, PARTFUN1:def 6;

            ( Args (o,( Free (S,X)))) = ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by PRALG_2: 3;

            then

            reconsider pj = (p . i) as Element of (the Sorts of ( Free (S,X)) . (( the_arity_of o) . i)) by A3, A9, A8, A4, CARD_3: 9;

            assume (p . i) nin ((( NForms R) * ( the_arity_of o)) . i);

            then (p . i) nin (( NForms R) . (( the_arity_of o) . i)) by A4, A8, FUNCT_1: 13;

            then pj nin the set of all ( nf (b,(R . (( the_arity_of o) /. i)))) where b be Element of (the Sorts of ( Free (S,X)) . (( the_arity_of o) /. i)) by A10, Def19;

            then ( nf (pj,(R . (( the_arity_of o) . i)))) is_a_normal_form_of (pj,(R . (( the_arity_of o) . i))) & for a be Element of (the Sorts of ( Free (S,X)) . (( the_arity_of o) . i)) holds pj <> ( nf (a,(R . (( the_arity_of o) . i)))) by A10, REWRITE1: 54;

            then (R . (( the_arity_of o) . i)) reduces (pj,( nf (pj,(R . (( the_arity_of o) . i))))) & ( nf (pj,(R . (( the_arity_of o) . i)))) <> pj;

            then

            consider x be object such that

             A11: [pj, x] in (R . (( the_arity_of o) . i)) by REWRITE1: 33, REWRITE1:def 5;

            reconsider x as Element of (the Sorts of ( Free (S,X)) . (( the_arity_of o) . i)) by A11, ZFMISC_1: 87;

            set f = ( transl (o,j,q,( Free (S,X))));

            

             A12: (f . pj) = (( Den (o,( Free (S,X)))) . (q +* (j,pj))) by A10, MSUALG_6:def 4

            .= (( Den (o,( Free (S,X)))) . p) by FUNCT_7: 35;

             [(f . pj), (f . x)] in (R . ( the_result_sort_of o)) by A11, A3, A8, A4, A10, MSUALG_6:def 5, MSUALG_6:def 8;

            hence contradiction by A6, A12, REWRITE1:def 5;

          end;

          ( dom (( NForms R) * ( the_arity_of o))) = ( dom ( the_arity_of o)) by A1, PRALG_2: 3;

          then p in ( product (( NForms R) * ( the_arity_of o))) by A4, A7, CARD_3: 9;

          hence p in ( Args (o,A)) by A1, PRALG_2: 3;

          

          hence (( Den (o,A)) . p) = ( nf ((( Den (o,( Free (S,X)))) . p),(R . ( the_result_sort_of o)))) by Def20

          .= (( Den (o,( Free (S,X)))) . p) by A6, Th17;

        end;

        let f be ManySortedFunction of ( FreeGen X), the Sorts of A;

        let G be ManySortedSubset of the Sorts of A;

        assume

         A13: G = ( FreeGen X);

        reconsider H = ( FreeGen X) as GeneratorSet of ( Free (S,X)) by MSAFREE3: 31;

        the Sorts of ( NFAlgebra R) = ( NForms R) & H is_transformable_to ( NForms R) & H is_transformable_to the Sorts of ( Free (S,X)) by Def20, Th21;

        then

         A14: the Sorts of A c= the Sorts of ( Free (S,X)) & ( rngs f) c= the Sorts of A & ( doms f) = H by MSSUBFAM: 17, PBOOLE:def 18;

        then ( rngs f) c= the Sorts of ( Free (S,X)) & ( FreeMSA X) = ( Free (S,X)) by PBOOLE: 13, MSAFREE3: 31;

        then f is ManySortedFunction of H, the Sorts of ( Free (S,X)) & H is free by A14, Th21, EQUATION: 4;

        then

        consider g be ManySortedFunction of ( Free (S,X)), ( Free (S,X)) such that

         A15: g is_homomorphism (( Free (S,X)),( Free (S,X))) & (g || H) = f;

        deffunc F( SortSymbol of S, Element of A, $1) = ( nf (((g . $1) . $2),(R . $1)));

        defpred P[ object, object, object] means $3 = ( nf (((g . $1) . $2),(R . $1)));

        

         A16: for s,x be object st s in the carrier of S & x in (the Sorts of A . s) holds ex y be object st y in (the Sorts of A . s) & P[s, x, y]

        proof

          let s,x be object;

          assume

           A17: s in the carrier of S;

          assume

           A18: x in (the Sorts of A . s);

          reconsider t = s as SortSymbol of S by A17;

          reconsider z = x as Element of A, t by A18;

          take y = F(t,z);

          (( NForms R) . t) c= (the Sorts of ( Free (S,X)) . t) by PBOOLE:def 2, PBOOLE:def 18;

          then

          reconsider a = ((g . t) . z) as Element of ( Free (S,X)), t by A1, FUNCT_2: 5;

          y = ( nf (a,(R . t)));

          then y in the set of all ( nf (u,(R . t))) where u be Element of ( Free (S,X)), t;

          hence y in (the Sorts of A . s) by A1, Def19;

          thus P[s, x, y];

        end;

        consider h be ManySortedFunction of A, A such that

         A19: for s,x be object st s in the carrier of S & x in (the Sorts of A . s) holds ((h . s) . x) in (the Sorts of A . s) & P[s, x, ((h . s) . x)] from YELLOW18:sch 23( A16);

        take h;

        thus h is_homomorphism (A,A)

        proof

          let o be OperSymbol of S;

          assume ( Args (o,A)) <> {} ;

          let x be Element of ( Args (o,A));

          (( NForms R) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) c= (the Sorts of ( Free (S,X)) * ( the_arity_of o)) qua ManySortedSet of ( dom ( the_arity_of o)) by Th15, PBOOLE:def 18;

          then ( product (( NForms R) * ( the_arity_of o))) c= ( product (the Sorts of ( Free (S,X)) * ( the_arity_of o))) by Th16;

          then ( product (( NForms R) * ( the_arity_of o))) c= ( Args (o,( Free (S,X)))) by PRALG_2: 3;

          then ( Args (o,A)) c= ( Args (o,( Free (S,X)))) & x in ( Args (o,A)) by A1, PRALG_2: 3;

          then

          reconsider y = x as Element of ( Args (o,( Free (S,X))));

          

           A20: for s be SortSymbol of S, x be Element of ( NFAlgebra R), s holds ((h . s) . x) = ( nf (((g . s) . x),(R . s))) by A19;

          reconsider Dy = (( Den (o,( Free (S,X)))) . y) as Element of ( Free (S,X)), ( the_result_sort_of o) by FUNCT_2: 15;

          (( Den (o,A)) . x) in ( Result (o,A));

          then (( Den (o,A)) . x) in (the Sorts of A . ( the_result_sort_of o)) by FUNCT_2: 15;

          

          hence ((h . ( the_result_sort_of o)) . (( Den (o,A)) . x)) = ( nf (((g . ( the_result_sort_of o)) . (( Den (o,A)) . x)),(R . ( the_result_sort_of o)))) by A19

          .= ( nf (((g . ( the_result_sort_of o)) . ( nf ((( Den (o,( Free (S,X)))) . x),(R . ( the_result_sort_of o))))),(R . ( the_result_sort_of o)))) by Def20

          .= ( nf (((g . ( the_result_sort_of o)) . Dy),(R . ( the_result_sort_of o)))) by A15, Th80

          .= ( nf ((( Den (o,( Free (S,X)))) . (g # y)),(R . ( the_result_sort_of o)))) by A15

          .= ( nf ((( Den (o,A)) . (h # x)),(R . ( the_result_sort_of o)))) by A15, A20, Th85

          .= ( nf (( nf ((( Den (o,( Free (S,X)))) . (h # x)),(R . ( the_result_sort_of o)))),(R . ( the_result_sort_of o)))) by Def20

          .= ( nf ((( Den (o,( Free (S,X)))) . (h # x)),(R . ( the_result_sort_of o)))) by Th18

          .= (( Den (o,A)) . (h # x)) by Def20;

        end;

        let a be Element of S;

        

         A21: ( dom (f . a)) = (H . a) & ( dom ((h || G) . a)) = (G . a) by FUNCT_2:def 1;

        hence ( dom (f . a)) = ( dom ((h || G) . a)) by A13;

        let x be object;

        assume

         A22: x in ( dom (f . a));

        

         A23: (G . a) c= (the Sorts of A . a) by PBOOLE:def 2, PBOOLE:def 18;

        reconsider fax = ((f . a) . x) as Element of A, a by A22, FUNCT_2: 5;

        the Sorts of A = ( NForms R) by Def20;

        

        hence ((f . a) . x) = ( nf (fax,(R . a))) by Th79

        .= ( nf ((((g . a) | (H . a)) . x),(R . a))) by A15, MSAFREE:def 1

        .= ( nf (((g . a) . x),(R . a))) by A22, FUNCT_1: 49

        .= ((h . a) . x) by A23, A13, A21, A22, A19

        .= (((h . a) | (G . a)) . x) by A13, A22, FUNCT_1: 49

        .= (((h || G) . a) . x) by MSAFREE:def 1;

      end;

    end