dtconstr.miz
    
    begin
    
    deffunc
    
    T(
    set) =
    0 ; 
    
    deffunc
    
    A(
    set, 
    set, 
    set) =
    0 ; 
    
    theorem :: 
    
    DTCONSTR:1
    
    
    
    
    
    Th1: for D be non 
    empty  
    set, p be 
    FinSequence of ( 
    FinTrees D) holds p is 
    FinSequence of ( 
    Trees D) 
    
    proof
    
      let D be non
    empty  
    set;
    
      (
    FinTrees D) is non 
    empty  
    Subset of ( 
    Trees D) by 
    TREES_3: 21;
    
      hence thesis by
    FINSEQ_2: 24;
    
    end;
    
    theorem :: 
    
    DTCONSTR:2
    
    
    
    
    
    Th2: for x,y be 
    set, p be 
    FinSequence of x st y 
    in ( 
    dom p) holds (p 
    . y) 
    in x 
    
    proof
    
      let x,y be
    set;
    
      let p be
    FinSequence of x; 
    
      assume y
    in ( 
    dom p); 
    
      then
    
      
    
    A1: (p 
    . y) 
    in ( 
    rng p) by 
    FUNCT_1:def 3;
    
      (
    rng p) 
    c= x by 
    FINSEQ_1:def 4;
    
      hence thesis by
    A1;
    
    end;
    
    registration
    
      let D be non
    empty  
    set, T be 
    DTree-set of D; 
    
      cluster -> 
    DTree-yielding for 
    FinSequence of T; 
    
      coherence ;
    
    end
    
    definition
    
      let D be non
    empty  
    set;
    
      let F be non
    empty  
    DTree-set of D; 
    
      let Tset be non
    empty  
    Subset of F; 
    
      :: original:
    Element
    
      redefine
    
      mode
    
    Element of Tset -> 
    Element of F ; 
    
      coherence
    
      proof
    
        let x be
    Element of Tset; 
    
        thus thesis;
    
      end;
    
    end
    
    definition
    
      let D be non
    empty  
    set, T be 
    DTree-set of D; 
    
      let p be
    FinSequence of T; 
    
      :: original:
    roots
    
      redefine
    
      func
    
    roots p -> 
    FinSequence of D ; 
    
      coherence
    
      proof
    
        let x be
    object;
    
        assume x
    in ( 
    rng ( 
    roots p)); 
    
        then
    
        consider k be
    object such that 
    
        
    
    A1: k 
    in ( 
    dom ( 
    roots p)) and 
    
        
    
    A2: x 
    = (( 
    roots p) 
    . k) by 
    FUNCT_1:def 3;
    
        reconsider k as
    Element of 
    NAT by 
    A1;
    
        
    
        
    
    A3: ( 
    dom ( 
    roots p)) 
    = ( 
    dom p) by 
    TREES_3:def 18;
    
        then
    
        consider t be
    DecoratedTree such that 
    
        
    
    A4: t 
    = (p 
    . k) and 
    
        
    
    A5: (( 
    roots p) 
    . k) 
    = (t 
    .  
    {} ) by 
    A1,
    TREES_3:def 18;
    
        reconsider t as
    DecoratedTree of D by 
    A1,
    A3,
    A4,
    Th2,
    TREES_3:def 6;
    
        reconsider r =
    {} as 
    Node of t by 
    TREES_1: 22;
    
        (t
    . r) 
    in D; 
    
        hence thesis by
    A2,
    A5;
    
      end;
    
    end
    
    
    
    
    
    Lm1: ( 
    dom ( 
    roots  
    {} )) 
    = ( 
    dom  
    {} ) by 
    TREES_3:def 18
    
    .=
    {} ; 
    
    theorem :: 
    
    DTCONSTR:3
    
    
    
    
    
    Th3: ( 
    roots  
    {} ) 
    =  
    {} by 
    Lm1;
    
    theorem :: 
    
    DTCONSTR:4
    
    
    
    
    
    Th4: for T be 
    DecoratedTree holds ( 
    roots  
    <*T*>)
    =  
    <*(T
    .  
    {} )*> 
    
    proof
    
      let T be
    DecoratedTree;
    
      
    
      
    
    A1: ( 
    dom  
    <*T*>)
    = ( 
    Seg 1) by 
    FINSEQ_1:def 8;
    
      
    
      
    
    A2: ( 
    dom  
    <*(T
    .  
    {} )*>) 
    = ( 
    Seg 1) by 
    FINSEQ_1:def 8;
    
      
    
      
    
    A3: ( 
    <*T*>
    . 1) 
    = T by 
    FINSEQ_1:def 8;
    
      
    
      
    
    A4: ( 
    <*(T
    .  
    {} )*> 
    . 1) 
    = (T 
    .  
    {} ) by 
    FINSEQ_1:def 8;
    
      now
    
        let i be
    Element of 
    NAT ; 
    
        assume
    
        
    
    A5: i 
    in ( 
    dom  
    <*T*>);
    
        take t = T;
    
        thus t
    = ( 
    <*T*>
    . i) & ( 
    <*(T
    .  
    {} )*> 
    . i) 
    = (t 
    .  
    {} ) by 
    A1,
    A3,
    A4,
    A5,
    FINSEQ_1: 2,
    TARSKI:def 1;
    
      end;
    
      hence thesis by
    A1,
    A2,
    TREES_3:def 18;
    
    end;
    
    theorem :: 
    
    DTCONSTR:5
    
    
    
    
    
    Th5: for D be non 
    empty  
    set, F be 
    Subset of ( 
    FinTrees D), p be 
    FinSequence of F st ( 
    len ( 
    roots p)) 
    = 1 holds ex x be 
    Element of ( 
    FinTrees D) st p 
    =  
    <*x*> & x
    in F 
    
    proof
    
      let D be non
    empty  
    set, F be 
    Subset of ( 
    FinTrees D), p be 
    FinSequence of F; 
    
      assume (
    len ( 
    roots p)) 
    = 1; 
    
      then
    
      
    
    A1: ( 
    dom ( 
    roots p)) 
    = ( 
    Seg 1) by 
    FINSEQ_1:def 3;
    
      
    
      
    
    A2: ( 
    dom p) 
    = ( 
    dom ( 
    roots p)) by 
    TREES_3:def 18;
    
      then
    
      
    
    A3: 1 
    in ( 
    dom p) by 
    A1;
    
      then
    
      reconsider x = (p
    . 1) as 
    Element of ( 
    FinTrees D) by 
    Th2;
    
      take x;
    
      thus thesis by
    A1,
    A2,
    A3,
    Th2,
    FINSEQ_1:def 8;
    
    end;
    
    theorem :: 
    
    DTCONSTR:6
    
    for T1,T2 be
    DecoratedTree holds ( 
    roots  
    <*T1, T2*>)
    =  
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*> 
    
    proof
    
      let T1,T2 be
    DecoratedTree;
    
      
    
      
    
    A1: ( 
    len  
    <*T1, T2*>)
    = 2 by 
    FINSEQ_1: 44;
    
      
    
      
    
    A2: ( 
    len  
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*>) 
    = 2 by 
    FINSEQ_1: 44;
    
      
    
      
    
    A3: ( 
    <*T1, T2*>
    . 1) 
    = T1 by 
    FINSEQ_1: 44;
    
      
    
      
    
    A4: ( 
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*> 
    . 1) 
    = (T1 
    .  
    {} ) by 
    FINSEQ_1: 44;
    
      
    
      
    
    A5: ( 
    <*T1, T2*>
    . 2) 
    = T2 by 
    FINSEQ_1: 44;
    
      
    
      
    
    A6: ( 
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*> 
    . 2) 
    = (T2 
    .  
    {} ) by 
    FINSEQ_1: 44;
    
      
    
      
    
    A7: ( 
    dom  
    <*T1, T2*>)
    = ( 
    Seg 2) by 
    A1,
    FINSEQ_1:def 3;
    
      
    
      
    
    A8: ( 
    dom  
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*>) 
    = ( 
    Seg 2) by 
    A2,
    FINSEQ_1:def 3;
    
      now
    
        let i be
    Element of 
    NAT ; 
    
        assume i
    in ( 
    dom  
    <*T1, T2*>);
    
        then i
    in ( 
    Seg 2) by 
    A1,
    FINSEQ_1:def 3;
    
        then i
    = 1 or i 
    = 2 by 
    FINSEQ_1: 2,
    TARSKI:def 2;
    
        hence ex t be
    DecoratedTree st t 
    = ( 
    <*T1, T2*>
    . i) & ( 
    <*(T1
    .  
    {} ), (T2 
    .  
    {} )*> 
    . i) 
    = (t 
    .  
    {} ) by 
    A3,
    A4,
    A5,
    A6;
    
      end;
    
      hence thesis by
    A7,
    A8,
    TREES_3:def 18;
    
    end;
    
    definition
    
      let X,Y be
    set, f be 
    FinSequence of 
    [:X, Y:];
    
      :: original:
    pr1
    
      redefine
    
      func
    
    pr1 f -> 
    FinSequence of X ; 
    
      coherence
    
      proof
    
        
    
        
    
    A1: ( 
    dom ( 
    pr1 f)) 
    = ( 
    dom f) by 
    MCART_1:def 12;
    
        (
    dom f) 
    = ( 
    Seg ( 
    len f)) by 
    FINSEQ_1:def 3;
    
        then
    
        reconsider p = (
    pr1 f) as 
    FinSequence by 
    A1,
    FINSEQ_1:def 2;
    
        (
    rng p) 
    c= X 
    
        proof
    
          let x be
    object;
    
          assume x
    in ( 
    rng p); 
    
          then
    
          consider i be
    object such that 
    
          
    
    A2: i 
    in ( 
    dom p) and 
    
          
    
    A3: x 
    = (p 
    . i) by 
    FUNCT_1:def 3;
    
          
    
          
    
    A4: (f 
    . i) 
    in  
    [:X, Y:] by
    A1,
    A2,
    Th2;
    
          x
    = ((f 
    . i) 
    `1 ) by 
    A1,
    A2,
    A3,
    MCART_1:def 12;
    
          hence thesis by
    A4,
    MCART_1: 10;
    
        end;
    
        hence thesis by
    FINSEQ_1:def 4;
    
      end;
    
      :: original:
    pr2
    
      redefine
    
      func
    
    pr2 f -> 
    FinSequence of Y ; 
    
      coherence
    
      proof
    
        
    
        
    
    A5: ( 
    dom ( 
    pr2 f)) 
    = ( 
    dom f) by 
    MCART_1:def 13;
    
        (
    dom f) 
    = ( 
    Seg ( 
    len f)) by 
    FINSEQ_1:def 3;
    
        then
    
        reconsider p = (
    pr2 f) as 
    FinSequence by 
    A5,
    FINSEQ_1:def 2;
    
        (
    rng p) 
    c= Y 
    
        proof
    
          let x be
    object;
    
          assume x
    in ( 
    rng p); 
    
          then
    
          consider i be
    object such that 
    
          
    
    A6: i 
    in ( 
    dom p) and 
    
          
    
    A7: x 
    = (p 
    . i) by 
    FUNCT_1:def 3;
    
          
    
          
    
    A8: (f 
    . i) 
    in  
    [:X, Y:] by
    A5,
    A6,
    Th2;
    
          x
    = ((f 
    . i) 
    `2 ) by 
    A5,
    A6,
    A7,
    MCART_1:def 13;
    
          hence thesis by
    A8,
    MCART_1: 10;
    
        end;
    
        hence thesis by
    FINSEQ_1:def 4;
    
      end;
    
    end
    
    theorem :: 
    
    DTCONSTR:7
    
    
    
    
    
    Th7: ( 
    pr1  
    {} ) 
    =  
    {} & ( 
    pr2  
    {} ) 
    =  
    {}  
    
    proof
    
      set r = (
    <*>  
    [:
    {} , 
    {} :]); 
    
      (
    dom ( 
    pr1 r)) 
    = ( 
    dom  
    {} ) 
    
      .=
    {} ; 
    
      hence (
    pr1  
    {} ) 
    =  
    {} ; 
    
      (
    dom ( 
    pr2 r)) 
    = ( 
    dom  
    {} ) 
    
      .=
    {} ; 
    
      hence thesis;
    
    end;
    
    begin
    
    registration
    
      let A be non
    empty  
    set, R be 
    Relation of A, (A 
    * ); 
    
      cluster 
    DTConstrStr (# A, R #) -> non 
    empty;
    
      coherence ;
    
    end
    
    scheme :: 
    
    DTCONSTR:sch1
    
    DTConstrStrEx { S() -> non
    empty  
    set , P[ 
    object, 
    object] } :
    
ex G be 
    strict non 
    empty  
    DTConstrStr st the 
    carrier of G 
    = S() & for x be 
    Symbol of G, p be 
    FinSequence of the 
    carrier of G holds x 
    ==> p iff P[x, p]; 
    
      consider PR be
    Relation of S(), (S() 
    * ) such that 
    
      
    
    A1: for x,y be 
    object holds 
    [x, y]
    in PR iff x 
    in S() & y 
    in (S() 
    * ) & P[x, y] from 
    RELSET_1:sch 1;
    
      take DT =
    DTConstrStr (# S(), PR #); 
    
      thus the
    carrier of DT 
    = S(); 
    
      let x be
    Symbol of DT, p be 
    FinSequence of the 
    carrier of DT; 
    
      hereby
    
        assume x
    ==> p; 
    
        then
    [x, p]
    in the 
    Rules of DT by 
    LANG1:def 1;
    
        hence P[x, p] by
    A1;
    
      end;
    
      assume
    
      
    
    A2: P[x, p]; 
    
      p
    in (the 
    carrier of DT 
    * ) by 
    FINSEQ_1:def 11;
    
      then
    [x, p]
    in PR by 
    A1,
    A2;
    
      hence thesis by
    LANG1:def 1;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch2
    
    DTConstrStrUniq { S() -> non
    empty  
    set , P[ 
    set, 
    set] } :
    
for G1,G2 be 
    strict non 
    empty  
    DTConstrStr st (the 
    carrier of G1 
    = S() & for x be 
    Symbol of G1, p be 
    FinSequence of the 
    carrier of G1 holds x 
    ==> p iff P[x, p]) & (the 
    carrier of G2 
    = S() & for x be 
    Symbol of G2, p be 
    FinSequence of the 
    carrier of G2 holds x 
    ==> p iff P[x, p]) holds G1 
    = G2; 
    
      let G1,G2 be
    strict non 
    empty  
    DTConstrStr such that 
    
      
    
    A1: the 
    carrier of G1 
    = S() and 
    
      
    
    A2: for x be 
    Symbol of G1, p be 
    FinSequence of the 
    carrier of G1 holds x 
    ==> p iff P[x, p] and 
    
      
    
    A3: the 
    carrier of G2 
    = S() and 
    
      
    
    A4: for x be 
    Symbol of G2, p be 
    FinSequence of the 
    carrier of G2 holds x 
    ==> p iff P[x, p]; 
    
      now
    
        let x,y be
    object;
    
        hereby
    
          assume
    
          
    
    A5: 
    [x, y]
    in the 
    Rules of G1; 
    
          then
    
          
    
    A6: y 
    in (the 
    carrier of G1 
    * ) by 
    ZFMISC_1: 87;
    
          reconsider x1 = x as
    Symbol of G1 by 
    A5,
    ZFMISC_1: 87;
    
          reconsider y1 = y as
    FinSequence of the 
    carrier of G1 by 
    A6,
    FINSEQ_2:def 3;
    
          
    
          
    
    A7: x1 
    ==> y1 iff P[x1, y1] by 
    A2;
    
          reconsider x2 = x as
    Symbol of G2 by 
    A1,
    A3,
    A5,
    ZFMISC_1: 87;
    
          reconsider y2 = y as
    FinSequence of the 
    carrier of G2 by 
    A1,
    A3,
    A6,
    FINSEQ_2:def 3;
    
          x2
    ==> y2 by 
    A4,
    A5,
    A7,
    LANG1:def 1;
    
          hence
    [x, y]
    in the 
    Rules of G2 by 
    LANG1:def 1;
    
        end;
    
        assume
    
        
    
    A8: 
    [x, y]
    in the 
    Rules of G2; 
    
        then
    
        
    
    A9: y 
    in (the 
    carrier of G2 
    * ) by 
    ZFMISC_1: 87;
    
        reconsider x2 = x as
    Symbol of G2 by 
    A8,
    ZFMISC_1: 87;
    
        reconsider y2 = y as
    FinSequence of the 
    carrier of G2 by 
    A9,
    FINSEQ_2:def 3;
    
        
    
        
    
    A10: x2 
    ==> y2 iff P[x2, y2] by 
    A4;
    
        reconsider x1 = x as
    Symbol of G1 by 
    A1,
    A3,
    A8,
    ZFMISC_1: 87;
    
        reconsider y1 = y as
    FinSequence of the 
    carrier of G1 by 
    A1,
    A3,
    A9,
    FINSEQ_2:def 3;
    
        x1
    ==> y1 by 
    A2,
    A8,
    A10,
    LANG1:def 1;
    
        hence
    [x, y]
    in the 
    Rules of G1 by 
    LANG1:def 1;
    
      end;
    
      hence thesis by
    A1,
    A3,
    RELAT_1:def 2;
    
    end;
    
    theorem :: 
    
    DTCONSTR:8
    
    for G be non
    empty  
    DTConstrStr holds ( 
    Terminals G) 
    misses ( 
    NonTerminals G) 
    
    proof
    
      let G be non
    empty  
    DTConstrStr;
    
      
    
      
    
    A1: ( 
    Terminals G) 
    = { t where t be 
    Symbol of G : not ex tnt be 
    FinSequence st t 
    ==> tnt } by 
    LANG1:def 2;
    
      
    
      
    
    A2: ( 
    NonTerminals G) 
    = { t where t be 
    Symbol of G : ex tnt be 
    FinSequence st t 
    ==> tnt } by 
    LANG1:def 3;
    
      assume not thesis;
    
      then
    
      consider x be
    object such that 
    
      
    
    A3: x 
    in ( 
    Terminals G) and 
    
      
    
    A4: x 
    in ( 
    NonTerminals G) by 
    XBOOLE_0: 3;
    
      
    
      
    
    A5: ex t be 
    Symbol of G st x 
    = t & not ex tnt be 
    FinSequence st t 
    ==> tnt by 
    A1,
    A3;
    
      ex t be
    Symbol of G st x 
    = t & ex tnt be 
    FinSequence st t 
    ==> tnt by 
    A2,
    A4;
    
      hence contradiction by
    A5;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch3
    
    DTCMin { f() ->
    Function , G() -> non 
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() } : 
    
ex X be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st X 
    = ( 
    Union f()) & (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d, TermVal(d)])
    in X) & (for o be 
    Symbol of G(), p be 
    FinSequence of X st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in X) & for F be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d, TermVal(d)])
    in F) & (for o be 
    Symbol of G(), p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in F) holds X 
    c= F 
    
      provided
    
      
    
    A1: ( 
    dom f()) 
    =  
    NAT  
    
       and 
    
      
    
    A2: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } 
    
       and 
    
      
    
    A3: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      set f = f();
    
      set G = G();
    
      set D = D();
    
      deffunc
    
    NTV(
    Symbol of G, 
    FinSequence) = NTermVal($1,pr1,pr2);
    
      (
    Union f) 
    c= ( 
    FinTrees  
    [:the 
    carrier of G, D:]) 
    
      proof
    
        let u be
    object;
    
        assume u
    in ( 
    Union f); 
    
        then
    
        
    
    A4: ex k be 
    object st (k 
    in  
    NAT ) & (u 
    in (f 
    . k)) by 
    A1,
    CARD_5: 2;
    
        defpred
    
    P[
    Nat] means for u be
    set st u 
    in (f 
    . $1) holds u 
    in ( 
    FinTrees  
    [:the 
    carrier of G, D:]); 
    
        
    
        
    
    A5: 
    P[
    0 ] 
    
        proof
    
          let u be
    set;
    
          assume u
    in (f 
    .  
    0 ); 
    
          then ex t be
    Symbol of G, d be 
    Element of D st u 
    = ( 
    root-tree  
    [t, d]) & (t
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{})) by 
    A2;
    
          hence thesis;
    
        end;
    
        
    
    A6: 
    
        now
    
          let n be
    Nat such that 
    
          
    
    A7: 
    P[n];
    
          thus
    P[(n
    + 1)] 
    
          proof
    
            let u be
    set;
    
            assume u
    in (f 
    . (n 
    + 1)); 
    
            then u
    in ((f 
    . n) 
    \/ { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
            then
    
            
    
    A8: u 
    in (f 
    . n) or u 
    in { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    XBOOLE_0:def 3;
    
            assume
    
            
    
    A9: not u 
    in ( 
    FinTrees  
    [:the 
    carrier of G, D:]); 
    
            then
    
            consider o be
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) such that 
    
            
    
    A10: u 
    = ( 
    [o,
    NTV(o,p)]
    -tree p) and 
    
            
    
    A11: ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A7,
    A8;
    
            reconsider p as
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) by 
    A11;
    
            u
    = ( 
    [o,
    NTV(o,p)]
    -tree p) by 
    A10;
    
            hence contradiction by
    A9;
    
          end;
    
        end;
    
        for n be
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A5,
    A6);
    
        hence thesis by
    A4;
    
      end;
    
      then
    
      reconsider X = (
    Union f) as 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D:]); 
    
      take X;
    
      thus X
    = ( 
    Union f); 
    
      hereby
    
        let d be
    Symbol of G; 
    
        assume d
    in ( 
    Terminals G); 
    
        then (
    root-tree  
    [d, TermVal(d)])
    in (f 
    .  
    0 ) by 
    A2;
    
        hence (
    root-tree  
    [d, TermVal(d)])
    in X by 
    A1,
    CARD_5: 2;
    
      end;
    
      hereby
    
        let o be
    Symbol of G, p be 
    FinSequence of X such that 
    
        
    
    A12: o 
    ==> ( 
    pr1 ( 
    roots p)); 
    
        set s = (
    pr1 ( 
    roots p)), v = ( 
    pr2 ( 
    roots p)); 
    
        
    
        
    
    A13: ( 
    dom p) 
    = ( 
    Seg ( 
    len p)) by 
    FINSEQ_1:def 3;
    
        defpred
    
    P[
    set, 
    set] means (p
    . $1) 
    in (f 
    . $2); 
    
        
    
        
    
    A14: for x be 
    Nat st x 
    in ( 
    Seg ( 
    len p)) holds ex n be 
    Element of 
    NAT st 
    P[x, n]
    
        proof
    
          let x be
    Nat;
    
          assume x
    in ( 
    Seg ( 
    len p)); 
    
          then
    
          
    
    A15: (p 
    . x) 
    in ( 
    rng p) by 
    A13,
    FUNCT_1:def 3;
    
          (
    rng p) 
    c= X by 
    FINSEQ_1:def 4;
    
          then ex n be
    object st n 
    in  
    NAT & (p 
    . x) 
    in (f 
    . n) by 
    A1,
    A15,
    CARD_5: 2;
    
          hence thesis;
    
        end;
    
        consider pn be
    FinSequence of 
    NAT such that 
    
        
    
    A16: ( 
    dom pn) 
    = ( 
    Seg ( 
    len p)) & for k be 
    Nat st k 
    in ( 
    Seg ( 
    len p)) holds 
    P[k, (pn
    . k)] from 
    FINSEQ_1:sch 5(
    A14);
    
        
    
    A17: 
    
        now
    
          defpred
    
    P[
    Element of 
    NAT , 
    Element of 
    NAT ] means $1 
    >= $2; 
    
          assume (
    rng pn) 
    <>  
    {} ; 
    
          then
    
          
    
    A18: ( 
    rng pn) is 
    finite & ( 
    rng pn) 
    <>  
    {} & ( 
    rng pn) 
    c=  
    NAT by 
    FINSEQ_1:def 4;
    
          
    
          
    
    A19: for x,y be 
    Element of 
    NAT holds 
    P[x, y] or
    P[y, x];
    
          
    
          
    
    A20: for x,y,z be 
    Element of 
    NAT st 
    P[x, y] &
    P[y, z] holds
    P[x, z] by
    XXREAL_0: 2;
    
          consider n be
    Element of 
    NAT such that 
    
          
    
    A21: n 
    in ( 
    rng pn) & for y be 
    Element of 
    NAT st y 
    in ( 
    rng pn) holds 
    P[n, y] from
    CQC_SIM1:sch 4(
    A18,
    A19,
    A20);
    
          take n;
    
          thus (
    rng p) 
    c= (f 
    . n) 
    
          proof
    
            let t be
    object;
    
            assume t
    in ( 
    rng p); 
    
            then
    
            consider k be
    object such that 
    
            
    
    A22: k 
    in ( 
    dom p) and 
    
            
    
    A23: t 
    = (p 
    . k) by 
    FUNCT_1:def 3;
    
            reconsider k as
    Element of 
    NAT by 
    A22;
    
            
    
            
    
    A24: (pn 
    . k) 
    in ( 
    rng pn) by 
    A13,
    A16,
    A22,
    FUNCT_1:def 3;
    
            then
    
            reconsider pnk = (pn
    . k) as 
    Element of 
    NAT by 
    A18;
    
            consider s be
    Nat such that 
    
            
    
    A25: n 
    = (pnk 
    + s) by 
    A21,
    A24,
    NAT_1: 10;
    
            deffunc
    
    H(
    set, 
    set) = { (
    [o1, NTermVal(o1,pr1,pr2)]
    -tree p1) where o1 be 
    Symbol of G(), p1 be 
    Element of ((f 
    . $1) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p1 
    = q & o1 
    ==> ( 
    pr1 ( 
    roots q)) }; 
    
            for n be
    Nat holds (f 
    . n) 
    c= (f 
    . (n 
    + 1)) 
    
            proof
    
              let n be
    Nat;
    
              (f
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/  
    H(n,.)) by
    A3;
    
              hence thesis by
    XBOOLE_1: 7;
    
            end;
    
            then
    
            
    
    A26: (f 
    . pnk) 
    c= (f 
    . n) by 
    A25,
    MEASURE2: 18,
    NAT_1: 11;
    
            t
    in (f 
    . (pn 
    . k)) by 
    A13,
    A16,
    A22,
    A23;
    
            hence thesis by
    A26;
    
          end;
    
        end;
    
        now
    
          assume (
    rng pn) 
    =  
    {} ; 
    
          then pn
    =  
    {} ; 
    
          then p
    =  
    {} by 
    A16;
    
          then (
    rng p) 
    =  
    {} ; 
    
          hence (
    rng p) 
    c= (f 
    .  
    0 ); 
    
        end;
    
        then
    
        consider n be
    Element of 
    NAT such that 
    
        
    
    A27: ( 
    rng p) 
    c= (f 
    . n) by 
    A17;
    
        
    
        
    
    A28: X 
    = ( 
    union ( 
    rng f)) by 
    CARD_3:def 4;
    
        (f
    . n) 
    in ( 
    rng f) by 
    A1,
    FUNCT_1:def 3;
    
        then (f
    . n) 
    c= X by 
    A28,
    ZFMISC_1: 74;
    
        then
    
        reconsider fn = (f
    . n) as 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) by 
    XBOOLE_1: 1;
    
        reconsider q = p as
    FinSequence of fn by 
    A27,
    FINSEQ_1:def 4;
    
        reconsider q9 = q as
    Element of (fn 
    * ) by 
    FINSEQ_1:def 11;
    
        (
    [o, NTermVal(o,s,v)]
    -tree q9) 
    in { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of (fn 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    A12;
    
        then (
    [o, NTermVal(o,s,v)]
    -tree q9) 
    in ((f 
    . n) 
    \/ { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of (fn 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    XBOOLE_0:def 3;
    
        then (
    [o, NTermVal(o,s,v)]
    -tree q9) 
    in (f 
    . (n 
    + 1)) by 
    A3;
    
        hence (
    [o, NTermVal(o,s,v)]
    -tree p) 
    in X by 
    A1,
    CARD_5: 2;
    
      end;
    
      let F be
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) such that 
    
      
    
    A29: for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree  
    [d, TermVal(d)])
    in F and 
    
      
    
    A30: for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o,
    NTV(o,p)]
    -tree p) 
    in F; 
    
      defpred
    
    P[
    Nat] means (f
    . $1) 
    c= F; 
    
      
    
      
    
    A31: 
    P[
    0 ] 
    
      proof
    
        let x be
    object;
    
        reconsider p = (
    <*> F) as 
    FinSequence of F; 
    
        assume x
    in (f 
    .  
    0 ); 
    
        then
    
        consider t be
    Symbol of G, d be 
    Element of D such that 
    
        
    
    A32: x 
    = ( 
    root-tree  
    [t, d]) and
    
        
    
    A33: t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==> ( 
    pr1 ( 
    roots p)) & d 
    =  
    NTV(t,p) by
    A2,
    Th3,
    Th7;
    
        (
    [t, d]
    -tree p) 
    = ( 
    root-tree  
    [t, d]) by
    TREES_4: 20;
    
        hence thesis by
    A29,
    A30,
    A32,
    A33;
    
      end;
    
      
    
    A34: 
    
      now
    
        let n be
    Nat such that 
    
        
    
    A35: 
    P[n];
    
        thus
    P[(n
    + 1)] 
    
        proof
    
          let x be
    object;
    
          assume that
    
          
    
    A36: x 
    in (f 
    . (n 
    + 1)) and 
    
          
    
    A37: not x 
    in F; 
    
          x
    in ((f 
    . n) 
    \/ { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3,
    A36;
    
          then x
    in (f 
    . n) or x 
    in { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    XBOOLE_0:def 3;
    
          then
    
          consider o be
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) such that 
    
          
    
    A38: x 
    = ( 
    [o,
    NTV(o,p)]
    -tree p) and 
    
          
    
    A39: ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A35,
    A37;
    
          (
    rng p) 
    c= (f 
    . n) by 
    FINSEQ_1:def 4;
    
          then (
    rng p) 
    c= F by 
    A35,
    XBOOLE_1: 1;
    
          then
    
          reconsider p as
    FinSequence of F by 
    FINSEQ_1:def 4;
    
          o
    ==> ( 
    pr1 ( 
    roots p)) by 
    A39;
    
          hence contradiction by
    A30,
    A37,
    A38;
    
        end;
    
      end;
    
      
    
      
    
    A40: for n be 
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A31,
    A34);
    
      thus X
    c= F 
    
      proof
    
        let x be
    object;
    
        assume x
    in X; 
    
        then
    
        consider n be
    object such that 
    
        
    
    A41: n 
    in  
    NAT and 
    
        
    
    A42: x 
    in (f 
    . n) by 
    A1,
    CARD_5: 2;
    
        (f
    . n) 
    c= F by 
    A40,
    A41;
    
        hence thesis by
    A42;
    
      end;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch4
    
    DTCSymbols { f() ->
    Function , G() -> non 
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() } : 
    
ex X1 be 
    Subset of ( 
    FinTrees the 
    carrier of G()) st X1 
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) : t 
    in ( 
    Union f()) } & (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree d) 
    in X1) & (for o be 
    Symbol of G(), p be 
    FinSequence of X1 st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in X1) & for F be 
    Subset of ( 
    FinTrees the 
    carrier of G()) st (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree d) 
    in F) & (for o be 
    Symbol of G(), p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F) holds X1 
    c= F 
    
      provided
    
      
    
    A1: ( 
    dom f()) 
    =  
    NAT  
    
       and 
    
      
    
    A2: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } 
    
       and 
    
      
    
    A3: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      set f = f();
    
      set G = G();
    
      set D = D();
    
      set S = the
    carrier of G; 
    
      set SxD =
    [:S, D:];
    
      deffunc
    
    NTV(
    Symbol of G, 
    FinSequence) = NTermVal($1,pr1,pr2);
    
      
    
      
    
    A4: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } by 
    A2;
    
      
    
      
    
    A5: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
      consider X be
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) such that 
    
      
    
    A6: X 
    = ( 
    Union f) & (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree  
    [d, TermVal(d)])
    in X) & (for o be 
    Symbol of G, p be 
    FinSequence of X st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in X) & for F be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree  
    [d, TermVal(d)])
    in F) & (for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in F) holds X 
    c= F from 
    DTCMin(
    A1,
    A4,
    A5);
    
      set X9 = { (t
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) : t 
    in ( 
    Union f) }; 
    
      X9
    c= ( 
    FinTrees the 
    carrier of G) 
    
      proof
    
        let x be
    object;
    
        assume x
    in X9; 
    
        then
    
        consider tt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) such that 
    
        
    
    A7: x 
    = (tt 
    `1 ) and tt 
    in ( 
    Union f); 
    
        
    
        
    
    A8: (tt 
    `1 ) 
    = (( 
    pr1 (the 
    carrier of G,D)) 
    * tt) by 
    TREES_3:def 12;
    
        
    
        
    
    A9: ( 
    rng tt) 
    c=  
    [:the 
    carrier of G, D:] by 
    RELAT_1:def 19;
    
        (
    dom ( 
    pr1 (the 
    carrier of G,D))) 
    =  
    [:the 
    carrier of G, D:] by 
    FUNCT_2:def 1;
    
        then (
    dom (tt 
    `1 )) 
    = ( 
    dom tt) by 
    A8,
    A9,
    RELAT_1: 27;
    
        hence thesis by
    A7,
    TREES_3:def 8;
    
      end;
    
      then
    
      reconsider X9 as
    Subset of ( 
    FinTrees the 
    carrier of G()); 
    
      take X1 = X9;
    
      thus X1
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) : t 
    in ( 
    Union f) }; 
    
      hereby
    
        let t be
    Symbol of G(); 
    
        assume
    
        
    
    A10: t 
    in ( 
    Terminals G()); 
    
        
    
        
    
    A11: (( 
    root-tree  
    [t, TermVal(t)])
    `1 ) 
    = ( 
    root-tree t) by 
    TREES_4: 25;
    
        (
    root-tree  
    [t, TermVal(t)])
    in ( 
    Union f) by 
    A6,
    A10;
    
        hence (
    root-tree t) 
    in X1 by 
    A11;
    
      end;
    
      hereby
    
        let nt be
    Symbol of G(), ts be 
    FinSequence of X1; 
    
        assume
    
        
    
    A12: nt 
    ==> ( 
    roots ts); 
    
        
    
        
    
    A13: ( 
    dom ts) 
    = ( 
    Seg ( 
    len ts)) by 
    FINSEQ_1:def 3;
    
        defpred
    
    P[
    set, 
    set] means ex dt be
    DecoratedTree of 
    [:the 
    carrier of G(), D():] st dt 
    = $2 & (dt 
    `1 ) 
    = (ts 
    . $1) & dt 
    in ( 
    Union f); 
    
        
    
        
    
    A14: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len ts)) holds ex x be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st 
    P[k, x]
    
        proof
    
          let k be
    Nat;
    
          assume k
    in ( 
    Seg ( 
    len ts)); 
    
          then
    
          
    
    A15: (ts 
    . k) 
    in ( 
    rng ts) by 
    A13,
    FUNCT_1:def 3;
    
          (
    rng ts) 
    c= X1 by 
    FINSEQ_1:def 4;
    
          then (ts
    . k) 
    in X1 by 
    A15;
    
          then ex x be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) st (ts 
    . k) 
    = (x 
    `1 ) & x 
    in ( 
    Union f); 
    
          hence thesis;
    
        end;
    
        consider dts be
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) such that 
    
        
    
    A16: ( 
    dom dts) 
    = ( 
    Seg ( 
    len ts)) and 
    
        
    
    A17: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len ts)) holds 
    P[k, (dts
    . k)] from 
    FINSEQ_1:sch 5(
    A14);
    
        (
    rng dts) 
    c= ( 
    Union f) 
    
        proof
    
          let x be
    object;
    
          assume x
    in ( 
    rng dts); 
    
          then
    
          consider k be
    object such that 
    
          
    
    A18: k 
    in ( 
    dom ts) and 
    
          
    
    A19: x 
    = (dts 
    . k) by 
    A13,
    A16,
    FUNCT_1:def 3;
    
          reconsider k as
    Element of 
    NAT by 
    A18;
    
          ex dt be
    DecoratedTree of 
    [:the 
    carrier of G(), D():] st dt 
    = x & (dt 
    `1 ) 
    = (ts 
    . k) & dt 
    in ( 
    Union f) by 
    A13,
    A17,
    A18,
    A19;
    
          hence thesis;
    
        end;
    
        then
    
        reconsider dts as
    FinSequence of X by 
    A6,
    FINSEQ_1:def 4;
    
        
    
        
    
    A20: ( 
    dom ( 
    roots ts)) 
    = ( 
    dom ts) by 
    TREES_3:def 18;
    
        
    
        
    
    A21: ( 
    dom ( 
    pr1 ( 
    roots dts))) 
    = ( 
    dom ( 
    roots dts)) by 
    MCART_1:def 12;
    
        then
    
        
    
    A22: ( 
    dom ( 
    pr1 ( 
    roots dts))) 
    = ( 
    dom ts) by 
    A13,
    A16,
    TREES_3:def 18;
    
        now
    
          let k be
    Nat;
    
          assume
    
          
    
    A23: k 
    in ( 
    dom ts); 
    
          then
    
          consider dt be
    DecoratedTree of 
    [:the 
    carrier of G(), D():] such that 
    
          
    
    A24: dt 
    = (dts 
    . k) and 
    
          
    
    A25: (dt 
    `1 ) 
    = (ts 
    . k) and dt 
    in ( 
    Union f) by 
    A13,
    A17;
    
          reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
          ex T be
    DecoratedTree st T 
    = (ts 
    . k) & (( 
    roots ts) 
    . k) 
    = (T 
    .  
    {} ) by 
    A23,
    TREES_3:def 18;
    
          then
    
          
    
    A26: (( 
    roots ts) 
    . k) 
    = ((dt 
    . r) 
    `1 ) by 
    A25,
    TREES_3: 39;
    
          ex T be
    DecoratedTree st T 
    = (dts 
    . k) & (( 
    roots dts) 
    . k) 
    = (T 
    .  
    {} ) by 
    A13,
    A16,
    A23,
    TREES_3:def 18;
    
          hence ((
    roots ts) 
    . k) 
    = (( 
    pr1 ( 
    roots dts)) 
    . k) by 
    A21,
    A22,
    A23,
    A24,
    A26,
    MCART_1:def 12;
    
        end;
    
        then (
    roots ts) 
    = ( 
    pr1 ( 
    roots dts)) by 
    A20,
    A22,
    FINSEQ_1: 13;
    
        then
    
        
    
    A27: ( 
    [nt,
    NTV(nt,dts)]
    -tree dts) 
    in X by 
    A6,
    A12;
    
        
    
        
    
    A28: ( 
    rng dts) 
    c= ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) by 
    FINSEQ_1:def 4;
    
        (
    FinTrees  
    [:the 
    carrier of G(), D():]) 
    c= ( 
    Trees  
    [:the 
    carrier of G(), D():]) by 
    TREES_3: 21;
    
        then (
    rng dts) 
    c= ( 
    Trees  
    [:the 
    carrier of G(), D():]) by 
    A28;
    
        then
    
        reconsider dts9 = dts as
    FinSequence of ( 
    Trees  
    [:the 
    carrier of G(), D():]) by 
    FINSEQ_1:def 4;
    
        
    
        
    
    A29: ( 
    rng ts) 
    c= ( 
    FinTrees the 
    carrier of G()) by 
    FINSEQ_1:def 4;
    
        (
    FinTrees the 
    carrier of G()) 
    c= ( 
    Trees the 
    carrier of G()) by 
    TREES_3: 21;
    
        then (
    rng ts) 
    c= ( 
    Trees the 
    carrier of G()) by 
    A29;
    
        then
    
        reconsider ts9 = ts as
    FinSequence of ( 
    Trees the 
    carrier of G()) by 
    FINSEQ_1:def 4;
    
        now
    
          let i be
    Nat;
    
          assume i
    in ( 
    dom dts); 
    
          then
    
          
    
    A30: ex dt be 
    DecoratedTree of 
    [:the 
    carrier of G, D:] st (dt 
    = (dts 
    . i)) & ((dt 
    `1 ) 
    = (ts 
    . i)) & (dt 
    in ( 
    Union f)) by 
    A16,
    A17;
    
          let T be
    DecoratedTree of 
    [:the 
    carrier of G(), D():]; 
    
          assume T
    = (dts 
    . i); 
    
          hence (ts
    . i) 
    = (T 
    `1 ) by 
    A30;
    
        end;
    
        then ((
    [nt,
    NTV(nt,dts)]
    -tree dts9) 
    `1 ) 
    = (nt 
    -tree ts9) by 
    A13,
    A16,
    TREES_4: 27;
    
        hence (nt
    -tree ts) 
    in X1 by 
    A6,
    A27;
    
      end;
    
      let F be
    Subset of ( 
    FinTrees the 
    carrier of G); 
    
      assume that
    
      
    
    A31: for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in F and 
    
      
    
    A32: for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F; 
    
      thus X1
    c= F 
    
      proof
    
        let x be
    object;
    
        assume x
    in X1; 
    
        then
    
        consider tt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D:]) such that 
    
        
    
    A33: x 
    = (tt 
    `1 ) and 
    
        
    
    A34: tt 
    in ( 
    Union f); 
    
        set FF = { dt where dt be
    Element of ( 
    FinTrees SxD) : (dt 
    `1 ) 
    in F }; 
    
        FF
    c= ( 
    FinTrees SxD) 
    
        proof
    
          let x be
    object;
    
          assume x
    in FF; 
    
          then ex dt be
    Element of ( 
    FinTrees SxD) st x 
    = dt & (dt 
    `1 ) 
    in F; 
    
          hence thesis;
    
        end;
    
        then
    
        reconsider FF as
    Subset of ( 
    FinTrees SxD); 
    
        
    
    A35: 
    
        now
    
          let d be
    Symbol of G; 
    
          assume d
    in ( 
    Terminals G); 
    
          then
    
          
    
    A36: ( 
    root-tree d) 
    in F by 
    A31;
    
          ((
    root-tree  
    [d, TermVal(d)])
    `1 ) 
    = ( 
    root-tree d) by 
    TREES_4: 25;
    
          hence (
    root-tree  
    [d, TermVal(d)])
    in FF by 
    A36;
    
        end;
    
        now
    
          let o be
    Symbol of G, p be 
    FinSequence of FF; 
    
          assume
    
          
    
    A37: o 
    ==> ( 
    pr1 ( 
    roots p)); 
    
          consider p1 be
    FinSequence of ( 
    FinTrees S) such that 
    
          
    
    A38: ( 
    dom p1) 
    = ( 
    dom p) and 
    
          
    
    A39: for i be 
    Nat st i 
    in ( 
    dom p) holds ex T be 
    Element of ( 
    FinTrees SxD) st T 
    = (p 
    . i) & (p1 
    . i) 
    = (T 
    `1 ) and 
    
          
    
    A40: (( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    `1 ) 
    = (o 
    -tree p1) by 
    TREES_4: 31;
    
          (
    rng p1) 
    c= F 
    
          proof
    
            let x be
    object;
    
            assume x
    in ( 
    rng p1); 
    
            then
    
            consider k be
    object such that 
    
            
    
    A41: k 
    in ( 
    dom p1) and 
    
            
    
    A42: x 
    = (p1 
    . k) by 
    FUNCT_1:def 3;
    
            reconsider k as
    Element of 
    NAT by 
    A41;
    
            
    
            
    
    A43: (p 
    . k) 
    in ( 
    rng p) by 
    A38,
    A41,
    FUNCT_1:def 3;
    
            
    
            
    
    A44: ex dt be 
    Element of ( 
    FinTrees SxD) st (dt 
    = (p 
    . k)) & (x 
    = (dt 
    `1 )) by 
    A38,
    A39,
    A41,
    A42;
    
            (
    rng p) 
    c= FF by 
    FINSEQ_1:def 4;
    
            then (p
    . k) 
    in FF by 
    A43;
    
            then ex dt be
    Element of ( 
    FinTrees SxD) st (p 
    . k) 
    = dt & (dt 
    `1 ) 
    in F; 
    
            hence thesis by
    A44;
    
          end;
    
          then
    
          reconsider p1 as
    FinSequence of F by 
    FINSEQ_1:def 4;
    
          
    
          
    
    A45: ( 
    dom ( 
    roots p1)) 
    = ( 
    dom p1) by 
    TREES_3:def 18;
    
          
    
          
    
    A46: ( 
    dom ( 
    pr1 ( 
    roots p))) 
    = ( 
    dom ( 
    roots p)) by 
    MCART_1:def 12;
    
          then
    
          
    
    A47: ( 
    dom ( 
    pr1 ( 
    roots p))) 
    = ( 
    dom p1) by 
    A38,
    TREES_3:def 18;
    
          now
    
            let k be
    Nat;
    
            assume
    
            
    
    A48: k 
    in ( 
    dom p1); 
    
            then
    
            
    
    A49: (p 
    . k) 
    in ( 
    rng p) by 
    A38,
    FUNCT_1:def 3;
    
            
    
            
    
    A50: ex dt be 
    Element of ( 
    FinTrees SxD) st (dt 
    = (p 
    . k)) & ((p1 
    . k) 
    = (dt 
    `1 )) by 
    A38,
    A39,
    A48;
    
            (
    rng p) 
    c= FF by 
    FINSEQ_1:def 4;
    
            then (p
    . k) 
    in FF by 
    A49;
    
            then
    
            consider dt be
    Element of ( 
    FinTrees SxD) such that 
    
            
    
    A51: (p 
    . k) 
    = dt and (dt 
    `1 ) 
    in F; 
    
            reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
            ex T be
    DecoratedTree st T 
    = (p1 
    . k) & (( 
    roots p1) 
    . k) 
    = (T 
    .  
    {} ) by 
    A48,
    TREES_3:def 18;
    
            then
    
            
    
    A52: (( 
    roots p1) 
    . k) 
    = ((dt 
    . r) 
    `1 ) by 
    A50,
    A51,
    TREES_3: 39;
    
            ex T be
    DecoratedTree st T 
    = (p 
    . k) & (( 
    roots p) 
    . k) 
    = (T 
    .  
    {} ) by 
    A38,
    A48,
    TREES_3:def 18;
    
            hence ((
    roots p1) 
    . k) 
    = (( 
    pr1 ( 
    roots p)) 
    . k) by 
    A46,
    A47,
    A48,
    A51,
    A52,
    MCART_1:def 12;
    
          end;
    
          then (
    pr1 ( 
    roots p)) 
    = ( 
    roots p1) by 
    A45,
    A47,
    FINSEQ_1: 13;
    
          then ((
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    `1 ) 
    in F by 
    A32,
    A37,
    A40;
    
          hence (
    [o,
    NTV(o,p)]
    -tree p) 
    in FF; 
    
        end;
    
        then X
    c= FF by 
    A6,
    A35;
    
        then tt
    in FF by 
    A6,
    A34;
    
        then ex dt be
    Element of ( 
    FinTrees SxD) st tt 
    = dt & (dt 
    `1 ) 
    in F; 
    
        hence thesis by
    A33;
    
      end;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch5
    
    DTCHeight { f() ->
    Function , G() -> non 
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() } : 
    
for n be 
    Nat, dt be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st dt 
    in ( 
    Union f()) holds dt 
    in (f() 
    . n) iff ( 
    height ( 
    dom dt)) 
    <= n 
    
      provided
    
      
    
    A1: ( 
    dom f()) 
    =  
    NAT  
    
       and 
    
      
    
    A2: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } 
    
       and 
    
      
    
    A3: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      set f = f();
    
      set G = G();
    
      set D = D();
    
      set SxD =
    [:the 
    carrier of G, D:]; 
    
      deffunc
    
    NTV(
    Symbol of G, 
    FinSequence) = NTermVal($1,pr1,pr2);
    
      defpred
    
    R[
    Nat] means for dt be
    Element of ( 
    FinTrees SxD) st dt 
    in ( 
    Union f) holds dt 
    in (f 
    . $1) iff ( 
    height ( 
    dom dt)) 
    <= $1; 
    
      
    
      
    
    A4: 
    R[
    0 ] 
    
      proof
    
        let dt be
    Element of ( 
    FinTrees SxD); 
    
        assume
    
        
    
    A5: dt 
    in ( 
    Union f); 
    
        hereby
    
          assume dt
    in (f 
    .  
    0 ); 
    
          then ex t be
    Symbol of G, d be 
    Element of D st dt 
    = ( 
    root-tree  
    [t, d]) & (t
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{})) by 
    A2;
    
          hence (
    height ( 
    dom dt)) 
    <=  
    0 by 
    TREES_1: 42,
    TREES_4: 3;
    
        end;
    
        assume (
    height ( 
    dom dt)) 
    <=  
    0 ; 
    
        then
    
        
    
    A6: ( 
    height ( 
    dom dt)) 
    =  
    0 ; 
    
        defpred
    
    P[
    Nat] means not dt
    in (f 
    . $1); 
    
        assume
    
        
    
    A7: 
    P[
    0 ]; 
    
        
    
    A8: 
    
        now
    
          let n be
    Nat;
    
          assume
    
          
    
    A9: 
    P[n];
    
          thus
    P[(n
    + 1)] 
    
          proof
    
            assume dt
    in (f 
    . (n 
    + 1)); 
    
            then dt
    in ((f 
    . n) 
    \/ { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
            then dt
    in (f 
    . n) or dt 
    in { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    XBOOLE_0:def 3;
    
            then
    
            consider o be
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) such that 
    
            
    
    A10: dt 
    = ( 
    [o,
    NTV(o,p)]
    -tree p) and 
    
            
    
    A11: ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A9;
    
            
    
            
    
    A12: dt 
    = ( 
    root-tree (dt 
    .  
    {} )) by 
    A6,
    TREES_1: 43,
    TREES_4: 5;
    
            then
    
            
    
    A13: p 
    =  
    {} by 
    A10,
    A11,
    TREES_4: 17;
    
            then dt
    = ( 
    root-tree  
    [o, NTermVal(o,{},{})]) by
    A10,
    A12,
    Th3,
    Th7,
    TREES_4:def 4;
    
            hence contradiction by
    A2,
    A7,
    A11,
    A13,
    Th3,
    Th7;
    
          end;
    
        end;
    
        
    
        
    
    A14: for n be 
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A7,
    A8);
    
        ex n be
    object st n 
    in  
    NAT & dt 
    in (f 
    . n) by 
    A1,
    A5,
    CARD_5: 2;
    
        hence contradiction by
    A14;
    
      end;
    
      
    
    A15: 
    
      now
    
        let n be
    Nat;
    
        assume
    
        
    
    A16: 
    R[n];
    
        thus
    R[(n
    + 1)] 
    
        proof
    
          let dt be
    Element of ( 
    FinTrees SxD); 
    
          assume
    
          
    
    A17: dt 
    in ( 
    Union f); 
    
          hereby
    
            assume dt
    in (f 
    . (n 
    + 1)); 
    
            then dt
    in ((f 
    . n) 
    \/ { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
            then
    
            
    
    A18: dt 
    in (f 
    . n) or dt 
    in { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    XBOOLE_0:def 3;
    
            per cases ;
    
              suppose dt
    in (f 
    . n); 
    
              then
    
              
    
    A19: ( 
    height ( 
    dom dt)) 
    <= n by 
    A16,
    A17;
    
              n
    <= (n 
    + 1) by 
    NAT_1: 11;
    
              hence (
    height ( 
    dom dt)) 
    <= (n 
    + 1) by 
    A19,
    XXREAL_0: 2;
    
            end;
    
              suppose not dt
    in (f 
    . n); 
    
              then
    
              consider o be
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) such that 
    
              
    
    A20: dt 
    = ( 
    [o,
    NTV(o,p)]
    -tree p) and 
    
              
    
    A21: ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A18;
    
              reconsider p as
    FinSequence of ( 
    FinTrees SxD) by 
    A21;
    
              
    
              
    
    A22: ( 
    dom dt) 
    = ( 
    tree ( 
    doms p)) by 
    A20,
    TREES_4: 10;
    
              now
    
                let t be
    finite  
    Tree;
    
                assume t
    in ( 
    rng ( 
    doms p)); 
    
                then
    
                consider k be
    object such that 
    
                
    
    A23: k 
    in ( 
    dom ( 
    doms p)) and 
    
                
    
    A24: t 
    = (( 
    doms p) 
    . k) by 
    FUNCT_1:def 3;
    
                
    
                
    
    A25: k 
    in ( 
    dom p) by 
    A23,
    TREES_3: 37;
    
                then
    
                
    
    A26: (p 
    . k) 
    in ( 
    rng p) by 
    FUNCT_1:def 3;
    
                (
    rng p) 
    c= ( 
    FinTrees SxD) by 
    FINSEQ_1:def 4;
    
                then
    
                reconsider pk = (p
    . k) as 
    Element of ( 
    FinTrees SxD) by 
    A26;
    
                
    
                
    
    A27: n 
    in  
    NAT by 
    ORDINAL1:def 12;
    
                
    
                
    
    A28: ( 
    rng p) 
    c= (f 
    . n) by 
    FINSEQ_1:def 4;
    
                
    
                
    
    A29: t 
    = ( 
    dom pk) by 
    A24,
    A25,
    FUNCT_6: 22;
    
                pk
    in ( 
    Union f) by 
    A1,
    A26,
    A28,
    CARD_5: 2,
    A27;
    
                hence (
    height t) 
    <= n by 
    A16,
    A26,
    A28,
    A29;
    
              end;
    
              hence (
    height ( 
    dom dt)) 
    <= (n 
    + 1) by 
    A22,
    TREES_3: 77;
    
            end;
    
          end;
    
          assume
    
          
    
    A30: ( 
    height ( 
    dom dt)) 
    <= (n 
    + 1); 
    
          defpred
    
    P[
    Nat] means dt
    in (f 
    . $1); 
    
          ex k be
    object st k 
    in  
    NAT & dt 
    in (f 
    . k) by 
    A1,
    A17,
    CARD_5: 2;
    
          then
    
          
    
    A31: ex k be 
    Nat st 
    P[k];
    
          consider mk be
    Nat such that 
    
          
    
    A32: 
    P[mk] & for kk be
    Nat st 
    P[kk] holds mk
    <= kk from 
    NAT_1:sch 5(
    A31);
    
          deffunc
    
    F(
    set, 
    set) = { (
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f 
    . $1) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }; 
    
          
    
          
    
    A33: for n be 
    Nat holds (f 
    . n) 
    c= (f 
    . (n 
    + 1)) 
    
          proof
    
            let n be
    Nat;
    
            (f
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/  
    F(n,.)) by
    A3;
    
            hence thesis by
    XBOOLE_1: 7;
    
          end;
    
          per cases by
    NAT_1: 6;
    
            suppose mk
    =  
    0 ; 
    
            then (f
    . mk) 
    c= (f 
    . ( 
    0  
    + (n 
    + 1))) by 
    A33,
    MEASURE2: 18;
    
            hence thesis by
    A32;
    
          end;
    
            suppose ex k be
    Nat st mk 
    = (k 
    + 1); 
    
            then
    
            consider k be
    Nat such that 
    
            
    
    A34: mk 
    = (k 
    + 1); 
    
            reconsider k as
    Element of 
    NAT by 
    ORDINAL1:def 12;
    
            
    
            
    
    A35: k 
    < (k 
    + 1) by 
    NAT_1: 13;
    
            (f
    . mk) 
    = ((f 
    . k) 
    \/ { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . k) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3,
    A34;
    
            then dt
    in (f 
    . k) or dt 
    in { ( 
    [o,
    NTV(o,p)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . k) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    A32,
    XBOOLE_0:def 3;
    
            then
    
            consider o be
    Symbol of G, p be 
    Element of ((f 
    . k) 
    * ) such that 
    
            
    
    A36: dt 
    = ( 
    [o,
    NTV(o,p)]
    -tree p) and 
    
            
    
    A37: ex q be 
    FinSequence of ( 
    FinTrees SxD) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A32,
    A34,
    A35;
    
            reconsider p as
    FinSequence of ( 
    FinTrees SxD) by 
    A37;
    
            
    
            
    
    A38: ( 
    dom dt) 
    = ( 
    tree ( 
    doms p)) by 
    A36,
    TREES_4: 10;
    
            (
    rng p) 
    c= (f 
    . n) 
    
            proof
    
              let x be
    object;
    
              assume x
    in ( 
    rng p); 
    
              then
    
              consider k9 be
    object such that 
    
              
    
    A39: k9 
    in ( 
    dom p) and 
    
              
    
    A40: x 
    = (p 
    . k9) by 
    FUNCT_1:def 3;
    
              
    
              
    
    A41: x 
    in ( 
    rng p) by 
    A39,
    A40,
    FUNCT_1:def 3;
    
              (
    rng p) 
    c= ( 
    FinTrees SxD) by 
    FINSEQ_1:def 4;
    
              then
    
              reconsider t = x as
    Element of ( 
    FinTrees SxD) by 
    A41;
    
              
    
              
    
    A42: k9 
    in ( 
    dom ( 
    doms p)) by 
    A39,
    A40,
    FUNCT_6: 22;
    
              (
    dom t) 
    = (( 
    doms p) 
    . k9) by 
    A39,
    A40,
    FUNCT_6: 22;
    
              then (
    dom t) 
    in ( 
    rng ( 
    doms p)) by 
    A42,
    FUNCT_1:def 3;
    
              then (
    height ( 
    dom t)) 
    < (n 
    + 1) by 
    A30,
    A38,
    TREES_3: 78,
    XXREAL_0: 2;
    
              then
    
              
    
    A43: ( 
    height ( 
    dom t)) 
    <= n by 
    NAT_1: 13;
    
              
    
              
    
    A44: ( 
    rng p) 
    c= (f 
    . k) by 
    FINSEQ_1:def 4;
    
              t
    in ( 
    rng p) by 
    A39,
    A40,
    FUNCT_1:def 3;
    
              then t
    in ( 
    Union f) by 
    A1,
    A44,
    CARD_5: 2;
    
              hence thesis by
    A16,
    A43;
    
            end;
    
            then p is
    FinSequence of (f 
    . n) by 
    FINSEQ_1:def 4;
    
            then
    
            reconsider p as
    Element of ((f 
    . n) 
    * ) by 
    FINSEQ_1:def 11;
    
            (
    [o,
    NTV(o,p)]
    -tree p) 
    in { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    A37;
    
            then dt
    in ((f 
    . n) 
    \/ { ( 
    [oo,
    NTV(oo,pp)]
    -tree pp) where oo be 
    Symbol of G, pp be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st pp 
    = q & oo 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A36,
    XBOOLE_0:def 3;
    
            hence thesis by
    A3;
    
          end;
    
        end;
    
      end;
    
      thus for n be
    Nat holds 
    R[n] from
    NAT_1:sch 2(
    A4,
    A15);
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch6
    
    DTCUniq { f() ->
    Function , G() -> non 
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() } : 
    
for dt1,dt2 be 
    DecoratedTree of 
    [:the 
    carrier of G(), D():] st dt1 
    in ( 
    Union f()) & dt2 
    in ( 
    Union f()) & (dt1 
    `1 ) 
    = (dt2 
    `1 ) holds dt1 
    = dt2 
    
      provided
    
      
    
    A1: ( 
    dom f()) 
    =  
    NAT  
    
       and 
    
      
    
    A2: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } 
    
       and 
    
      
    
    A3: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      set f = f();
    
      set G = G();
    
      set D = D();
    
      set S = the
    carrier of G; 
    
      set SxD =
    [:S, D:];
    
      deffunc
    
    NTV(
    Symbol of G, 
    FinSequence) = NTermVal($1,pr1,pr2);
    
      
    
      
    
    A4: (f() 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of D() : t 
    in ( 
    Terminals G()) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } by 
    A2;
    
      
    
      
    
    A5: for n be 
    Nat holds (f() 
    . (n 
    + 1)) 
    = ((f() 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f() 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
      defpred
    
    R[
    Nat] means for dt1,dt2 be
    DecoratedTree of SxD st dt1 
    in (f 
    . $1) & dt2 
    in (f 
    . $1) & (dt1 
    `1 ) 
    = (dt2 
    `1 ) holds dt1 
    = dt2; 
    
      
    
      
    
    A6: 
    R[
    0 ] 
    
      proof
    
        let dt1,dt2 be
    DecoratedTree of SxD; 
    
        assume that
    
        
    
    A7: dt1 
    in (f 
    .  
    0 ) and 
    
        
    
    A8: dt2 
    in (f 
    .  
    0 ) and 
    
        
    
    A9: (dt1 
    `1 ) 
    = (dt2 
    `1 ); 
    
        consider t1 be
    Symbol of G, d1 be 
    Element of D such that 
    
        
    
    A10: dt1 
    = ( 
    root-tree  
    [t1, d1]) and
    
        
    
    A11: t1 
    in ( 
    Terminals G) & d1 
    = TermVal(t1) or t1 
    ==>  
    {} & d1 
    = NTermVal(t1,{},{}) by 
    A2,
    A7;
    
        consider t2 be
    Symbol of G, d2 be 
    Element of D such that 
    
        
    
    A12: dt2 
    = ( 
    root-tree  
    [t2, d2]) and
    
        
    
    A13: t2 
    in ( 
    Terminals G) & d2 
    = TermVal(t2) or t2 
    ==>  
    {} & d2 
    = NTermVal(t2,{},{}) by 
    A2,
    A8;
    
        
    
        
    
    A14: ( 
    root-tree t1) 
    = (dt1 
    `1 ) by 
    A10,
    TREES_4: 25;
    
        (
    root-tree t2) 
    = (dt2 
    `1 ) by 
    A12,
    TREES_4: 25;
    
        then
    
        
    
    A15: t1 
    = t2 by 
    A9,
    A14,
    TREES_4: 4;
    
        now
    
          let t be
    Symbol of G; 
    
          assume t
    ==>  
    {} ; 
    
          then not ex t9 be
    Symbol of G st t 
    = t9 & not ex tnt be 
    FinSequence st t9 
    ==> tnt; 
    
          then not t
    in { t9 where t9 be 
    Symbol of G : not ex tnt be 
    FinSequence st t9 
    ==> tnt }; 
    
          hence not t
    in ( 
    Terminals G) by 
    LANG1:def 2;
    
        end;
    
        hence thesis by
    A10,
    A11,
    A12,
    A13,
    A15;
    
      end;
    
      
    
    A16: 
    
      now
    
        let n be
    Nat such that 
    
        
    
    A17: 
    R[n];
    
        thus
    R[(n
    + 1)] 
    
        proof
    
          let dt1,dt2 be
    DecoratedTree of SxD; 
    
          assume that
    
          
    
    A18: dt1 
    in (f 
    . (n 
    + 1)) and 
    
          
    
    A19: dt2 
    in (f 
    . (n 
    + 1)) and 
    
          
    
    A20: (dt1 
    `1 ) 
    = (dt2 
    `1 ); 
    
          
    
          
    
    A21: ( 
    dom dt1) 
    = ( 
    dom (dt1 
    `1 )) by 
    TREES_4: 24;
    
          
    
          
    
    A22: ( 
    dom dt2) 
    = ( 
    dom (dt1 
    `1 )) by 
    A20,
    TREES_4: 24;
    
          
    
          
    
    A23: dt1 
    in ( 
    Union f) by 
    A1,
    A18,
    CARD_5: 2;
    
          
    
          
    
    A24: dt2 
    in ( 
    Union f) by 
    A1,
    A19,
    CARD_5: 2;
    
          ex X be
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st X 
    = ( 
    Union f()) & (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d, TermVal(d)])
    in X) & (for o be 
    Symbol of G(), p be 
    FinSequence of X st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in X) & for F be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d, TermVal(d)])
    in F) & (for o be 
    Symbol of G(), p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in F) holds X 
    c= F from 
    DTCMin(
    A1,
    A4,
    A5);
    
          then
    
          reconsider dt19 = dt1, dt29 = dt2 as
    Element of ( 
    FinTrees SxD) by 
    A23,
    A24;
    
          
    
          
    
    A25: for n be 
    Nat, dt be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st dt 
    in ( 
    Union f()) holds dt 
    in (f() 
    . n) iff ( 
    height ( 
    dom dt)) 
    <= n from 
    DTCHeight(
    A1,
    A4,
    A5);
    
          per cases ;
    
            suppose
    
            
    
    A26: dt1 
    in (f 
    . n); 
    
            then (
    height ( 
    dom dt19)) 
    <= n by 
    A23,
    A25;
    
            then dt29
    in (f 
    . n) by 
    A21,
    A22,
    A24,
    A25;
    
            hence thesis by
    A17,
    A20,
    A26;
    
          end;
    
            suppose
    
            
    
    A27: not dt1 
    in (f 
    . n); 
    
            
    
            
    
    A28: (f 
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/ { ( 
    [o1,
    NTV(o1,p1)]
    -tree p1) where o1 be 
    Symbol of G, p1 be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p1 
    = q & o1 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
            then dt1
    in (f 
    . n) or dt1 
    in { ( 
    [o1,
    NTV(o1,p1)]
    -tree p1) where o1 be 
    Symbol of G, p1 be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p1 
    = q & o1 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    A18,
    XBOOLE_0:def 3;
    
            then
    
            consider o1 be
    Symbol of G, p1 be 
    Element of ((f 
    . n) 
    * ) such that 
    
            
    
    A29: dt1 
    = ( 
    [o1,
    NTV(o1,p1)]
    -tree p1) and 
    
            
    
    A30: ex q be 
    FinSequence of ( 
    FinTrees SxD) st p1 
    = q & o1 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A27;
    
            (
    height ( 
    dom dt19)) 
    > n by 
    A23,
    A25,
    A27;
    
            then
    
            
    
    A31: not dt29 
    in (f 
    . n) by 
    A21,
    A22,
    A24,
    A25;
    
            dt2
    in (f 
    . n) or dt2 
    in { ( 
    [o2,
    NTV(o2,p2)]
    -tree p2) where o2 be 
    Symbol of G, p2 be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees SxD) st p2 
    = q & o2 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    A19,
    A28,
    XBOOLE_0:def 3;
    
            then
    
            consider o2 be
    Symbol of G, p2 be 
    Element of ((f 
    . n) 
    * ) such that 
    
            
    
    A32: dt2 
    = ( 
    [o2,
    NTV(o2,p2)]
    -tree p2) and 
    
            
    
    A33: ex q be 
    FinSequence of ( 
    FinTrees SxD) st p2 
    = q & o2 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A31;
    
            reconsider p1 as
    FinSequence of ( 
    FinTrees SxD) by 
    A30;
    
            consider p11 be
    FinSequence of ( 
    FinTrees S) such that 
    
            
    
    A34: ( 
    dom p11) 
    = ( 
    dom p1) and 
    
            
    
    A35: for i be 
    Nat st i 
    in ( 
    dom p1) holds ex T be 
    Element of ( 
    FinTrees SxD) st T 
    = (p1 
    . i) & (p11 
    . i) 
    = (T 
    `1 ) and 
    
            
    
    A36: (( 
    [o1,
    NTV(o1,p1)]
    -tree p1) 
    `1 ) 
    = (o1 
    -tree p11) by 
    TREES_4: 31;
    
            reconsider p2 as
    FinSequence of ( 
    FinTrees SxD) by 
    A33;
    
            consider p21 be
    FinSequence of ( 
    FinTrees S) such that 
    
            
    
    A37: ( 
    dom p21) 
    = ( 
    dom p2) and 
    
            
    
    A38: for i be 
    Nat st i 
    in ( 
    dom p2) holds ex T be 
    Element of ( 
    FinTrees SxD) st T 
    = (p2 
    . i) & (p21 
    . i) 
    = (T 
    `1 ) and 
    
            
    
    A39: (( 
    [o2,
    NTV(o2,p2)]
    -tree p2) 
    `1 ) 
    = (o2 
    -tree p21) by 
    TREES_4: 31;
    
            
    
            
    
    A40: o1 
    = o2 by 
    A20,
    A29,
    A32,
    A36,
    A39,
    TREES_4: 15;
    
            
    
            
    
    A41: p11 
    = p21 by 
    A20,
    A29,
    A32,
    A36,
    A39,
    TREES_4: 15;
    
            now
    
              let k be
    Nat;
    
              assume
    
              
    
    A42: k 
    in ( 
    dom p11); 
    
              then
    
              consider p1k be
    Element of ( 
    FinTrees SxD) such that 
    
              
    
    A43: p1k 
    = (p1 
    . k) and 
    
              
    
    A44: (p11 
    . k) 
    = (p1k 
    `1 ) by 
    A34,
    A35;
    
              consider p2k be
    Element of ( 
    FinTrees SxD) such that 
    
              
    
    A45: p2k 
    = (p2 
    . k) and 
    
              
    
    A46: (p21 
    . k) 
    = (p2k 
    `1 ) by 
    A37,
    A38,
    A41,
    A42;
    
              
    
              
    
    A47: p1k 
    in (f 
    . n) by 
    A34,
    A42,
    A43,
    Th2;
    
              p2k
    in (f 
    . n) by 
    A37,
    A41,
    A42,
    A45,
    Th2;
    
              hence (p1
    . k) 
    = (p2 
    . k) by 
    A17,
    A41,
    A43,
    A44,
    A45,
    A46,
    A47;
    
            end;
    
            then p1
    = p2 by 
    A34,
    A37,
    A41,
    FINSEQ_1: 13;
    
            hence thesis by
    A29,
    A32,
    A40;
    
          end;
    
        end;
    
      end;
    
      
    
      
    
    A48: for n be 
    Nat holds 
    R[n] from
    NAT_1:sch 2(
    A6,
    A16);
    
      let dt1,dt2 be
    DecoratedTree of SxD; 
    
      assume that
    
      
    
    A49: dt1 
    in ( 
    Union f) and 
    
      
    
    A50: dt2 
    in ( 
    Union f) and 
    
      
    
    A51: (dt1 
    `1 ) 
    = (dt2 
    `1 ); 
    
      consider n1 be
    object such that 
    
      
    
    A52: n1 
    in  
    NAT and 
    
      
    
    A53: dt1 
    in (f 
    . n1) by 
    A1,
    A49,
    CARD_5: 2;
    
      consider n2 be
    object such that 
    
      
    
    A54: n2 
    in  
    NAT and 
    
      
    
    A55: dt2 
    in (f 
    . n2) by 
    A1,
    A50,
    CARD_5: 2;
    
      reconsider n1, n2 as
    Element of 
    NAT by 
    A52,
    A54;
    
      deffunc
    
    F(
    set, 
    set) = { (
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f 
    . $1) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }; 
    
      
    
      
    
    A56: for n be 
    Nat holds (f 
    . n) 
    c= (f 
    . (n 
    + 1)) 
    
      proof
    
        let n be
    Nat;
    
        (f
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/  
    F(n,.)) by
    A3;
    
        hence thesis by
    XBOOLE_1: 7;
    
      end;
    
      
    
      
    
    A57: for k,s be 
    Nat holds (f 
    . k) 
    c= (f 
    . (k 
    + s)) by 
    NAT_1: 11,
    A56,
    MEASURE2: 18;
    
      n1
    <= n2 or n1 
    >= n2; 
    
      then (ex s be
    Nat st n2 
    = (n1 
    + s)) or ex s be 
    Nat st n1 
    = (n2 
    + s) by 
    NAT_1: 10;
    
      then (f
    . n1) 
    c= (f 
    . n2) or (f 
    . n2) 
    c= (f 
    . n1) by 
    A57;
    
      hence thesis by
    A48,
    A51,
    A53,
    A55;
    
    end;
    
    definition
    
      let G be non
    empty  
    DTConstrStr;
    
      :: 
    
    DTCONSTR:def1
    
      func
    
    TS (G) -> 
    Subset of ( 
    FinTrees the 
    carrier of G) means 
    
      :
    
    Def1: (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in it ) & (for o be 
    Symbol of G, p be 
    FinSequence of it st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in it ) & for F be 
    Subset of ( 
    FinTrees the 
    carrier of G) st (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in F) & (for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F) holds it 
    c= F; 
    
      existence
    
      proof
    
        deffunc
    
    F(
    set, 
    set) = ($2
    \/ { ( 
    [o,
    A(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ($2 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
        consider f be
    Function such that 
    
        
    
    A1: ( 
    dom f) 
    =  
    NAT and 
    
        
    
    A2: (f 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G, d be 
    Element of 
    NAT : t 
    in ( 
    Terminals G) & d 
    =  
    T(t) or t
    ==>  
    {} & d 
    =  
    A(t,{},{}) } and
    
        
    
    A3: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    =  
    F(n,.) from
    NAT_1:sch 11;
    
        
    
        
    
    A4: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/ { ( 
    [o,
    A(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
        ex X1 be
    Subset of ( 
    FinTrees the 
    carrier of G) st X1 
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, 
    NAT :]) : t 
    in ( 
    Union f) } & (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in X1) & (for o be 
    Symbol of G, p be 
    FinSequence of X1 st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in X1) & for F be 
    Subset of ( 
    FinTrees the 
    carrier of G) st (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in F) & (for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F) holds X1 
    c= F from 
    DTCSymbols(
    A1,
    A2,
    A4);
    
        hence thesis;
    
      end;
    
      uniqueness ;
    
    end
    
    scheme :: 
    
    DTCONSTR:sch7
    
    DTConstrInd { G() -> non
    empty  
    DTConstrStr , P[ 
    set] } :
    
for t be 
    DecoratedTree of the 
    carrier of G() st t 
    in ( 
    TS G()) holds P[t] 
    
      provided
    
      
    
    A1: for s be 
    Symbol of G() st s 
    in ( 
    Terminals G()) holds P[( 
    root-tree s)] 
    
       and 
    
      
    
    A2: for nt be 
    Symbol of G(), ts be 
    FinSequence of ( 
    TS G()) st nt 
    ==> ( 
    roots ts) & for t be 
    DecoratedTree of the 
    carrier of G() st t 
    in ( 
    rng ts) holds P[t] holds P[(nt 
    -tree ts)]; 
    
      deffunc
    
    F(
    set, 
    set) = ($2
    \/ { ( 
    [o,
    0 ] 
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ($2 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      consider f be
    Function such that 
    
      
    
    A3: ( 
    dom f) 
    =  
    NAT and 
    
      
    
    A4: (f 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G(), d be 
    Element of 
    NAT : t 
    in ( 
    Terminals G()) & d 
    =  
    T(t) or t
    ==>  
    {} & d 
    =  
    A(t,{},{}) } and
    
      
    
    A5: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    =  
    F(n,.) from
    NAT_1:sch 11;
    
      
    
      
    
    A6: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/ { ( 
    [o,
    A(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A5;
    
      
    
      
    
    A7: ex X be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st X 
    = ( 
    Union f) & (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d,
    T(d)])
    in X) & (for o be 
    Symbol of G(), p be 
    FinSequence of X st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o,
    A(o,pr1,pr2)]
    -tree p) 
    in X) & for F be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree  
    [d,
    T(d)])
    in F) & (for o be 
    Symbol of G(), p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o,
    A(o,pr1,pr2)]
    -tree p) 
    in F) holds X 
    c= F from 
    DTCMin(
    A3,
    A4,
    A6);
    
      consider TSG be
    Subset of ( 
    FinTrees the 
    carrier of G()) such that 
    
      
    
    A8: TSG 
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) : t 
    in ( 
    Union f) } and 
    
      
    
    A9: for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree d) 
    in TSG and 
    
      
    
    A10: for o be 
    Symbol of G(), p be 
    FinSequence of TSG st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in TSG and 
    
      
    
    A11: for F be 
    Subset of ( 
    FinTrees the 
    carrier of G()) st (for d be 
    Symbol of G() st d 
    in ( 
    Terminals G()) holds ( 
    root-tree d) 
    in F) & (for o be 
    Symbol of G(), p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F) holds TSG 
    c= F from 
    DTCSymbols(
    A3,
    A4,
    A6);
    
      
    
      
    
    A12: TSG 
    = ( 
    TS G()) by 
    A9,
    A10,
    A11,
    Def1;
    
      defpred
    
    R[
    Nat] means for t be
    DecoratedTree of 
    [:the 
    carrier of G(), 
    NAT :] st t 
    in (f 
    . $1) holds P[(t 
    `1 )]; 
    
      
    
      
    
    A13: 
    R[
    0 ] 
    
      proof
    
        let tt be
    DecoratedTree of 
    [:the 
    carrier of G(), 
    NAT :]; 
    
        set p = (
    <*> ( 
    TS G())); 
    
        assume tt
    in (f 
    .  
    0 ); 
    
        then
    
        consider t be
    Symbol of G(), d be 
    Element of 
    NAT such that 
    
        
    
    A14: tt 
    = ( 
    root-tree  
    [t, d]) and
    
        
    
    A15: t 
    in ( 
    Terminals G()) & d 
    =  
    0 or t 
    ==> ( 
    roots p) & d 
    =  
    0 by 
    A4,
    Th3;
    
        
    
        
    
    A16: (tt 
    `1 ) 
    = ( 
    root-tree t) by 
    A14,
    TREES_4: 25;
    
        
    
        
    
    A17: (t 
    -tree p) 
    = ( 
    root-tree t) by 
    TREES_4: 20;
    
        for T be
    DecoratedTree of the 
    carrier of G() st T 
    in ( 
    rng p) holds P[T]; 
    
        hence thesis by
    A1,
    A2,
    A15,
    A16,
    A17;
    
      end;
    
      
    
    A18: 
    
      now
    
        let n be
    Nat;
    
        assume
    
        
    
    A19: 
    R[n];
    
        thus
    R[(n
    + 1)] 
    
        proof
    
          let x be
    DecoratedTree of 
    [:the 
    carrier of G(), 
    NAT :]; 
    
          assume that
    
          
    
    A20: x 
    in (f 
    . (n 
    + 1)) and 
    
          
    
    A21: not P[(x 
    `1 )]; 
    
          x
    in ((f 
    . n) 
    \/ { ( 
    [o,
    0 ] 
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A5,
    A20;
    
          then x
    in (f 
    . n) or x 
    in { ( 
    [o,
    0 ] 
    -tree p) where o be 
    Symbol of G(), p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) } by 
    XBOOLE_0:def 3;
    
          then
    
          consider o be
    Symbol of G(), p be 
    Element of ((f 
    . n) 
    * ) such that 
    
          
    
    A22: x 
    = ( 
    [o,
    0 ] 
    -tree p) and 
    
          
    
    A23: ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) by 
    A19,
    A21;
    
          
    
          
    
    A24: ( 
    Union f) 
    = ( 
    union ( 
    rng f)) by 
    CARD_3:def 4;
    
          n
    in  
    NAT by 
    ORDINAL1:def 12;
    
          then
    
          
    
    A25: (f 
    . n) 
    in ( 
    rng f) by 
    A3,
    FUNCT_1:def 3;
    
          
    
          
    
    A26: ( 
    rng p) 
    c= (f 
    . n) by 
    FINSEQ_1:def 4;
    
          
    
          
    
    A27: (f 
    . n) 
    c= ( 
    Union f) by 
    A24,
    A25,
    ZFMISC_1: 74;
    
          
    
          
    
    A28: ( 
    dom p) 
    = ( 
    Seg ( 
    len p)) by 
    FINSEQ_1:def 3;
    
          defpred
    
    P[
    set, 
    set] means ex dt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st dt 
    = (p 
    . $1) & (dt 
    `1 ) 
    = $2 & dt 
    in ( 
    Union f); 
    
          
    
          
    
    A29: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len p)) holds ex x be 
    Element of ( 
    FinTrees the 
    carrier of G()) st 
    P[k, x]
    
          proof
    
            let k be
    Nat;
    
            assume k
    in ( 
    Seg ( 
    len p)); 
    
            then
    
            
    
    A30: (p 
    . k) 
    in ( 
    rng p) by 
    A28,
    FUNCT_1:def 3;
    
            
    
            
    
    A31: ( 
    rng p) 
    c= ( 
    Union f) by 
    A26,
    A27;
    
            then (p
    . k) 
    in ( 
    Union f) by 
    A30;
    
            then
    
            reconsider dt = (p
    . k) as 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) by 
    A7;
    
            
    
            
    
    A32: (dt 
    `1 ) 
    = (( 
    pr1 (the 
    carrier of G(), 
    NAT )) 
    * dt) by 
    TREES_3:def 12;
    
            
    
            
    
    A33: ( 
    rng dt) 
    c=  
    [:the 
    carrier of G(), 
    NAT :] by 
    RELAT_1:def 19;
    
            (
    dom ( 
    pr1 (the 
    carrier of G(), 
    NAT ))) 
    =  
    [:the 
    carrier of G(), 
    NAT :] by 
    FUNCT_2:def 1;
    
            then (
    dom (dt 
    `1 )) 
    = ( 
    dom dt) by 
    A32,
    A33,
    RELAT_1: 27;
    
            then
    
            reconsider x = (dt
    `1 ) as 
    Element of ( 
    FinTrees the 
    carrier of G()) by 
    TREES_3:def 8;
    
            take x, dt;
    
            thus thesis by
    A30,
    A31;
    
          end;
    
          consider p1 be
    FinSequence of ( 
    FinTrees the 
    carrier of G()) such that 
    
          
    
    A34: ( 
    dom p1) 
    = ( 
    Seg ( 
    len p)) and 
    
          
    
    A35: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len p)) holds 
    P[k, (p1
    . k)] from 
    FINSEQ_1:sch 5(
    A29);
    
          reconsider p as
    FinSequence of ( 
    Trees  
    [:the 
    carrier of G(), 
    NAT :]) by 
    A23,
    Th1;
    
          
    
          
    
    A36: ( 
    dom ( 
    roots p1)) 
    = ( 
    dom p1) by 
    TREES_3:def 18;
    
          
    
          
    
    A37: ( 
    dom ( 
    pr1 ( 
    roots p))) 
    = ( 
    dom ( 
    roots p)) by 
    MCART_1:def 12;
    
          then
    
          
    
    A38: ( 
    dom ( 
    pr1 ( 
    roots p))) 
    = ( 
    dom p1) by 
    A28,
    A34,
    TREES_3:def 18;
    
          now
    
            let k be
    Nat;
    
            assume
    
            
    
    A39: k 
    in ( 
    dom p1); 
    
            then
    
            consider dt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) such that 
    
            
    
    A40: dt 
    = (p 
    . k) and 
    
            
    
    A41: (dt 
    `1 ) 
    = (p1 
    . k) and dt 
    in ( 
    Union f) by 
    A34,
    A35;
    
            reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
            ex T be
    DecoratedTree st T 
    = (p1 
    . k) & (( 
    roots p1) 
    . k) 
    = (T 
    .  
    {} ) by 
    A39,
    TREES_3:def 18;
    
            then
    
            
    
    A42: (( 
    roots p1) 
    . k) 
    = ((dt 
    . r) 
    `1 ) by 
    A41,
    TREES_3: 39;
    
            ex T be
    DecoratedTree st T 
    = (p 
    . k) & (( 
    roots p) 
    . k) 
    = (T 
    .  
    {} ) by 
    A28,
    A34,
    A39,
    TREES_3:def 18;
    
            hence ((
    roots p1) 
    . k) 
    = (( 
    pr1 ( 
    roots p)) 
    . k) by 
    A37,
    A38,
    A39,
    A40,
    A42,
    MCART_1:def 12;
    
          end;
    
          then
    
          
    
    A43: ( 
    roots p1) 
    = ( 
    pr1 ( 
    roots p)) by 
    A36,
    A38,
    FINSEQ_1: 13;
    
          (
    rng p1) 
    c= ( 
    TS G()) 
    
          proof
    
            let x be
    object;
    
            assume x
    in ( 
    rng p1); 
    
            then
    
            consider k be
    object such that 
    
            
    
    A44: k 
    in ( 
    dom p1) and 
    
            
    
    A45: x 
    = (p1 
    . k) by 
    FUNCT_1:def 3;
    
            reconsider k as
    Element of 
    NAT by 
    A44;
    
            ex dt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st dt 
    = (p 
    . k) & (dt 
    `1 ) 
    = (p1 
    . k) & dt 
    in ( 
    Union f) by 
    A34,
    A35,
    A44;
    
            hence thesis by
    A8,
    A12,
    A45;
    
          end;
    
          then
    
          reconsider p1 as
    FinSequence of ( 
    TS G()) by 
    FINSEQ_1:def 4;
    
          now
    
            let t be
    DecoratedTree of the 
    carrier of G(); 
    
            assume t
    in ( 
    rng p1); 
    
            then
    
            consider k be
    object such that 
    
            
    
    A46: k 
    in ( 
    dom p1) and 
    
            
    
    A47: t 
    = (p1 
    . k) by 
    FUNCT_1:def 3;
    
            reconsider k as
    Element of 
    NAT by 
    A46;
    
            
    
            
    
    A48: ex dt be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st (dt 
    = (p 
    . k)) & ((dt 
    `1 ) 
    = (p1 
    . k)) & (dt 
    in ( 
    Union f)) by 
    A34,
    A35,
    A46;
    
            (p
    . k) 
    in ( 
    rng p) by 
    A28,
    A34,
    A46,
    FUNCT_1:def 3;
    
            hence P[t] by
    A19,
    A26,
    A47,
    A48;
    
          end;
    
          then
    
          
    
    A49: P[(o 
    -tree p1)] by 
    A2,
    A23,
    A43;
    
          reconsider p1 as
    FinSequence of ( 
    Trees the 
    carrier of G()) by 
    Th1;
    
          now
    
            let k be
    Nat;
    
            assume k
    in ( 
    dom p); 
    
            then ex dt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) st dt 
    = (p 
    . k) & (dt 
    `1 ) 
    = (p1 
    . k) & dt 
    in ( 
    Union f) by 
    A28,
    A35;
    
            hence for T be
    DecoratedTree of 
    [:the 
    carrier of G(), 
    NAT :] st T 
    = (p 
    . k) holds (p1 
    . k) 
    = (T 
    `1 ); 
    
          end;
    
          hence contradiction by
    A21,
    A22,
    A28,
    A34,
    A49,
    TREES_4: 27;
    
        end;
    
      end;
    
      
    
      
    
    A50: for n be 
    Nat holds 
    R[n] from
    NAT_1:sch 2(
    A13,
    A18);
    
      let t be
    DecoratedTree of the 
    carrier of G(); 
    
      assume t
    in ( 
    TS G()); 
    
      then
    
      consider tt be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G(), 
    NAT :]) such that 
    
      
    
    A51: t 
    = (tt 
    `1 ) and 
    
      
    
    A52: tt 
    in ( 
    Union f) by 
    A8,
    A12;
    
      ex n be
    object st n 
    in  
    NAT & tt 
    in (f 
    . n) by 
    A3,
    A52,
    CARD_5: 2;
    
      hence thesis by
    A50,
    A51;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch8
    
    DTConstrIndDef { G() -> non
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() } : 
    
ex f be 
    Function of ( 
    TS G()), D() st (for t be 
    Symbol of G() st t 
    in ( 
    Terminals G()) holds (f 
    . ( 
    root-tree t)) 
    = TermVal(t)) & for nt be 
    Symbol of G(), ts be 
    FinSequence of ( 
    TS G()) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    = NTermVal(nt,roots,*); 
    
      set G = G();
    
      deffunc
    
    NTV(
    Symbol of G, 
    FinSequence) = NTermVal($1,pr1,pr2);
    
      deffunc
    
    F(
    set, 
    set) = ($2
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ($2 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }); 
    
      consider f be
    Function such that 
    
      
    
    A1: ( 
    dom f) 
    =  
    NAT and 
    
      
    
    A2: (f 
    .  
    0 ) 
    = { ( 
    root-tree  
    [t, d]) where t be
    Symbol of G, d be 
    Element of D() : t 
    in ( 
    Terminals G) & d 
    = TermVal(t) or t 
    ==>  
    {} & d 
    = NTermVal(t,{},{}) } and 
    
      
    
    A3: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    =  
    F(n,.) from
    NAT_1:sch 11;
    
      
    
      
    
    A4: for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    = ((f 
    . n) 
    \/ { ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) where o be 
    Symbol of G, p be 
    Element of ((f 
    . n) 
    * ) : ex q be 
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) st p 
    = q & o 
    ==> ( 
    pr1 ( 
    roots q)) }) by 
    A3;
    
      ex X1 be
    Subset of ( 
    FinTrees the 
    carrier of G) st X1 
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) : t 
    in ( 
    Union f) } & (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in X1) & (for o be 
    Symbol of G, p be 
    FinSequence of X1 st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in X1) & for F be 
    Subset of ( 
    FinTrees the 
    carrier of G) st (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree d) 
    in F) & (for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    roots p) holds (o 
    -tree p) 
    in F) holds X1 
    c= F from 
    DTCSymbols(
    A1,
    A2,
    A4);
    
      then
    
      
    
    A5: ( 
    TS G) 
    = { (t 
    `1 ) where t be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) : t 
    in ( 
    Union f) } by 
    Def1;
    
      defpred
    
    P[
    object, 
    object] means for dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():] st dt 
    in ( 
    Union f) & $1 
    = (dt 
    `1 ) holds $2 
    = ((dt 
    `2 ) 
    .  
    {} ); 
    
      
    
      
    
    A6: for e be 
    object st e 
    in ( 
    TS G) holds ex u be 
    object st u 
    in D() & 
    P[e, u]
    
      proof
    
        let e be
    object;
    
        assume e
    in ( 
    TS G); 
    
        then
    
        consider DT be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) such that 
    
        
    
    A7: e 
    = (DT 
    `1 ) and 
    
        
    
    A8: DT 
    in ( 
    Union f) by 
    A5;
    
        reconsider r =
    {} as 
    Node of (DT 
    `2 ) by 
    TREES_1: 22;
    
        take u = ((DT
    `2 ) 
    . r); 
    
        thus u
    in D(); 
    
        
    
        
    
    A9: for dt1,dt2 be 
    DecoratedTree of 
    [:the 
    carrier of G, D():] st dt1 
    in ( 
    Union f) & dt2 
    in ( 
    Union f) & (dt1 
    `1 ) 
    = (dt2 
    `1 ) holds dt1 
    = dt2 from 
    DTCUniq(
    A1,
    A2,
    A4);
    
        let dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():]; 
    
        assume that
    
        
    
    A10: dt 
    in ( 
    Union f) and 
    
        
    
    A11: e 
    = (dt 
    `1 ); 
    
        thus thesis by
    A7,
    A8,
    A9,
    A10,
    A11;
    
      end;
    
      consider ff be
    Function such that 
    
      
    
    A12: ( 
    dom ff) 
    = ( 
    TS G) & ( 
    rng ff) 
    c= D() and 
    
      
    
    A13: for e be 
    object st e 
    in ( 
    TS G) holds 
    P[e, (ff
    . e)] from 
    FUNCT_1:sch 6(
    A6);
    
      reconsider ff as
    Function of ( 
    TS G), D() by 
    A12,
    FUNCT_2:def 1,
    RELSET_1: 4;
    
      take ff;
    
      consider X be
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) such that 
    
      
    
    A14: X 
    = ( 
    Union f) and 
    
      
    
    A15: for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree  
    [d, TermVal(d)])
    in X and 
    
      
    
    A16: for o be 
    Symbol of G, p be 
    FinSequence of X st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in X and for F be 
    Subset of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) st (for d be 
    Symbol of G st d 
    in ( 
    Terminals G) holds ( 
    root-tree  
    [d, TermVal(d)])
    in F) & (for o be 
    Symbol of G, p be 
    FinSequence of F st o 
    ==> ( 
    pr1 ( 
    roots p)) holds ( 
    [o, NTermVal(o,pr1,pr2)]
    -tree p) 
    in F) holds X 
    c= F from 
    DTCMin(
    A1,
    A2,
    A4);
    
      hereby
    
        let t be
    Symbol of G; 
    
        assume
    
        
    
    A17: t 
    in ( 
    Terminals G); 
    
        
    
        
    
    A18: (( 
    root-tree  
    [t, TermVal(t)])
    `1 ) 
    = ( 
    root-tree t) by 
    TREES_4: 25;
    
        
    
        
    
    A19: (( 
    root-tree  
    [t, TermVal(t)])
    `2 ) 
    = ( 
    root-tree TermVal(t)) by 
    TREES_4: 25;
    
        (
    root-tree  
    [t, TermVal(t)])
    in ( 
    Union f) by 
    A14,
    A15,
    A17;
    
        then (
    root-tree t) 
    in ( 
    TS G) by 
    A5,
    A18;
    
        
    
        hence (ff
    . ( 
    root-tree t)) 
    = (( 
    root-tree TermVal(t)) 
    .  
    {} ) by 
    A13,
    A14,
    A15,
    A17,
    A18,
    A19
    
        .= TermVal(t) by
    TREES_4: 3;
    
      end;
    
      let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
      set rts = (
    roots ts); 
    
      assume
    
      
    
    A20: nt 
    ==> rts; 
    
      set x = (ff
    * ts); 
    
      
    
      
    
    A21: ( 
    dom ts) 
    = ( 
    Seg ( 
    len ts)) by 
    FINSEQ_1:def 3;
    
      defpred
    
    P[
    set, 
    set] means ex dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():] st dt 
    = $2 & (dt 
    `1 ) 
    = (ts 
    . $1) & dt 
    in ( 
    Union f); 
    
      
    
      
    
    A22: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len ts)) holds ex x be 
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) st 
    P[k, x]
    
      proof
    
        let k be
    Nat;
    
        assume k
    in ( 
    Seg ( 
    len ts)); 
    
        then
    
        
    
    A23: (ts 
    . k) 
    in ( 
    rng ts) by 
    A21,
    FUNCT_1:def 3;
    
        (
    rng ts) 
    c= ( 
    TS G) by 
    FINSEQ_1:def 4;
    
        then (ts
    . k) 
    in ( 
    TS G) by 
    A23;
    
        then ex x be
    Element of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) st (ts 
    . k) 
    = (x 
    `1 ) & x 
    in ( 
    Union f) by 
    A5;
    
        hence thesis;
    
      end;
    
      consider dts be
    FinSequence of ( 
    FinTrees  
    [:the 
    carrier of G, D():]) such that 
    
      
    
    A24: ( 
    dom dts) 
    = ( 
    Seg ( 
    len ts)) and 
    
      
    
    A25: for k be 
    Nat st k 
    in ( 
    Seg ( 
    len ts)) holds 
    P[k, (dts
    . k)] from 
    FINSEQ_1:sch 5(
    A22);
    
      (
    rng dts) 
    c= X 
    
      proof
    
        let x be
    object;
    
        assume x
    in ( 
    rng dts); 
    
        then
    
        consider k be
    object such that 
    
        
    
    A26: k 
    in ( 
    dom ts) and 
    
        
    
    A27: x 
    = (dts 
    . k) by 
    A21,
    A24,
    FUNCT_1:def 3;
    
        reconsider k as
    Element of 
    NAT by 
    A26;
    
        ex dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():] st dt 
    = x & (dt 
    `1 ) 
    = (ts 
    . k) & dt 
    in ( 
    Union f) by 
    A21,
    A25,
    A26,
    A27;
    
        hence thesis by
    A14;
    
      end;
    
      then
    
      reconsider dts as
    FinSequence of X by 
    FINSEQ_1:def 4;
    
      
    
      
    
    A28: ( 
    dom ( 
    roots ts)) 
    = ( 
    dom ts) by 
    TREES_3:def 18;
    
      
    
      
    
    A29: ( 
    dom ( 
    pr1 ( 
    roots dts))) 
    = ( 
    dom ( 
    roots dts)) by 
    MCART_1:def 12;
    
      
    
      
    
    A30: ( 
    dom ( 
    pr2 ( 
    roots dts))) 
    = ( 
    dom ( 
    roots dts)) by 
    MCART_1:def 13;
    
      
    
      
    
    A31: ( 
    dom ( 
    pr1 ( 
    roots dts))) 
    = ( 
    dom ts) by 
    A21,
    A24,
    A29,
    TREES_3:def 18;
    
      
    
      
    
    A32: ( 
    dom ( 
    pr2 ( 
    roots dts))) 
    = ( 
    dom ts) by 
    A21,
    A24,
    A30,
    TREES_3:def 18;
    
      now
    
        let k be
    Nat;
    
        assume
    
        
    
    A33: k 
    in ( 
    dom ts); 
    
        then
    
        consider dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():] such that 
    
        
    
    A34: dt 
    = (dts 
    . k) and 
    
        
    
    A35: (dt 
    `1 ) 
    = (ts 
    . k) and dt 
    in ( 
    Union f) by 
    A21,
    A25;
    
        reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
        ex T be
    DecoratedTree st T 
    = (ts 
    . k) & (( 
    roots ts) 
    . k) 
    = (T 
    .  
    {} ) by 
    A33,
    TREES_3:def 18;
    
        then
    
        
    
    A36: (( 
    roots ts) 
    . k) 
    = ((dt 
    . r) 
    `1 ) by 
    A35,
    TREES_3: 39;
    
        ex T be
    DecoratedTree st T 
    = (dts 
    . k) & (( 
    roots dts) 
    . k) 
    = (T 
    .  
    {} ) by 
    A21,
    A24,
    A33,
    TREES_3:def 18;
    
        hence ((
    roots ts) 
    . k) 
    = (( 
    pr1 ( 
    roots dts)) 
    . k) by 
    A29,
    A31,
    A33,
    A34,
    A36,
    MCART_1:def 12;
    
      end;
    
      then
    
      
    
    A37: ( 
    roots ts) 
    = ( 
    pr1 ( 
    roots dts)) by 
    A28,
    A31,
    FINSEQ_1: 13;
    
      then
    
      
    
    A38: ( 
    [nt,
    NTV(nt,dts)]
    -tree dts) 
    in X by 
    A16,
    A20;
    
      
    
      
    
    A39: ( 
    rng dts) 
    c= ( 
    FinTrees  
    [:the 
    carrier of G, D():]) by 
    FINSEQ_1:def 4;
    
      (
    FinTrees  
    [:the 
    carrier of G, D():]) 
    c= ( 
    Trees  
    [:the 
    carrier of G, D():]) by 
    TREES_3: 21;
    
      then (
    rng dts) 
    c= ( 
    Trees  
    [:the 
    carrier of G, D():]) by 
    A39;
    
      then
    
      reconsider dts9 = dts as
    FinSequence of ( 
    Trees  
    [:the 
    carrier of G, D():]) by 
    FINSEQ_1:def 4;
    
      
    
      
    
    A40: ( 
    rng ts) 
    c= ( 
    FinTrees the 
    carrier of G) by 
    FINSEQ_1:def 4;
    
      (
    FinTrees the 
    carrier of G) 
    c= ( 
    Trees the 
    carrier of G) by 
    TREES_3: 21;
    
      then (
    rng ts) 
    c= ( 
    Trees the 
    carrier of G) by 
    A40;
    
      then
    
      reconsider ts9 = ts as
    FinSequence of ( 
    Trees the 
    carrier of G) by 
    FINSEQ_1:def 4;
    
      now
    
        let i be
    Nat;
    
        assume i
    in ( 
    dom dts); 
    
        then
    
        
    
    A41: ex dt be 
    DecoratedTree of 
    [:the 
    carrier of G, D():] st (dt 
    = (dts 
    . i)) & ((dt 
    `1 ) 
    = (ts 
    . i)) & (dt 
    in ( 
    Union f)) by 
    A24,
    A25;
    
        let T be
    DecoratedTree of 
    [:the 
    carrier of G, D():]; 
    
        assume T
    = (dts 
    . i); 
    
        hence (ts
    . i) 
    = (T 
    `1 ) by 
    A41;
    
      end;
    
      then
    
      
    
    A42: (( 
    [nt,
    NTV(nt,dts)]
    -tree dts9) 
    `1 ) 
    = (nt 
    -tree ts9) by 
    A21,
    A24,
    TREES_4: 27;
    
      
    
      
    
    A43: ( 
    rng ts) 
    c= ( 
    dom ff) by 
    A12,
    FINSEQ_1:def 4;
    
      then
    
      
    
    A44: ( 
    dom (ff 
    * ts)) 
    = ( 
    dom ts) by 
    RELAT_1: 27;
    
      now
    
        let k be
    Nat;
    
        assume
    
        
    
    A45: k 
    in ( 
    dom ts); 
    
        then
    
        consider dt be
    DecoratedTree of 
    [:the 
    carrier of G, D():] such that 
    
        
    
    A46: dt 
    = (dts 
    . k) and 
    
        
    
    A47: (dt 
    `1 ) 
    = (ts 
    . k) and 
    
        
    
    A48: dt 
    in ( 
    Union f) by 
    A21,
    A25;
    
        reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
        
    
        
    
    A49: (ts 
    . k) 
    in ( 
    rng ts) by 
    A45,
    FUNCT_1:def 3;
    
        
    
        
    
    A50: (x 
    . k) 
    = (ff 
    . (dt 
    `1 )) by 
    A44,
    A45,
    A47,
    FUNCT_1: 12
    
        .= ((dt
    `2 ) 
    .  
    {} ) by 
    A12,
    A13,
    A43,
    A47,
    A48,
    A49
    
        .= ((dt
    . r) 
    `2 ) by 
    TREES_3: 39;
    
        ex T be
    DecoratedTree st T 
    = (dts 
    . k) & (( 
    roots dts) 
    . k) 
    = (T 
    . r) by 
    A21,
    A24,
    A45,
    TREES_3:def 18;
    
        hence (x
    . k) 
    = (( 
    pr2 ( 
    roots dts)) 
    . k) by 
    A29,
    A31,
    A45,
    A46,
    A50,
    MCART_1:def 13;
    
      end;
    
      then
    
      
    
    A51: x 
    = ( 
    pr2 ( 
    roots dts)) by 
    A32,
    A44,
    FINSEQ_1: 13;
    
      reconsider r =
    {} as 
    Node of ( 
    [nt, NTermVal(nt,rts,x)]
    -tree dts) by 
    TREES_1: 22;
    
      (nt
    -tree ts) 
    in ( 
    TS G) by 
    A5,
    A14,
    A38,
    A42;
    
      
    
      then (ff
    . (nt 
    -tree ts)) 
    = ((( 
    [nt, NTermVal(nt,rts,x)]
    -tree dts) 
    `2 ) 
    . r) by 
    A13,
    A14,
    A16,
    A20,
    A37,
    A42,
    A51
    
      .= (((
    [nt, NTermVal(nt,rts,x)]
    -tree dts) 
    . r) 
    `2 ) by 
    TREES_3: 39
    
      .= (
    [nt, NTermVal(nt,rts,x)]
    `2 ) by 
    TREES_4:def 4;
    
      hence thesis;
    
    end;
    
    scheme :: 
    
    DTCONSTR:sch9
    
    DTConstrUniqDef { G() -> non
    empty  
    DTConstrStr , D() -> non 
    empty  
    set , TermVal( 
    set) ->
    Element of D() , NTermVal( 
    set, 
    set, 
    set) ->
    Element of D() , f1,f2() -> 
    Function of ( 
    TS G()), D() } : 
    
f1()
    = f2() 
    
      provided
    
      
    
    A1: (for t be 
    Symbol of G() st t 
    in ( 
    Terminals G()) holds (f1() 
    . ( 
    root-tree t)) 
    = TermVal(t)) & for nt be 
    Symbol of G(), ts be 
    FinSequence of ( 
    TS G()) st nt 
    ==> ( 
    roots ts) holds (f1() 
    . (nt 
    -tree ts)) 
    = NTermVal(nt,roots,*) 
    
       and 
    
      
    
    A2: (for t be 
    Symbol of G() st t 
    in ( 
    Terminals G()) holds (f2() 
    . ( 
    root-tree t)) 
    = TermVal(t)) & for nt be 
    Symbol of G(), ts be 
    FinSequence of ( 
    TS G()) st nt 
    ==> ( 
    roots ts) holds (f2() 
    . (nt 
    -tree ts)) 
    = NTermVal(nt,roots,*); 
    
      set G = G();
    
      defpred
    
    P[
    set] means (f1()
    . $1) 
    = (f2() 
    . $1); 
    
      
    
    A3: 
    
      now
    
        let s be
    Symbol of G; 
    
        assume
    
        
    
    A4: s 
    in ( 
    Terminals G); 
    
        
    
        then (f1()
    . ( 
    root-tree s)) 
    = TermVal(s) by 
    A1
    
        .= (f2()
    . ( 
    root-tree s)) by 
    A2,
    A4;
    
        hence
    P[(
    root-tree s)]; 
    
      end;
    
      
    
    A5: 
    
      now
    
        let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
        assume that
    
        
    
    A6: nt 
    ==> ( 
    roots ts) and 
    
        
    
    A7: for t be 
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    rng ts) holds 
    P[t];
    
        
    
        
    
    A8: ( 
    rng ts) 
    c= ( 
    TS G) by 
    FINSEQ_1:def 4;
    
        then (
    rng ts) 
    c= ( 
    dom f1()) by 
    FUNCT_2:def 1;
    
        then
    
        
    
    A9: ( 
    dom (f1() 
    * ts)) 
    = ( 
    dom ts) by 
    RELAT_1: 27;
    
        reconsider ntv1 = (f1()
    * ts) as 
    FinSequence;
    
        reconsider ntv1 as
    FinSequence of D(); 
    
        (
    rng ts) 
    c= ( 
    dom f2()) by 
    A8,
    FUNCT_2:def 1;
    
        then
    
        
    
    A10: ( 
    dom (f2() 
    * ts)) 
    = ( 
    dom ts) by 
    RELAT_1: 27;
    
        now
    
          let x be
    object;
    
          assume
    
          
    
    A11: x 
    in ( 
    dom ts); 
    
          then
    
          reconsider t = (ts
    . x) as 
    Element of ( 
    FinTrees the 
    carrier of G) by 
    Th2;
    
          t
    in ( 
    rng ts) by 
    A11,
    FUNCT_1:def 3;
    
          then
    
          
    
    A12: (f1() 
    . t) 
    = (f2() 
    . t) by 
    A7;
    
          
    
          thus ((f1()
    * ts) 
    . x) 
    = (f1() 
    . t) by 
    A9,
    A11,
    FUNCT_1: 12
    
          .= ((f2()
    * ts) 
    . x) by 
    A10,
    A11,
    A12,
    FUNCT_1: 12;
    
        end;
    
        then
    
        
    
    A13: (f1() 
    * ts) 
    = (f2() 
    * ts) by 
    A9,
    A10,
    FUNCT_1: 2;
    
        (f1()
    . (nt 
    -tree ts)) 
    = NTermVal(nt,roots,ntv1) by 
    A1,
    A6
    
        .= (f2()
    . (nt 
    -tree ts)) by 
    A2,
    A6,
    A13;
    
        hence
    P[(nt
    -tree ts)]; 
    
      end;
    
      for t be
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    TS G) holds 
    P[t] from
    DTConstrInd(
    A3,
    A5);
    
      then for x be
    object st x 
    in ( 
    TS G) holds (f1() 
    . x) 
    = (f2() 
    . x); 
    
      hence thesis by
    FUNCT_2: 12;
    
    end;
    
    begin
    
    defpred
    
    P[
    set, 
    set] means $1
    = 1 & ($2 
    =  
    <*
    0 *> or $2 
    =  
    <*1*>);
    
    definition
    
      :: 
    
    DTCONSTR:def2
    
      func
    
    PeanoNat -> 
    strict non 
    empty  
    DTConstrStr means 
    
      :
    
    Def2: the 
    carrier of it 
    =  
    {
    0 , 1} & for x be 
    Symbol of it , y be 
    FinSequence of the 
    carrier of it holds x 
    ==> y iff x 
    = 1 & (y 
    =  
    <*
    0 *> or y 
    =  
    <*1*>);
    
      existence
    
      proof
    
        thus ex G be
    strict non 
    empty  
    DTConstrStr st the 
    carrier of G 
    =  
    {
    0 , 1} & for x be 
    Symbol of G, p be 
    FinSequence of the 
    carrier of G holds x 
    ==> p iff 
    P[x, p] from
    DTConstrStrEx;
    
      end;
    
      uniqueness
    
      proof
    
        thus for G1,G2 be
    strict non 
    empty  
    DTConstrStr st (the 
    carrier of G1 
    =  
    {
    0 , 1} & for x be 
    Symbol of G1, p be 
    FinSequence of the 
    carrier of G1 holds x 
    ==> p iff 
    P[x, p]) & (the
    carrier of G2 
    =  
    {
    0 , 1} & for x be 
    Symbol of G2, p be 
    FinSequence of the 
    carrier of G2 holds x 
    ==> p iff 
    P[x, p]) holds G1
    = G2 from 
    DTConstrStrUniq;
    
      end;
    
    end
    
    set PN =
    PeanoNat ; 
    
    
    
    
    
    Lm2: the 
    carrier of PN 
    =  
    {
    0 , 1} by 
    Def2;
    
    then
    
    reconsider O =
    0 , S = 1 as 
    Symbol of PN by 
    TARSKI:def 2;
    
    
    
    
    
    Lm3: S 
    ==>  
    <*O*> by
    Def2;
    
    
    
    
    
    Lm4: S 
    ==>  
    <*S*> by
    Def2;
    
    
    
    
    
    Lm5: S 
    ==>  
    <*O*> by
    Def2;
    
    
    
    
    
    Lm6: S 
    ==>  
    <*S*> by
    Def2;
    
    
    
    
    
    Lm7: ( 
    Terminals PN) 
    = { x where x be 
    Symbol of PN : not ex tnt be 
    FinSequence st x 
    ==> tnt } by 
    LANG1:def 2;
    
    
    
    Lm8: 
    
    now
    
      given x be
    FinSequence such that 
    
      
    
    A1: O 
    ==> x; 
    
      
    [O, x]
    in the 
    Rules of PN by 
    A1,
    LANG1:def 1;
    
      then x
    in (the 
    carrier of PN 
    * ) by 
    ZFMISC_1: 87;
    
      then x is
    FinSequence of the 
    carrier of PN by 
    FINSEQ_2:def 3;
    
      hence contradiction by
    A1,
    Def2;
    
    end;
    
    then
    
    
    
    Lm9: O 
    in ( 
    Terminals PN) by 
    Lm7;
    
    
    
    
    
    Lm10: ( 
    Terminals PN) 
    c=  
    {O}
    
    proof
    
      let x be
    object;
    
      assume x
    in ( 
    Terminals PN); 
    
      then
    
      consider y be
    Symbol of PN such that 
    
      
    
    A1: x 
    = y and 
    
      
    
    A2: not ex tnt be 
    FinSequence st y 
    ==> tnt by 
    Lm7;
    
      y
    = O or y 
    = S & 
    {O, S}
    <>  
    {} by 
    Lm2,
    TARSKI:def 2;
    
      hence thesis by
    A1,
    A2,
    Lm5,
    TARSKI:def 1;
    
    end;
    
    
    
    
    
    Lm11: ( 
    NonTerminals PN) 
    = { x where x be 
    Symbol of PN : ex tnt be 
    FinSequence st x 
    ==> tnt } by 
    LANG1:def 3;
    
    then
    
    
    
    Lm12: S 
    in ( 
    NonTerminals PN) by 
    Lm5;
    
    then
    
    
    
    Lm13: 
    {S}
    c= ( 
    NonTerminals PN) by 
    ZFMISC_1: 31;
    
    
    
    
    
    Lm14: ( 
    NonTerminals PN) 
    c=  
    {S}
    
    proof
    
      let x be
    object;
    
      assume x
    in ( 
    NonTerminals PN); 
    
      then
    
      consider y be
    Symbol of PN such that 
    
      
    
    A1: x 
    = y and 
    
      
    
    A2: ex tnt be 
    FinSequence st y 
    ==> tnt by 
    Lm11;
    
      y
    = O or y 
    = S by 
    Lm2,
    TARSKI:def 2;
    
      hence thesis by
    A1,
    A2,
    Lm8,
    TARSKI:def 1;
    
    end;
    
    then
    
    
    
    Lm15: ( 
    NonTerminals PN) 
    =  
    {S} by
    Lm13;
    
    reconsider TSPN = (
    TS PN) as non 
    empty  
    Subset of ( 
    FinTrees the 
    carrier of PN) by 
    Def1,
    Lm9;
    
    begin
    
    definition
    
      let G be non
    empty  
    DTConstrStr;
    
      :: 
    
    DTCONSTR:def3
    
      attr G is
    
    with_terminals means 
    
      :
    
    Def3: ( 
    Terminals G) 
    <>  
    {} ; 
    
      :: 
    
    DTCONSTR:def4
    
      attr G is
    
    with_nonterminals means 
    
      :
    
    Def4: ( 
    NonTerminals G) 
    <>  
    {} ; 
    
      :: 
    
    DTCONSTR:def5
    
      attr G is
    
    with_useful_nonterminals means 
    
      :
    
    Def5: for nt be 
    Symbol of G st nt 
    in ( 
    NonTerminals G) holds ex p be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots p); 
    
    end
    
    
    
    
    
    Lm16: PN is 
    with_terminals
    with_nonterminals
    with_useful_nonterminals
    
    proof
    
      thus (
    Terminals PN) 
    <>  
    {} by 
    Lm9;
    
      thus (
    NonTerminals PN) 
    <>  
    {} by 
    Lm12;
    
      reconsider rO = (
    root-tree O) as 
    Element of TSPN by 
    Def1,
    Lm9;
    
      reconsider p =
    <*rO qua
    Element of TSPN qua non 
    empty  
    set*> as
    FinSequence of TSPN; 
    
      reconsider p as
    FinSequence of ( 
    TS PN); 
    
      let nt be
    Symbol of PN; 
    
      assume nt
    in ( 
    NonTerminals PN); 
    
      then
    
      
    
    A1: nt 
    = S by 
    Lm14,
    TARSKI:def 1;
    
      take p;
    
      
    
      
    
    A2: ( 
    dom  
    <*rO*>)
    = ( 
    Seg 1) by 
    FINSEQ_1: 38;
    
      
    
      
    
    A3: ( 
    dom  
    <*O*>)
    = ( 
    Seg 1) by 
    FINSEQ_1: 38;
    
      now
    
        let i be
    Element of 
    NAT ; 
    
        assume
    
        
    
    A4: i 
    in ( 
    dom p); 
    
        reconsider rO as
    DecoratedTree;
    
        take rO;
    
        
    
        
    
    A5: i 
    = 1 by 
    A2,
    A4,
    FINSEQ_1: 2,
    TARSKI:def 1;
    
        (
    <*O*>
    . 1) 
    = O by 
    FINSEQ_1: 40;
    
        hence rO
    = (p 
    . i) & ( 
    <*O*>
    . i) 
    = (rO 
    .  
    {} ) by 
    A5,
    FINSEQ_1: 40,
    TREES_4: 3;
    
      end;
    
      hence thesis by
    A1,
    A2,
    A3,
    Lm5,
    TREES_3:def 18;
    
    end;
    
    registration
    
      cluster 
    with_terminals
    with_nonterminals
    with_useful_nonterminals
    strict for non 
    empty  
    DTConstrStr;
    
      existence by
    Lm16;
    
    end
    
    definition
    
      let G be
    with_terminals non 
    empty  
    DTConstrStr;
    
      :: original:
    Terminals
    
      redefine
    
      func
    
    Terminals G -> non 
    empty  
    Subset of G ; 
    
      coherence
    
      proof
    
        defpred
    
    P[
    Element of G] means not ex tnt be 
    FinSequence st $1 
    ==> tnt; 
    
        { t where t be
    Element of G : 
    P[t] }
    c= the 
    carrier of G from 
    FRAENKEL:sch 10;
    
        hence thesis by
    Def3,
    LANG1:def 2;
    
      end;
    
    end
    
    registration
    
      let G be
    with_terminals non 
    empty  
    DTConstrStr;
    
      cluster ( 
    TS G) -> non 
    empty;
    
      coherence
    
      proof
    
        ex t be
    object st t 
    in ( 
    Terminals G) by 
    XBOOLE_0:def 1;
    
        hence thesis by
    Def1;
    
      end;
    
    end
    
    registration
    
      let G be
    with_useful_nonterminals non 
    empty  
    DTConstrStr;
    
      cluster ( 
    TS G) -> non 
    empty;
    
      coherence
    
      proof
    
        set s = the
    Symbol of G; 
    
        per cases ;
    
          suppose not ex tnt be
    FinSequence st s 
    ==> tnt; 
    
          then s
    in { t where t be 
    Symbol of G : not ex tnt be 
    FinSequence st t 
    ==> tnt }; 
    
          then s
    in ( 
    Terminals G) by 
    LANG1:def 2;
    
          hence thesis by
    Def1;
    
        end;
    
          suppose ex tnt be
    FinSequence st s 
    ==> tnt; 
    
          then s
    in { t where t be 
    Symbol of G : ex tnt be 
    FinSequence st t 
    ==> tnt }; 
    
          then s
    in ( 
    NonTerminals G) by 
    LANG1:def 3;
    
          then ex p be
    FinSequence of ( 
    TS G) st (s 
    ==> ( 
    roots p)) by 
    Def5;
    
          hence thesis by
    Def1;
    
        end;
    
      end;
    
    end
    
    definition
    
      let G be
    with_nonterminals non 
    empty  
    DTConstrStr;
    
      :: original:
    NonTerminals
    
      redefine
    
      func
    
    NonTerminals G -> non 
    empty  
    Subset of G ; 
    
      coherence
    
      proof
    
        defpred
    
    P[
    Element of G] means ex tnt be 
    FinSequence st $1 
    ==> tnt; 
    
        { t where t be
    Element of G : 
    P[t] }
    c= the 
    carrier of G from 
    FRAENKEL:sch 10;
    
        hence thesis by
    Def4,
    LANG1:def 3;
    
      end;
    
    end
    
    definition
    
      let G be
    with_terminals non 
    empty  
    DTConstrStr;
    
      mode
    
    Terminal of G is 
    Element of ( 
    Terminals G); 
    
    end
    
    definition
    
      let G be
    with_nonterminals non 
    empty  
    DTConstrStr;
    
      mode
    
    NonTerminal of G is 
    Element of ( 
    NonTerminals G); 
    
    end
    
    definition
    
      let G be
    with_nonterminals
    with_useful_nonterminals non 
    empty  
    DTConstrStr;
    
      let nt be
    NonTerminal of G; 
    
      :: 
    
    DTCONSTR:def6
    
      mode
    
    SubtreeSeq of nt -> 
    FinSequence of ( 
    TS G) means 
    
      :
    
    Def6: nt 
    ==> ( 
    roots it ); 
    
      existence by
    Def5;
    
    end
    
    definition
    
      let G be
    with_terminals non 
    empty  
    DTConstrStr;
    
      let t be
    Terminal of G; 
    
      :: original:
    root-tree
    
      redefine
    
      func
    
    root-tree t -> 
    Element of ( 
    TS G) ; 
    
      coherence by
    Def1;
    
    end
    
    definition
    
      let G be
    with_nonterminals
    with_useful_nonterminals non 
    empty  
    DTConstrStr;
    
      let nt be
    NonTerminal of G; 
    
      let p be
    SubtreeSeq of nt; 
    
      :: original:
    -tree
    
      redefine
    
      func nt
    
    -tree p -> 
    Element of ( 
    TS G) ; 
    
      coherence
    
      proof
    
        nt
    ==> ( 
    roots p) by 
    Def6;
    
        hence thesis by
    Def1;
    
      end;
    
    end
    
    theorem :: 
    
    DTCONSTR:9
    
    
    
    
    
    Th9: for G be 
    with_terminals non 
    empty  
    DTConstrStr, tsg be 
    Element of ( 
    TS G), s be 
    Terminal of G st (tsg 
    .  
    {} ) 
    = s holds tsg 
    = ( 
    root-tree s) 
    
    proof
    
      let G be
    with_terminals non 
    empty  
    DTConstrStr, tsg be 
    Element of ( 
    TS G), s be 
    Terminal of G; 
    
      assume
    
      
    
    A1: (tsg 
    .  
    {} ) 
    = s; 
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of G] means for s be 
    Terminal of G st ($1 
    .  
    {} ) 
    = s holds $1 
    = ( 
    root-tree s); 
    
      
    
      
    
    A2: for s be 
    Symbol of G st s 
    in ( 
    Terminals G) holds 
    P[(
    root-tree s)] by 
    TREES_4: 3;
    
      
    
    A3: 
    
      now
    
        let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
        assume that
    
        
    
    A4: nt 
    ==> ( 
    roots ts) and for t be 
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    rng ts) holds 
    P[t];
    
        thus
    P[(nt
    -tree ts)] 
    
        proof
    
          let s be
    Terminal of G; 
    
          assume
    
          
    
    A5: ((nt 
    -tree ts) 
    .  
    {} ) 
    = s; 
    
          
    
          
    
    A6: ((nt 
    -tree ts) 
    .  
    {} ) 
    = nt by 
    TREES_4:def 4;
    
          
    
          
    
    A7: s 
    in ( 
    Terminals G); 
    
          (
    Terminals G) 
    = { t where t be 
    Symbol of G : not ex tnt be 
    FinSequence st t 
    ==> tnt } by 
    LANG1:def 2;
    
          then ex t be
    Symbol of G st s 
    = t & not ex tnt be 
    FinSequence st t 
    ==> tnt by 
    A7;
    
          hence thesis by
    A4,
    A5,
    A6;
    
        end;
    
      end;
    
      for t be
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    TS G) holds 
    P[t] from
    DTConstrInd(
    A2,
    A3);
    
      hence thesis by
    A1;
    
    end;
    
    theorem :: 
    
    DTCONSTR:10
    
    
    
    
    
    Th10: for G be 
    with_terminals
    with_nonterminals non 
    empty  
    DTConstrStr, tsg be 
    Element of ( 
    TS G), nt be 
    NonTerminal of G st (tsg 
    .  
    {} ) 
    = nt holds ex ts be 
    FinSequence of ( 
    TS G) st tsg 
    = (nt 
    -tree ts) & nt 
    ==> ( 
    roots ts) 
    
    proof
    
      let G be
    with_terminals
    with_nonterminals non 
    empty  
    DTConstrStr;
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of G] means for nt be 
    NonTerminal of G st ($1 
    .  
    {} ) 
    = nt holds ex ts be 
    FinSequence of ( 
    TS G) st $1 
    = (nt 
    -tree ts) & nt 
    ==> ( 
    roots ts); 
    
      
    
    A1: 
    
      now
    
        let s be
    Symbol of G; 
    
        assume
    
        
    
    A2: s 
    in ( 
    Terminals G); 
    
        thus
    P[(
    root-tree s)] 
    
        proof
    
          let nt be
    NonTerminal of G; 
    
          assume ((
    root-tree s) 
    .  
    {} ) 
    = nt; 
    
          then
    
          
    
    A3: s 
    = nt by 
    TREES_4: 3;
    
          (
    Terminals G) 
    = { t where t be 
    Symbol of G : not ex tnt be 
    FinSequence st t 
    ==> tnt } by 
    LANG1:def 2;
    
          then
    
          
    
    A4: ex t be 
    Symbol of G st s 
    = t & not ex tnt be 
    FinSequence st t 
    ==> tnt by 
    A2;
    
          
    
          
    
    A5: nt 
    in ( 
    NonTerminals G); 
    
          (
    NonTerminals G) 
    = { t where t be 
    Symbol of G : ex tnt be 
    FinSequence st t 
    ==> tnt } by 
    LANG1:def 3;
    
          then ex t be
    Symbol of G st nt 
    = t & ex tnt be 
    FinSequence st t 
    ==> tnt by 
    A5;
    
          hence thesis by
    A3,
    A4;
    
        end;
    
      end;
    
      
    
    A6: 
    
      now
    
        let nnt be
    Symbol of G, tts be 
    FinSequence of ( 
    TS G); 
    
        assume that
    
        
    
    A7: nnt 
    ==> ( 
    roots tts) and for t be 
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    rng tts) holds 
    P[t];
    
        thus
    P[(nnt
    -tree tts)] 
    
        proof
    
          let nt be
    NonTerminal of G; 
    
          assume
    
          
    
    A8: ((nnt 
    -tree tts) 
    .  
    {} ) 
    = nt; 
    
          take ts = tts;
    
          thus thesis by
    A7,
    A8,
    TREES_4:def 4;
    
        end;
    
      end;
    
      
    
      
    
    A9: for t be 
    DecoratedTree of the 
    carrier of G st t 
    in ( 
    TS G) holds 
    P[t] from
    DTConstrInd(
    A1,
    A6);
    
      let tsg be
    Element of ( 
    TS G), nt be 
    NonTerminal of G; 
    
      assume (tsg
    .  
    {} ) 
    = nt; 
    
      hence thesis by
    A9;
    
    end;
    
    begin
    
    registration
    
      cluster 
    PeanoNat -> 
    with_terminals
    with_nonterminals
    with_useful_nonterminals;
    
      coherence by
    Lm16;
    
    end
    
    set PN =
    PeanoNat ; 
    
    reconsider O as
    Terminal of PN by 
    Lm9;
    
    reconsider S as
    NonTerminal of PN by 
    Lm12;
    
    definition
    
      let nt be
    NonTerminal of 
    PeanoNat , t be 
    Element of ( 
    TS  
    PeanoNat ); 
    
      :: original:
    -tree
    
      redefine
    
      func nt
    
    -tree t -> 
    Element of ( 
    TS  
    PeanoNat ) ; 
    
      coherence
    
      proof
    
        reconsider r =
    {} as 
    Node of t by 
    TREES_1: 22;
    
        (t
    . r) 
    =  
    0 or (t 
    . r) 
    = 1 by 
    Lm2,
    TARSKI:def 2;
    
        then
    
        
    
    A1: ( 
    roots  
    <*t*>)
    =  
    <*
    0 *> or ( 
    roots  
    <*t*>)
    =  
    <*1*> by
    Th4;
    
        nt
    = S by 
    Lm15,
    TARSKI:def 1;
    
        then (nt
    -tree  
    <*t*>)
    in ( 
    TS PN) by 
    A1,
    Def1,
    Lm5,
    Lm6;
    
        hence thesis by
    TREES_4:def 5;
    
      end;
    
    end
    
    definition
    
      let x be
    FinSequence of 
    NAT ; 
    
      :: 
    
    DTCONSTR:def7
    
      func
    
    plus-one x -> 
    Element of 
    NAT equals ((x 
    . 1) 
    + 1); 
    
      coherence ;
    
    end
    
    deffunc
    
    N(
    set, 
    set, 
    FinSequence of 
    NAT ) = ( 
    plus-one $3); 
    
    definition
    
      :: 
    
    DTCONSTR:def8
    
      func
    
    PN-to-NAT -> 
    Function of ( 
    TS  
    PeanoNat ), 
    NAT means 
    
      :
    
    Def8: (for t be 
    Symbol of 
    PeanoNat st t 
    in ( 
    Terminals  
    PeanoNat ) holds (it 
    . ( 
    root-tree t)) 
    =  
    0 ) & for nt be 
    Symbol of 
    PeanoNat , ts be 
    FinSequence of ( 
    TS  
    PeanoNat ) st nt 
    ==> ( 
    roots ts) holds (it 
    . (nt 
    -tree ts)) 
    = ( 
    plus-one (it 
    * ts)); 
    
      existence
    
      proof
    
        thus ex f be
    Function of ( 
    TS  
    PeanoNat ), 
    NAT st (for t be 
    Symbol of 
    PeanoNat st t 
    in ( 
    Terminals  
    PeanoNat ) holds (f 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of 
    PeanoNat , ts be 
    FinSequence of ( 
    TS  
    PeanoNat ) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,) from
    DTConstrIndDef;
    
      end;
    
      uniqueness
    
      proof
    
        let it1,it2 be
    Function of ( 
    TS  
    PeanoNat ), 
    NAT such that 
    
        
    
    A1: (for t be 
    Symbol of 
    PeanoNat st t 
    in ( 
    Terminals  
    PeanoNat ) holds (it1 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of 
    PeanoNat , ts be 
    FinSequence of ( 
    TS  
    PeanoNat ) st nt 
    ==> ( 
    roots ts) holds (it1 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,) and
    
        
    
    A2: (for t be 
    Symbol of 
    PeanoNat st t 
    in ( 
    Terminals  
    PeanoNat ) holds (it2 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of 
    PeanoNat , ts be 
    FinSequence of ( 
    TS  
    PeanoNat ) st nt 
    ==> ( 
    roots ts) holds (it2 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,);
    
        thus it1
    = it2 from 
    DTConstrUniqDef(
    A1,
    A2);
    
      end;
    
    end
    
    definition
    
      let x be
    Element of ( 
    TS  
    PeanoNat ); 
    
      :: 
    
    DTCONSTR:def9
    
      func
    
    PNsucc x -> 
    Element of ( 
    TS  
    PeanoNat ) equals (1 
    -tree  
    <*x*>);
    
      coherence
    
      proof
    
        reconsider r =
    {} as 
    Node of x by 
    TREES_1: 22;
    
        
    
        
    
    A1: ( 
    roots  
    <*x*>)
    =  
    <*(x
    . r)*> by 
    Th4;
    
        (x
    . r) 
    = O or (x 
    . r) 
    = S by 
    Lm2,
    TARSKI:def 2;
    
        hence thesis by
    A1,
    Def1,
    Lm5,
    Lm6;
    
      end;
    
    end
    
    deffunc
    
    F(
    set, 
    Element of ( 
    TS  
    PeanoNat )) = ( 
    PNsucc $2); 
    
    definition
    
      :: 
    
    DTCONSTR:def10
    
      func
    
    NAT-to-PN -> 
    sequence of ( 
    TS  
    PeanoNat ) means 
    
      :
    
    Def10: (it 
    .  
    0 ) 
    = ( 
    root-tree  
    0 ) & for n be 
    Nat holds (it 
    . (n 
    + 1)) 
    = ( 
    PNsucc (it 
    . n)); 
    
      existence
    
      proof
    
        ex f be
    sequence of ( 
    TS  
    PeanoNat ) st (f 
    .  
    0 ) 
    = ( 
    root-tree O) & for n be 
    Nat holds (f 
    . (n 
    + 1)) 
    =  
    F(n,) from
    NAT_1:sch 12;
    
        hence thesis;
    
      end;
    
      uniqueness
    
      proof
    
        let it1,it2 be
    sequence of ( 
    TS  
    PeanoNat ); 
    
        assume
    
        
    
    A1: not thesis; 
    
        then
    
        
    
    A2: (it1 
    .  
    0 ) 
    = ( 
    root-tree O); 
    
        
    
        
    
    A3: for n be 
    Nat holds (it1 
    . (n 
    + 1)) 
    =  
    F(n,) by
    A1;
    
        
    
        
    
    A4: (it2 
    .  
    0 ) 
    = ( 
    root-tree O) by 
    A1;
    
        
    
        
    
    A5: for n be 
    Nat holds (it2 
    . (n 
    + 1)) 
    =  
    F(n,) by
    A1;
    
        it1
    = it2 from 
    NAT_1:sch 16(
    A2,
    A3,
    A4,
    A5);
    
        hence thesis by
    A1;
    
      end;
    
    end
    
    theorem :: 
    
    DTCONSTR:11
    
    for pn be
    Element of ( 
    TS  
    PeanoNat ) holds pn 
    = ( 
    NAT-to-PN  
    . ( 
    PN-to-NAT  
    . pn)) 
    
    proof
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of PN] means $1 
    = ( 
    NAT-to-PN  
    . ( 
    PN-to-NAT  
    . $1)); 
    
      
    
    A1: 
    
      now
    
        let s be
    Symbol of PN; 
    
        assume
    
        
    
    A2: s 
    in ( 
    Terminals PN); 
    
        
    
        then (
    NAT-to-PN  
    . ( 
    PN-to-NAT  
    . ( 
    root-tree s))) 
    = ( 
    NAT-to-PN  
    .  
    0 ) by 
    Def8
    
        .= (
    root-tree O) by 
    Def10;
    
        hence
    P[(
    root-tree s)] by 
    A2,
    Lm10,
    TARSKI:def 1;
    
      end;
    
      
    
    A3: 
    
      now
    
        let nt be
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN); 
    
        assume that
    
        
    
    A4: nt 
    ==> ( 
    roots ts) and 
    
        
    
    A5: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    rng ts) holds 
    P[t];
    
        
    
        
    
    A6: nt 
    <> O by 
    A4,
    Lm8;
    
        (
    roots ts) 
    =  
    <*O*> or (
    roots ts) 
    =  
    <*S*> by
    A4,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider dt be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A7: ts 
    =  
    <*dt*> and
    
        
    
    A8: dt 
    in ( 
    TS PN) by 
    Th5;
    
        reconsider dt as
    Element of ( 
    TS PN) by 
    A8;
    
        (
    rng ts) 
    =  
    {dt} by
    A7,
    FINSEQ_1: 38;
    
        then dt
    in ( 
    rng ts) by 
    TARSKI:def 1;
    
        then
    
        
    
    A9: dt 
    = ( 
    NAT-to-PN  
    . ( 
    PN-to-NAT  
    . dt)) by 
    A5;
    
        
    
        
    
    A10: ( 
    PN-to-NAT  
    * ts) 
    =  
    <*(
    PN-to-NAT  
    . dt)*> by 
    A7,
    FINSEQ_2: 35;
    
        set N = (
    PN-to-NAT  
    . dt); 
    
        
    
        
    
    A11: ( 
    plus-one  
    <*N*>)
    = (N 
    + 1) by 
    FINSEQ_1: 40;
    
        (
    NAT-to-PN  
    . (N 
    + 1)) 
    = ( 
    PNsucc dt) by 
    A9,
    Def10
    
        .= (nt
    -tree ts) by 
    A6,
    A7,
    Lm2,
    TARSKI:def 2;
    
        hence
    P[(nt
    -tree ts)] by 
    A4,
    A10,
    A11,
    Def8;
    
      end;
    
      for t be
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    TS PN) holds 
    P[t] from
    DTConstrInd(
    A1,
    A3);
    
      hence thesis;
    
    end;
    
    
    
    
    
    Lm17: 
    0  
    = ( 
    PN-to-NAT  
    . ( 
    root-tree O)) by 
    Def8
    
    .= (
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    .  
    0 )) by 
    Def10;
    
    
    
    Lm18: 
    
    now
    
      let n be
    Element of 
    NAT ; 
    
      assume
    
      
    
    A1: n 
    = ( 
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    . n)); 
    
      reconsider dt = (
    NAT-to-PN  
    . n) as 
    Element of ( 
    TS PN); 
    
      reconsider r =
    {} as 
    Node of dt by 
    TREES_1: 22;
    
      
    
      
    
    A2: (dt 
    . r) 
    = O or (dt 
    . r) 
    = S by 
    Lm2,
    TARSKI:def 2;
    
      
    
      
    
    A3: ( 
    NAT-to-PN  
    . (n 
    + 1)) 
    = ( 
    PNsucc ( 
    NAT-to-PN  
    . n)) by 
    Def10
    
      .= (S
    -tree  
    <*(
    NAT-to-PN  
    . n)*>); 
    
      
    
      
    
    A4: S 
    ==> ( 
    roots  
    <*(
    NAT-to-PN  
    . n)*>) by 
    A2,
    Lm3,
    Lm4,
    Th4;
    
      
    <*(
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    . n))*> 
    = ( 
    PN-to-NAT  
    *  
    <*(
    NAT-to-PN  
    . n)*>) by 
    FINSEQ_2: 35;
    
      
    
      then (
    PN-to-NAT  
    . (S 
    -tree  
    <*(
    NAT-to-PN  
    . n)*>)) 
    = ( 
    plus-one  
    <*n*>) by
    A1,
    A4,
    Def8
    
      .= (n
    + 1) by 
    FINSEQ_1: 40;
    
      hence (n
    + 1) 
    = ( 
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    . (n 
    + 1))) by 
    A3;
    
    end;
    
    theorem :: 
    
    DTCONSTR:12
    
    for n be
    Nat holds n 
    = ( 
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    . n)) 
    
    proof
    
      defpred
    
    P[
    Nat] means $1
    = ( 
    PN-to-NAT  
    . ( 
    NAT-to-PN  
    . $1)); 
    
      
    
      
    
    A1: 
    P[
    0 ] by 
    Lm17;
    
      
    
      
    
    A2: for n be 
    Nat st 
    P[n] holds
    P[(n
    + 1)] by 
    Lm18;
    
      thus for n be
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A1,
    A2);
    
    end;
    
    begin
    
    definition
    
      let G be non
    empty  
    DTConstrStr, tsg be 
    DecoratedTree of the 
    carrier of G; 
    
      assume
    
      
    
    A1: tsg 
    in ( 
    TS G); 
    
      defpred
    
    C[
    object] means $1
    in ( 
    Terminals G); 
    
      deffunc
    
    F(
    object) =
    <*$1*>;
    
      deffunc
    
    G(
    object) =
    {} ; 
    
      
    
    A2: 
    
      now
    
        let x be
    object;
    
        assume x
    in the 
    carrier of G; 
    
        hereby
    
          assume
    
          
    
    A3: 
    C[x];
    
          then
    
          reconsider T = (
    Terminals G) as non 
    empty  
    set;
    
          reconsider x9 = x as
    Element of T by 
    A3;
    
          
    <*x9*> is
    FinSequence of T; 
    
          hence
    F(x)
    in (( 
    Terminals G) 
    * ); 
    
        end;
    
        assume not
    C[x];
    
        (
    <*> ( 
    Terminals G)) 
    =  
    {} ; 
    
        hence
    G(x)
    in (( 
    Terminals G) 
    * ); 
    
      end;
    
      consider s2t be
    Function of the 
    carrier of G, (( 
    Terminals G) 
    * ) such that 
    
      
    
    A4: for s be 
    object st s 
    in the 
    carrier of G holds ( 
    C[s] implies (s2t
    . s) 
    =  
    F(s)) & ( not
    C[s] implies (s2t
    . s) 
    =  
    G(s)) from
    FUNCT_2:sch 5(
    A2);
    
      deffunc
    
    T(
    Symbol of G) = (s2t 
    . $1); 
    
      deffunc
    
    N(
    set, 
    set, 
    FinSequence of (( 
    Terminals G) 
    * )) = ( 
    FlattenSeq $3); 
    
      deffunc
    
    F(
    object) =
    <*$1*>;
    
      :: 
    
    DTCONSTR:def11
    
      func
    
    TerminalString tsg -> 
    FinSequence of ( 
    Terminals G) means 
    
      :
    
    Def11: ex f be 
    Function of ( 
    TS G), (( 
    Terminals G) 
    * ) st it 
    = (f 
    . tsg) & (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*>) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    = ( 
    FlattenSeq (f 
    * ts)); 
    
      existence
    
      proof
    
        consider f be
    Function of ( 
    TS G), (( 
    Terminals G) 
    * ) such that 
    
        
    
    A5: (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,*) from
    DTConstrIndDef;
    
        (f
    . tsg) is 
    Element of (( 
    Terminals G) 
    * ) by 
    A1,
    FUNCT_2: 5;
    
        then
    
        reconsider IT = (f
    . tsg) as 
    FinSequence of ( 
    Terminals G); 
    
        take IT, f;
    
        thus IT
    = (f 
    . tsg); 
    
        hereby
    
          let t be
    Symbol of G; 
    
          assume
    
          
    
    A6: t 
    in ( 
    Terminals G); 
    
          then (f
    . ( 
    root-tree t)) 
    = (s2t 
    . t) by 
    A5;
    
          hence (f
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A4,
    A6;
    
        end;
    
        thus thesis by
    A5;
    
      end;
    
      uniqueness
    
      proof
    
        let it1,it2 be
    FinSequence of ( 
    Terminals G); 
    
        given f1 be
    Function of ( 
    TS G), (( 
    Terminals G) 
    * ) such that 
    
        
    
    A7: it1 
    = (f1 
    . tsg) and 
    
        
    
    A8: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f1 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A9: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f1 
    . (nt 
    -tree ts)) 
    = ( 
    FlattenSeq (f1 
    * ts)); 
    
        given f2 be
    Function of ( 
    TS G), (( 
    Terminals G) 
    * ) such that 
    
        
    
    A10: it2 
    = (f2 
    . tsg) and 
    
        
    
    A11: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f2 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A12: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f2 
    . (nt 
    -tree ts)) 
    = ( 
    FlattenSeq (f2 
    * ts)); 
    
        
    
    A13: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume
    
            
    
    A14: t 
    in ( 
    Terminals G); 
    
            
    
            hence (f1
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A8
    
            .=
    T(t) by
    A4,
    A14;
    
          end;
    
          thus for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f1 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,*) by
    A9;
    
        end;
    
        
    
    A15: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume
    
            
    
    A16: t 
    in ( 
    Terminals G); 
    
            
    
            hence (f2
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A11
    
            .=
    T(t) by
    A4,
    A16;
    
          end;
    
          thus for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f2 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,*) by
    A12;
    
        end;
    
        f1
    = f2 from 
    DTConstrUniqDef(
    A13,
    A15);
    
        hence thesis by
    A7,
    A10;
    
      end;
    
      
    
    A17: 
    
      now
    
        let x be
    object;
    
        assume x
    in the 
    carrier of G; 
    
        then
    
        reconsider x9 = x as
    Element of G; 
    
        
    <*x9*> is
    FinSequence of the 
    carrier of G; 
    
        hence
    F(x)
    in (the 
    carrier of G 
    * ); 
    
      end;
    
      consider s2s be
    Function of the 
    carrier of G, (the 
    carrier of G 
    * ) such that 
    
      
    
    A18: for s be 
    object st s 
    in the 
    carrier of G holds (s2s 
    . s) 
    =  
    F(s) from
    FUNCT_2:sch 2(
    A17);
    
      deffunc
    
    T(
    Symbol of G) = (s2s 
    . $1); 
    
      deffunc
    
    N(
    Symbol of G, 
    set, 
    FinSequence of (the 
    carrier of G 
    * )) = ((s2s 
    . $1) 
    ^ ( 
    FlattenSeq $3)); 
    
      :: 
    
    DTCONSTR:def12
    
      func
    
    PreTraversal tsg -> 
    FinSequence of the 
    carrier of G means 
    
      :
    
    Def12: ex f be 
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) st it 
    = (f 
    . tsg) & (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*>) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f 
    * ts) holds (f 
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq x)); 
    
      existence
    
      proof
    
        deffunc
    
    T(
    Symbol of G) = (s2s 
    . $1); 
    
        deffunc
    
    N(
    Symbol of G, 
    set, 
    FinSequence of (the 
    carrier of G 
    * )) = ((s2s 
    . $1) 
    ^ ( 
    FlattenSeq $3)); 
    
        consider f be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A19: (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,*) from
    DTConstrIndDef;
    
        (f
    . tsg) is 
    Element of (the 
    carrier of G 
    * ) by 
    A1,
    FUNCT_2: 5;
    
        then
    
        reconsider IT = (f
    . tsg) as 
    FinSequence of the 
    carrier of G; 
    
        take IT, f;
    
        thus IT
    = (f 
    . tsg); 
    
        hereby
    
          let t be
    Symbol of G; 
    
          assume t
    in ( 
    Terminals G); 
    
          then (f
    . ( 
    root-tree t)) 
    = (s2s 
    . t) by 
    A19;
    
          hence (f
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A18;
    
        end;
    
        let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence;
    
        assume that
    
        
    
    A20: rts 
    = ( 
    roots ts) and 
    
        
    
    A21: nt 
    ==> rts; 
    
        let x be
    FinSequence of (the 
    carrier of G 
    * ); 
    
        assume x
    = (f 
    * ts); 
    
        
    
        hence (f
    . (nt 
    -tree ts)) 
    = ((s2s 
    . nt) 
    ^ ( 
    FlattenSeq x)) by 
    A19,
    A20,
    A21
    
        .= (
    <*nt*>
    ^ ( 
    FlattenSeq x)) by 
    A18;
    
      end;
    
      uniqueness
    
      proof
    
        let it1,it2 be
    FinSequence of the 
    carrier of G; 
    
        given f1 be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A22: it1 
    = (f1 
    . tsg) and 
    
        
    
    A23: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f1 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A24: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f1 
    * ts) holds (f1 
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq x)); 
    
        given f2 be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A25: it2 
    = (f2 
    . tsg) and 
    
        
    
    A26: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f2 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A27: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f2 
    * ts) holds (f2 
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq x)); 
    
        
    
    A28: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume t
    in ( 
    Terminals G); 
    
            
    
            hence (f1
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A23
    
            .=
    T(t) by
    A18;
    
          end;
    
          let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
          assume nt
    ==> ( 
    roots ts); 
    
          
    
          hence (f1
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq (f1 
    * ts))) by 
    A24
    
          .=
    N(nt,roots,*) by
    A18;
    
        end;
    
        
    
    A29: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume t
    in ( 
    Terminals G); 
    
            
    
            hence (f2
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A26
    
            .=
    T(t) by
    A18;
    
          end;
    
          let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
          assume nt
    ==> ( 
    roots ts); 
    
          
    
          hence (f2
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq (f2 
    * ts))) by 
    A27
    
          .=
    N(nt,roots,*) by
    A18;
    
        end;
    
        f1
    = f2 from 
    DTConstrUniqDef(
    A28,
    A29);
    
        hence thesis by
    A22,
    A25;
    
      end;
    
      deffunc
    
    T(
    Symbol of G) = (s2s 
    . $1); 
    
      deffunc
    
    N(
    Symbol of G, 
    set, 
    FinSequence of (the 
    carrier of G 
    * )) = (( 
    FlattenSeq $3) 
    ^ (s2s 
    . $1)); 
    
      :: 
    
    DTCONSTR:def13
    
      func
    
    PostTraversal tsg -> 
    FinSequence of the 
    carrier of G means 
    
      :
    
    Def13: ex f be 
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) st it 
    = (f 
    . tsg) & (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*>) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f 
    * ts) holds (f 
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq x) 
    ^  
    <*nt*>);
    
      existence
    
      proof
    
        consider f be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A30: (for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f 
    . ( 
    root-tree t)) 
    =  
    T(t)) & for nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    =  
    N(nt,roots,*) from
    DTConstrIndDef;
    
        (f
    . tsg) is 
    Element of (the 
    carrier of G 
    * ) by 
    A1,
    FUNCT_2: 5;
    
        then
    
        reconsider IT = (f
    . tsg) as 
    FinSequence of the 
    carrier of G; 
    
        take IT, f;
    
        thus IT
    = (f 
    . tsg); 
    
        hereby
    
          let t be
    Symbol of G; 
    
          assume t
    in ( 
    Terminals G); 
    
          then (f
    . ( 
    root-tree t)) 
    = (s2s 
    . t) by 
    A30;
    
          hence (f
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A18;
    
        end;
    
        let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence;
    
        assume that
    
        
    
    A31: rts 
    = ( 
    roots ts) and 
    
        
    
    A32: nt 
    ==> rts; 
    
        let x be
    FinSequence of (the 
    carrier of G 
    * ); 
    
        assume x
    = (f 
    * ts); 
    
        
    
        hence (f
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq x) 
    ^ (s2s 
    . nt)) by 
    A30,
    A31,
    A32
    
        .= ((
    FlattenSeq x) 
    ^  
    <*nt*>) by
    A18;
    
      end;
    
      uniqueness
    
      proof
    
        let it1,it2 be
    FinSequence of the 
    carrier of G; 
    
        given f1 be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A33: it1 
    = (f1 
    . tsg) and 
    
        
    
    A34: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f1 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A35: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f1 
    * ts) holds (f1 
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq x) 
    ^  
    <*nt*>);
    
        given f2 be
    Function of ( 
    TS G), (the 
    carrier of G 
    * ) such that 
    
        
    
    A36: it2 
    = (f2 
    . tsg) and 
    
        
    
    A37: for t be 
    Symbol of G st t 
    in ( 
    Terminals G) holds (f2 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
        
    
    A38: for nt be 
    Symbol of G, ts be 
    FinSequence of ( 
    TS G), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of G 
    * ) st x 
    = (f2 
    * ts) holds (f2 
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq x) 
    ^  
    <*nt*>);
    
        
    
    A39: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume t
    in ( 
    Terminals G); 
    
            
    
            hence (f1
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A34
    
            .=
    T(t) by
    A18;
    
          end;
    
          let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
          assume nt
    ==> ( 
    roots ts); 
    
          
    
          hence (f1
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq (f1 
    * ts)) 
    ^  
    <*nt*>) by
    A35
    
          .=
    N(nt,roots,*) by
    A18;
    
        end;
    
        
    
    A40: 
    
        now
    
          hereby
    
            let t be
    Symbol of G; 
    
            assume t
    in ( 
    Terminals G); 
    
            
    
            hence (f2
    . ( 
    root-tree t)) 
    =  
    <*t*> by
    A37
    
            .=
    T(t) by
    A18;
    
          end;
    
          let nt be
    Symbol of G, ts be 
    FinSequence of ( 
    TS G); 
    
          assume nt
    ==> ( 
    roots ts); 
    
          
    
          hence (f2
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq (f2 
    * ts)) 
    ^  
    <*nt*>) by
    A38
    
          .=
    N(nt,roots,*) by
    A18;
    
        end;
    
        f1
    = f2 from 
    DTConstrUniqDef(
    A39,
    A40);
    
        hence thesis by
    A33,
    A36;
    
      end;
    
    end
    
    definition
    
      let G be
    with_nonterminals non 
    empty non 
    empty  
    DTConstrStr, nt be 
    Symbol of G; 
    
      :: 
    
    DTCONSTR:def14
    
      func
    
    TerminalLanguage nt -> 
    Subset of (( 
    Terminals G) 
    * ) equals { ( 
    TerminalString tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
      coherence
    
      proof
    
        set TL = { (
    TerminalString tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
        TL
    c= (( 
    Terminals G) 
    * ) 
    
        proof
    
          let x be
    object;
    
          assume x
    in TL; 
    
          then ex tsg be
    Element of ( 
    FinTrees the 
    carrier of G) st (x 
    = ( 
    TerminalString tsg)) & (tsg 
    in ( 
    TS G)) & ((tsg 
    .  
    {} ) 
    = nt); 
    
          hence thesis by
    FINSEQ_1:def 11;
    
        end;
    
        hence thesis;
    
      end;
    
      :: 
    
    DTCONSTR:def15
    
      func
    
    PreTraversalLanguage nt -> 
    Subset of (the 
    carrier of G 
    * ) equals { ( 
    PreTraversal tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
      coherence
    
      proof
    
        set TL = { (
    PreTraversal tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
        TL
    c= (the 
    carrier of G 
    * ) 
    
        proof
    
          let x be
    object;
    
          assume x
    in TL; 
    
          then ex tsg be
    Element of ( 
    FinTrees the 
    carrier of G) st (x 
    = ( 
    PreTraversal tsg)) & (tsg 
    in ( 
    TS G)) & ((tsg 
    .  
    {} ) 
    = nt); 
    
          hence thesis by
    FINSEQ_1:def 11;
    
        end;
    
        hence thesis;
    
      end;
    
      :: 
    
    DTCONSTR:def16
    
      func
    
    PostTraversalLanguage nt -> 
    Subset of (the 
    carrier of G 
    * ) equals { ( 
    PostTraversal tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
      coherence
    
      proof
    
        set TL = { (
    PostTraversal tsg) where tsg be 
    Element of ( 
    FinTrees the 
    carrier of G) : tsg 
    in ( 
    TS G) & (tsg 
    .  
    {} ) 
    = nt }; 
    
        TL
    c= (the 
    carrier of G 
    * ) 
    
        proof
    
          let x be
    object;
    
          assume x
    in TL; 
    
          then ex tsg be
    Element of ( 
    FinTrees the 
    carrier of G) st (x 
    = ( 
    PostTraversal tsg)) & (tsg 
    in ( 
    TS G)) & ((tsg 
    .  
    {} ) 
    = nt); 
    
          hence thesis by
    FINSEQ_1:def 11;
    
        end;
    
        hence thesis;
    
      end;
    
    end
    
    theorem :: 
    
    DTCONSTR:13
    
    
    
    
    
    Th13: for t be 
    DecoratedTree of the 
    carrier of 
    PeanoNat st t 
    in ( 
    TS  
    PeanoNat ) holds ( 
    TerminalString t) 
    =  
    <*
    0 *> 
    
    proof
    
      consider f be
    Function of ( 
    TS PN), (( 
    Terminals PN) 
    * ) such that 
    
      
    
    A1: ( 
    TerminalString ( 
    root-tree O qua 
    Symbol of PN)) 
    = (f 
    . ( 
    root-tree O)) and 
    
      
    
    A2: for t be 
    Symbol of PN st t 
    in ( 
    Terminals PN) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
      
    
    A3: for nt be 
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN) st nt 
    ==> ( 
    roots ts) holds (f 
    . (nt 
    -tree ts)) 
    = ( 
    FlattenSeq (f 
    * ts)) by 
    Def11;
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of PN] means ( 
    TerminalString $1) 
    =  
    <*
    0 *>; 
    
      
    
    A4: 
    
      now
    
        let s be
    Symbol of PN; 
    
        assume s
    in ( 
    Terminals PN); 
    
        then s
    = O by 
    Lm10,
    TARSKI:def 1;
    
        hence
    P[(
    root-tree s)] by 
    A1,
    A2;
    
      end;
    
      
    
    A5: 
    
      now
    
        let nt be
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN); 
    
        assume that
    
        
    
    A6: nt 
    ==> ( 
    roots ts) and 
    
        
    
    A7: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    rng ts) holds 
    P[t];
    
        
    
        
    
    A8: (nt 
    -tree ts) 
    in ( 
    TS PN) by 
    A6,
    Def1;
    
        (
    roots ts) 
    =  
    <*O*> or (
    roots ts) 
    =  
    <*1*> by
    A6,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider x be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A9: ts 
    =  
    <*x*> and
    
        
    
    A10: x 
    in ( 
    TS PN) by 
    Th5;
    
        reconsider x9 = x as
    Element of ( 
    TS PN) by 
    A10;
    
        (
    rng ts) 
    =  
    {x} by
    A9,
    FINSEQ_1: 39;
    
        then
    
        
    
    A11: x 
    in ( 
    rng ts) by 
    TARSKI:def 1;
    
        (f
    . x9) is 
    Element of (( 
    Terminals PN) 
    * ); 
    
        
    
        then
    
        
    
    A12: (f 
    . x9) 
    = ( 
    TerminalString x) by 
    A2,
    A3,
    Def11
    
        .=
    <*O*> by
    A7,
    A11;
    
        (f
    * ts) 
    =  
    <*(f
    . x)*> by 
    A9,
    FINSEQ_2: 35;
    
        
    
        then (f
    . (nt 
    -tree ts)) 
    = ( 
    FlattenSeq  
    <*(f
    . x9)*>) by 
    A3,
    A6
    
        .=
    <*O*> by
    A12,
    PRE_POLY: 1;
    
        hence
    P[(nt
    -tree ts)] by 
    A2,
    A3,
    A8,
    Def11;
    
      end;
    
      thus for t be
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    TS PN) holds 
    P[t] from
    DTConstrInd(
    A4,
    A5);
    
    end;
    
    theorem :: 
    
    DTCONSTR:14
    
    for nt be
    Symbol of 
    PeanoNat holds ( 
    TerminalLanguage nt) 
    =  
    {
    <*
    0 *>} 
    
    proof
    
      let nt be
    Symbol of 
    PeanoNat ; 
    
      
    
      
    
    A1: nt 
    = S or nt 
    = O by 
    Lm2,
    TARSKI:def 2;
    
      hereby
    
        let x be
    object;
    
        assume x
    in ( 
    TerminalLanguage nt); 
    
        then ex tsg be
    Element of ( 
    FinTrees the 
    carrier of PN) st x 
    = ( 
    TerminalString tsg) & tsg 
    in ( 
    TS PN) & (tsg 
    .  
    {} ) 
    = nt; 
    
        then x
    =  
    <*O*> by
    Th13;
    
        hence x
    in  
    {
    <*
    0 *>} by 
    TARSKI:def 1;
    
      end;
    
      let x be
    object;
    
      assume x
    in  
    {
    <*
    0 *>}; 
    
      then
    
      
    
    A2: x 
    =  
    <*O*> by
    TARSKI:def 1;
    
      reconsider prtO = (
    root-tree O) as 
    Element of ( 
    TS PN) qua non 
    empty  
    set;
    
      reconsider rtO = (
    root-tree O) as 
    Element of ( 
    TS PN); 
    
      reconsider srtO =
    <*prtO*> as
    FinSequence of ( 
    TS PN); 
    
      
    
      
    
    A3: (rtO 
    .  
    {} ) 
    = O by 
    TREES_4: 3;
    
      then S
    ==> ( 
    roots  
    <*rtO*>) by
    Lm5,
    Th4;
    
      then
    
      
    
    A4: (S 
    -tree  
    <*prtO*>)
    in ( 
    TS PN) by 
    Def1;
    
      then
    
      
    
    A5: ( 
    TerminalString (S 
    -tree srtO)) 
    = x by 
    A2,
    Th13;
    
      
    
      
    
    A6: ((S 
    -tree  
    <*rtO*>)
    .  
    {} ) 
    = S by 
    TREES_4:def 4;
    
      (
    TerminalString rtO) 
    = x by 
    A2,
    Th13;
    
      hence thesis by
    A1,
    A3,
    A4,
    A5,
    A6;
    
    end;
    
    theorem :: 
    
    DTCONSTR:15
    
    
    
    
    
    Th15: for t be 
    Element of ( 
    TS  
    PeanoNat ) holds ( 
    PreTraversal t) 
    = ((( 
    height ( 
    dom t)) 
    |-> 1) 
    ^  
    <*
    0 *>) 
    
    proof
    
      consider f be
    Function of ( 
    TS PN), (the 
    carrier of PN 
    * ) such that 
    
      
    
    A1: ( 
    PreTraversal ( 
    root-tree O qua 
    Symbol of PN)) 
    = (f 
    . ( 
    root-tree O)) and 
    
      
    
    A2: for t be 
    Symbol of PN st t 
    in ( 
    Terminals PN) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
      
    
    A3: for nt be 
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of PN 
    * ) st x 
    = (f 
    * ts) holds (f 
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq x)) by 
    Def12;
    
      reconsider rtO = (
    root-tree O) as 
    Element of ( 
    TS PN); 
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of PN] means ex t be 
    Element of ( 
    TS PN) st $1 
    = t & ( 
    PreTraversal t) 
    = ((( 
    height ( 
    dom t)) 
    |-> 1) 
    ^  
    <*
    0 *>); 
    
      
    
    A4: 
    
      now
    
        let s be
    Symbol of PN; 
    
        assume
    
        
    
    A5: s 
    in ( 
    Terminals PN); 
    
        thus
    P[(
    root-tree s)] 
    
        proof
    
          take t = rtO;
    
          thus (
    root-tree s) 
    = t by 
    A5,
    Lm10,
    TARSKI:def 1;
    
          
    
          thus (
    PreTraversal t) 
    =  
    <*O*> by
    A1,
    A2
    
          .= (
    {}  
    ^  
    <*O*>) by
    FINSEQ_1: 34
    
          .= ((
    0  
    |-> 1) 
    ^  
    <*
    0 *>) 
    
          .= (((
    height ( 
    dom t)) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    TREES_1: 42,
    TREES_4: 3;
    
        end;
    
      end;
    
      
    
    A6: 
    
      now
    
        let nt be
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN); 
    
        assume that
    
        
    
    A7: nt 
    ==> ( 
    roots ts) and 
    
        
    
    A8: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    rng ts) holds 
    P[t];
    
        reconsider t9 = (nt
    -tree ts) as 
    Element of ( 
    TS PN) by 
    A7,
    Def1;
    
        
    
        
    
    A9: nt 
    = S by 
    A7,
    Def2;
    
        (
    roots ts) 
    =  
    <*O*> or (
    roots ts) 
    =  
    <*1*> by
    A7,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider x be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A10: ts 
    =  
    <*x*> and
    
        
    
    A11: x 
    in ( 
    TS PN) by 
    Th5;
    
        reconsider x9 = x as
    Element of ( 
    TS PN) by 
    A11;
    
        (
    rng ts) 
    =  
    {x} by
    A10,
    FINSEQ_1: 39;
    
        then x
    in ( 
    rng ts) by 
    TARSKI:def 1;
    
        then
    
        
    
    A12: ex t9 be 
    Element of ( 
    TS PN) st x 
    = t9 & ( 
    PreTraversal t9) 
    = ((( 
    height ( 
    dom t9)) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    A8;
    
        (f
    . x9) is 
    Element of (the 
    carrier of PN 
    * ); 
    
        then
    
        
    
    A13: (f 
    . x9) 
    = ((( 
    height ( 
    dom x9)) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    A2,
    A3,
    A12,
    Def12;
    
        (f
    * ts) 
    =  
    <*(f
    . x)*> by 
    A10,
    FINSEQ_2: 35;
    
        
    
        then
    
        
    
    A14: (f 
    . (nt 
    -tree ts)) 
    = ( 
    <*nt*>
    ^ ( 
    FlattenSeq  
    <*(f
    . x9)*>)) by 
    A3,
    A7
    
        .= (
    <*nt*>
    ^ ((( 
    height ( 
    dom x9)) 
    |-> 1) 
    ^  
    <*
    0 *>)) by 
    A13,
    PRE_POLY: 1
    
        .= ((
    <*nt*>
    ^ (( 
    height ( 
    dom x9)) 
    |-> 1)) 
    ^  
    <*
    0 *>) by 
    FINSEQ_1: 32
    
        .= (((1
    |-> 1) 
    ^ (( 
    height ( 
    dom x9)) 
    |-> 1)) 
    ^  
    <*
    0 *>) by 
    A9,
    FINSEQ_2: 59
    
        .= ((((
    height ( 
    dom x9)) 
    + 1) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    FINSEQ_2: 123
    
        .= (((
    height ( 
    ^ ( 
    dom x9))) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    TREES_3: 80;
    
        
    
        
    
    A15: ( 
    dom (nt 
    -tree x9)) 
    = ( 
    ^ ( 
    dom x9)) by 
    TREES_4: 13;
    
        
    
        
    
    A16: t9 
    = (nt 
    -tree x9) by 
    A10,
    TREES_4:def 5;
    
        (f
    . t9) is 
    Element of (the 
    carrier of PN 
    * ); 
    
        then (
    PreTraversal (nt 
    -tree ts)) 
    = (f 
    . (nt 
    -tree ts)) by 
    A2,
    A3,
    Def12;
    
        hence
    P[(nt
    -tree ts)] by 
    A14,
    A15,
    A16;
    
      end;
    
      
    
      
    
    A17: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    TS PN) holds 
    P[t] from
    DTConstrInd(
    A4,
    A6);
    
      let t be
    Element of ( 
    TS  
    PeanoNat ); 
    
      
    P[t] by
    A17;
    
      hence thesis;
    
    end;
    
    theorem :: 
    
    DTCONSTR:16
    
    for nt be
    Symbol of 
    PeanoNat holds (nt 
    =  
    0 implies ( 
    PreTraversalLanguage nt) 
    =  
    {
    <*
    0 *>}) & (nt 
    = 1 implies ( 
    PreTraversalLanguage nt) 
    = { ((n 
    |-> 1) 
    ^  
    <*
    0 *>) where n be 
    Element of 
    NAT : n 
    <>  
    0 }) 
    
    proof
    
      let nt be
    Symbol of 
    PeanoNat ; 
    
      reconsider rtO = (
    root-tree O) as 
    Element of ( 
    TS PN); 
    
      (
    height ( 
    dom ( 
    root-tree  
    0 ))) 
    =  
    0 by 
    TREES_1: 42,
    TREES_4: 3;
    
      then (
    PreTraversal rtO) 
    = (( 
    0  
    |-> 1) 
    ^  
    <*O*>) by
    Th15;
    
      
    
      then
    
      
    
    A1: ( 
    PreTraversal rtO) 
    = ( 
    {}  
    ^  
    <*O*>)
    
      .=
    <*O*> by
    FINSEQ_1: 34;
    
      thus nt
    =  
    0 implies ( 
    PreTraversalLanguage nt) 
    =  
    {
    <*
    0 *>} 
    
      proof
    
        assume
    
        
    
    A2: nt 
    =  
    0 ; 
    
        hereby
    
          let x be
    object;
    
          assume x
    in ( 
    PreTraversalLanguage nt); 
    
          then
    
          consider tsg be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
          
    
    A3: x 
    = ( 
    PreTraversal tsg) and 
    
          
    
    A4: tsg 
    in ( 
    TS PN) and 
    
          
    
    A5: (tsg 
    .  
    {} ) 
    = O by 
    A2;
    
          tsg
    = ( 
    root-tree O) by 
    A4,
    A5,
    Th9;
    
          hence x
    in  
    {
    <*
    0 *>} by 
    A1,
    A3,
    TARSKI:def 1;
    
        end;
    
        let x be
    object;
    
        assume x
    in  
    {
    <*
    0 *>}; 
    
        then
    
        
    
    A6: x 
    =  
    <*O*> by
    TARSKI:def 1;
    
        (rtO
    .  
    {} ) 
    = O by 
    TREES_4: 3;
    
        hence thesis by
    A1,
    A2,
    A6;
    
      end;
    
      assume
    
      
    
    A7: nt 
    = 1; 
    
      hereby
    
        let x be
    object;
    
        assume x
    in ( 
    PreTraversalLanguage nt); 
    
        then
    
        consider tsg be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A8: x 
    = ( 
    PreTraversal tsg) and 
    
        
    
    A9: tsg 
    in ( 
    TS PN) and 
    
        
    
    A10: (tsg 
    .  
    {} ) 
    = S by 
    A7;
    
        consider ts be
    FinSequence of ( 
    TS PN) such that 
    
        
    
    A11: tsg 
    = (S 
    -tree ts) and 
    
        
    
    A12: S 
    ==> ( 
    roots ts) by 
    A9,
    A10,
    Th10;
    
        (
    roots ts) 
    =  
    <*
    0 *> or ( 
    roots ts) 
    =  
    <*1*> by
    A12,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider t be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A13: ts 
    =  
    <*t*> and t
    in ( 
    TS PN) by 
    Th5;
    
        tsg
    = (S 
    -tree t) by 
    A11,
    A13,
    TREES_4:def 5;
    
        then (
    dom tsg) 
    = ( 
    ^ ( 
    dom t)) by 
    TREES_4: 13;
    
        then
    
        
    
    A14: ( 
    height ( 
    dom tsg)) 
    = (( 
    height ( 
    dom t)) 
    + 1) by 
    TREES_3: 80;
    
        x
    = ((( 
    height ( 
    dom tsg)) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    A8,
    A9,
    Th15;
    
        hence x
    in { ((n 
    |-> 1) 
    ^  
    <*
    0 *>) where n be 
    Element of 
    NAT : n 
    <>  
    0 } by 
    A14;
    
      end;
    
      let x be
    object;
    
      assume x
    in { ((n 
    |-> 1) 
    ^  
    <*
    0 *>) where n be 
    Element of 
    NAT : n 
    <>  
    0 }; 
    
      then
    
      consider n be
    Element of 
    NAT such that 
    
      
    
    A15: x 
    = ((n 
    |-> 1) 
    ^  
    <*
    0 *>) and 
    
      
    
    A16: n 
    <>  
    0 ; 
    
      defpred
    
    P[
    Nat] means $1
    <>  
    0 implies ex tsg be 
    Element of ( 
    TS PN) st (tsg 
    .  
    {} ) 
    = S & ( 
    PreTraversal tsg) 
    = (($1 
    |-> 1) 
    ^  
    <*
    0 *>); 
    
      
    
      
    
    A17: 
    P[
    0 ]; 
    
      
    
    A18: 
    
      now
    
        let n be
    Nat;
    
        assume
    
        
    
    A19: 
    P[n];
    
        thus
    P[(n
    + 1)] 
    
        proof
    
          assume (n
    + 1) 
    <>  
    0 ; 
    
          per cases ;
    
            suppose n
    <>  
    0 ; 
    
            then
    
            consider tsg be
    Element of ( 
    TS PN) such that (tsg 
    .  
    {} ) 
    = S and 
    
            
    
    A20: ( 
    PreTraversal tsg) 
    = ((n 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    A19;
    
            (
    PreTraversal tsg) 
    = ((( 
    height ( 
    dom tsg)) 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    Th15;
    
            then
    
            
    
    A21: (n 
    |-> 1) 
    = (( 
    height ( 
    dom tsg)) 
    |-> 1) by 
    A20,
    FINSEQ_1: 33;
    
            (
    len (n 
    |-> 1)) 
    = n by 
    CARD_1:def 7;
    
            then
    
            
    
    A22: ( 
    height ( 
    dom tsg)) 
    = n by 
    A21,
    CARD_1:def 7;
    
            take tsg9 = (S
    -tree tsg); 
    
            
    
            
    
    A23: tsg9 
    = (S 
    -tree  
    <*tsg*>) by
    TREES_4:def 5;
    
            (
    height ( 
    dom tsg9)) 
    = ( 
    height ( 
    ^ ( 
    dom tsg))) by 
    TREES_4: 13
    
            .= (n
    + 1) by 
    A22,
    TREES_3: 80;
    
            hence thesis by
    A23,
    Th15,
    TREES_4:def 4;
    
          end;
    
            suppose
    
            
    
    A24: n 
    =  
    0 ; 
    
            take tsg9 = (S
    -tree rtO); 
    
            
    
            
    
    A25: tsg9 
    = (S 
    -tree  
    <*rtO*>) by
    TREES_4:def 5;
    
            (
    height ( 
    dom tsg9)) 
    = ( 
    height ( 
    ^ ( 
    dom rtO))) by 
    TREES_4: 13
    
            .= ((
    height ( 
    dom rtO)) 
    + 1) by 
    TREES_3: 80
    
            .= (n
    + 1) by 
    A24,
    TREES_1: 42,
    TREES_4: 3;
    
            hence thesis by
    A25,
    Th15,
    TREES_4:def 4;
    
          end;
    
        end;
    
      end;
    
      for n be
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A17,
    A18);
    
      then ex tsg be
    Element of ( 
    TS PN) st (tsg 
    .  
    {} ) 
    = S & ( 
    PreTraversal tsg) 
    = ((n 
    |-> 1) 
    ^  
    <*
    0 *>) by 
    A16;
    
      hence thesis by
    A7,
    A15;
    
    end;
    
    theorem :: 
    
    DTCONSTR:17
    
    
    
    
    
    Th17: for t be 
    Element of ( 
    TS  
    PeanoNat ) holds ( 
    PostTraversal t) 
    = ( 
    <*
    0 *> 
    ^ (( 
    height ( 
    dom t)) 
    |-> 1)) 
    
    proof
    
      consider f be
    Function of ( 
    TS PN), (the 
    carrier of PN 
    * ) such that 
    
      
    
    A1: ( 
    PostTraversal ( 
    root-tree O qua 
    Symbol of PN)) 
    = (f 
    . ( 
    root-tree O)) and 
    
      
    
    A2: for t be 
    Symbol of PN st t 
    in ( 
    Terminals PN) holds (f 
    . ( 
    root-tree t)) 
    =  
    <*t*> and
    
      
    
    A3: for nt be 
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN), rts be 
    FinSequence st rts 
    = ( 
    roots ts) & nt 
    ==> rts holds for x be 
    FinSequence of (the 
    carrier of PN 
    * ) st x 
    = (f 
    * ts) holds (f 
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq x) 
    ^  
    <*nt*>) by
    Def13;
    
      reconsider rtO = (
    root-tree O) as 
    Element of ( 
    TS PN); 
    
      defpred
    
    P[
    DecoratedTree of the 
    carrier of PN] means ex t be 
    Element of ( 
    TS PN) st $1 
    = t & ( 
    PostTraversal t) 
    = ( 
    <*
    0 *> 
    ^ (( 
    height ( 
    dom t)) 
    |-> 1)); 
    
      
    
    A4: 
    
      now
    
        let s be
    Symbol of PN; 
    
        assume
    
        
    
    A5: s 
    in ( 
    Terminals PN); 
    
        thus
    P[(
    root-tree s)] 
    
        proof
    
          take t = rtO;
    
          thus (
    root-tree s) 
    = t by 
    A5,
    Lm10,
    TARSKI:def 1;
    
          
    
          thus (
    PostTraversal t) 
    =  
    <*O*> by
    A1,
    A2
    
          .= (
    <*O*>
    ^  
    {} ) by 
    FINSEQ_1: 34
    
          .= (
    <*
    0 *> 
    ^ ( 
    0  
    |-> 1)) 
    
          .= (
    <*
    0 *> 
    ^ (( 
    height ( 
    dom t)) 
    |-> 1)) by 
    TREES_1: 42,
    TREES_4: 3;
    
        end;
    
      end;
    
      
    
    A6: 
    
      now
    
        let nt be
    Symbol of PN, ts be 
    FinSequence of ( 
    TS PN); 
    
        assume that
    
        
    
    A7: nt 
    ==> ( 
    roots ts) and 
    
        
    
    A8: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    rng ts) holds 
    P[t];
    
        reconsider t9 = (nt
    -tree ts) as 
    Element of ( 
    TS PN) by 
    A7,
    Def1;
    
        
    
        
    
    A9: nt 
    = S by 
    A7,
    Def2;
    
        (
    roots ts) 
    =  
    <*O*> or (
    roots ts) 
    =  
    <*1*> by
    A7,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider x be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A10: ts 
    =  
    <*x*> and
    
        
    
    A11: x 
    in ( 
    TS PN) by 
    Th5;
    
        reconsider x9 = x as
    Element of ( 
    TS PN) by 
    A11;
    
        (
    rng ts) 
    =  
    {x} by
    A10,
    FINSEQ_1: 39;
    
        then x
    in ( 
    rng ts) by 
    TARSKI:def 1;
    
        then
    
        
    
    A12: ex t9 be 
    Element of ( 
    TS PN) st x 
    = t9 & ( 
    PostTraversal t9) 
    = ( 
    <*O*>
    ^ (( 
    height ( 
    dom t9)) 
    |-> 1)) by 
    A8;
    
        (f
    . x9) is 
    Element of (the 
    carrier of PN 
    * ); 
    
        then
    
        
    
    A13: (f 
    . x9) 
    = ( 
    <*O*>
    ^ (( 
    height ( 
    dom x9)) 
    |-> 1)) by 
    A2,
    A3,
    A12,
    Def13;
    
        (f
    * ts) 
    =  
    <*(f
    . x)*> by 
    A10,
    FINSEQ_2: 35;
    
        
    
        then
    
        
    
    A14: (f 
    . (nt 
    -tree ts)) 
    = (( 
    FlattenSeq  
    <*(f
    . x9)*>) 
    ^  
    <*nt*>) by
    A3,
    A7
    
        .= ((
    <*O*>
    ^ (( 
    height ( 
    dom x9)) 
    |-> 1)) 
    ^  
    <*nt*>) by
    A13,
    PRE_POLY: 1
    
        .= (
    <*O*>
    ^ ((( 
    height ( 
    dom x9)) 
    |-> 1) 
    ^  
    <*nt*>)) by
    FINSEQ_1: 32
    
        .= (
    <*O*>
    ^ ((( 
    height ( 
    dom x9)) 
    |-> 1) 
    ^ (1 
    |-> 1))) by 
    A9,
    FINSEQ_2: 59
    
        .= (
    <*O*>
    ^ ((( 
    height ( 
    dom x9)) 
    + 1) 
    |-> 1)) by 
    FINSEQ_2: 123
    
        .= (
    <*O*>
    ^ (( 
    height ( 
    ^ ( 
    dom x9))) 
    |-> 1)) by 
    TREES_3: 80;
    
        
    
        
    
    A15: ( 
    dom (nt 
    -tree x9)) 
    = ( 
    ^ ( 
    dom x9)) by 
    TREES_4: 13;
    
        
    
        
    
    A16: t9 
    = (nt 
    -tree x9) by 
    A10,
    TREES_4:def 5;
    
        (f
    . t9) is 
    Element of (the 
    carrier of PN 
    * ); 
    
        then (
    PostTraversal (nt 
    -tree ts)) 
    = (f 
    . (nt 
    -tree ts)) by 
    A2,
    A3,
    Def13;
    
        hence
    P[(nt
    -tree ts)] by 
    A14,
    A15,
    A16;
    
      end;
    
      
    
      
    
    A17: for t be 
    DecoratedTree of the 
    carrier of PN st t 
    in ( 
    TS PN) holds 
    P[t] from
    DTConstrInd(
    A4,
    A6);
    
      let t be
    Element of ( 
    TS  
    PeanoNat ); 
    
      
    P[t] by
    A17;
    
      hence thesis;
    
    end;
    
    theorem :: 
    
    DTCONSTR:18
    
    for nt be
    Symbol of 
    PeanoNat holds (nt 
    =  
    0 implies ( 
    PostTraversalLanguage nt) 
    =  
    {
    <*
    0 *>}) & (nt 
    = 1 implies ( 
    PostTraversalLanguage nt) 
    = { ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) where n be 
    Element of 
    NAT : n 
    <>  
    0 }) 
    
    proof
    
      let nt be
    Symbol of 
    PeanoNat ; 
    
      reconsider rtO = (
    root-tree O) as 
    Element of ( 
    TS PN); 
    
      (
    height ( 
    dom ( 
    root-tree  
    0 ))) 
    =  
    0 by 
    TREES_1: 42,
    TREES_4: 3;
    
      then (
    PostTraversal rtO) 
    = ( 
    <*
    0 *> 
    ^ ( 
    0  
    |-> 1)) by 
    Th17;
    
      
    
      then
    
      
    
    A1: ( 
    PostTraversal rtO) 
    = ( 
    <*O*>
    ^  
    {} ) 
    
      .=
    <*O*> by
    FINSEQ_1: 34;
    
      thus nt
    =  
    0 implies ( 
    PostTraversalLanguage nt) 
    =  
    {
    <*
    0 *>} 
    
      proof
    
        assume
    
        
    
    A2: nt 
    =  
    0 ; 
    
        hereby
    
          let x be
    object;
    
          assume x
    in ( 
    PostTraversalLanguage nt); 
    
          then
    
          consider tsg be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
          
    
    A3: x 
    = ( 
    PostTraversal tsg) and 
    
          
    
    A4: tsg 
    in ( 
    TS PN) and 
    
          
    
    A5: (tsg 
    .  
    {} ) 
    = O by 
    A2;
    
          tsg
    = ( 
    root-tree O) by 
    A4,
    A5,
    Th9;
    
          hence x
    in  
    {
    <*
    0 *>} by 
    A1,
    A3,
    TARSKI:def 1;
    
        end;
    
        let x be
    object;
    
        assume x
    in  
    {
    <*
    0 *>}; 
    
        then
    
        
    
    A6: x 
    =  
    <*O*> by
    TARSKI:def 1;
    
        (rtO
    .  
    {} ) 
    = O by 
    TREES_4: 3;
    
        hence thesis by
    A1,
    A2,
    A6;
    
      end;
    
      assume
    
      
    
    A7: nt 
    = 1; 
    
      hereby
    
        let x be
    object;
    
        assume x
    in ( 
    PostTraversalLanguage nt); 
    
        then
    
        consider tsg be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A8: x 
    = ( 
    PostTraversal tsg) and 
    
        
    
    A9: tsg 
    in ( 
    TS PN) and 
    
        
    
    A10: (tsg 
    .  
    {} ) 
    = S by 
    A7;
    
        consider ts be
    FinSequence of ( 
    TS PN) such that 
    
        
    
    A11: tsg 
    = (S 
    -tree ts) and 
    
        
    
    A12: S 
    ==> ( 
    roots ts) by 
    A9,
    A10,
    Th10;
    
        (
    roots ts) 
    =  
    <*
    0 *> or ( 
    roots ts) 
    =  
    <*1*> by
    A12,
    Def2;
    
        then (
    len ( 
    roots ts)) 
    = 1 by 
    FINSEQ_1: 40;
    
        then
    
        consider t be
    Element of ( 
    FinTrees the 
    carrier of PN) such that 
    
        
    
    A13: ts 
    =  
    <*t*> and t
    in ( 
    TS PN) by 
    Th5;
    
        tsg
    = (S 
    -tree t) by 
    A11,
    A13,
    TREES_4:def 5;
    
        then (
    dom tsg) 
    = ( 
    ^ ( 
    dom t)) by 
    TREES_4: 13;
    
        then
    
        
    
    A14: ( 
    height ( 
    dom tsg)) 
    = (( 
    height ( 
    dom t)) 
    + 1) by 
    TREES_3: 80;
    
        x
    = ( 
    <*
    0 *> 
    ^ (( 
    height ( 
    dom tsg)) 
    |-> 1)) by 
    A8,
    A9,
    Th17;
    
        hence x
    in { ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) where n be 
    Element of 
    NAT : n 
    <>  
    0 } by 
    A14;
    
      end;
    
      let x be
    object;
    
      assume x
    in { ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) where n be 
    Element of 
    NAT : n 
    <>  
    0 }; 
    
      then
    
      consider n be
    Element of 
    NAT such that 
    
      
    
    A15: x 
    = ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) and 
    
      
    
    A16: n 
    <>  
    0 ; 
    
      defpred
    
    P[
    Nat] means $1
    <>  
    0 implies ex tsg be 
    Element of ( 
    TS PN) st (tsg 
    .  
    {} ) 
    = S & ( 
    PostTraversal tsg) 
    = ( 
    <*
    0 *> 
    ^ ($1 
    |-> 1)); 
    
      
    
      
    
    A17: 
    P[
    0 ]; 
    
      
    
    A18: 
    
      now
    
        let n be
    Nat;
    
        assume
    
        
    
    A19: 
    P[n];
    
        thus
    P[(n
    + 1)] 
    
        proof
    
          assume (n
    + 1) 
    <>  
    0 ; 
    
          per cases ;
    
            suppose n
    <>  
    0 ; 
    
            then
    
            consider tsg be
    Element of ( 
    TS PN) such that (tsg 
    .  
    {} ) 
    = S and 
    
            
    
    A20: ( 
    PostTraversal tsg) 
    = ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) by 
    A19;
    
            (
    PostTraversal tsg) 
    = ( 
    <*
    0 *> 
    ^ (( 
    height ( 
    dom tsg)) 
    |-> 1)) by 
    Th17;
    
            then
    
            
    
    A21: (n 
    |-> 1) 
    = (( 
    height ( 
    dom tsg)) 
    |-> 1) by 
    A20,
    FINSEQ_1: 33;
    
            (
    len (n 
    |-> 1)) 
    = n by 
    CARD_1:def 7;
    
            then
    
            
    
    A22: ( 
    height ( 
    dom tsg)) 
    = n by 
    A21,
    CARD_1:def 7;
    
            take tsg9 = (S
    -tree tsg); 
    
            
    
            
    
    A23: tsg9 
    = (S 
    -tree  
    <*tsg*>) by
    TREES_4:def 5;
    
            (
    height ( 
    dom tsg9)) 
    = ( 
    height ( 
    ^ ( 
    dom tsg))) by 
    TREES_4: 13
    
            .= (n
    + 1) by 
    A22,
    TREES_3: 80;
    
            hence thesis by
    A23,
    Th17,
    TREES_4:def 4;
    
          end;
    
            suppose
    
            
    
    A24: n 
    =  
    0 ; 
    
            take tsg9 = (S
    -tree rtO); 
    
            
    
            
    
    A25: tsg9 
    = (S 
    -tree  
    <*rtO*>) by
    TREES_4:def 5;
    
            (
    height ( 
    dom tsg9)) 
    = ( 
    height ( 
    ^ ( 
    dom rtO))) by 
    TREES_4: 13
    
            .= ((
    height ( 
    dom rtO)) 
    + 1) by 
    TREES_3: 80
    
            .= (n
    + 1) by 
    A24,
    TREES_1: 42,
    TREES_4: 3;
    
            hence thesis by
    A25,
    Th17,
    TREES_4:def 4;
    
          end;
    
        end;
    
      end;
    
      for n be
    Nat holds 
    P[n] from
    NAT_1:sch 2(
    A17,
    A18);
    
      then ex tsg be
    Element of ( 
    TS PN) st (tsg 
    .  
    {} ) 
    = S & ( 
    PostTraversal tsg) 
    = ( 
    <*
    0 *> 
    ^ (n 
    |-> 1)) by 
    A16;
    
      hence thesis by
    A7,
    A15;
    
    end;