MSAFREE5

index · ← BALLOT_1 · RVSUM_3 →
:: Term Context
::  by Grzegorz Bancerek
::
:: Received June 13, 2014
:: Copyright (c) 2014-2026 Association of Mizar Users
::           (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.

environ

 vocabularies XBOOLE_0, STRUCT_0, RELAT_1, FUNCT_1, PBOOLE, MSUALG_1, MSAFREE4,
      MSAFREE, CIRCUIT2, REWRITE1, MSUALG_4, ZF_MODEL, MSUALG_6, SUBSET_1,
      NAT_1, FUNCOP_1, MARGREL1, PARTFUN1, FUNCT_4, MOD_4, FINSEQ_1, FUNCT_7,
      ARYTM_3, XXREAL_0, RLTOPSP1, NUMBERS, CARD_1, TARSKI, TREES_4, MSATERM,
      CARD_3, HURWITZ, MSAFREE5, ZFMISC_1, FINSET_1, QC_LANG1, GLIB_000,
      PROB_2, FINSEQ_4, TREES_2, ABCMIZ_A, ABCMIZ_1, PRE_POLY, FINSEQ_2,
      TREES_3, AOFA_000, ORDINAL1, TREES_1, MEMBERED, MEMBER_1, FUNCT_6, CAT_1,
      REALSET1, AOFA_A01, VALUED_2, MSUALG_2, MCART_1, ORDINAL4, MSUALG_3,
      MATRIX_7, CARD_2, MATROID0, ORDINAL6, GROUP_6, TREES_A, AOFA_A00,
      ZF_LANG1, FACIRC_1;
 notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, XTUPLE_0, DOMAIN_1, FINSET_1,
      RELAT_1, RELSET_1, FUNCT_1, PARTFUN1, FUNCT_2, STRUCT_0, FUNCOP_1,
      ORDINAL1, FINSEQ_1, FINSEQ_2, FINSEQ_4, FUNCT_7, FUNCT_4, MCART_1,
      CARD_2, TREES_1, TREES_2, FUNCT_6, TREES_3, TREES_4, CARD_3, MATRIX_7,
      XXREAL_0, XXREAL_2, XCMPLX_0, NUMBERS, WSIERP_1, MEMBERED, ORDINAL6,
      REWRITE1, PBOOLE, MSUALG_1, MSUALG_2, MSUALG_3, MSUALG_4, MSUALG_6,
      MSAFREE, MSAFREE1, MSATERM, CATALG_1, ABCMIZ_1, ABCMIZ_A, AOFA_A00,
      AOFA_A01, MSAFREE3, CARD_1, MSAFREE4;
 constructors RELSET_1, FINSEQ_4, DOMAIN_1, CARD_2, WSIERP_1, MSAFREE1,
      AOFA_A01, CATALG_1, ABCMIZ_A, ORDINAL6, RECDEF_1, XFAMILY, SEQ_4,
      MSUALG_3;
 registrations RELSET_1, FUNCOP_1, FINSEQ_1, FINSEQ_2, XCMPLX_0, SUBSET_1,
      CARD_1, XXREAL_0, RELAT_1, FUNCT_1, FUNCT_7, PBOOLE, STRUCT_0, MSUALG_1,
      MSUALG_3, MSUALG_9, INSTALG1, CATALG_1, XBOOLE_0, MSAFREE, MSAFREE1,
      MSAFREE3, MSAFREE4, ZFMISC_1, FINSET_1, TREES_2, TREES_3, CARD_3,
      XXREAL_2, MEMBERED, XTUPLE_0, FOMODEL0, RAMSEY_1, REWRITE1, INT_1,
      ABCMIZ_1, MSUALG_2, ALGSPEC1, VALUED_0, NAT_1, ORDINAL6, FINSEQ_6;
 requirements BOOLE, SUBSET, NUMERALS, REAL, ARITHM;
 definitions TARSKI, XBOOLE_0, RELAT_1, FUNCT_1, FUNCT_2, FINSET_1, FUNCOP_1,
      ORDINAL1, FINSEQ_1, FINSEQ_4, PBOOLE, TREES_1, TREES_2, TREES_3, TREES_4,
      MEMBERED, MSUALG_6, ABCMIZ_1;
 equalities TARSKI, RELAT_1, MSAFREE, FINSEQ_1, TREES_2, TREES_4, ORDINAL1,
      MSUALG_1, AOFA_A01;
 expansions TARSKI, REWRITE1;
 theorems XBOOLE_1, ZFMISC_1, RELAT_1, NAT_1, FINSEQ_3, FUNCT_2, FUNCT_7,
      REWRITE1, MSUALG_6, MSAFREE3, ORDINAL1, XREAL_1, INSTALG1, MSAFREE,
      HILBERT2, FINSEQ_4, FUNCT_4, CARD_3, MCART_1, TREES_4, XTUPLE_0,
      SUBSET_1, XBOOLE_0, MSAFREE4, FUNCOP_1, TARSKI, CARD_5, PARTFUN1, PROB_2,
      PBOOLE, MSATERM, FINSET_1, MSAFREE2, MSUALG_3, ABCMIZ_A, FUNCT_1,
      TREES_1, FINSEQ_1, FINSEQ_5, FINSEQ_2, CARD_1, XXREAL_0, TREES_3,
      MATRIX_7, CARD_2, RVSUM_1, ORDINAL6, XXREAL_2, FUNCT_6, SIMPLEX0,
      POLYNOM3, EXTENS_1, WAYBEL26, EXCHSORT, TREES_2, FINSEQ_6, TREES_9,
      GRFUNC_1, HUFFMAN1;
 schemes NAT_1, FUNCT_1, FUNCT_2, FINSEQ_1, RECDEF_1, CLASSES1, FRAENKEL,
      MSUALG_6, MSATERM, MSAFREE4;

begin :: Preliminary

definition
  let S be non empty non void ManySortedSign;
  let A be non-empty MSAlgebra over S;
  let s be SortSymbol of S;
  mode Element of A,s is Element of (the Sorts of A).s;
end;

reserve
  a,b for object, I,J for set, f for Function, R for Relation,
  i,j,n for Nat, m for (Element of NAT),
  S for non empty non void ManySortedSign,
  s,s1,s2 for SortSymbol of S,
  o for OperSymbol of S,
  X for non-empty ManySortedSet of the carrier of S,
  x,x1,x2 for (Element of X.s), x11 for (Element of X.s1),
  T for all_vars_including inheriting_operations free_in_itself
  (X,S)-terms MSAlgebra over S,
  g for Translation of Free(S,X),s1,s2,
  h for Endomorphism of Free(S,X);

definition
 let S,X; let T be all_vars_including (X,S)-terms MSAlgebra over S;
 let r be Element of T;
 func @r -> Element of Free(S,X) equals r;
 coherence by MSAFREE4:39;
end;

registration
  let S,X,T;
  cluster -> finite for Element of T;
  coherence
  proof
    let r be Element of T;
    @r = r;
    hence thesis;
  end;
end;

registration
  cluster natural-membered -> c=-linear for set;
  coherence
  proof
    let X be set;
    assume
A1: for x being object st x in X holds x is natural;
    let x,y be set; assume x in X & y in X;
    then reconsider a = x, b = y as Nat by A1;
    a,b are_c=-comparable by ORDINAL1:15;
    hence thesis;
  end;
end;

reserve
  r,r1,r2 for (Element of T),
  t,t1,t2 for (Element of Free(S,X));

definition
  let S;
  let A be MSAlgebra over S;
  let a;
  pred a in A means: ELEM: a in Union the Sorts of A;
end;

definition
  let a,b;
  attr b is a-different means: DIFF: b <> a;
end;

registration
  let I be non trivial set;
  let a;
  cluster a-different for Element of I;
  existence
  proof a is set by TARSKI:1;
    then consider i being Element of I such that
A1: i <> a by SUBSET_1:50;
    take i; thus i <> a by A1;
  end;
end;

theorem Th01:
  for t,t1 being Tree, p,q being FinSequence of NAT st p in t &
  q in t with-replacement(p,t1) holds (not p is_a_prefix_of q implies q in t) &
  for r being FinSequence of NAT st q = p^r holds r in t1
  proof
    let t,t1 be Tree;
    let p,q be FinSequence of NAT;
    assume Z0: p in t;
    assume Z1: q in t with-replacement(p,t1);
    thus (not p is_a_prefix_of q implies q in t)
    proof
      assume not p is_a_prefix_of q;
      then not ex r being FinSequence of NAT st r in t1 & q = p^r by TREES_1:1;
      hence q in t by Z0,Z1,TREES_1:def 9;
    end;
    let r be FinSequence of NAT;
    assume Z3: q = p^r;
    then p c= q by TREES_1:1;
    then p c< q or p = q & p = p^{} by XBOOLE_0:def 8,FINSEQ_1:34;
    then ex r being FinSequence of NAT st r in t1 & q = p^r
    by Z0,Z1,TREES_1:22,def 9;
    hence r in t1 by Z3,FINSEQ_1:33;
  end;

theorem Lem8:
  for p,q,r being FinSequence st p^q is_a_prefix_of r holds p is_a_prefix_of r
  proof
    let p,q,r be FinSequence;
    assume p^q is_a_prefix_of r;
    then consider n being FinSequence such that
A1: r = p^q^n by TREES_1:1;
    r = p^(q^n) by A1,FINSEQ_1:32;
    hence p is_a_prefix_of r by TREES_1:1;
  end;

theorem Lem8A:
  for p,q,r being FinSequence st p^q is_a_prefix_of p^r holds
  q is_a_prefix_of r
  proof
    let p,q,r be FinSequence;
    assume p^q is_a_prefix_of p^r;
    then consider n being FinSequence such that
A1: p^r = p^q^n by TREES_1:1;
    p^r = p^(q^n) by A1,FINSEQ_1:32;
    then r = q^n by FINSEQ_1:33;
    hence q is_a_prefix_of r by TREES_1:1;
  end;

theorem LemP:
  for p,q being FinSequence st i <= len p holds (p^q)|Seg i = p|Seg i
  proof
    let p,q be FinSequence;
    set D = (rng p)\/(rng q)\/{0};
    rng p c= (rng p)\/rng q & rng q c= (rng p)\/rng q by XBOOLE_1:7;
    then p is FinSequence of D & q is FinSequence of D & (p^q)|i = (p^q)|Seg i
    & p|Seg i = p|i by FINSEQ_1:def 4,XBOOLE_1:10;
    hence thesis by FINSEQ_5:22;
  end;

theorem Lem8B:
  for p,q,r being FinSequence st q is_a_prefix_of p^r holds
  q is_a_prefix_of p or p is_a_prefix_of q
  proof
    let p,q,r be FinSequence;
    given i such that
Z0: q = (p^r)|Seg i;
    per cases;
    suppose len p <= i;
      then consider j such that
A1:   i = (len p)+j by NAT_1:10;
      q = p^(r|Seg j) by Z0,A1,FINSEQ_6:14;
      hence thesis by TREES_1:1;
    end;
    suppose len p >= i;
      then q = p|Seg i by Z0,LemP;
      hence thesis by TREES_1:def 1;
    end;
  end;

definition
  let S;
  attr S is sufficiently_rich means: SR:
  for s ex o st s in rng the_arity_of o;
  attr S is growable means
  for X,n ex t st height dom t = n;
end;

definition
  let n,S;
  attr S is n-ary_oper_including means
  ex o st len the_arity_of o = n;
end;

registration
  let n;
  cluster n-ary_oper_including for non empty non void ManySortedSign;
  existence
  proof
    take S = ManySortedSign(#{0},{1},{1}-->In(n|->0,{0}*),{1}-->In(0,{0})#);
    take o = In(1, the carrier' of S);
A2: o = 1 & In(0,{0}) = 0 by TARSKI:def 1;
    n|->In(0,{0}) is FinSequence of {0};
    then n|->0 in {0}* by A2,FINSEQ_1:def 11;
    then the_arity_of o = n|->0 by SUBSET_1:def 8;
    hence len the_arity_of o = n by CARD_1:def 7;
  end;
end;

registration
  cluster sufficiently_rich for non empty non void ManySortedSign;
  existence
  proof set n = 1;
    take S = ManySortedSign(#{0},{1},{1}-->In(n|->0,{0}*),{1}-->In(0,{0})#);
    let s be SortSymbol of S;
    take o = In(1, the carrier' of S);
A1: 1 in {1} & 0 in {0} & s = 0 by TARSKI:def 1;
A2: o = 1 & In(0,{0}) = 0 by TARSKI:def 1;
    n|->In(0,{0}) is FinSequence of {0};
    then n|->0 in {0}* by A2,FINSEQ_1:def 11;
    then the_arity_of o = n|->0 = <*0*> by SUBSET_1:def 8,FINSEQ_2:59;
    hence s in rng the_arity_of o by A1,FINSEQ_1:39;
  end;
end;

definition
  let R;
  attr R is non-trivial means: NT:
  I in rng R implies I is non trivial;
  attr R is infinite-yielding means: INF:
  I in rng R implies I is infinite;
end;

registration
  cluster non-trivial -> non-empty for Relation;
  coherence
  proof
    let r be Relation;
    assume I in rng r implies I is non trivial;
    hence not {} in rng r;
  end;
  cluster infinite-yielding -> non-trivial for Relation;
  coherence;
end;

registration
  let I be set;
  cluster infinite-yielding for ManySortedSet of I;
  existence
  proof
    take f = I --> omega;
    let J be set;
    assume
A1: J in rng f;
    rng f c= {omega} by FUNCOP_1:13;
    hence thesis by A1,TARSKI:def 1;
  end;
end;

registration
  cluster infinite-yielding for FinSequence;
  existence
  proof
    take f = {};
    let I;
    assume I in rng f;
    hence thesis;
  end;
end;

registration
  let I be non empty set;
  let f be non-trivial ManySortedSet of I;
  let a be Element of I;
  cluster f.a -> non trivial;
  coherence by NT;
end;

registration
  let I be non empty set;
  let f be infinite-yielding ManySortedSet of I;
  let a be Element of I;
  cluster f.a -> infinite;
  coherence by INF;
end;

registration
  let S,X,o;
  cluster -> DTree-yielding for Element of Args(o,Free(S,X));
  coherence
  proof Free(S,X) = FreeMSA X by MSAFREE3:31;
    hence thesis;
  end;
end;

reserve
  Y for infinite-yielding ManySortedSet of the carrier of S,
  y,y1 for (Element of Y.s), y11 for (Element of Y.s1),
  Q for all_vars_including inheriting_operations free_in_itself
  (Y,S)-terms MSAlgebra over S,
  q,q1 for (Element of Args(o,Free(S,Y))),
  u,u1,u2 for (Element of Q),
  v,v1,v2 for (Element of Free(S,Y)),
  Z for non-trivial ManySortedSet of the carrier of S,
  z,z1 for (Element of Z.s),
  l,l1 for (Element of Free(S,Z)),
  R for all_vars_including inheriting_operations free_in_itself
  (Z,S)-terms MSAlgebra over S,
  k,k1 for Element of Args(o,Free(S,Z));

registration
  let p be FinSequence;
  reduce p ^ {} to p;
  reducibility by FINSEQ_1:34;
  reduce {} ^ p to p;
  reducibility by FINSEQ_1:34;
end;

definition
  let I be FinSequence-membered set;
  let p be FinSequence;
  func p^^I -> set equals {p^q where q is Element of I: q in I};
  coherence;
end;

registration
  let I be FinSequence-membered set;
  let p be FinSequence;
  cluster p^^I -> FinSequence-membered;
  coherence
  proof
    let J be object; assume J in p^^I;
    then ex q being Element of I st J = p^q & q in I;
    hence thesis;
  end;
end;

registration
  let f be FinSequence, E be empty set;
  reduce f^^E to E;
  reducibility
  proof
    reconsider X = {} as FinSequence-membered set;
    thus f^^E c= E
    proof
      let a; assume a in f^^E;
      then ex p being Element of X st a = f^p & p in X;
      hence thesis;
    end;
    thus thesis;
  end;
end;

registration
  let p be DTree-yielding FinSequence;
  let a;
  cluster p.a -> Relation-like;
  coherence;
end;

registration
  cluster Tree-like -> FinSequence-membered for set;
  coherence
  proof
    let A be set;
    assume A is Tree-like;
    then A c= NAT* by TREES_1:def 3;
    hence thesis;
  end;
end;

registration
  let p be DTree-yielding FinSequence;
  let a;
  cluster dom (p.a) -> FinSequence-membered;
  coherence
  proof reconsider a as set by TARSKI:1;
    a in dom p or a nin dom p;
    then per cases by FUNCT_1:def 2,TREES_3:24;
    suppose p.a is DecoratedTree;
      then reconsider t = p.a as DecoratedTree;
      dom t is Tree;
      hence thesis;
    end;
    suppose p.a is empty;
      then reconsider t = p.a as empty set;
      dom t is empty;
      hence thesis;
    end;
  end;
end;

registration
  let t,t1 be Tree;
  reduce t1 with-replacement(<*>NAT, t) to t;
  reducibility
  proof
    let p be FinSequence of NAT;
A3: {} in t1 by TREES_1:22;
    then
A2: p in t1 with-replacement(<*>NAT, t) iff p in t1 &
    not {} is_a_proper_prefix_of p or
    ex r being FinSequence of NAT st r in t & p = {}^r by TREES_1:def 9;
    hereby assume p in t1 with-replacement(<*>NAT, t);
      then per cases by A2,XBOOLE_1:61;
      suppose {} = p;
        hence p in t by TREES_1:22;
      end;
      suppose ex r being FinSequence of NAT st r in t & p = {}^r;
        hence p in t;
      end;
    end;
    assume p in t;
    then p in t & p = {}^p;
    hence thesis by A3,TREES_1:def 9;
  end;
end;

registration
  let d,d1 be DecoratedTree;
  reduce d1 with-replacement(<*>NAT, d) to d;
  reducibility
  proof
A0: <*>NAT in dom d1 by TREES_1:22;
    then
A1: dom (d1 with-replacement(<*>NAT, d))
    = dom d1 with-replacement(<*>NAT, dom d) by TREES_2:def 11;
    hence dom (d1 with-replacement(<*>NAT, d)) = dom d;
    let p being Element of dom (d1 with-replacement(<*>NAT, d));
    not {} is_a_prefix_of p & (d1 with-replacement(<*>NAT, d)).p = d1.p or
    ex r being FinSequence of NAT st r in dom d & p = {}^r &
    (d1 with-replacement(<*>NAT, d)).p = d.r by A0,A1,TREES_2:def 11;
    hence (d1 with-replacement(<*>NAT, d)).p = d.p;
  end;
end;

theorem Th124:
  for xi,w being FinSequence of NAT
  for p,q being Tree-yielding FinSequence
  for d,t being Tree
  st i < len p & xi = <*i*>^w & d = p.(i+1) &
     q = p+*(i+1,d with-replacement (w, t)) & xi in tree p
  holds (tree p) with-replacement (xi, t) = tree q
  proof
    let xi,w be FinSequence of NAT;
    let p,q be Tree-yielding FinSequence;
    let d,t be Tree;
    assume Z0: i < len p;
    assume Z1: xi = <*i*>^w;
    assume Z2: d = p.(i+1);
    assume Z3: q = p+*(i+1,d with-replacement (w, t));
    assume Z4: xi in tree p;
    consider j being Nat, u being FinSequence such that
A2: j < len p & u in p.(j+1) & xi = <*j*>^u by Z1,Z4,TREES_3:def 15;
A3: i = xi.1 = j & w = u by Z1,A2,FINSEQ_1:41,HILBERT2:2;
    dom p = dom q by Z3,FUNCT_7:30;
    then
A4: len p = len q by FINSEQ_3:29;
    1 <= i+1 <= len p by Z0,NAT_1:12,13;
    then
AA: i+1 in dom p by FINSEQ_3:25;
    then
A7: q.(i+1) = d with-replacement(w, t) by Z3,FUNCT_7:31;
    let n be FinSequence of NAT;
    hereby assume n in (tree p) with-replacement (xi, t);
      then per cases by Z4,TREES_1:def 9;
      suppose
A8:     n in tree p & not xi is_a_proper_prefix_of n;
        then per cases by TREES_3:def 15;
        suppose n = {};
          hence n in tree q by TREES_1:22;
        end;
        suppose ex j being Nat, u being FinSequence st
          j < len p & u in p.(j+1) & n = <*j*>^u;
          then consider j being Nat, u being FinSequence such that
A9:       j < len p & u in p.(j+1) & n = <*j*>^u;
          per cases;
          suppose j+1 <> i+1;
            then q.(j+1) = p.(j+1) by Z3,FUNCT_7:32;
            hence n in tree q by A4,A9,TREES_3:def 15;
          end;
          suppose
B1:         j = i;
            xi = n or not xi c= n by A8,XBOOLE_0:def 8;
            then
B2:         not w is_a_proper_prefix_of u
            by Z1,A9,B1,HILBERT2:2,FINSEQ_6:13,XBOOLE_0:def 8;
            u is Element of d by Z2,A9,B1;
            then u in d with-replacement(w,t) by A2,A3,Z2,B2,TREES_1:def 9;
            hence n in tree q by A4,A7,A9,B1,TREES_3:def 15;
          end;
        end;
      end;
      suppose ex r being FinSequence of NAT st r in t & n = xi^r;
        then consider r being FinSequence of NAT such that
A1:     r in t & n = xi^r;
        w^r in d with-replacement (w,t) by A1,A2,A3,Z2,TREES_1:def 9;
        then <*i*>^(w^r) in tree q by Z0,A4,A7,TREES_3:def 15;
        hence n in tree q by Z1,A1,FINSEQ_1:32;
      end;
    end;
    assume n in tree q;
    then per cases by TREES_3:def 15;
    suppose n = {};
      hence thesis by TREES_1:22;
    end;
    suppose ex i st ex w being FinSequence st
      i < len q & w in q.(i+1) & n = <*i*>^w;
      then consider j being Nat, u being FinSequence such that
C1:   j < len q & u in q.(j+1) & n = <*j*>^u;
      per cases;
      suppose
C5:     i+1 <> j+1; then
        q.(j+1) = p.(j+1) & i <> j by Z3,FUNCT_7:32;
        then
C3:     n in tree p by A4,C1,TREES_3:def 15;
        not <*i*> c= <*j*>^u by C5,TREES_1:50;
        then not xi c< n by Z1,C1,Lem8,XBOOLE_0:def 8;
        hence thesis by Z4,C3,TREES_1:def 9;
      end;
      suppose
C4:     i = j;
        then reconsider u as Element of d with-replacement(w,t)
        by AA,C1,Z3,FUNCT_7:31;
        per cases by A2,A3,Z2,TREES_1:def 9;
        suppose u in d & not w c< u;
          then n in tree p & not xi c< n
          by Z1,Z2,A4,C1,C4,TREES_1:49,TREES_3:def 15;
          hence thesis by Z4,TREES_1:def 9;
        end;
        suppose ex r being FinSequence of NAT st r in t & u = w^r;
          then consider r being FinSequence of NAT such that
C5:       r in t & u = w^r;
          n = xi^r by Z1,C1,C4,C5,FINSEQ_1:32;
          hence thesis by Z4,C5,TREES_1:def 9;
        end;
      end;
    end;
  end;

registration
  let F be Function-yielding Function;
  let f be Function;
  let a;
  cluster F+*(a,f) -> Function-yielding;
  coherence
  proof
    let b; assume b in dom(F+*(a,f));
    then
A1: b in dom F by FUNCT_7:30;
    per cases;
    suppose a = b;
      hence thesis by A1,FUNCT_7:31;
    end;
    suppose a <> b;
      then (F+*(a,f)).b = F.b by FUNCT_7:32;
      hence thesis;
    end;
  end;
end;

theorem Lem12:
  for F being Function-yielding Function, f being Function holds
  doms(F+*(a,f)) = (doms F)+*(a, dom f)
  proof
    let F be Function-yielding Function;
    let f be Function;
A1: dom doms(F+*(a,f)) = dom (F+*(a,f)) = dom F = dom doms F
    = dom((doms F)+*(a, dom f)) by FUNCT_6:def 2,FUNCT_7:30;
    hence dom doms(F+*(a,f)) = dom((doms F)+*(a, dom f));
    let b; assume
A2: b in dom doms(F+*(a,f));
    then
A3: doms(F+*(a,f)).b = dom ((F+*(a,f)).b) by A1,FUNCT_6:def 2;
    per cases;
    suppose
A4:   a = b;
      hence doms(F+*(a,f)).b = dom f by A1,A2,A3,FUNCT_7:31
      .= ((doms F)+*(a, dom f)).b by A1,A2,A4,FUNCT_7:31;
    end;
    suppose
A4:   a <> b;
      hence doms(F+*(a,f)).b = dom (F.b) by A3,FUNCT_7:32
      .= (doms F).b by A1,A2,FUNCT_6:def 2
      .= ((doms F)+*(a, dom f)).b by A4,FUNCT_7:32;
    end;
  end;

theorem Th123:
  for xi,w being FinSequence of NAT
  for p,q being DTree-yielding FinSequence
  for d,t being DecoratedTree
  st i < len p & xi = <*i*>^w & d = p.(i+1) &
     q = p+*(i+1,d with-replacement (w, t)) & xi in tree doms p
  holds (a-tree p) with-replacement (xi, t) = a-tree q
  proof
    let xi,w be FinSequence of NAT;
    let p,q be DTree-yielding FinSequence;
    let d,t be DecoratedTree;
    assume Z0: i < len p;
    assume Z1: xi = <*i*>^w;
    assume Z2: d = p.(i+1);
    assume Z3: q = p+*(i+1,d with-replacement (w, t));
    assume Z4: xi in tree doms p;
A1: dom(a-tree p) = tree doms p & dom(a-tree q) = tree doms q by TREES_4:10;
AA: doms q = (doms p)+*(i+1,dom(d with-replacement(w,t))) by Z3,Lem12;
    consider j being Nat, u being FinSequence such that
A2: j < len doms p & u in (doms p).(j+1) & xi = <*j*>^u
    by Z1,Z4,TREES_3:def 15;
A3: i = xi.1 = j & w = u by Z1,A2,FINSEQ_1:41,HILBERT2:2;
    1 <= i+1 <= len p by Z0,NAT_1:12,13;
    then i+1 in dom p by FINSEQ_3:25;
    then
A4: w in dom d = (doms p).(i+1) by Z2,A2,A3,FUNCT_6:def 2;
    then dom(d with-replacement(w,t)) = dom d with-replacement(w,dom t)
    by TREES_2:def 11;
    then
A5: dom((a-tree p) with-replacement (xi, t))
    = (tree doms p) with-replacement (xi, dom t) = tree doms q
    by Z4,A1,AA,A2,A3,A4,Th124,TREES_2:def 11;
    hence dom((a-tree p) with-replacement (xi, t)) = dom (a-tree q)
    by TREES_4:10;
A8: dom doms q = dom q = dom p = dom doms p by Z3,FUNCT_6:def 2,FUNCT_7:30;
    then
A7: len doms q = len q = len p = len doms p by FINSEQ_3:29;
    let nu be Element of dom((a-tree p) with-replacement (xi, t));
    per cases by A5,TREES_3:def 15;
    suppose
A6:   nu = {};
      then not ex r being FinSequence of NAT st
      r in dom t & nu = xi^r & ((a-tree p) with-replacement (xi, t)).nu = t.r
      by Z1;
      hence ((a-tree p) with-replacement (xi, t)).nu = (a-tree p).nu
      by Z4,A1,A5,TREES_2:def 11
      .= a by A6,TREES_4:def 4
      .= (a-tree q).nu by A6,TREES_4:def 4;
    end;
    suppose ex j st ex r being FinSequence st j < len doms q &
      r in (doms q).(j+1) & nu = <*j*>^r;
      then consider j being Nat,r being FinSequence such that
A6:   j < len doms q & r in (doms q).(j+1) & nu = <*j*>^r;
AB:   1 <= j+1 <= len p by A6,A7,NAT_1:12,13;
      then
A9:   j+1 in dom p by FINSEQ_3:25;
      per cases;
      suppose
A10:    j <> i;
        then j+1 <> i+1; then
A11:    dom (q.(j+1)) = (doms q).(j+1) = (doms p).(j+1) = dom (p.(j+1)) &
        q.(j+1) = p.(j+1) by Z3,AA,A8,AB,FINSEQ_3:25,FUNCT_7:32,FUNCT_6:def 2;
        reconsider t1 = p.(j+1) as DecoratedTree by A9,TREES_3:24;
        not xi c= nu by A6,Z1,Lem8,A10,TREES_1:50;
        then not ex r being FinSequence of NAT st
        r in dom t & nu = xi^r & ((a-tree p) with-replacement (xi, t)).nu = t.r
        by TREES_1:1;
        hence ((a-tree p) with-replacement (xi, t)).nu = (a-tree p).nu
        by Z4,A1,A5,TREES_2:def 11
        .= t1.r by A6,A7,A11,TREES_4:12
        .= (a-tree q).nu by A6,A7,A11,TREES_4:12;
      end;
      suppose
A10:    j = i;
        then
A11:    dom (q.(j+1)) = (doms q).(j+1) & (doms p).(j+1) = dom (p.(j+1)) &
        q.(j+1) = d with-replacement(w,t)
        by Z3,A8,AB,FINSEQ_3:25,FUNCT_7:31,FUNCT_6:def 2;
        then reconsider r as Element of dom d with-replacement(w,dom t)
        by A6,Z2,A2,A3,A10,TREES_2:def 11;
        per cases;
        suppose
A12:      w c= r;
          then consider r2 being FinSequence of NAT such that
A13:      r2 in dom t & r = w^r2 & (d with-replacement(w,t)).r = t.r2
          by Z2,A2,A3,A10,A11,TREES_2:def 11;
          xi c= nu by Z1,A6,A10,A12,FINSEQ_6:13;
          then consider r3 being FinSequence of NAT such that
A15:      r3 in dom t & nu = xi^r3 & ((a-tree p) with-replacement(xi,t)).nu
          = t.r3 by Z4,A5,A1,TREES_2:def 11;
          nu = xi^r2 by Z1,A6,A10,A13,FINSEQ_1:32;
          then ((a-tree p) with-replacement (xi, t)).nu = t.r2
          by A15,FINSEQ_1:33;
          hence thesis by A13,A6,A7,A11,TREES_4:12;
        end;
        suppose
A12:      not w c= r;
          then
A13:      not ex r2 being FinSequence of NAT st
          r2 in dom t & r = w^r2 & (d with-replacement (w, t)).r = t.r2
          by TREES_1:1;
          not ex r2 being FinSequence of NAT st r2 in dom t & r = w^r2
          by A12,TREES_1:1;
          then
A15:      r in dom d by Z2,A2,A3,A10,A11,TREES_1:def 9;
          not ex r being FinSequence of NAT st r in dom t &
          nu = xi^r & ((a-tree p) with-replacement (xi, t)).nu = t.r
          by A12,A10,A6,Z1,Lem8A,TREES_1:1;
          hence ((a-tree p) with-replacement (xi, t)).nu = (a-tree p).nu
          by Z4,A1,A5,TREES_2:def 11
          .= d.r by Z2,A15,A6,A7,A10,TREES_4:12
          .= (d with-replacement(w,t)).r by A13,A4,TREES_2:def 11
          .= (a-tree q).nu by A6,A7,A11,TREES_4:12;
        end;
      end;
    end;
  end;

theorem
  for a being set, w being DTree-yielding FinSequence holds
  dom (a-tree w) = {{}} \/ union {<*i*>^^dom (w.(i+1)): i < len w}
  proof let a be set;
    let w be DTree-yielding FinSequence;
    set A = {<*i*>^^dom (w.(i+1)): i < len w};
    thus dom (a-tree w) c= {{}} \/ union A
    proof
      let b; reconsider x = b as set by TARSKI:1;
      assume b in dom (a-tree w);
      then per cases by TREES_4:11;
      suppose x = {};
        then x in {{}} by TARSKI:def 1;
        hence thesis by XBOOLE_0:def 3;
      end;
      suppose ex i st ex T being DecoratedTree, q being Node of T st
        i < len w & T = w.(i+1) & x = <*i*>^q;
        then consider i being Nat, T being DecoratedTree, q being Node of T
        such that
A1:     i < len w & T = w.(i+1) & x = <*i*>^q;
        x in <*i*>^^dom T & <*i*>^^dom T in A by A1;
        then x in union A by TARSKI:def 4;
        hence thesis by XBOOLE_0:def 3;
      end;
    end;
    let b; reconsider x = b as set by TARSKI:1;
    assume b in {{}} \/ union A;
    then per cases by XBOOLE_0:def 3;
    suppose x in {{}};
      then x = {};
      hence thesis by TREES_4:11;
    end;
    suppose x in union A;
      then consider I such that
A2:   x in I & I in A by TARSKI:def 4;
      consider i such that
A3:   I = <*i*>^^dom (w.(i+1)) & i < len w by A2;
      consider q being Element of dom (w.(i+1)) such that
A4:   x = <*i*>^q & q in dom (w.(i+1)) by A2,A3;
      1 <= i+1 <= len w by A3,NAT_1:11,13;
      then i+1 in dom w by FINSEQ_3:25;
      then w.(i+1) in rng w by FUNCT_1:def 3;
      then reconsider T = w.(i+1) as DecoratedTree;
      q in dom T;
      hence thesis by A3,A4,TREES_4:11;
    end;
  end;

registration
  let p be DTree-yielding FinSequence;
  let a,I;
  cluster (p.a)"I -> FinSequence-membered;
  coherence
  proof
    (p.a)"I c= dom (p.a) by RELAT_1:132;
    hence thesis;
  end;
end;

theorem Th1:
  for I being FinSequence-membered set, p being FinSequence holds
  card (p^^I) = card I
  proof
    let I be FinSequence-membered set;
    let p be FinSequence;
    deffunc F(Element of I) = p^ $1;
    consider f such that
A1: dom f = I & for q being Element of I st q in I holds f.q = F(q)
    from CLASSES1:sch 2;
A2: rng f = p^^I
    proof
      thus rng f c= p^^I
      proof let a; reconsider x = a as set by TARSKI:1;
        assume a in rng f;
        then consider b being object such that
A3:     b in dom f & x = f.b by FUNCT_1:def 3;
        reconsider b as Element of I by A1,A3;
        a = F(b) by A1,A3;
        hence thesis by A1,A3;
      end;
      let a; reconsider x = a as set by TARSKI:1;
      assume a in p^^I;
      then consider q being Element of I such that
A4:   a = p^q & q in I;
      x = f.q by A1,A4;
      hence thesis by A1,A4,FUNCT_1:def 3;
    end;
    f is one-to-one
    proof
      let a,b be object;
      assume
A5:   a in dom f & b in dom f;
      then reconsider a,b as Element of I by A1;
      f.a = p^a & f.b = p^b by A1,A5;
      hence thesis by FINSEQ_1:33;
    end;
    hence card (p^^I) = card I by A1,A2,CARD_1:70;
  end;

registration
  let I be finite FinSequence-membered set;
  let p be FinSequence;
  cluster p^^I -> finite;
  coherence
  proof
    card (p^^I) = card I by Th1;
    hence thesis;
  end;
end;

theorem Th2:
  for I,J being FinSequence-membered set, p,q being FinSequence
  st len p = len q & p <> q holds p^^I misses q^^J
  proof
    let I,J be FinSequence-membered set;
    let p,q be FinSequence;
    assume Z0: len p = len q;
    assume Z1: p <> q;
    assume p^^I meets q^^J;
    then consider a being object such that
A1: a in p^^I & a in q^^J by XBOOLE_0:3;
    consider p1 being Element of I such that
A2: a = p^p1 & p1 in I by A1;
    consider q1 being Element of J such that
A3: a = q^q1 & q1 in J by A1;
    dom p = Seg len p & dom q = Seg len q by FINSEQ_1:def 3;
    then p = (p^p1)|dom p = q by A2,A3,Z0,FINSEQ_1:21;
    hence thesis by Z1;
  end;

registration
  let i;
  reduce card i to i;
  reducibility;
  let j;
  identify i +` j with i+j;
  compatibility
  proof
    card i = i & card j = j & card(i+j) = i+j;
    hence thesis by CARD_2:38;
  end;
end;

scheme CardUnion {I(object) -> set, f() -> FinSequence of NAT}:
  card union {I(i): i < len f()} = Sum f()
  provided
A1: for i,j st i < len f() & j < len f() & i <> j holds I(i) misses I(j) and
A2: for i st i < len f() holds card I(i) = f().(i+1)
  proof
    set A = {I(i): i < len f()};
    defpred P[Nat] means
    $1 <= len f() implies for f being FinSequence of NAT st len f = $1 &
    for i st i < $1 holds card I(i) = f.(i+1)
    holds card union {I(i): i < $1} = Sum f;
A3: P[0]
    proof assume 0 <= len f();
      let f be FinSequence of NAT;
      assume len f = 0;
      then reconsider f as empty FinSequence of NAT;
      {I(i): i < 0} c= {}
      proof let a; assume a in {I(i): i < 0};
        then ex i st a = I(i) & i < 0;
        hence thesis;
      end;
      then {I(i): i < 0} = {} = union {} & Sum f = 0
      by ZFMISC_1:2,RVSUM_1:72;
      hence thesis;
    end;
A4: P[n] implies P[n+1]
    proof assume
A5:   P[n];
      assume
B0:   n+1 <= len f();
      then
B1:   n < len f() by NAT_1:13;
      let f be FinSequence of NAT; assume
A6:   len f = n+1 &
      for i st i < n+1 holds card I(i) = f.(i+1);
      then consider f1 being FinSequence of NAT, j being Element of NAT
      such that
A8:   f = f1^<*j*> by FINSEQ_2:19;
B5:   n < n+1 by NAT_1:13;
B6:   len f = len f1 + 1 by A8,FINSEQ_2:16;
B2:   for i st i < n holds card I(i) = f1.(i+1)
      proof let i; assume
D1:     i < n; then
        1 <= i+1 <= n by NAT_1:11,13;
        then i+1 in dom f1 by B6,A6,FINSEQ_3:25;
        then f.(i+1) = f1.(i+1) & i < n+1
        by D1,A8,NAT_1:13,FINSEQ_1:def 7;
        hence thesis by A6;
      end;
A7:   j = f.(n+1) = card I(n) by B6,B5,A6,A8,FINSEQ_1:42;
B3:   union {I(i) where i: i < n} misses I(n)
      proof
        assume union {I(i) where i: i < n} meets I(n);
        then consider a being object such that
C1:     a in union {I(i) where i: i < n} & a in I(n) by XBOOLE_0:3;
        consider J such that
C2:     a in J & J in {I(i) where i: i < n} by C1,TARSKI:def 4;
        consider i such that
C3:     J = I(i) & i < n by C2;
        i < len f() by B1,C3,XXREAL_0:2;
        hence thesis by A1,B1,C1,C2,C3,XBOOLE_0:3;
      end;
      {I(i) where i: i < n+1} = {I(i) where i: i < n} \/ {I(n)}
      proof
        thus {I(i) where i: i < n+1} c= {I(i) where i: i < n} \/ {I(n)}
        proof
          let a; assume a in {I(i) where i: i < n+1};
          then consider i such that
C4:       a = I(i) & i < n+1;
          i <= n by C4,NAT_1:13;
          then i < n or i = n by XXREAL_0:1;
          then a in {I(j) where j: j < n} or a in {I(n)} by C4,TARSKI:def 1;
          hence thesis by XBOOLE_0:def 3;
        end;
        let a;
        assume a in {I(i) where i: i < n} \/ {I(n)};
        then per cases by XBOOLE_0:def 3;
        suppose a in {I(i) where i: i < n};
          then consider i such that
C5:       a = I(i) & i < n;
          i < n+1 by NAT_1:13,C5;
          hence thesis by C5;
        end;
        suppose a in {I(n)};
          then a = I(n) by TARSKI:def 1;
          hence thesis by B5;
        end;
      end;
      then union {I(i) where i: i < n+1}
      = union {I(i) where i: i < n} \/ union {I(n)} by ZFMISC_1:78
      .= union {I(i) where i: i < n} \/ I(n);
      hence card union {I(i) where i: i < n+1}
      = card union {I(i) where i: i < n} +` card I(n) by B3,CARD_2:35
      .= Sum f1 +` j by A7,A5,B0,B2,B6,A6,NAT_1:13
      .= Sum f by A8,RVSUM_1:74;
    end;
    P[n] from NAT_1:sch 2(A3,A4);
    hence thesis by A2;
  end;

registration
  let f be FinSequence;
  cluster {f} -> FinSequence-membered;
  coherence
  proof
    let a; assume a in {f};
    hence thesis by TARSKI:def 1;
  end;
end;

theorem Th6:
  for f,g being FinSequence holds f^^{g} = {f^g}
  proof
    let f,g be FinSequence;
    thus f^^{g} c= {f^g}
    proof
      let a; assume a in f^^{g};
      then consider p being Element of {g} such that
A2:   a = f^p & p in {g};
      p = g by TARSKI:def 1;
      hence thesis by A2,TARSKI:def 1;
    end;
    let a; assume a in {f^g};
    then a = f^g & g in {g} by TARSKI:def 1;
    hence thesis;
  end;

theorem Th18:
  for I,J being FinSequence-membered set
  for f being FinSequence holds I c= J iff f^^I c= f^^J
  proof
    let I,J be FinSequence-membered set;
    let f be FinSequence;
    thus I c= J implies f^^I c= f^^J
    proof assume
A1:   I c= J;
      let a; assume a in f^^I;
      then ex b being Element of I st a = f^b & b in I;
      hence a in f^^J by A1;
    end;
    assume
A2: f^^I c= f^^J;
    let a; assume
A3: a in I;
    then reconsider a as FinSequence;
    f^a in f^^I by A3;
    then f^a in f^^J by A2;
    then consider b being Element of J such that
A4: f^a = f^b & b in J;
    thus thesis by A4,FINSEQ_1:33;
  end;

reserve c,c1,c2 for set, d,d1 for DecoratedTree;

theorem
  Leaves elementary_tree 0 = {{}} by TREES_1:29,HUFFMAN1:15;

registration
  sethood of Tree
  proof
    take bool (NAT*);
    let d be Tree;
    d c= NAT* by TREES_1:def 3;
    hence thesis;
  end;
end;

theorem ThL0:
  for p being non empty Tree-yielding FinSequence holds
  Leaves tree p = {<*i*>^q where i where q is FinSequence of NAT,
  d is Tree: q in Leaves d & i+1 in dom p & d = p.(i+1)}
  proof
    let p be non empty Tree-yielding FinSequence;
    set i0 = the Element of dom p;
    reconsider d0 = p.i0 as Tree by TREES_3:22;
    consider j such that
A0: i0 = 1+j by NAT_1:10,FINSEQ_3:25;
    i0 <= len p by FINSEQ_3:25;
    then
A3: j < len p & <*>NAT in d0 by A0,NAT_1:13,TREES_1:22;
A2: <*j*>^({} qua FinSequence) in tree p by A0,A3,TREES_3:def 15;
    thus Leaves tree p c= {<*i*>^q where i where q is FinSequence of NAT,
    d is Tree: q in Leaves d & i+1 in dom p & d = p.(i+1)}
    proof let a; reconsider x = a as set by TARSKI:1;
      assume
A1:   a in Leaves tree p; then reconsider x = a as Element of tree p;
      per cases by TREES_3:def 15;
      suppose x = {};
        then not {} is_a_proper_prefix_of <*j*> by A1,A2,TREES_1:def 5;
        hence thesis by XBOOLE_1:61;
      end;
      suppose
        ex i st ex q being FinSequence st i < len p & q in p.(i+1) &
        x = <*i*>^q;
        then consider i being Nat, q being FinSequence such that
A2:     i < len p & q in p.(i+1) & x = <*i*>^q;
        1 <= i+1 <= len p by A2,NAT_1:11,13;
        then
AB:     i+1 in dom p & p is Tree-yielding by FINSEQ_3:25;
        then p.(i+1) in rng p & rng p is constituted-Trees
        by FUNCT_1:def 3,TREES_3:def 9;
        then reconsider p1 = p.(i+1) as Tree;
        reconsider q0 = q as Element of p1 by A2;
        now assume
AA:       q0 nin Leaves p1;
          consider r being FinSequence of NAT such that
A3:       r in p1 & q0 is_a_proper_prefix_of r by AA,TREES_1:def 5;
          consider w being FinSequence such that
A5:       r = q^w by A3,XBOOLE_0:def 8,TREES_1:1;
          <*i*>^r = <*i*>^q^w by A5,FINSEQ_1:32;
          then <*i*>^q is_a_prefix_of <*i*>^r & <*i*>^q <> <*i*>^r
          by A3,FINSEQ_1:33,TREES_1:1;
          then x is_a_proper_prefix_of <*i*>^r & <*i*>^r in tree p
          by A2,A3,XBOOLE_0:def 8,TREES_3:def 15;
          hence contradiction by A1,TREES_1:def 5;
        end;
        hence thesis by A2,AB;
      end;
    end;
    let x be object; assume
    x in {<*i*>^q where i where q is FinSequence of NAT,
    d is Tree: q in Leaves d & i+1 in dom p & d = p.(i+1)};
    then consider i being Nat, q being FinSequence of NAT, d being Tree
    such that
B1: x = <*i*>^q & q in Leaves d & i+1 in dom p & d = p.(i+1);
    i+1 <= len p by B1,FINSEQ_3:25;
    then i < len p by NAT_1:13;
    then reconsider r = x as Element of tree p by B1,TREES_3:48;
    assume x nin Leaves tree p;
    then consider q0 being FinSequence of NAT such that
B4: q0 in tree p & r is_a_proper_prefix_of q0 by TREES_1:def 5;
    consider w being FinSequence such that
B6: q0 = <*i*>^q^w by B1,B4,XBOOLE_0:def 8,TREES_1:1;
B7: q0 = <*i*>^(q^w) by B6,FINSEQ_1:32;
    then
B9: q^w is FinSequence of NAT by FINSEQ_1:36;
    q^w in d & q is_a_proper_prefix_of q^w
    by B1,B4,B7,TREES_3:48,TREES_1:49;
    hence contradiction by B1,B9,TREES_1:def 5;
  end;

theorem
  Leaves root-tree c = {c}
  proof
    thus Leaves root-tree c = (root-tree c).:Leaves elementary_tree 0
    .= ({{}}-->c).:dom({{}}-->c) by TREES_1:29,HUFFMAN1:15
    .= rng ({{}}-->c) by RELAT_1:113 .= {c} by FUNCOP_1:8;
  end;

theorem
  dom d c= dom((d,c)<-d1) by TREES_4:def 7;

registration
  let c,d;
  reduce (root-tree c,c)<-d to d;
  reducibility
  proof
AA: dom((root-tree c,c)<-d) = dom d
    proof
      let x be FinSequence of NAT;
      hereby  assume
        x in dom((root-tree c,c)<-d);
        then reconsider p = x as Element of dom((root-tree c,c)<-d);
        per cases by TREES_4:def 7;
        suppose p in dom root-tree c;
          then p in elementary_tree 0;
          then p = {} by TREES_1:29;
          hence x in dom d by TREES_1:22;
        end;
        suppose
          ex q being Node of root-tree c, r being Node of d st
          q in Leaves dom root-tree c & (root-tree c).q = c & p = q^r;
          then consider q being Node of root-tree c, r being Node of d such
          that
A2:       q in Leaves dom root-tree c & (root-tree c).q = c & p = q^r;
          q in {{}} by TREES_1:29;
          then q = {};
          hence x in dom d by A2;
        end;
      end;
      assume x in dom d;
      then reconsider r = x as Node of d;
      reconsider q = {} as Node of root-tree c by TREES_1:22;
      q in Leaves dom root-tree c & (root-tree c).q = c & r = q^r
      by HUFFMAN1:15;
      hence x in dom((root-tree c,c)<-d) by TREES_4:def 7;
    end;
    now let x be object; assume x in dom d;
      then reconsider r = x as Node of d;
      reconsider q = {} as Node of root-tree c by TREES_1:22;
      q in Leaves dom root-tree c & (root-tree c).q = c & r = q^r
      by HUFFMAN1:15;
      hence ((root-tree c,c)<-d).x = d.x by TREES_4:def 7;
    end;
    hence thesis by AA,FUNCT_1:2;
  end;
end;

theorem ThL7:
  c1 <> c2 implies (root-tree c1,c2)<-d = root-tree c1
  proof
    assume
A0: c1 <> c2;
AA: dom ((root-tree c1,c2)<-d) = dom root-tree c1
    proof
      let x be FinSequence of NAT;
      hereby assume
        x in dom((root-tree c1,c2)<-d);
        then reconsider p = x as Element of dom((root-tree c1,c2)<-d);
        per cases by TREES_4:def 7;
        suppose p in dom root-tree c1;
          hence x in dom root-tree c1;
        end;
        suppose
          ex q being Node of root-tree c1, r being Node of d st
          q in Leaves dom root-tree c1 & (root-tree c1).q = c2 & p = q^r;
          then consider q being Node of root-tree c1, r being Node of d such
          that
A2:       q in Leaves dom root-tree c1 & (root-tree c1).q = c2 & p = q^r;
          thus x in dom root-tree c1 by A2,A0;
        end;
      end;
      assume x in dom root-tree c1;
      hence x in dom((root-tree c1,c2)<-d) by TREES_4:def 7;
    end;
    now let x be object;
      assume x in dom root-tree c1;
      then reconsider p = x as Node of root-tree c1;
      (root-tree c1).p = c1;
      hence ((root-tree c1,c2)<-d).x = (root-tree c1).x by A0,TREES_4:def 7;
    end;
    hence thesis by AA,FUNCT_1:2;
  end;

registration
  let f be non empty Function-yielding Function;
  cluster doms f -> non empty;
  coherence
  proof
    dom doms f = dom f <> {} by FUNCT_6:def 2;
    hence thesis;
  end;
  cluster rngs f -> non empty;
  coherence
  proof
    dom rngs f = dom f <> {} by FUNCT_6:def 3;
    hence thesis;
  end;
end;

theorem ThL8:
  for p,q being non empty DTree-yielding FinSequence st
  dom q = dom p & (for i,d1 st i in dom p & d1 = p.i holds q.i = (d1,c)<-d)
  holds (b-tree p,c)<-d = b-tree q
  proof
    let p,q be non empty DTree-yielding FinSequence such that
A1: dom q = dom p and
A2: for i,d1 st i in dom p & d1 = p.i holds q.i = (d1,c)<-d;
A3: dom(b-tree p) = tree doms p & dom (b-tree q) = tree doms q by TREES_4:10;
A4: Leaves tree doms p = {<*i*>^q where i where q is FinSequence of NAT,
    d is Tree: q in Leaves d & i+1 in dom doms p & d = (doms p).(i+1)} by ThL0;
A5: dom doms p = dom p & dom doms q = dom q by FUNCT_6:def 2; then
A6: len doms p = len p = len q = len doms q by A1,FINSEQ_3:29;
AA: dom ((b-tree p,c)<-d) = dom(b-tree q)
    proof
      let x be FinSequence of NAT;
      hereby assume x in dom ((b-tree p,c)<-d);
        then reconsider r = x as Node of (b-tree p,c)<-d;
        per cases by TREES_4:def 7;
        suppose r in dom (b-tree p);
          then per cases by A3,TREES_3:def 15;
          suppose r = {};
            hence x in dom(b-tree q) by TREES_1:22;
          end;
          suppose ex n being Nat,q being FinSequence st
            n < len doms p & q in (doms p).(n+1) & x = <*n*>^q;
            then consider n being Nat, w being FinSequence such that
A7:         n < len doms p & w in (doms p).(n+1) & x = <*n*>^w;
A9:         1 <= n+1 <= len doms p by A7,NAT_1:11,13;
            reconsider pn = p.(n+1) as DecoratedTree
            by A5,A9,FINSEQ_3:25,TREES_3:24;
            reconsider qn = q.(n+1) as DecoratedTree
            by A1,A9,A5,FINSEQ_3:25,TREES_3:24;
            qn = (pn,c)<-d by A2,A5,A9,FINSEQ_3:25;
            then (doms p).(n+1) = dom pn c= dom qn = (doms q).(n+1)
            by A1,A5,A9,TREES_4:def 7,FINSEQ_3:25,FUNCT_6:def 2;
            hence x in dom (b-tree q) by A3,A6,A7,TREES_3:def 15;
          end;
        end;
        suppose ex q being Node of b-tree p, s being Node of d st
          q in Leaves dom (b-tree p) & (b-tree p).q = c & r = q^s;
          then consider w being Node of b-tree p, s being Node of d such that
A8:       w in Leaves dom (b-tree p) & (b-tree p).w = c & r = w^s;
          consider i being Nat, u being FinSequence of NAT, d2 being Tree such
          that
A9:       w = <*i*>^u & u in Leaves d2 & i+1 in dom doms p &
          d2 = (doms p).(i+1) by A8,A3,A4;
          reconsider p1 = p.(i+1) as DecoratedTree by A5,A9,TREES_3:24;
B1:       w^s = <*i*>^(u^s) by A9,FINSEQ_1:32;
B2:       q.(i+1) = (p1,c)<-d by A2,A5,A9;
B3:       dom p1 = d2 by A5,A9,FUNCT_6:def 2;
          reconsider u as Node of p1 by A5,A9,FUNCT_6:def 2;
B6:       i+1 <= len doms p by A9,FINSEQ_3:25;
          then
B4:       i < len doms p by NAT_1:13;
          p1.u = c by B6,A6,A8,A9,NAT_1:13,TREES_4:12;
          then
B5:       u^s in dom((p1,c)<-d) = (doms q).(i+1)
          by B3,A1,A5,A9,B2,TREES_4:def 7,FUNCT_6:def 2;
          thus x in dom (b-tree q)
          by B1,B4,B5,A3,A6,A8,TREES_3:def 15;
        end;
      end;
      assume x in dom (b-tree q);
      then reconsider r = x as Node of b-tree q;
      per cases by A3,TREES_3:def 15;
      suppose r = {};
        hence x in dom((b-tree p,c)<-d) by TREES_1:22;
      end;
      suppose ex i st ex w being FinSequence st
        i < len doms q & w in (doms q).(i+1) & x = <*i*>^w;
        then consider n being Nat, w being FinSequence such that
C1:     n < len doms q & w in (doms q).(n+1) & x = <*n*>^w;
C4:     1 <= n+1 <= len doms q by C1,NAT_1:11,13;
        then
C2:     n+1 in dom doms q by FINSEQ_3:25;
        reconsider qi = q.(n+1) as DecoratedTree
        by C4,A5,FINSEQ_3:25,TREES_3:24;
        reconsider p1 = p.(n+1) as DecoratedTree
        by A1,A5,C4,FINSEQ_3:25,TREES_3:24;
C3:     dom qi = (doms q).(n+1) & dom p1 = (doms p).(n+1)
        by A1,A5,C4,FINSEQ_3:25,FUNCT_6:def 2;
        qi = (p1,c)<-d by C4,A1,A2,A5,FINSEQ_3:25;
        then per cases by C1,C3,TREES_4:def 7;
        suppose w in dom p1;
          then x in dom(b-tree p) c= dom((b-tree p,c)<-d)
          by A3,A6,C1,C3,TREES_4:def 7,TREES_3:def 15;
          hence x in dom((b-tree p,c)<-d);
        end;
        suppose ex u being Node of p1, s being Node of d st
          u in Leaves dom p1 & p1.u = c & w = u^s;
          then consider u being Node of p1, s being Node of d such that
C4:       u in Leaves dom p1 & p1.u = c & w = u^s;
C5:       <*n*>^u in Leaves tree doms p by A4,C4,A5,A1,C2,C3;
          (b-tree p).(<*n*>^u) = c by C1,A6,C4,TREES_4:12;
          then <*n*>^u^s in dom((b-tree p,c)<-d) by A3,C5,TREES_4:def 7;
          hence x in dom((b-tree p,c)<-d) by C1,C4,FINSEQ_1:32;
        end;
      end;
    end;
    now
      let x be object;
      assume x in dom (b-tree q);
      then reconsider r = x as Node of b-tree q;
      per cases by A3,TREES_3:def 15;
      suppose
C1:     r = {};
        reconsider r = {} as Node of b-tree p by TREES_1:22;
        not ex i being Nat, q being FinSequence of NAT, d being Tree st
        r = <*i*>^q & q in Leaves d & i+1 in dom doms p & d = (doms p).(i+1);
        then r nin Leaves dom (b-tree p) by A4,A3;
        hence ((b-tree p,c)<-d).x = (b-tree p).r  by C1,TREES_4:def 7
        .= b by TREES_4:def 4 .= (b-tree q).x by C1,TREES_4:def 4;
      end;
      suppose ex i st ex w being FinSequence st
        i < len doms q & w in (doms q).(i+1) & x = <*i*>^w;
        then consider n being Nat, w being FinSequence such that
C1:     n < len doms q & w in (doms q).(n+1) & x = <*n*>^w;
C5:     1 <= n+1 <= len doms q by C1,NAT_1:11,13;
        then
C2:     n+1 in dom doms q by FINSEQ_3:25;
        reconsider qi = q.(n+1) as DecoratedTree
        by C5,A5,FINSEQ_3:25,TREES_3:24;
        reconsider p1 = p.(n+1) as DecoratedTree
        by A1,A5,C5,FINSEQ_3:25,TREES_3:24;
C3:     dom qi = (doms q).(n+1) & dom p1 = (doms p).(n+1)
        by A1,A5,C5,FINSEQ_3:25,FUNCT_6:def 2;
C4:     qi = (p1,c)<-d by C5,A1,A2,A5,FINSEQ_3:25;
        then per cases by C1,C3,TREES_4:def 7;
        suppose
D1:       w in dom p1 & (w nin Leaves dom p1);
D4:       qi.w = p1.w & dom p1 c= dom qi by D1,C4,TREES_4:def 7;
D5:       x is Node of b-tree p by C1,A6,A3,C3,D1,TREES_3:def 15;
          now given i being Nat, q being FinSequence of NAT, d being Tree such
            that
D2:         r = <*i*>^q & q in Leaves d & i+1 in dom doms p &
            d = (doms p).(i+1);
            i = r.1 = n & q = w by C1,D2,FINSEQ_1:41,HILBERT2:2;
            hence contradiction by D1,A5,D2,FUNCT_6:def 2;
          end;
          then r nin Leaves dom (b-tree p) by A4,A3;
          hence ((b-tree p,c)<-d).x = (b-tree p).r  by D5,TREES_4:def 7
          .= p1.w by C1,A6,D1,TREES_4:12
          .= (b-tree q).x by C1,A6,D1,D4,TREES_4:12;
        end;
        suppose
D1:       w in dom p1 & (p1.w <> c);
D4:       qi.w = p1.w & dom p1 c= dom qi by D1,C4,TREES_4:def 7;
D5:       x is Node of b-tree p by C1,A6,A3,C3,D1,TREES_3:def 15;
          (b-tree p).r <> c by C1,A6,D1,TREES_4:12;
          hence ((b-tree p,c)<-d).x = (b-tree p).r  by D5,TREES_4:def 7
          .= p1.w by C1,A6,D1,TREES_4:12
          .= (b-tree q).x by C1,A6,D1,D4,TREES_4:12;
        end;
        suppose
C7:       w in dom p1 & w in Leaves dom p1 & p1.w = c;
          then reconsider u = w as Node of p1;
          reconsider s = {} as Node of d by TREES_1:22;
C71:      w = u^s;
C5:       <*n*>^u in Leaves tree doms p by A4,C7,A5,A1,C2,C3;
C6:       (b-tree p).(<*n*>^u) = c by C1,A6,C7,TREES_4:12;
          ((b-tree p,c)<-d).(<*n*>^u^s) = d.s by A3,C5,C6,TREES_4:def 7
          .= qi.w by C4,C7,C71,TREES_4:def 7
          .= (b-tree q).x by C1,A6,C3,TREES_4:12;
          hence ((b-tree p,c)<-d).x = (b-tree q).x by C1;
        end;
        suppose ex u being Node of p1, s being Node of d st
          u in Leaves dom p1 & p1.u = c & w = u^s;
          then consider u being Node of p1, s being Node of d such that
C7:       u in Leaves dom p1 & p1.u = c & w = u^s;
C5:       <*n*>^u in Leaves tree doms p by A4,C7,A5,A1,C2,C3;
C6:       (b-tree p).(<*n*>^u) = c by C1,A6,C7,TREES_4:12;
          ((b-tree p,c)<-d).(<*n*>^u^s) = d.s by A3,C5,C6,TREES_4:def 7
          .= qi.w by C4,C7,TREES_4:def 7
          .= (b-tree q).x by C1,A6,C3,TREES_4:12;
          hence ((b-tree p,c)<-d).x = (b-tree q).x by C1,C7,FINSEQ_1:32;
        end;
      end;
    end;
    hence thesis by AA,FUNCT_1:2;
  end;

definition
  let S,s;
  let A be non empty MSAlgebra over S;
  let a be Element of A;
  attr a is s-sort means: AS:
  a in (the Sorts of A).s;
end;

registration
  let S,s;
  let A be non-empty MSAlgebra over S;
  cluster s-sort for Element of A;
  existence
  proof
    set a = the Element of (the Sorts of A).s;
    take a;
    thus a in (the Sorts of A).s;
  end;
  cluster -> s-sort for Element of (the Sorts of A).s;
  coherence;
end;

definition
  let S;
  let A be non empty MSAlgebra over S such that
A: A is disjoint_valued;
  let a be Element of A;
  func the_sort_of a -> SortSymbol of S means: SORT:
  a in (the Sorts of A).it;
  existence
  proof
    consider I being object such that
A1: I in dom the Sorts of A & a in (the Sorts of A).I by CARD_5:2;
    reconsider I as SortSymbol of S by A1;
    take I; thus thesis by A1;
  end;
  uniqueness by A,XBOOLE_0:3,PROB_2:def 2;
end;

theorem
  for A being disjoint_valued non-empty MSAlgebra over S
  for a being s-sort Element of A
  holds the_sort_of a = s
  proof
    let A be disjoint_valued non-empty MSAlgebra over S;
    let a be s-sort Element of A;
    a in (the Sorts of A).s by AS;
    hence the_sort_of a = s by SORT;
  end;

theorem
  for A being disjoint_valued non empty MSAlgebra over S
  for a being Element of A
  holds a is (the_sort_of a)-sort by SORT;

theorem Lem00:
  the_sort_of @r = the_sort_of r
  proof
    the Sorts of T is MSSubset of Free(S,X) by MSAFREE4:def 6;
    then @r in (the Sorts of T).the_sort_of r
    c= (the Sorts of Free(S,X)).the_sort_of r by SORT,PBOOLE:def 2,def 18;
    hence thesis by SORT;
  end;

theorem
  for r being Element of (the Sorts of T).s holds the_sort_of r = s by SORT;

theorem Th5:
  for u being Term of S,X st t = u holds the_sort_of t = the_sort_of u
  proof let u be Term of S,X;
    assume t = u;
    then t in FreeSort(X, the_sort_of u) by MSATERM:def 5;
    then t in (the Sorts of FreeMSA X).the_sort_of u by MSAFREE:def 11;
    then t in (the Sorts of Free(S,X)).the_sort_of u by MSAFREE3:31;
    hence thesis by SORT;
  end;

registration
  let S,X,o,T;
  cluster -> (Union the Sorts of T)-valued for Element of Args(o,T);
  coherence
  proof let w be Element of Args(o,T);
    let a; reconsider b = a as set by TARSKI:1;
    assume a in rng w;
    then consider i being object such that
A1: i in dom w & b = w.i by FUNCT_1:def 3;
    reconsider i as Nat by A1;
    dom w = dom the_arity_of o by MSUALG_6:2;
    then a is Element of (the Sorts of T).((the_arity_of o)/.i)
    by A1,MSUALG_6:2;
    hence thesis;
  end;
end;

theorem Th4A:
  for q being Element of Args(o,T) holds
  i in dom q implies the_sort_of (q/.i) = (the_arity_of o)/.i
  proof
    let q be Element of Args(o,T);
    assume Z0: i in dom q;
    then i in dom the_arity_of o by MSUALG_3:6;
    then q/.i = q.i in (the Sorts of T).((the_arity_of o)/.i)
    by Z0,PARTFUN1:def 6,MSUALG_6:2;
    hence the_sort_of (q/.i) = (the_arity_of o)/.i by SORT;
  end;

definition
  let S;
  let A,B be non-empty MSAlgebra over S;
  let f be ManySortedFunction of A,B such that
A: A is disjoint_valued;
  let a be Element of A;
  func f.a -> Element of B equals: ABBR: f.(the_sort_of a).a;
  coherence
  proof
    a in (the Sorts of A).the_sort_of a by A,SORT;
    then f.(the_sort_of a).a is Element of (the Sorts of B).the_sort_of a
    by FUNCT_2:5;
    hence thesis;
  end;
end;

theorem Th9:
  for A being disjoint_valued non-empty MSAlgebra over S
  for B being non-empty MSAlgebra over S
  for f being ManySortedFunction of A,B
  for a being Element of (the Sorts of A).s holds f.a = f.s.a
  proof
    let A be disjoint_valued non-empty MSAlgebra over S;
    let B be non-empty MSAlgebra over S;
    let f be ManySortedFunction of A,B;
    let a be Element of (the Sorts of A).s;
    thus f.a = f.(the_sort_of a).a  by ABBR .= f.s.a  by SORT;
  end;

theorem
  for A being disjoint_valued non-empty MSAlgebra over S
  for B being non-empty MSAlgebra over S
  for f being ManySortedFunction of A,B
  for a being Element of (the Sorts of A).s holds
  f.a is Element of (the Sorts of B).s
  proof
    let A be disjoint_valued non-empty MSAlgebra over S;
    let B be non-empty MSAlgebra over S;
    let f be ManySortedFunction of A,B;
    let a be Element of (the Sorts of A).s;
    f.a = f.s.a in (the Sorts of B).s by Th9,FUNCT_2:5;
    hence thesis;
  end;

theorem Lem0:
  for A,B being disjoint_valued non-empty MSAlgebra over S
  for f being ManySortedFunction of A,B
  for a being Element of A holds
  the_sort_of (f.a) = the_sort_of a
  proof
    let A,B be disjoint_valued non-empty MSAlgebra over S;
    let f be ManySortedFunction of A,B;
    let a be Element of A;
    a in (the Sorts of A).the_sort_of a by SORT;
    then f.a = f.(the_sort_of a).a in (the Sorts of B).the_sort_of a
    by ABBR,FUNCT_2:5;
    hence the_sort_of (f.a) = the_sort_of a by SORT;
  end;

theorem Th14:
  for A,B being disjoint_valued non-empty MSAlgebra over S
  for C being non-empty MSAlgebra over S
  for f being ManySortedFunction of A,B
  for g being ManySortedFunction of B,C
  for a being Element of A
  holds (g**f).a = g.(f.a)
  proof
    let A,B be disjoint_valued non-empty MSAlgebra over S;
    let C be non-empty MSAlgebra over S;
    let f be ManySortedFunction of A,B;
    let g be ManySortedFunction of B,C;
    let a be Element of A;
A1: a in (the Sorts of A).the_sort_of a &
    f.(the_sort_of a) is Function of (the Sorts of A).(the_sort_of a),
    (the Sorts of B).(the_sort_of a) by SORT;
    thus (g**f).a = (g**f).(the_sort_of a).a by ABBR
    .= ((g.the_sort_of a)*(f.(the_sort_of a))).a by MSUALG_3:2
    .= (g.the_sort_of a).(f.(the_sort_of a).a) by A1,FUNCT_2:15
    .= (g.the_sort_of (f.a)).(f.(the_sort_of a).a) by Lem0
    .= (g.the_sort_of (f.a)).(f.a) by ABBR
    .= g.(f.a) by ABBR;
  end;

theorem
  for A being disjoint_valued non-empty MSAlgebra over S
  for B being non-empty MSAlgebra over S
  for f1,f2 being ManySortedFunction of A,B st
    for a being Element of A holds f1.a = f2.a
    holds f1 = f2
  proof
    let A be disjoint_valued non-empty MSAlgebra over S;
    let B be non-empty MSAlgebra over S;
    let f1,f2 be ManySortedFunction of A,B;
    assume Z0: for a being Element of A holds f1.a = f2.a;
    let s;
    now
      thus f1.s is Function of (the Sorts of A).s, (the Sorts of B).s &
      f2.s is Function of (the Sorts of A).s, (the Sorts of B).s;
      let a be Element of (the Sorts of A).s;
      thus f1.s.a = f1.a by Th9 .= f2.a by Z0 .= f2.s.a by Th9;
    end;
    hence thesis by FUNCT_2:def 8;
  end;

definition
  let S;
  let A,B be MSAlgebra over S such that
A: ex h being ManySortedFunction of A,B st h is_homomorphism A,B;
  mode Homomorphism of A,B -> ManySortedFunction of A,B means: HOMO:
  it is_homomorphism A,B;
  existence by A;
end;

theorem
  for h being ManySortedFunction of Free(S,X), T holds
  h is Homomorphism of Free(S,X),T iff h is_homomorphism Free(S,X), T
  proof
    let h be ManySortedFunction of Free(S,X), T;
    canonical_homomorphism T is_homomorphism Free(S,X), T by MSAFREE4:def 10;
    hence thesis by HOMO;
  end;

definition
  let S,X,T;
  redefine func canonical_homomorphism T -> Homomorphism of Free(S,X), T;  :: redefines canonical_homomorphism (MSAFREE4, definition)
  coherence
  proof
    canonical_homomorphism T is_homomorphism Free(S,X), T by MSAFREE4:def 10;
    hence thesis by HOMO;
  end;
end;

registration
  let S,X,T,r;
  reduce (canonical_homomorphism T).@r to r;
  reducibility
  proof
    the_sort_of @r = the_sort_of r by Lem00;
    then r in (the Sorts of T).the_sort_of @r by SORT;
    then (canonical_homomorphism T).(the_sort_of @r).@r = r by MSAFREE4:47;
    hence thesis by ABBR;
  end;
end;

theorem
  for t1,t2 st t2 = (canonical_homomorphism T).t1 holds
  (canonical_homomorphism T).t1 = (canonical_homomorphism T).t2
  proof set H = canonical_homomorphism T;
    let t1,t2;
    assume Z0: t2 = H.t1;
    reconsider t = t1 as Element of (the Sorts of Free(S,X)).the_sort_of t1
    by SORT;
A1: the_sort_of @(H.t1) = the_sort_of (H.t1) &
    H.the_sort_of t1 is Function of (the Sorts of Free(S,X)).the_sort_of t1,
    (the Sorts of T).the_sort_of t1 by Lem00;
A2: dom(H**H) = (dom H)/\dom H = dom H = the carrier of S
    by PARTFUN1:def 2,PBOOLE:def 19;
    H**H = H by MSAFREE4:48;
    hence H.t1 = (H**H).(the_sort_of t1).t1 by ABBR
    .= ((H.the_sort_of t1)*(H.the_sort_of t1)).t by A2,PBOOLE:def 19
    .= (H.the_sort_of t1).((H.the_sort_of t1).t1) by FUNCT_2:15
    .= (H.the_sort_of t1).(H.t1) by ABBR
    .= (H.the_sort_of t2).(H.t1) by Z0,A1,Lem0
    .= H.t2 by Z0,ABBR;
  end;

begin :: Constructing terms

reserve
  w for (Element of Args(o,T)),
  p,p1 for Element of Args(o,Free(S,X));

definition
  let S,X,s,x;
  func x-term -> Element of (the Sorts of Free(S,X)).s equals root-tree [x,s];
  coherence
  proof
    reconsider t = root-tree [x,s] as Term of S,X by MSATERM:4;
    the_sort_of t = s by MSATERM:14;
    then t is Element of (the Sorts of FreeMSA X).s by MSAFREE3:7;
    hence thesis by MSAFREE3:31;
  end;
end;

definition
  let S,X,o,p;
  func o-term p -> Element of Free(S,X), the_result_sort_of o equals
  [o,the carrier of S]-tree p;
  coherence
  proof
A1: Free(S,X) = FreeMSA X = MSAlgebra(#FreeSort X, FreeOper X#)
    by MSAFREE3:31;
    then
A2: p is ArgumentSeq of Sym(o,X) by INSTALG1:1;
    then reconsider t = Sym(o,X)-tree p as Term of S,X by MSATERM:1;
    the_sort_of t = the_result_sort_of o by A2,MSATERM:20;
    then t in FreeSort (X, the_result_sort_of o) by MSATERM:def 5;
    hence thesis by A1,MSAFREE:def 11;
  end;
end;

theorem
  the_sort_of (x-term) = s by SORT;

theorem Th8:
  the_sort_of (o-term p) = the_result_sort_of o
  proof
    reconsider t = o-term p as Term of S,X by MSAFREE4:42;
    [o,the carrier of S] = t.{} by TREES_4:def 4;
    then the_sort_of t = the_result_sort_of o by MSATERM:17;
    hence thesis by Th5;
  end;

theorem Th119:
  for i being object holds i in (FreeGen T).s iff ex x st i = x-term
  proof let i be object;
A3: (FreeGen T).s = FreeGen(s,X) & i is set by TARSKI:1,MSAFREE:def 16;
    hereby assume i in (FreeGen T).s;
      then consider x being set such that
A2:   x in X.s & i = root-tree[x,s] by A3,MSAFREE:def 15;
      reconsider x as Element of X.s by A2;
      take x; thus i = x-term by A2;
    end;
    thus thesis by A3,MSAFREE:def 15;
  end;

registration
  let S,X,s,x;
  cluster x-term -> non compound;
  coherence
  proof
    set t = x-term;
    s in the carrier of S; then s <> the carrier of S;
    then t.{} = [x,s] & s nin {the carrier of S} by TARSKI:def 1,TREES_4:3;
    hence t.{} nin [:the carrier' of S, {the carrier of S}:] by ZFMISC_1:87;
  end;
end;

registration
  let S,X,o,p;
  cluster o-term p -> compound (the_result_sort_of o)-sort;
  coherence
  proof
    set t = o-term p;
    t.{} = [o,the carrier of S] & the carrier of S in {the carrier of S}
    by TARSKI:def 1,TREES_4:def 4;
    hence t.{} in [:the carrier' of S, {the carrier of S}:] by ZFMISC_1:87;
    thus thesis;
  end;
end;

theorem Th16:
  (ex s,x st t = x-term) or ex o,p st t = o-term p
  proof
    reconsider u = t as Term of S,X by MSAFREE4:42;
    per cases by MSATERM:2;
    suppose ex s, x st u.{} = [x,s];
      then consider s,x such that
A0:   u.{} = [x,s];
      u = root-tree [x,s] = x-term by A0,MSATERM:5;
      hence thesis;
    end;
    suppose u.{} in [:the carrier' of S,{the carrier of S}:];
      then consider a,b being object such that
A1:   a in the carrier' of S & b in {the carrier of S} & u.{} = [a,b]
      by ZFMISC_1:def 2;
      reconsider a as OperSymbol of S by A1;
      b = the carrier of S by A1,TARSKI:def 1;
      then consider p being ArgumentSeq of Sym(a,X) such that
A2:   u = [a,the carrier of S]-tree p by A1,MSATERM:10;
      Free(S,X) = FreeMSA X by MSAFREE3:31;
      then reconsider p as Element of Args(a,Free(S,X)) by INSTALG1:1;
      u = a-term p by A2;
      hence thesis;
    end;
  end;

theorem
  t is not compound implies ex s,x st t = x-term
  proof reconsider d = t as Term of S,X by MSAFREE4:42;
    assume t.{} nin [:the carrier' of S, {the carrier of S}:];
    then consider s,x such that
A1: d.{} = [x,s] by MSATERM:2;
    take s,x;
    thus thesis by A1,MSATERM:5;
  end;

theorem Th17:
  t is compound implies ex o,p st t = o-term p
  proof reconsider d = t as Term of S,X by MSAFREE4:42;
    assume t.{} in [:the carrier' of S, {the carrier of S}:];
    then consider a,b being object such that
A1: a in the carrier' of S & b in {the carrier of S} & d.{} = [a,b]
    by ZFMISC_1:def 2;
    reconsider a as OperSymbol of S by A1;
    b = the carrier of S by A1,TARSKI:def 1;
    then consider p being ArgumentSeq of Sym(a,X) such that
A2: d = [a, the carrier of S]-tree p by A1,MSATERM:10;
    Free(S,X) = FreeMSA X by MSAFREE3:31;
    then reconsider p as Element of Args(a,Free(S,X)) by INSTALG1:1;
    take a,p;
    thus thesis by A2;
  end;

theorem
  x-term <> o-term p;

registration
  let S;
  let X be non-empty ManySortedSet of the carrier of S;
  cluster compound for Element of Free(S,X);
  existence
  proof
    set o = the OperSymbol of S;
    set p = the Element of Args(o,Free(S,X));
    take o-term p;
    thus thesis;
  end;
end;

definition
  let S,X;
  let e be compound Element of Free(S,X);
  redefine func main-constr e -> OperSymbol of S;  :: redefines main-constr (ABCMIZ_A, definition)
  coherence
  proof
    consider o,p such that
A1: e = o-term p by Th17;
    e.{} = [o, the carrier of S] & main-constr e = (e.{})`1
    by A1,TREES_4:def 4,ABCMIZ_A:def 9;
    hence thesis;
  end;
end;

definition
  let S,X;
  let e be compound Element of Free(S,X);
  redefine func args e -> Element of Args(main-constr e, Free(S, X));  :: redefines args (ABCMIZ_A, definition)
  coherence
  proof
    consider o,p such that
A1: e = o-term p by Th17;
    [o,the carrier of S]-tree p = e = (e.{})-tree args e
    by A1,ABCMIZ_A:def 10;
    then args e = p & [o, the carrier of S]`1 = (e.{})`1 = main-constr e
    by TREES_4:15,ABCMIZ_A:def 9;
    hence thesis;
  end;
end;

theorem
  args (x-term) = {}
  proof
    (x-term).{} = [x,s] & x-term = [x,s]-tree {} by TREES_4:3,20;
    hence thesis by ABCMIZ_A:def 10;
  end;

theorem
  for t being compound Element of Free(S,X) holds
  t = (main-constr t)-term args t
  proof let t be compound Element of Free(S,X);
    consider o,p such that
A1: t = o-term p by Th17;
    [o,the carrier of S]-tree p = t = (t.{})-tree args t
    by A1,ABCMIZ_A:def 10;
    then args t = p & [o, the carrier of S]`1 = (t.{})`1 = main-constr t
    by TREES_4:15,ABCMIZ_A:def 9;
    hence thesis by A1;
  end;

theorem Th24:
  x-term in T
  proof
    x-term in FreeGen(s,X) = (FreeGen T).s c= (the Sorts of T).s
    by PBOOLE:def 2,def 18,MSAFREE:def 15,def 16;
    then x-term is Element of (the Sorts of T).s;
    hence x-term in Union the Sorts of T;
  end;

registration
  let S,X,T,s,x;
  reduce (canonical_homomorphism T).(x-term) to x-term;
  reducibility
  proof
    x-term in T by Th24;
    then reconsider xt = x-term as Element of T;
    the_sort_of xt = the_sort_of @xt by Lem00;
    hence (canonical_homomorphism T).(x-term) = x-term;
  end;
end;

scheme TermInd{P[set], S() -> non empty non void ManySortedSign,
  X() -> non-empty ManySortedSet of the carrier of S(),
  t() -> Element of Free(S(),X())}:
  P[t()]
  provided
A1: for s being SortSymbol of S(), x being Element of X().s holds P[x-term] and
A2: for o being OperSymbol of S(), p being Element of Args(o,Free(S(),X())) st
      for t being Element of Free(S(),X()) st t in rng p holds P[t]
    holds P[o-term p]
proof
AA: t() is Term of S(),X() by MSAFREE4:42;
A3: now let s be SortSymbol of S(), x be Element of X().s;
      P[x-term] by A1;
      hence P[root-tree [x,s]];
    end;
A4: now
      let o be OperSymbol of S(), p be ArgumentSeq of Sym(o,X());
      Free(S(),X()) = FreeMSA X() by MSAFREE3:31;
      then reconsider q = p as Element of Args(o,Free(S(),X())) by INSTALG1:1;
      assume
A5:   for t being Term of S(),X() st t in rng p holds P[t];
      now let u be Element of Free(S(),X());
        u is Term of S(),X() by MSAFREE4:42;
        hence u in rng q implies P[u] by A5;
      end;
      then P[o-term q] by A2;
      hence P[[o,the carrier of S()]-tree p];
    end;
    for t being Term of S(),X() holds P[t] from MSATERM:sch 1(A3,A4);
    hence thesis by AA;
end;

scheme TermAlgebraInd{P[set], S() -> non empty non void ManySortedSign,
  X() -> non-empty ManySortedSet of the carrier of S(),
  A() -> all_vars_including inheriting_operations free_in_itself
  (X(),S())-terms MSAlgebra over S(),
  t() -> Element of A()}:
  P[t()]
  provided
A1: for s being SortSymbol of S(), x being Element of X().s
    for r being Element of A() st r = x-term holds P[r] and
A2: for o being OperSymbol of S(), p being Element of Args(o,Free(S(),X()))
    for r being Element of A() st r = o-term p &
      for t being Element of A() st t in rng p holds P[t]
    holds P[r]
proof
  defpred Q[set] means $1 in A() implies P[$1];
A3: now let s be SortSymbol of S(); let x be Element of X().s;
      x-term in A() by Th24;
      hence Q[x-term] by A1;
    end;
A4: now let o be OperSymbol of S(), p be Element of Args(o,Free(S(),X()));
      assume
A5:   for t being Element of Free(S(),X()) st t in rng p holds Q[t];
      thus Q[o-term p]
      proof assume
A7:     o-term p in A();
        now let t be Element of A();
          assume
AA:       t in rng p;
          t in A() & Q[@t] by A5,AA;
          hence P[t];
        end;
        hence P[o-term p] by A2,A7;
      end;
    end;
    Q[@t()] from TermInd(A3,A4);
    hence thesis by ELEM;
end;

begin :: Construction Degree

definition
  let S,X,T,r;
  func construction_degree r -> Nat equals
  card (r"[:the carrier' of S, {the carrier of S}:]);
  coherence;
  func height r -> Nat equals height dom r;
  coherence;
end;

notation
  let S,X,T,r;
  synonym deg r for construction_degree r;
end;

theorem deg @r = deg r;

theorem height @r = height r;

theorem
  height (x-term) = 0 by TREES_1:42;

registration
  cluster natural-membered -> ordinal-membered finite-membered for set;
  coherence
  proof
    let I; assume
A1: for a st a in I holds a is natural;
    now
      let J; assume J in I;
      then J is natural by A1;
      hence J is ordinal;
    end;
    hence I is ordinal-membered by ORDINAL6:1;
    let J; assume J in I;
    then J is natural by A1;
    hence thesis;
  end;
end;

registration
  let I be finite natural-membered set;
  cluster union I -> natural;
  coherence;
end;

registration
  let I be non empty finite natural-membered set;
  identify max I with union I;
  compatibility
  proof
A1: for x,y being set st x in I & y in I holds x c= y or y c= x
    by XBOOLE_0:def 9,ORDINAL1:15;
    now let x be ext-real object;
      assume
A3:   x in I;
      then reconsider a = x as Nat;
      Segm a = x & Segm union I = union I;
      hence x <= union I by A3,ZFMISC_1:74,NAT_1:39;
    end;
    hence thesis by A1,XXREAL_2:def 8,CARD_2:62;
  end;
end;

theorem Th25:
  for S,X,o,p holds {height t1: t1 in rng p} is natural-membered finite &
  union {height t: t in rng p} is Nat
  proof let S,X,o,p;
    set I = {height t: t in rng p};
    thus
A2: I is natural-membered
    proof
      let a; assume a in I;
      then ex t1 st a = height t1 & t1 in rng p;
      hence thesis;
    end;
    deffunc F(Element of Free(S,X)) = height $1;
A3: rng p is finite;
    thus {F(t1): t1 in rng p} is finite from FRAENKEL:sch 21(A3);
    then reconsider I as finite natural-membered set by A2;
    union I is Nat;
    hence thesis;
  end;

theorem Th26:
  the_arity_of o <> {} & n = union {height t1: t1 in rng p}
  implies height (o-term p) = n+1
  proof set I = {height t1: t1 in rng p};
    assume
A1: the_arity_of o <> {} & n = union I;
    set i0 = the Element of dom p;
A4: dom p = dom the_arity_of o by MSUALG_6:2;
    reconsider i0 as Nat;
    reconsider t0 = p.i0 as Element of
    (the Sorts of Free(S,X)).((the_arity_of o)/.i0) by A4,A1,MSUALG_6:2;
    t0 in rng p by A4,A1,FUNCT_1:def 3;
    then
A5: height t0 in I;
A2: I is natural-membered
    proof
      let a; assume a in I;
      then ex t1 st a = height t1 & t1 in rng p;
      hence thesis;
    end;
    deffunc F(Element of Free(S,X)) = height $1;
A3: rng p is finite;
    {F(t1): t1 in rng p} is finite from FRAENKEL:sch 21(A3);
    then reconsider I as non empty finite natural-membered set by A2,A5;
    n = max I in I by A1,XXREAL_2:def 8;
    then consider t1 such that
A7: max I = height t1 & t1 in rng p;
    consider a being FinSequence of NAT such that
A8: a in dom t1 & len a = max I by A7,TREES_1:def 12;
    consider i1 being object such that
A9: i1 in dom p & t1 = p.i1 by A7,FUNCT_1:def 3;
    reconsider i1 as Nat by A9;
    consider i such that
A10:i1 = 1+i by NAT_1:10,A9,FINSEQ_3:25;
    i1 <= len p by A9,FINSEQ_3:25;
    then
A11:<*i*>^a in dom (o-term p) by A8,A9,A10,NAT_1:13,TREES_4:11;
A12:len(<*i*>^a) = 1+n by A1,A8,FINSEQ_5:8;
    now let q be FinSequence of NAT;
      assume q in dom (o-term p);
      then per cases by TREES_4:11;
      suppose q = {};
        hence len q <= n+1;
      end;
      suppose ex i being Nat, T being DecoratedTree, w being Node of T st
        i < len p & T = p.(i+1) & q = <*i*>^w;
        then consider i being Nat, t being DecoratedTree, w being Node of t
        such that
B1:     i < len p & t = p.(i+1) & q = <*i*>^w;
B0:     1 <= i+1 <= len p by B1,NAT_1:12,13;
        then
B2:     i+1 in dom p by FINSEQ_3:25;
        reconsider t as Element of
        (the Sorts of Free(S,X)).((the_arity_of o)/.(i+1))
        by B0,B1,A4,MSUALG_6:2,FINSEQ_3:25;
        t in rng p by B2,B1,FUNCT_1:def 3;
        then height t in I;
        then len w <= height t <= max I by XXREAL_2:def 8,TREES_1:def 12;
        then len w <= n by A1,XXREAL_0:2;
        then 1+len w <= n+1 by XREAL_1:6;
        hence len q <= n+1 by B1,FINSEQ_5:8;
      end;
    end;
    hence thesis by A12,A11,TREES_1:def 12;
  end;

theorem Th20:
  the_arity_of o = {} implies height (o-term p) = 0
  proof
    assume the_arity_of o = {};
    then dom p = dom {} by MSUALG_3:6;
    then p = {};
    then o-term p = root-tree [o,the carrier of S] by TREES_4:20;
    hence thesis by TREES_1:42;
  end;

theorem Th21:
  deg (x-term) = 0
  proof set t = x-term;
    assume deg t <> 0;
    then t"[:the carrier' of S,{the carrier of S}:] is not empty;
    then consider a being object such that
A1: a in t"[:the carrier' of S,{the carrier of S}:] by XBOOLE_0:7;
    reconsider ta = t.a as set;
A4: ta in [:the carrier' of S,{the carrier of S}:] & a in dom t
    by A1,FUNCT_1:def 7;
    ta in rng t = {[x,s]} by A4,FUNCT_1:def 3,FUNCOP_1:8;
    then ta = [x,s] by TARSKI:def 1;
    then s in the carrier of S = s by A4,ZFMISC_1:106;
    hence contradiction;
  end;

theorem Th22:
  deg t <> 0 iff ex o,p st t = o-term p
  proof
    defpred P[Element of Free(S,X)] means
    deg $1 <> 0 iff ex o,p st $1 = o-term p;
A1: P[x-term] by Th21;
A2: now
      let o,p; assume for t st t in rng p holds P[t];
      [o,the carrier of S] in [:the carrier' of S, {the carrier of S}:] &
      {} in dom (o-term p) & (o-term p).{} = [o,the carrier of S]
      by TREES_1:22,ZFMISC_1:106,TREES_4:def 4;
      then {} in (o-term p)"[:the carrier' of S, {the carrier of S}:]
      by FUNCT_1:def 7;
      then {{}} c= (o-term p)"[:the carrier' of S, {the carrier of S}:];
      then 1 = card{{}} = Segm card{{}} c= Segm deg (o-term p) by CARD_1:11,30;
      hence P[o-term p];
    end;
    thus P[t] from TermInd(A1,A2);
  end;

registration
  let t be DecoratedTree;
  let I;
  cluster t"I -> FinSequence-membered;
  coherence
  proof
    t"I is Subset of dom t by RELAT_1:132;
    hence thesis;
  end;
end;

definition
  let a,I;
  let J,K be set;
  redefine func IFIN(a,I,J,K) -> set;  :: redefines IFIN (MATRIX_7, definition)
  coherence by TARSKI:1;
end;

theorem Th80:
  J = [o,the carrier of S] implies (o-term p)"I = IFIN(J,I,{{}},{}) \/
  union {<*i*>^^((p.(i+1))"I): i < len p}
  proof set X = {<*i*>^^((p.(i+1))"I): i < len p};
    assume
A0: J = [o,the carrier of S];
    dom doms p = dom p by FUNCT_6:def 2;
    then
A4: len doms p = len p by FINSEQ_3:29;
    thus (o-term p)"I c= IFIN(J,I,{{}},{}) \/ union X
    proof
      let x be object;
      assume x in (o-term p)"I;
      then
A1:   x in dom (o-term p) & (o-term p).x in I by FUNCT_1:def 7;
      then x in tree doms p by TREES_4:10;
      then per cases by TREES_3:def 15;
      suppose x = {};
        then (o-term p).x = J & x in {{}} by A0,TARSKI:def 1,TREES_4:def 4;
        then x in IFIN(J,I,{{}},{}) by A1,MATRIX_7:def 1;
        hence thesis by XBOOLE_0:def 3;
      end;
      suppose ex i being Nat, q being FinSequence st
        i < len doms p & q in (doms p).(i+1) & x = <*i*>^q;
        then consider i being Nat, q being FinSequence such that
A2:     i < len doms p & q in (doms p).(i+1) & x = <*i*>^q;
        1 <= i+1 <= len p by A4,A2,NAT_1:11,13;
        then
A5:     i+1 in dom p by FINSEQ_3:25;
        then reconsider px = p.(i+1) as DecoratedTree by TREES_3:24;
A6:     dom px = (doms p).(i+1) by A5,FUNCT_6:def 2;
        then (o-term p).x = px.q by A2,A4,TREES_4:12;
        then q in px"I by A1,A2,A6,FUNCT_1:def 7;
        then <*i*>^q in <*i*>^^(px"I) in X by A2,A4;
        then x in union X by A2,TARSKI:def 4;
        hence thesis by XBOOLE_0:def 3;
      end;
    end;
    let x be object;
    assume x in IFIN(J,I,{{}},{}) \/ union X;
    then per cases by XBOOLE_0:def 3;
    suppose x in IFIN(J,I,{{}},{});
      then J in I & x in {{}} or J nin I & x in {} by MATRIX_7:def 1;
      then x = {} & J in I & (o-term p).{} = J & {} in dom (o-term p)
      by A0,TREES_1:22,TREES_4:def 4;
      hence x in (o-term p)"I by FUNCT_1:def 7;
    end;
    suppose x in union X;
      then consider Y being set such that
A7:   x in Y in X by TARSKI:def 4;
      consider i such that
A8:   Y = <*i*>^^((p.(i+1))"I) & i < len p by A7;
      consider q being Element of (p.(i+1))"I such that
A9:   x = <*i*>^q & q in (p.(i+1))"I by A7,A8;
      1 <= i+1 <= len p by A8,NAT_1:11,13;
      then
AA:   i+1 in dom p by FINSEQ_3:25;
      then reconsider px = p.(i+1) as DecoratedTree by TREES_3:24;
      q in dom px = (doms p).(i+1) & dom (o-term p) = tree doms p
      by AA,A9,FUNCT_1:def 7,FUNCT_6:def 2,TREES_4:10;
      then (o-term p).x = px.q & px.q in I & x in dom (o-term p)
      by A4,A8,A9,FUNCT_1:def 7,TREES_3:def 15,TREES_4:12;
      hence thesis by FUNCT_1:def 7;
    end;
  end;

theorem Th29:
  (ex f being FinSequence of NAT st i = Sum f & dom f = dom the_arity_of o &
  for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t)
  implies deg (o-term p) = i+1
  proof
    given f being FinSequence of NAT such that
A1: i = Sum f & dom f = dom the_arity_of o &
    for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t;
    dom f = dom p by A1,MSUALG_3:6;
    then
A2: len f = len p by FINSEQ_3:29;
    set t = o-term p;
    set I = [:the carrier' of S, {the carrier of S}:];
    set A = {<*i*>^^((p.(i+1))"I) where i: i < len p};
A4: {} nin union A
    proof
      assume {} in union A;
      then consider J such that
A1:   {} in J & J in A by TARSKI:def 4;
      consider i such that
A2:   J = <*i*>^^((p.(i+1))"I) & i < len p by A1;
      consider q being Element of (p.(i+1))"I such that
A3:   {} = <*i*>^q & q in (p.(i+1))"I by A1,A2;
      thus thesis by A3;
    end;
    reconsider J = [o,the carrier of S] as set;
    J in I by ZFMISC_1:106;
    then IFIN(J,I,{{}},{}) = {{}} by MATRIX_7:def 1;
    then t"I = {{}} \/ union A by Th80;
    then
A5: card (t"I) = card {{}}+`card union{<*i*>^^((p.(i+1))"I) where i: i < len p}
    by A4,CARD_2:35,ZFMISC_1:50
    .= 1 +` card union {<*i*>^^((p.(i+1))"I) where i: i < len p} by CARD_1:30;
    deffunc J(Nat) = <*$1*>^^((p.($1+1))"I);
A6: for i,j st i < len f & j < len f & i <> j holds J(i) misses J(j)
    proof let i,j;
B1:   len <*i*> = 1 = len <*j*> & <*i*>.1 = i & <*j*>.1 = j by FINSEQ_1:40;
      thus thesis by B1,Th2;
    end;
A7: for i st i < len f holds card J(i) = f.(i+1)
    proof let i;
      assume i < len f;
      then
A9:   1 <= i+1 <= len f by NAT_1:12,13;
      reconsider t = p.(i+1) as Element of
      (the Sorts of Free(S,X)).((the_arity_of o)/.(i+1))
      by A1,A9,FINSEQ_3:25,MSUALG_6:2;
      f.(i+1) = deg t by A1,A9,FINSEQ_3:25;
      hence thesis by Th1;
    end;
    card union {J(i) where i: i < len f} = Sum f from CardUnion(A6,A7);
    then card (t"I) = 1+` Sum f by A2,A5;
    hence deg t = i+1 by A1;
  end;

definition
  let S,X,T,i;
  func T deg<= i -> Subset of T equals
  {r: deg r <= i};
  coherence
  proof
    {r: deg r <= i} c= Union the Sorts of T
    proof
      let a; assume a in {r: deg r <= i};
      then ex r st a = r & deg r <= i;
      hence a in Union the Sorts of T;
    end;
    hence thesis;
  end;
end;

definition
  let S,X,T,i;
  func T height<= i -> Subset of T equals
  {t: t in T & height t <= i};
  coherence
  proof
    {t: t in T & height t <= i} c= Union the Sorts of T
    proof
      let a; assume a in {t: t in T & height t <= i};
      then ex t st a = t & t in T & height t <= i;
      hence a in Union the Sorts of T;
    end;
    hence thesis;
  end;
end;

theorem
  r in T deg<= i iff deg r <= i
  proof
    r in T deg<= i iff ex r1 st r = r1 & deg r1 <= i;
    hence thesis;
  end;

theorem Th11:
  T deg<= 0 = the set of all x-term
  proof
    thus T deg<= 0 c= the set of all x-term
    proof
      let a; assume a in T deg<= 0;
      then consider r such that
A1:   a = r & deg r <= 0;
A2:   deg @r = deg r = 0 by A1;
      reconsider t = r as Element of Free(S,X) by MSAFREE4:39;
      (ex s,x st t = x-term) or ex o,p st t = o-term p by Th16;
      hence thesis by A1,A2,Th22;
    end;
    let a; assume a in the set of all x-term;
    then consider s,x such that
A3: a = x-term;
    deg (x-term) = 0 <= 0 & x-term in T by Th21,Th24;
    then reconsider r = x-term as Element of T;
    deg r = deg @r = 0 by Th21;
    hence thesis by A3;
  end;

theorem Th12:
  T height<= 0 = (the set of all x-term) \/
  {o-term p: o-term p in T & the_arity_of o = {}}
  proof set I = the set of all x-term;
    set J = {o-term p: o-term p in T & the_arity_of o = {}};
    thus T height<= 0 c= I \/ J
    proof let a;
      assume a in T height<= 0;
      then consider t such that
A1:   a = t & t in T & height t <= 0;
      per cases by Th16;
      suppose ex s,x st t = x-term;
        then t in I;
        hence thesis by A1,XBOOLE_0:def 3;
      end;
      suppose ex o,p st t = o-term p;
        then consider o,p such that
A2:     t = o-term p;
        reconsider n = union {height t1: t1 in rng p} as Nat by Th25;
        per cases;
        suppose the_arity_of o = {};
          then t in J by A1,A2;
          hence thesis by A1,XBOOLE_0:def 3;
        end;
        suppose the_arity_of o <> {};
          then height t = n+1 by A2,Th26;
          hence thesis by A1;
        end;
      end;
    end;
    let a; assume a in I \/ J;
    then per cases by XBOOLE_0:def 3;
    suppose a in I;
      then consider s,x such that
A3:   a = x-term;
      height (x-term) = 0 & x-term in T by Th24,TREES_1:42;
      hence thesis by A3;
    end;
    suppose a in J;
      then consider o,p such that
A4:   a = o-term p & o-term p in T & the_arity_of o = {};
      height (o-term p) = 0 by A4,Th20;
      hence thesis by A4;
    end;
  end;

theorem Th44:
  T deg<= 0 = Union FreeGen T
  proof
A0: T deg<= 0 = the set of all x-term by Th11;
    thus T deg<= 0 c= Union FreeGen T
    proof
      let x be object; assume x in T deg<= 0;
      then consider s being SortSymbol of S, y being Element of X.s such that
A1:   x = y-term by A0;
      x in FreeGen(s,X) by A1,MSAFREE:def 15;
      then x in (FreeGen T).s & s in the carrier of S = dom FreeGen T
      by PARTFUN1:def 2,MSAFREE:def 16;
      hence thesis by CARD_5:2;
    end;
    let a being object; assume a in Union FreeGen T;
    then consider b such that
A2: b in dom FreeGen T & a in (FreeGen T).b by CARD_5:2;
    reconsider b as SortSymbol of S by A2;
    a in FreeGen(b,X) by A2,MSAFREE:def 16;
    then consider y being set such that
A3: y in X.b & a = root-tree [y,b] by MSAFREE:def 15;
    reconsider y as Element of X.b by A3;
    a = y-term by A3;
    hence a in T deg<= 0 by A0;
  end;

theorem Th10a:
  r in T height<= i iff height r <= i
  proof
A1: r in T & height @r = height r;
    r in T height<= i iff ex t st r = t & t in T & height t <= i;
    hence thesis by A1;
  end;

registration
  let S,X,T,i;
  cluster T deg<= i -> non empty;
  coherence
  proof
    set s = the SortSymbol of S;
    set x = the Element of X.s;
    deg (x-term) = 0 <= i & x-term in T by Th24,Th21;
    then reconsider r = x-term as Element of T;
    deg r = deg @r = 0 <= i by Th21;
    then x-term in {r1: deg r1 <= i};
    hence thesis;
  end;
  cluster T height<= i -> non empty;
  coherence
  proof
    set s = the SortSymbol of S;
    set x = the Element of X.s;
    height (x-term) = 0 <= i & x-term in T by Th24,TREES_1:42;
    then x-term in {t: t in T & height t <= i};
    hence thesis;
  end;
end;

theorem Th10b:
  i <= j implies T deg<= i c= T deg<= j
  proof
    assume Z0: i <= j;
    let a be object;
    assume a in T deg<= i;
    then consider r such that
A2: a = r & deg r <= i;
    deg r <= j by Z0,A2,XXREAL_0:2;
    hence thesis by A2;
  end;

theorem Th10c:
  i <= j implies T height<= i c= T height<= j
  proof
    assume Z0: i <= j;
    let a be object;
    assume a in T height<= i;
    then consider t such that
A2: a = t & t in T & height t <= i;
    height t <= j by Z0,A2,XXREAL_0:2;
    hence thesis by A2;
  end;

theorem
  T deg<= (i+1) = T deg<= 0 \/ {o-term p:
    ex f being FinSequence of NAT st i >= Sum f & dom f = dom the_arity_of o &
    for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t}
    /\ Union the Sorts of T
    proof
      set I = {o-term p: ex f being FinSequence of NAT st i >= Sum f &
      dom f = dom the_arity_of o &
      for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t};
      thus T deg<= (i+1) c= T deg<= 0 \/ I /\ Union the Sorts of T
      proof
        let a be object; assume a in T deg<= (i+1);
        then consider r such that
A2:     a = r & deg r <= i+1;
        reconsider t = r as Element of Free(S,X) by MSAFREE4:39;
        per cases by Th16;
        suppose ex s,x st t = x-term;
          then t in the set of all x-term;
          then t in T deg<= 0 by Th11;
          hence thesis by A2,XBOOLE_0:def 3;
        end;
        suppose ex o,p st t = o-term p;
          then consider o,p such that
A3:       t = o-term p;
          deffunc F(object) = deg (p/.$1);
          consider f being Function such that
A4:       dom f = dom p & for a being object st a in dom p holds f.a = F(a)
          from FUNCT_1:sch 3;
          dom f = Seg len p by A4,FINSEQ_1:def 3;
          then reconsider f as FinSequence by FINSEQ_1:def 2;
          rng f c= NAT
          proof
            let y be object;
            assume y in rng f;
            then consider x being object such that
A5:         x in dom f & y = f.x by FUNCT_1:def 3;
            y = F(x) by A4,A5;
            hence thesis;
          end;
          then reconsider f as FinSequence of NAT by FINSEQ_1:def 4;
A6:       dom f = dom the_arity_of o by A4,MSUALG_3:6;
A8:       now let i,t; assume
A7:         i in dom the_arity_of o & t = p.i;
            then t = p/.i by A4,A6,PARTFUN1:def 6;
            hence f.i = deg t by A4,A6,A7;
          end;
          then deg t = Sum f + 1 by A3,A4,Th29,MSUALG_3:6;
          then Sum f <= i by A2,XREAL_1:6;
          then t in I & t in Union the Sorts of T by A3,A6,A8;
          then t in I /\ Union the Sorts of T by XBOOLE_0:def 4;
          hence thesis by A2,XBOOLE_0:def 3;
        end;
      end;
A10:  T deg<= 0 c= T deg<= (i+1) by Th10b;
      I /\ Union the Sorts of T c= T deg<= (i+1)
      proof
        let a be object;
        assume
A14:    a in I /\ Union the Sorts of T;
        then
A11:    a in I & a in Union the Sorts of T by XBOOLE_0:def 4;
        reconsider r = a as Element of T by A14,XBOOLE_0:def 4;
        consider o,p such that
A12:    a = o-term p & ex f being FinSequence of NAT st i >= Sum f &
        dom f = dom the_arity_of o &
        for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t by A11;
        consider f being FinSequence of NAT such that
A13:    i >= Sum f & dom f = dom the_arity_of o &
        for i,t st i in dom the_arity_of o & t = p.i holds f.i = deg t by A12;
        i+1 >= Sum f + 1 = deg (o-term p) & a in T & deg r = deg (o-term p)
        by A14,A12,A13,Th29,XREAL_1:6,XBOOLE_0:def 4;
        hence a in T deg<= (i+1);
      end;
      hence thesis by A10,XBOOLE_1:8;
    end;

theorem
  T height<= (i+1) = T height<= 0 \/ {o-term p:
    union {height t: t in rng p} c= i}
  /\ Union the Sorts of T
  proof
    set I = {o-term p: union {height t: t in rng p} c= i};
    thus T height<= (i+1) c= T height<= 0 \/ I /\ Union the Sorts of T
    proof
      let a be object; assume a in T height<= (i+1);
      then consider t such that
A2:   a = t & t in T & height t <= i+1;
      per cases by Th16;
      suppose ex s,x st t = x-term;
        then t in the set of all x-term;
        then t in (the set of all x-term) \/
        {o-term p: o-term p in T & the_arity_of o = {}} by XBOOLE_0:def 3;
        then t in T height<= 0 by Th12;
        hence thesis by A2,XBOOLE_0:def 3;
      end;
      suppose ex o,p st t = o-term p;
        then consider o,p such that
A3:     t = o-term p;
        reconsider n = union {height t1: t1 in rng p} as Nat by Th25;
        per cases;
        suppose the_arity_of o = {};
          then t in {o-term p where o,p: o-term p in T & the_arity_of o = {}}
          by A2,A3;
          then t in (the set of all x-term) \/
          {o-term p where o,p: o-term p in T & the_arity_of o = {}}
          by XBOOLE_0:def 3;
          then t in T height<= 0 by Th12;
          hence thesis by A2,XBOOLE_0:def 3;
        end;
        suppose the_arity_of o <> {};
          then height t = n + 1 by A3,Th26;
          then Segm n c= Segm i by A2,XREAL_1:6,NAT_1:39;
          then t in I & t in Union the Sorts of T by A2,A3;
          then t in I /\ Union the Sorts of T by XBOOLE_0:def 4;
          hence thesis by A2,XBOOLE_0:def 3;
        end;
      end;
    end;
A10: T height<= 0 c= T height<= (i+1) by Th10c;
      I /\ Union the Sorts of T c= T height<= (i+1)
      proof
        let a be object;
        assume
A15:    a in I /\ Union the Sorts of T;
        then a in I & a in Union the Sorts of T by XBOOLE_0:def 4;
        then consider o,p such that
A12:    a = o-term p & union {height t: t in rng p} c= i;
        reconsider n = union {height t: t in rng p} as Nat by Th25;
A13:    Segm n c= Segm i by A12;
A14:    a in T by A15,XBOOLE_0:def 4;
        per cases;
        suppose the_arity_of o <> {};
          then height(o-term p) = n+1 <= i+1 by A13,Th26,NAT_1:39,XREAL_1:6;
          hence a in T height<= (i+1) by A12,A14;
        end;
        suppose the_arity_of o = {};
          then height(o-term p) = 0 <= i+1 by Th20;
          hence a in T height<= (i+1) by A12,A14;
        end;
      end;
      hence thesis by A10,XBOOLE_1:8;
  end;

theorem
  deg t >= height t
  proof
    defpred P[Element of Free(S,X)] means deg $1 >= height $1;
A1: for s being SortSymbol of S, x being Element of X.s holds P[x-term]
    by TREES_1:42;
A2: for o being OperSymbol of S, p being Element of Args(o,Free(S,X)) st
      for t being Element of Free(S,X) st t in rng p holds P[t]
    holds P[o-term p]
    proof let o,p;
      assume
A3:   for t being Element of Free(S,X) st t in rng p holds P[t];
      per cases;
      suppose the_arity_of o = {};
        hence thesis by Th20;
      end;
      suppose
A4:     the_arity_of o <> {};
        set i = the Element of dom the_arity_of o;
        dom the_arity_of o <> {} by A4;
        then
A9:     i in dom the_arity_of o = dom p by MSUALG_3:6;
        then p/.i = p.i in rng p by PARTFUN1:def 6,FUNCT_1:def 3;
        then height(p/.i) in {height t1: t1 in rng p};
        then reconsider I = {height t1: t1 in rng p} as
        non empty finite natural-membered set by Th25;
        reconsider n = union I as Nat;
        union I in I by SIMPLEX0:9;
        then consider t1 such that
A7:     n = height t1 & t1 in rng p;
        consider i being object such that
A8:     i in dom p & t1 = p.i by A7,FUNCT_1:def 3;
        reconsider i as Element of NAT by A8;
A5:     height(o-term p) = n+1 by A4,Th26;
        deffunc G(object) = deg(p/.$1);
        consider g being Function such that
A6:     dom g = dom the_arity_of o &
        for i being object st i in dom the_arity_of o holds g.i = G(i)
        from FUNCT_1:sch 3;
        dom g = Seg len the_arity_of o by A6,FINSEQ_1:def 3;
        then reconsider g as FinSequence by FINSEQ_1:def 2;
        rng g c= NAT
        proof let a be object;
          assume a in rng g;
          then consider b being object such that
B2:       b in dom g & a = g.b by FUNCT_1:def 3;
          a = G(b) by A6,B2;
          hence thesis;
        end;
        then reconsider g as FinSequence of NAT by FINSEQ_1:def 4;
        now let i,t;
          assume i in dom the_arity_of o & t = p.i;
          then t = p/.i & g.i = G(i) by A6,A9,PARTFUN1:def 6;
          hence g.i = deg t;
        end;
        then
B3:     deg(o-term p) = Sum g + 1 by A6,Th29;
        Sum g >= g.i = G(i) = deg t1 >= n
        by A3,A7,A8,A9,A6,PARTFUN1:def 6,POLYNOM3:4;
        then Sum g >= n by XXREAL_0:2;
        hence deg(o-term p) >= height(o-term p) by B3,A5,XREAL_1:6;
      end;
    end;
    thus P[t] from TermInd(A1,A2);
  end;

theorem
  Union the Sorts of T = union {T deg<= i: not contradiction}
  proof
    thus Union the Sorts of T c= union {T deg<= i: not contradiction}
    proof
      let a; assume a in Union the Sorts of T;
      then reconsider t = a as Element of T;
      t in T deg<= deg t & T deg<= deg t in {T deg<= i: not contradiction};
      hence thesis by TARSKI:def 4;
    end;
    let a; assume a in union {T deg<= i: not contradiction};
    then consider I such that
A1: a in I & I in {T deg<= i: not contradiction} by TARSKI:def 4;
    consider i such that
A2: I = T deg<= i by A1;
    thus thesis by A1,A2;
  end;

theorem
  Union the Sorts of T = union {T height<= i: not contradiction}
  proof
    thus Union the Sorts of T c= union {T height<= i: not contradiction}
    proof
      let a; assume a in Union the Sorts of T;
      then reconsider t = a as Element of T;
      t in T height<= height t &
      T height<= height t in {T height<= i: not contradiction} by Th10a;
      hence thesis by TARSKI:def 4;
    end;
    let a; assume a in union {T height<= i: not contradiction};
    then consider I such that
A1: a in I & I in {T height<= i: not contradiction} by TARSKI:def 4;
    consider i such that
A2: I = T height<= i by A1;
    thus thesis by A1,A2;
  end;

theorem
  for i holds T deg<= i c= Free(S,X) deg<= i
  proof
    defpred P[Nat] means T deg<= $1 c= Free(S,X) deg<= $1;
    T deg<= 0 = Union FreeGen T & Free(S,X) deg<= 0 = Union FreeGen Free(S,X)
    by Th44;
    then
A0: P[0];
A1: now let i; assume P[i];
      thus P[i+1]
      proof
        let x be object; assume x in T deg<= (i+1);
        then consider r such that
A3:     x = r & deg r <= i+1;
        reconsider t = r as Element of Free(S,X) by MSAFREE4:39;
        deg t = deg r;
        hence thesis by A3;
      end;
    end;
    thus for i holds P[i] from NAT_1:sch 2(A0,A1);
  end;

begin :: Context

definition
  let S,X,T,s,x,r;
  attr r is x-context means: CONTEXT:
  card Coim(r,[x,s]) = 1;
  attr r is x-omitting means: OMIT:
  Coim(r,[x,s]) = {};
end;

definition
  let S,X,T,r;
  func vf r -> set equals proj1(rng r /\ [:Union X,the carrier of S:]);
  coherence;
end;

theorem ThR1:
  vf r = Union (X variables_in r)
  proof
    thus vf r c= Union (X variables_in r)
    proof
      let a; assume a in vf r;
      then consider b such that
A1:   [a,b] in rng r /\ [:Union X, the carrier of S:] by XTUPLE_0:def 12;
A2:   [a,b] in rng r & [a,b] in [:Union X, the carrier of S:]
      by A1,XBOOLE_0:def 4;
      then a in Union X & b in the carrier of S by ZFMISC_1:87;
      then consider c being object such that
A4:   c in dom X & a in X.c by CARD_5:2;
      reconsider b,c as SortSymbol of S by A4,A2,ZFMISC_1:87;
      consider d being object such that
A5:   d in dom r & [a,b] = r.d by A2,FUNCT_1:def 3;
      reconsider d as Element of dom r by A5;
      reconsider t = r|d as Element of T by MSAFREE4:44;
A7:   (X variables_in r).b = (X.b)/\{a`1 where a is Element of rng r: a`2 = b}
      by MSAFREE3:9;
      t is Element of Free(S,X) by MSAFREE4:39;
      then per cases by Th16;
      suppose ex s,x st t = x-term;
        then consider s,x such that
A6:     t = x-term;
        <*>NAT in (dom r)|d by TREES_1:22;
        then r.(d^{}) = t.{} by TREES_2:def 10
        .= [x,s] by A6,TREES_4:3;
        then
A8:     a = x & b = s by A5,XTUPLE_0:1;
        [a,b]`1 = a & [a,b]`2 = b;
        then a in {a`1 where a is Element of rng r: a`2 = b} by A2;
        then a in (X variables_in r).s &
        dom(X variables_in r) = the carrier of S
        by A7,A8,XBOOLE_0:def 4,PARTFUN1:def 2;
        hence thesis by CARD_5:2;
      end;
      suppose ex o,p st t = o-term p;
        then consider o,p such that
A6:     t = o-term p;
        <*>NAT in (dom r)|d by TREES_1:22;
        then r.(d^{}) = t.{} by TREES_2:def 10
        .= [o,the carrier of S] by A6,TREES_4:def 4;
        then
        b in the carrier of S = b by A5,XTUPLE_0:1;
        hence thesis;
      end;
    end;
    let a; assume a in Union (X variables_in r);
    then consider b such that
B1: b in dom (X variables_in r) & a in (X variables_in r).b by CARD_5:2;
    reconsider b as SortSymbol of S by B1;
    (X variables_in r).b = (X.b)/\{a`1 where a is Element of rng r: a`2 = b}
    by MSAFREE3:9;
    then
B2: a in X.b & a in {a`1 where a is Element of rng r: a`2 = b}
    by B1,XBOOLE_0:def 4;
    then consider q being Element of rng r such that
B3: a = q`1 & q`2 = b;
    dom X = the carrier of S by PARTFUN1:def 2;
    then a in Union X by B2,CARD_5:2;
    then
B6: [a,b] in [:Union X, the carrier of S:] by ZFMISC_1:87;
    consider xi being object such that
B4: xi in dom r & q = r.xi by FUNCT_1:def 3;
    reconsider xi as Element of dom r by B4;
    reconsider t = r|xi as Element of T by MSAFREE4:44;
    t is Element of Free(S,X) by MSAFREE4:39;
    then per cases by Th16;
    suppose ex s,x st t = x-term;
      then consider s,x such that
A6:   t = x-term;
      <*>NAT in (dom r)|xi by TREES_1:22;
      then r.(xi^{}) = t.{} by TREES_2:def 10
      .= [x,s] by A6,TREES_4:3;
      then [a,b] in rng r /\ [:Union X, the carrier of S:]
      by B6,B3,B4,XBOOLE_0:def 4;
      hence thesis by XTUPLE_0:def 12;
    end;
    suppose ex o,p st t = o-term p;
      then consider o,p such that
A6:   t = o-term p;
      <*>NAT in (dom r)|xi by TREES_1:22;
      then r.(xi^{}) = t.{} by TREES_2:def 10
      .= [o,the carrier of S] by A6,TREES_4:def 4;
      then
      b in the carrier of S = b by B3,B4;
      hence thesis;
    end;
  end;

theorem
  vf (x-term) = {x}
  proof
A1: rng (x-term) = {[x,s]} by FUNCOP_1:8;
    rng (x-term) c= [:Union X, the carrier of S:] by A1,ZFMISC_1:31,87;
    then rng (x-term) /\ [:Union X, the carrier of S:] = rng (x-term)
    by XBOOLE_1:28;
    hence thesis by A1,RELAT_1:9;
  end;

theorem
  vf (o-term p) = union {vf t: t in rng p}
  proof
B1: dom (X variables_in (o-term p)) = the carrier of S by PARTFUN1:def 2;
    thus vf (o-term p) c= union {vf t: t in rng p}
    proof
      let a; assume a in vf (o-term p);
      then a in Union(X variables_in (o-term p)) by ThR1;
      then consider b such that
A1:   b in dom (X variables_in (o-term p)) & a in (X variables_in (o-term p)).b
      by CARD_5:2;
      reconsider b as SortSymbol of S by A1;
      consider t being DecoratedTree such that
A2:   t in rng p & a in (X variables_in t).b by A1,MSAFREE3:13;
      reconsider t as Element of Free(S,X) by A2,RELAT_1:167;
A3:   dom (X variables_in t) = the carrier of S by PARTFUN1:def 2;
      a in Union(X variables_in t) = vf t in {vf t1: t1 in rng p}
      by A2,A3,ThR1,CARD_5:2;
      hence a in union {vf t1: t1 in rng p} by TARSKI:def 4;
    end;
    let a; assume a in union {vf t: t in rng p};
    then consider I such that
A4: a in I in {vf t: t in rng p} by TARSKI:def 4;
    consider t such that
A5: I = vf t & t in rng p by A4;
    a in Union(X variables_in t) by A4,A5,ThR1;
    then consider b such that
A6: b in dom(X variables_in t) & a in (X variables_in t).b by CARD_5:2;
    reconsider b as SortSymbol of S by A6;
    a in (X variables_in (o-term p)).b by A5,A6,MSAFREE3:13;
    then a in Union(X variables_in (o-term p)) by B1,CARD_5:2;
    hence thesis by ThR1;
  end;

registration
  let S,X,T,r;
  cluster vf r -> finite;
  coherence;
end;

theorem Th92:
  x nin vf r implies r is x-omitting
  proof
    assume x nin vf r;
    then
A1: [x,s] nin rng r /\ [:Union X, the carrier of S:] by XTUPLE_0:def 12;
    [x,s] in [:Union X, the carrier of S:] by ZFMISC_1:87;
    then [x,s] nin rng r by A1,XBOOLE_0:def 4;
    hence Coim(r,[x,s]) = {} by FUNCT_1:72;
  end;

definition
  let S,X,s,t;
  attr t is s-context means
  ex x st t is x-context;
end;

registration
  let S,X,s,x;
  cluster x-context -> s-context for Element of Free(S,X);
  coherence;
end;

registration
  let S,X,s,x;
  cluster x-term -> x-context;
  coherence
  proof set t = x-term;
    [x,s] in {[x,s]} by TARSKI:def 1;
    then Coim(t,[x,s]) = {{}} by TREES_1:29,FUNCOP_1:14;
    hence card Coim(t,[x,s]) = 1 by CARD_1:30;
  end;
end;

registration
  let S,X,s,x;
  cluster x-context non compound for Element of Free(S,X);
  existence
  proof
    take t = x-term;
    thus thesis;
  end;
  cluster x-omitting -> non x-context for Element of Free(S,X);
  coherence;
end;

theorem ThC1:
  for s1,s2 being SortSymbol of S
  for x1 being Element of X.s1
  for x2 being Element of X.s2
  holds s1 <> s2 or x1 <> x2 iff x1-term is x2-omitting
  proof
    let s1,s2 be SortSymbol of S;
    let x1 be Element of X.s1;
    let x2 be Element of X.s2;
    hereby
      assume s1 <> s2 or x1 <> x2;
      then [x1,s1] <> [x2,s2] by XTUPLE_0:1;
      then [x1,s1] nin {[x2,s2]} by TARSKI:def 1;
      hence x1-term is x2-omitting by FUNCOP_1:16;
    end;
    assume Coim(x1-term,[x2,s2]) = {};
    then [x1,s1] nin {[x2,s2]} by FUNCOP_1:14;
    hence s1 <> s2 or x1 <> x2 by TARSKI:def 1;
  end;

registration
  let S,s,s1,Z,z;
  let z9 be z-different Element of Z.s1;
  cluster z9-term -> z-omitting;
  coherence
  proof
    z9 <> z by DIFF;
    hence thesis by ThC1;
  end;
end;

registration
  let S,s,Z,z;
  cluster z-omitting for Element of Free(S,Z);
  existence
  proof
    consider y being Element of Z.s such that
A1: y <> z by SUBSET_1:50;
    take y-term;
    thus thesis by A1,ThC1;
  end;
end;

registration
  let S,s,s1,Z,z;
  let z1 be z-different Element of Z.s1;
  cluster z-omitting z1-context for Element of Free(S,Z);
  existence
  proof
    take z1-term;
    thus thesis;
  end;
end;

definition
  let S,X,s,x;
  mode context of x is x-context Element of Free(S,X);
end;

theorem Th27:
  for r being SortSymbol of S, y being Element of X.r holds
  x-term is context of y iff r = s & x = y
  proof
    let r be SortSymbol of S, y be Element of X.r;
A0: ([x,s] in {[y,r]} iff [x,s] = [y,r]) & (x-term).{} = [x,s] &
    Coim(x-term, [y,r]) c= dom(x-term) = {{}} & {} in {{}}
    by TARSKI:def 1,TREES_1:29,TREES_4:3,RELAT_1:132;
    (ex a st Coim(x-term, [y,r]) = {a}) implies Coim(x-term, [y,r]) = {{}}
    by A0,ZFMISC_1:33;
    then card Coim(x-term, [y,r]) = 1 implies Coim(x-term, [y,r]) = {{}}
    by CARD_2:42;
    hence thesis by A0,CONTEXT,XTUPLE_0:1,FUNCT_1:def 7;
  end;

definition
  let S,X,s;
  mode context of s,X is s-context Element of Free(S,X);
end;

reserve C for (context of x), C1 for (context of y), C9 for (context of z),
  C11 for (context of x11), C12 for (context of y11), D for context of s,X;

theorem
  C is context of s,X;

theorem Th95:
  x in vf C
  proof
    card Coim(C,[x,s]) = 1 by CONTEXT;
    then consider a such that
A1: Coim(C,[x,s]) = {a} by CARD_2:42;
    a in {a} by TARSKI:def 1;
    then a in dom C & C.a in {[x,s]} by A1,FUNCT_1:def 7;
    then
A2: [x,s] = C.a in rng C by TARSKI:def 1,FUNCT_1:def 3;
    [x,s] in [:Union X, the carrier of S:] by ZFMISC_1:87;
    then [x,s] in rng C /\ [:Union X, the carrier of S:] by A2,XBOOLE_0:def 4;
    hence thesis by XTUPLE_0:def 12;
  end;

definition
  let S,o,s,X,x,p;
  attr p is x-context_including means
  ex i st i in dom p & p.i is context of x &
  for j,t st j in dom p & j <> i & t = p.j
  holds t is x-omitting;
end;

registration
  let S,o,s,X,x;
  cluster x-context_including -> non empty for Element of Args(o,Free(S,X));
  coherence;
end;

theorem Th53:
  p is x-context_including iff o-term p is context of x
  proof
    set I = {[x,s]}; set k = p;
    reconsider J = [o,the carrier of S] as set;
    s in the carrier of S; then s <> the carrier of S;
    then [o,the carrier of S] <> [x,s] by XTUPLE_0:1;
    then [o,the carrier of S] nin I by TARSKI:def 1;
    then IFIN(J,I,{{}},{}) = {} by MATRIX_7:def 1;
    then
A5: (o-term k)"I = {} \/ union {<*i*>^^((k.(i+1))"I): i < len k} by Th80;
    thus k is x-context_including implies o-term k is context of x
    proof
      given i such that
A6:   i in dom k & k.i is context of x &
      for j for t being Element of Free(S,X) st j in dom k & j <> i & t = k.j
      holds t is x-omitting;
      reconsider C = k.i as context of x by A6;
      card Coim(C,[x,s]) = 1 by CONTEXT;
      then consider a such that
A9:   C"I = {a} by CARD_2:42;
      a in C"I by A9,TARSKI:def 1;
      then reconsider a as FinSequence;
      consider j such that
A7:   i = 1+j by A6,FINSEQ_3:25,NAT_1:10;
      1+j <= len k by A6,A7,FINSEQ_3:25;
      then
A8:   j < len k by NAT_1:13;
      union {<*i*>^^((k.(i+1))"I) where i: i < len k} = {<*j*>^a}
      proof
        thus union {<*i*>^^((k.(i+1))"I) where i: i < len k} c= {<*j*>^a}
        proof
          let b; assume b in union {<*i*>^^((k.(i+1))"I) where i: i < len k};
          then consider J such that
B1:       b in J in {<*i*>^^((k.(i+1))"I) where i: i < len k} by TARSKI:def 4;
          consider n being Nat such that
B2:       J = <*n*>^^((k.(n+1))"I) & n < len k by B1;
B4:       1 <= n+1 <= len k by B2,NAT_1:11,13;
          then n+1 in dom k by FINSEQ_3:25;
          then reconsider t = k.(n+1) as Element of Free(S,X) by FUNCT_1:102;
          per cases;
          suppose n = j;
            hence thesis by B1,B2,A9,A7,Th6;
          end;
          suppose n <> j;
            then n+1 <> j+1;
            then t is x-omitting by A6,A7,B4,FINSEQ_3:25;
            hence thesis by B1,B2;
          end;
        end;
        let b; assume b in {<*j*>^a};
        then b in <*j*>^^(C"I) in {<*i*>^^((k.(i+1))"I) where i: i < len k}
        by A7,A8,A9,Th6;
        hence thesis by TARSKI:def 4;
      end;
      then card Coim(o-term k,[x,s]) = 1 by A5,CARD_1:30;
      hence thesis by CONTEXT;
    end;
    assume o-term k is context of x;
    then card Coim(o-term k, [x,s]) = 1 by CONTEXT;
    then consider a such that
D1: Coim(o-term k, [x,s]) = {a} by CARD_2:42;
    a in (o-term k)"I by D1,TARSKI:def 1;
    then consider J such that
D2: a in J in {<*i*>^^((k.(i+1))"I): i < len k} by A5,TARSKI:def 4;
    consider i such that
D3: J = <*i*>^^((k.(i+1))"I) & i < len k by D2;
    consider p being Element of (k.(i+1))"I such that
D4: a = <*i*>^p & p in (k.(i+1))"I by D2,D3;
    take n = i+1;
    1 <= n <= len k by D3,NAT_1:11,13;
    hence n in dom k by FINSEQ_3:25;
    then reconsider kn = k.n as Element of Free(S,X) by FUNCT_1:102;
D6: {p} c= kn"I by D4,ZFMISC_1:31;
    J c= {a} = <*i*>^^{p} by A5,D1,D2,D4,Th6,ZFMISC_1:74;
    then kn"I c= {p} by D3,Th18;
    then kn"I = {p} by D6,XBOOLE_0:def 10;
    then card Coim(kn,[x,s]) = 1 by CARD_1:30;
    hence k.n is context of x by CONTEXT;
    let j;
    let t be Element of Free(S,X); assume
D7: j in dom k & j <> n & t = k.j;
    assume Coim(t,[x,s]) <> {};
    then consider c being object such that
D8: c in Coim(t,[x,s]) by XBOOLE_0:7;
    reconsider c as Node of t by D8,FUNCT_1:def 7;
    consider m being Nat such that
D9: j = 1+m by D7,FINSEQ_3:25,NAT_1:10;
    1+m <= len k by D7,D9,FINSEQ_3:25;
    then m < len k by NAT_1:13;
    then <*m*>^c in <*m*>^^(t"I) in
    {<*i*>^^((k.(i+1))"I) where i: i < len k} by D7,D8,D9;
    then <*m*>^c in {a} by A5,D1,TARSKI:def 4;
    then <*m*>^c = <*i*>^p by D4,TARSKI:def 1;
    then m = (<*m*>^c).1 = i by FINSEQ_1:41;
    hence contradiction by D7,D9;
  end;

theorem Th54:
  (for i st i in dom p holds p/.i is x-omitting) iff o-term p is x-omitting
  proof
    set I = {[x,s]}; set k = p;
    reconsider J = [o,the carrier of S] as set;
    s in the carrier of S; then s <> the carrier of S;
    then [o,the carrier of S] <> [x,s] by XTUPLE_0:1;
    then [o,the carrier of S] nin I by TARSKI:def 1;
    then IFIN(J,I,{{}},{}) = {} by MATRIX_7:def 1;
    then
A5: (o-term k)"I = {} \/ union {<*i*>^^((k.(i+1))"I): i < len k} by Th80;
    hereby assume
A6:   for i st i in dom p holds p/.i is x-omitting;
      thus o-term p is x-omitting
      proof
        assume Coim(o-term p,[x,s]) <> {};
        then consider a such that
A7:     a in Coim(o-term p,[x,s]) by XBOOLE_0:7;
        consider J such that
A8:     a in J in {<*i*>^^((k.(i+1))"I): i < len k} by A5,A7,TARSKI:def 4;
        consider i such that
A9:     J = <*i*>^^((p.(i+1))"I) & i < len p by A8;
        1 <= i+1 <= len p by A9,NAT_1:11,13;
        then p/.(i+1) = p.(i+1) & p/.(i+1) is x-omitting
        by A6,FINSEQ_3:25,PARTFUN1:def 6;
        hence contradiction by A8,A9;
      end;
    end;
    assume
B1: Coim(o-term p,[x,s]) = {};
    let i; assume
B2: i in dom p;
    then consider j such that
B3: i = 1+j by NAT_1:10,FINSEQ_3:25;
    1+j <= len p by B2,B3,FINSEQ_3:25;
    then j < len p by NAT_1:13;
    then <*j*>^^((p.i)"I) in {<*i*>^^((k.(i+1))"I) where i: i < len k} by B3;
    then <*j*>^^((p.i)"I) c= {} = <*j*>^^{} by A5,B1,ZFMISC_1:74;
    then (p.i)"I c= {} & p/.i = p.i by B2,Th18,PARTFUN1:def 6;
    hence Coim(p/.i,[x,s]) = {};
  end;

theorem Th54A:
  (for t st t in rng p holds t is x-omitting) iff o-term p is x-omitting
  proof
A0: now assume
A1:   for i st i in dom p holds p/.i is x-omitting;
      let t; assume t in rng p;
      then consider i being object such that
A2:   i in dom p & t = p.i by FUNCT_1:def 3;
      reconsider i as Nat by A2;
      t = p/.i by A2,PARTFUN1:def 6;
      hence t is x-omitting by A1,A2;
    end;
    now assume
A3:   for t st t in rng p holds t is x-omitting;
      let i; assume i in dom p;
      then p/.i = p.i in rng p by FUNCT_1:def 3,PARTFUN1:def 6;
      hence p/.i is x-omitting by A3;
    end;
    hence thesis by A0,Th54;
  end;

definition
  let S,s,o;
  attr o is s-dependent means: DEP: s in rng the_arity_of o;
end;

registration
  let S be sufficiently_rich non void non empty ManySortedSign;
  let s be SortSymbol of S;
  cluster s-dependent for OperSymbol of S;
  existence
  proof
    consider o be OperSymbol of S such that
A1: s in rng the_arity_of o by SR;
    take o;
    thus s in rng the_arity_of o by A1;
  end;
end;

reserve
  S9 for sufficiently_rich non empty non void ManySortedSign,
  s9 for SortSymbol of S9,
  o9 for s9-dependent OperSymbol of S9,
  X9 for non-trivial ManySortedSet of the carrier of S9,
  x9 for (Element of X9.s9);

registration
  let S9,s9,o9,X9,x9;
  cluster x9-context_including for Element of Args(o9,Free(S9,X9));
  existence
  proof
    s9 in rng the_arity_of o9 by DEP;
    then consider i being object such that
A1: i in dom the_arity_of o9 & s9 = (the_arity_of o9).i by FUNCT_1:def 3;
    reconsider i as Nat by A1;
A2: s9 = (the_arity_of o9)/.i by A1,PARTFUN1:def 6;
    deffunc F(Nat) = IFEQ($1,i,x9-term,
    (the x9-different Element of X9.((the_arity_of o9)/.$1))-term);
    consider f being FinSequence such that
A3: len f = len the_arity_of o9 & for i st i in dom f holds f.i = F(i)
    from FINSEQ_1:sch 2;
    now
      let j; assume j in dom f;
      then f.j = F(j) & (i = j or i <> j) by A3;
      then i = j & f.j = x9-term or
      f.j = (the x9-different Element of X9.((the_arity_of o9)/.j))-term
      by FUNCOP_1:def 8;
      hence f.j in (the Sorts of Free(S9,X9)).((the_arity_of o9)/.j) by A2;
    end;
    then reconsider f as Element of Args(o9,Free(S9,X9)) by A3,MSAFREE2:5;
    take f,i;
    thus i in dom f by A1,A3,FINSEQ_3:29;
    then f.i = F(i) by A3 .= x9-term by FUNCOP_1:def 8;
    hence f.i is context of x9;
    let j; let t be Element of Free(S9,X9);
    assume j in dom f & j <> i;
    then f.j = F(j)
    = (the x9-different Element of X9.((the_arity_of o9)/.j))-term
    by A3,FUNCOP_1:def 8;
    hence t = f.j implies t is x9-omitting;
  end;
end;

registration
  let S9,X9,s9,x9,o9;
  let p9 be x9-context_including Element of Args(o9,Free(S9,X9));
  cluster o9-term p9 -> x9-context;
  coherence by Th53;
end;

definition
  let S,o,s,X,x,p such that
A: p is x-context_including;
   consider i such that
B: i in dom p & p.i is context of x &
   for j for t being Element of Free(S,X) st j in dom p & j <> i & t = p.j
   holds t is x-omitting by A;
  func x-context_pos_in p -> Nat means: CPI:
  p.it is context of x;
  existence by B;
  uniqueness
  proof let i1,i2 be Nat such that
A1: p.i1 is context of x and
A2: p.i2 is context of x;
    reconsider C1 = p.i1, C2 = p.i2 as context of x by A1,A2;
    i1 in dom p & i2 in dom p by A1,A2,FUNCT_1:def 2;
    then (i1 <> i implies C1 is x-omitting) &
    (i2 <> i implies C2 is x-omitting) by B;
    hence i1 = i2;
  end;
  func x-context_in p -> context of x means: CIn:
  it in rng p;
  existence
  proof
    reconsider t = p.i as context of x by B;
    take t;
    thus t in rng p by B,FUNCT_1:def 3;
  end;
  uniqueness
  proof
    let t1,t2 be context of x such that
A3: t1 in rng p and
A4: t2 in rng p;
    consider i1 being object such that
A5: i1 in dom p & t1 = p.i1 by A3,FUNCT_1:def 3;
    consider i2 being object such that
A6: i2 in dom p & t2 = p.i2 by A4,FUNCT_1:def 3;
    reconsider i1,i2 as Nat by A5,A6;
A7: i1 <> i implies t1 is x-omitting by B,A5;
    i2 <> i implies t2 is x-omitting by B,A6;
    hence thesis by A5,A6,A7;
  end;
end;

theorem Th71:
  p is x-context_including implies x-context_pos_in p in dom p &
  x-context_in p = p.(x-context_pos_in p)
  proof
    assume
A0: p is x-context_including;
    then
A1: p.(x-context_pos_in p) is context of x by CPI;
    thus x-context_pos_in p in dom p by A0,CPI;
    then p.(x-context_pos_in p) in rng p by FUNCT_1:def 3;
    hence thesis by A0,A1,CIn;
  end;

theorem Th72:
  p is x-context_including & x-context_pos_in p <> i in dom p implies
  p/.i is x-omitting
  proof
    assume
A1: p is x-context_including & x-context_pos_in p <> i in dom p;
    then consider j such that
A2: j in dom p & p.j is context of x &
    for n being Nat for t st n in dom p & n <> j & t = p.n
    holds t is x-omitting;
A3: x-context_pos_in p = j by A1,A2,CPI;
    p/.i = p.i by A1,PARTFUN1:def 6;
    hence p/.i is x-omitting by A1,A2,A3;
  end;

theorem Th73:
  p is x-context_including implies p just_once_values x-context_in p
  proof set k = p, z = x;
    assume
A0: k is z-context_including;
    Coim(k, z-context_in k) = {z-context_pos_in k}
    proof
      thus Coim(k, z-context_in k) c= {z-context_pos_in k}
      proof
        let a; reconsider x = a as set by TARSKI:1;
        assume a in Coim(k, z-context_in k);
        then x in dom k & k.x in {z-context_in k} by FUNCT_1:def 7;
        then x is Nat & k.x = z-context_in k by TARSKI:def 1;
        then x = z-context_pos_in k by A0,CPI;
        hence a in {z-context_pos_in k} by TARSKI:def 1;
      end;
      let a be Nat;
      assume a in {z-context_pos_in k};
      then a = z-context_pos_in k by TARSKI:def 1;
      then k.a = z-context_in k by A0,Th71;
      then a in dom k & k.a in {z-context_in k} by TARSKI:def 1,FUNCT_1:def 2;
      hence thesis by FUNCT_1:def 7;
    end;
    hence card Coim(k, z-context_in k) = 1 by CARD_1:30;
  end;

theorem
  p is x-context_including implies p<-(x-context_in p) = x-context_pos_in p
  proof
    assume
A1: p is x-context_including;
    then p just_once_values x-context_in p by Th73;
    then p<-(x-context_in p) in dom p &
    p.(p<-(x-context_in p)) = x-context_in p by FINSEQ_4:def 3;
    hence thesis by A1,CPI;
  end;

theorem
  C = x-term or
  ex o,p st p is x-context_including & C = o-term p
  proof
    per cases by Th16;
    suppose ex s,x st C = x-term;
      then consider s0 being SortSymbol of S, y being Element of X.s0 such that
A1:   C = y-term;
      s0 = s & x = y by A1,Th27;
      hence thesis by A1;
    end;
    suppose ex o,p st C = o-term p;
      then consider o,p such that
A2:   C = o-term p;
      thus thesis by A2,Th53;
    end;
  end;

registration
  let S9,X9,s9,x9;
  cluster x9-context compound for Element of Free(S9,X9);
  existence
  proof
    set o9 = the s9-dependent OperSymbol of S9;
    set p9 = the x9-context_including Element of Args(o9,Free(S9,X9));
    take t = o9-term p9;
    thus t is x9-context;
    thus t is compound;
  end;
end;

scheme ContextInd{P[set],
  S() -> non empty non void ManySortedSign,
  s() -> SortSymbol of S(),
  X() -> non-empty ManySortedSet of the carrier of S(),
  x() -> (Element of X().s()),
  C() -> context of x()}:
  P[C()]
  provided
A0: P[x()-term] and
A1: for o being OperSymbol of S()
    for w being Element of Args(o, Free(S(),X()))
    st w is x()-context_including
    holds P[x()-context_in w] implies
    for C being context of x() st C = o-term w holds P[C]
proof
  defpred Q[Element of Free(S(),X())] means $1 is context of x() implies P[$1];
A2: for s being SortSymbol of S(), x being Element of X().s holds Q[x-term]
    proof
      let s be SortSymbol of S(), x being Element of X().s;
      assume x-term is context of x();
      then s = s() & x = x() by Th27;
      hence P[x-term] by A0;
    end;
A3: for o being OperSymbol of S(), p being Element of Args(o,Free(S(),X())) st
      for t being Element of Free(S(),X()) st t in rng p holds Q[t]
    holds Q[o-term p]
    proof
      let o be OperSymbol of S(), p be Element of Args(o,Free(S(),X())) such
      that
A4:   for t being Element of Free(S(),X()) st t in rng p holds Q[t] and
A5:   o-term p is context of x();
      p is x()-context_including by A5,Th53;
      then x()-context_in p in rng p by CIn;
      then P[x()-context_in p] by A4;
      hence thesis by A1,A5,Th53;
    end;
    Q[C()] from TermInd(A2,A3);
    hence P[C()];
end;

theorem Th23:
  t is x-omitting implies (t,[x,s])<-t1 = t
  proof assume
A1: Coim(t,[x,s]) = {};
    reconsider dt = dom t as set;
AA: dom ((t,[x,s])<-t1) = dt
    proof
      thus dom ((t,[x,s])<-t1) c= dt
      proof let a; assume a in dom ((t,[x,s])<-t1);
        then reconsider r = a as Node of (t,[x,s])<-t1;
        per cases by TREES_4:def 7;
        suppose r in dom t;
          hence thesis;
        end;
        suppose ex q being Node of t, p being Node of t1 st
          q in Leaves dom t & t.q = [x,s] & r = q^p;
          then consider q being Node of t, p being Node of t1 such that
A2:       q in Leaves dom t & t.q = [x,s] & r = q^p;
          [x,s] in {[x,s]} by TARSKI:def 1;
          hence thesis by A1,A2,FUNCT_1:def 7;
        end;
      end;
      thus dt c= dom ((t,[x,s])<-t1) by TREES_4:def 7;
    end;
    now let a; assume a in dom t;
      then reconsider r = a as Node of t;
      [x,s] in {[x,s]} by TARSKI:def 1;
      then t.r <> [x,s] by A1,FUNCT_1:def 7;
      hence ((t,[x,s])<-t1).a = t.a by TREES_4:def 7;
    end;
    hence thesis by AA,FUNCT_1:2;
  end;

theorem aaa1:
  the_sort_of t1 = s implies
  (t,[x,s])<-t1 in (the Sorts of Free(S,X)).the_sort_of t
  proof assume
A:  the_sort_of t1 = s;
    defpred P[Element of Free(S,X)] means
    ($1,[x,s])<-t1 in (the Sorts of Free(S,X)).the_sort_of $1;
A0: for s1 for y being Element of X.s1 holds P[y-term]
    proof
      let s1; let y be Element of X.s1;
      per cases by XTUPLE_0:1;
      suppose s1 = s & y = x;
        then (y-term,[x,s])<-t1 = t1 & the_sort_of (y-term) = s by SORT;
        hence (y-term,[x,s])<-t1 in
        (the Sorts of Free(S,X)).the_sort_of (y-term) by A,SORT;
      end;
      suppose [y,s1] <> [x,s];
        then (y-term,[x,s])<-t1 = y-term & the_sort_of (y-term) = s1
        by SORT,ThL7;
        hence (y-term,[x,s])<-t1 in
        (the Sorts of Free(S,X)).the_sort_of (y-term);
      end;
    end;
A1: for o for p st for t2 st t2 in rng p holds P[t2] holds P[o-term p]
    proof let o; let p; assume
A3:   for t2 st t2 in rng p holds P[t2];
      per cases;
      suppose p = {};
        then
A2:     o-term p = root-tree [o,the carrier of S] by TREES_4:20;
        s in the carrier of S; then s <> the carrier of S;
        then [x,s] <> [o, the carrier of S] by XTUPLE_0:1;
        then (o-term p,[x,s])<-t1 = o-term p by A2,ThL7;
        hence thesis by SORT;
      end;
      suppose
A2:     p <> {};
        deffunc F(Nat) = (p/.$1,[x,s])<-t1;
        consider q being FinSequence such that
A4:     len q = len p & for i st i in dom q holds q.i = F(i)
        from FINSEQ_1:sch 2;
A5:     dom q = dom p <> {} by A2,A4,FINSEQ_3:29;
A6:     p is non empty & q is non empty by A2,A4;
A8:     dom p = dom the_arity_of o by MSUALG_6:2;
        then
A9:     len q = len the_arity_of o by A4,FINSEQ_3:29;
        now let i;
          assume
B1:       i in dom q;
          then
B2:       p/.i = p.i by A5,PARTFUN1:def 6;
          then p/.i in rng p by B1,A5,FUNCT_1:def 3;
          then
B3:       P[p/.i] & q.i = F(i) by A3,A4,B1;
          p.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
          by B1,A5,A8,MSUALG_6:2;
          hence q.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
          by B3,B2,SORT;
        end;
        then reconsider q as Element of Args(o,Free(S,X)) by A9,MSAFREE2:5;
        now let i,d1; assume i in dom p & d1 = p.i;
          then q.i = F(i) & p/.i = d1 by A4,A5,PARTFUN1:def 6;
          hence q.i = (d1,[x,s])<-t1;
        end;
        then
A7:     (o-term p,[x,s])<-t1 = o-term q by A6,ThL8,A4,FINSEQ_3:29;
        the_sort_of (o-term p) = the_result_sort_of o = the_sort_of (o-term q)
        by Th8;
        hence thesis by A7;
      end;
    end;
    thus P[t] from TermInd(A0,A1);
  end;

definition
  let S,X,s,x,C,t such that
A: the_sort_of t = s;
  func C-sub(t) -> Element of (the Sorts of Free(S,X)).the_sort_of C equals:
SUB:
  (C,[x,s])<-t;
  coherence
  proof
    defpred P[Element of Free(S,X)] means
    ($1,[x,s])<-t is Element of (the Sorts of Free(S,X)).the_sort_of $1;
    (x-term,[x,s])<-t = t & the_sort_of (x-term) = s by SORT;
    then
A0: P[x-term] by A,SORT;
A1: for o for p st p is x-context_including
    holds P[x-context_in p] implies
    for C being context of x st C = o-term p holds P[C]
    proof let o; let p; assume that
A2:   p is x-context_including and
A3:   P[x-context_in p];
      deffunc F(Nat) = (p/.$1,[x,s])<-t;
      consider q being FinSequence such that
A4:   len q = len p & for i st i in dom q holds q.i = F(i) from FINSEQ_1:sch 2;
A5:   dom q = dom p <> {} by A2,A4,FINSEQ_3:29;
A6:   p is non empty & q is non empty by A2,A4;
A8:   dom p = dom the_arity_of o by MSUALG_6:2;
      then
A9:   len q = len the_arity_of o by A4,FINSEQ_3:29;
      now let i;
        assume
B1:     i in dom q;
        then
B2:     p/.i = p.i by A5,PARTFUN1:def 6;
        per cases;
        suppose x-context_pos_in p = i;
          then
B3:       x-context_in p = p.i & q.i = F(i) by B1,A4,A2,Th71;
          p.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
          by B1,A5,A8,MSUALG_6:2;
          then the_sort_of (x-context_in p) = (the_arity_of o)/.i by B3,SORT;
          hence q.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
          by B2,B3,A3;
        end;
        suppose x-context_pos_in p <> i;
          then q.i = F(i) = p.i by A4,B1,B2,A2,A5,Th72,Th23;
          hence q.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
          by B1,A5,A8,MSUALG_6:2;
        end;
      end;
      then reconsider q as Element of Args(o,Free(S,X)) by A9,MSAFREE2:5;
      now let i,d1; assume i in dom p & d1 = p.i;
        then q.i = F(i) & p/.i = d1 by A4,A5,PARTFUN1:def 6;
        hence q.i = (d1,[x,s])<-t;
      end;
      then (o-term p,[x,s])<-t = o-term q by A6,ThL8,A4,FINSEQ_3:29;
      hence thesis by Th8;
    end;
    thus P[C] from ContextInd(A0,A1);
  end;
end;

theorem Th41:
  the_sort_of t = s implies (x-term)-sub(t) = t
  proof assume the_sort_of t = s;
    hence (x-term)-sub(t) = (x-term,[x,s])<-t by SUB .= t;
  end;

registration
  let S,X,s,x,C;
  reduce C-sub(x-term) to C;
  reducibility
  proof
    defpred P[Element of Free(S,X)] means ($1,[x,s])<-(x-term) = $1;
A1: P[x-term];
A2: for o for p st p is x-context_including
    holds P[x-context_in p] implies
    for C being context of x st C = o-term p holds P[C]
    proof let o; let p; assume that
A2:   p is x-context_including and
A3:   P[x-context_in p];
      set t = x-term;
      deffunc F(Nat) = (p/.$1,[x,s])<-t;
      now let i,d1; assume
B1:     i in dom p & d1 = p.i;
        then
B2:     p/.i = d1 by PARTFUN1:def 6;
        per cases;
        suppose x-context_pos_in p = i;
          then x-context_in p = p.i by A2,Th71;
          hence p.i = (d1,[x,s])<-t by A3,B1;
        end;
        suppose x-context_pos_in p <> i;
          hence p.i = (d1,[x,s])<-t by B1,B2,A2,Th72,Th23;
        end;
      end;
      hence thesis by A2,ThL8;
    end;
AA: P[C] from ContextInd(A1,A2);
    the_sort_of (x-term) = s by SORT;
    hence thesis by AA,SUB;
  end;
end;

theorem Th42:
  for w being Element of Args(o,Free(S,Z)) for t being Element of Free(S,Z)
  st w is z-context_including &
  the_sort_of t = (the_arity_of o).(z-context_pos_in w)
  holds w+*(z-context_pos_in w,t) in Args(o,Free(S,Z))
  proof
    let w be Element of Args(o,Free(S,Z));
    let t be Element of Free(S,Z);
    assume
A1: w is z-context_including &
    the_sort_of t = (the_arity_of o).(z-context_pos_in w);
A2: dom (w+*(z-context_pos_in w,t)) = dom w = dom the_arity_of o
    by FUNCT_7:30,MSUALG_6:2;
    then
A3: len (w+*(z-context_pos_in w,t)) = len the_arity_of o by FINSEQ_3:29;
    now
      let i; assume
A4:   i in dom w;
      per cases;
      suppose i = z-context_pos_in w;
        then (w+*(z-context_pos_in w,t)).i = t &
        the_sort_of t = (the_arity_of o)/.i
        by A1,A2,A4,PARTFUN1:def 6,FUNCT_7:31;
        hence (w+*(z-context_pos_in w,t)).i in
        (the Sorts of Free(S,Z)).((the_arity_of o)/.i) by SORT;
      end;
      suppose i <> z-context_pos_in w;
        then (w+*(z-context_pos_in w,t)).i = w.i by FUNCT_7:32;
        hence (w+*(z-context_pos_in w,t)).i in
        (the Sorts of Free(S,Z)).((the_arity_of o)/.i) by A2,A4,MSUALG_6:2;
      end;
    end;
    hence w+*(z-context_pos_in w,t) in Args(o,Free(S,Z)) by A2,A3,MSAFREE2:5;
  end;

theorem Th94:
  the_sort_of C9 = s1 implies
  for z1 being z-different Element of Z.s1
  for C1 being z-omitting context of z1 holds C1-sub(C9) is context of z
  proof
    assume
A1: the_sort_of C9 = s1;
    let z1 be z-different Element of Z.s1;
    defpred P[Element of Free(S,Z)] means
    $1 is z-omitting implies ($1,[z1,s1])<-C9 is context of z;
A2: P[z1-term];
A3: for o for k st k is z1-context_including
    holds P[z1-context_in k] implies
    for C being context of z1 st C = o-term k holds P[C]
    proof let o; let k; set p = k; assume that
A2:   k is z1-context_including and
A3:   P[z1-context_in k];
      let C be context of z1;
      assume
AA:   C=o-term k;
      assume c: C is z-omitting;
      set t = C9;
      deffunc F(Nat) = (p/.$1,[z1,s1])<-t;
      consider q being FinSequence such that
A4:   len q = len p & for i st i in dom q holds q.i = F(i) from FINSEQ_1:sch 2;
A5:   dom q = dom p <> {} by A2,A4,FINSEQ_3:29;
      then
A6:   p is non empty & q is non empty;
A8:   dom p = dom the_arity_of o by MSUALG_6:2;
      then
A9:   len q = len the_arity_of o by A5,FINSEQ_3:29;
      now let i;
        assume
B1:     i in dom q;
        then
B2:     p/.i = p.i by A5,PARTFUN1:def 6;
        per cases;
        suppose z1-context_pos_in p = i;
          then
B3:       z1-context_in p = p.i & q.i = F(i) & p/.i is z-omitting
          by c,AA,A5,A4,A2,Th71,Th54;
          p.i in (the Sorts of Free(S,Z)).((the_arity_of o)/.i)
          by B1,A5,A8,MSUALG_6:2;
          then the_sort_of (z1-context_in p) = (the_arity_of o)/.i by B3,SORT;
          hence q.i in (the Sorts of Free(S,Z)).((the_arity_of o)/.i)
          by A1,B2,B3,aaa1;
        end;
        suppose z1-context_pos_in p <> i;
          then p/.i is z1-omitting by A2,A5,B1,Th72;
          then q.i = F(i) = p.i by A4,B1,B2,Th23;
          hence q.i in (the Sorts of Free(S,Z)).((the_arity_of o)/.i)
          by B1,A5,A8,MSUALG_6:2;
        end;
      end;
      then reconsider q as Element of Args(o,Free(S,Z)) by A9,MSAFREE2:5;
      now let i,d1; assume i in dom p & d1 = p.i;
        then q.i = F(i) & p/.i = d1 by A4,A5,PARTFUN1:def 6;
        hence q.i = (d1,[z1,s1])<-t;
      end;
      then
A7:   (o-term p,[z1,s1])<-t = [o,the carrier of S]-tree q by A5,A6,ThL8
      .= o-term q;
      q is z-context_including
      proof
        take i = z1-context_pos_in p;
        thus i in dom q by A2,A5,Th71;
        then
B2:     p/.i = p.i by A5,PARTFUN1:def 6;
        z1-context_in p = p.i & q.i = F(i) & p/.i is z-omitting
        by c,AA,A5,A4,A2,Th71,Th54;
        hence q.i is context of z by B2,A3;
        let j; let q1 be Element of Free(S,Z);
        assume
B4:     j in dom q & j <> i & q1 = q.j;
        then
B5:     p/.j = p.j by A5,PARTFUN1:def 6;
        p/.j is z1-omitting by A2,B4,A5,Th72;
        then q1 = F(j) = p.j by B4,A4,B5,Th23;
        hence q1 is z-omitting by c,B5,B4,A5,AA,Th54;
      end;
      hence thesis by AA,A7,Th53;
    end;
    let C1 be z-omitting context of z1;
    P[C1] from ContextInd(A2,A3);
    hence thesis by A1,SUB;
  end;

theorem Th43:
  for w,p being Element of Args(o,Free(S,Z)) for t being Element of Free(S,Z)
  st w is z-context_including & C9 = o-term w &
  p = w+*(z-context_pos_in w, (z-context_in w)-sub(t)) &
  the_sort_of t = s
  holds C9-sub(t) = o-term p
  proof
    let w,p be Element of Args(o,Free(S,Z));
    let t be Element of Free(S,Z);
    assume that
A1: w is z-context_including and
A2: C9 = o-term w and
A3: p = w+*(z-context_pos_in w, (z-context_in w)-sub(t)) and
A4: the_sort_of t = s;
A5: dom p = dom the_arity_of o = dom w <> {} by A1,MSUALG_3:6;
    then reconsider v = w, q = p as non empty DTree-yielding FinSequence;
    now let i,d1; assume
A6:   i in dom v & d1 = v.i;
A7:   (z-context_in w)-sub(t) = (z-context_in w,[z,s])<-t by A4,SUB;
      per cases;
      suppose
A8:     i = z-context_pos_in w;
        then d1 = z-context_in w by A1,A6,Th71;
        hence q.i = (d1,[z,s])<-t by A3,A6,A7,A8,FUNCT_7:31;
      end;
      suppose
A8:     i <> z-context_pos_in w;
        then w/.i is z-omitting & w/.i = d1 by A1,A6,Th72,PARTFUN1:def 6;
        then (d1,[z,s])<-t = d1 by Th23;
        hence q.i = (d1,[z,s])<-t by A3,A6,A8,FUNCT_7:32;
      end;
    end;
    then ([o,the carrier of S]-tree v,[z,s])<-t
    = [o,the carrier of S]-tree q by A5,ThL8;
    hence C9-sub(t) = o-term p by A2,A4,SUB;
  end;

theorem
  the_sort_of (C-sub t) = the_sort_of C by SORT;

theorem Lem13:
  t.a = [x,s] implies a in Leaves dom t
  proof
    assume Z0: t.a = [x,s];
    then reconsider q = a as Element of dom t by FUNCT_1:def 2;
    reconsider v = t|q as Element of Free(S,X) by MSAFREE4:44;
    {} in (dom t)|q by TREES_1:22;
    then
A2: v.{} = t.(q^<*>NAT) by TREES_2:def 10;
    per cases by Th16;
    suppose ex o,p st v = o-term p;
      then consider o,p such that
A1:   v = o-term p;
      [o,the carrier of S] = v.{} = [x,s] by Z0,A1,A2,TREES_4:def 4;
      then s in the carrier of S = s by XTUPLE_0:1;
      hence a in Leaves dom t;
    end;
    suppose ex s1,x11 st v = x11-term;
      then consider s1,x11 such that
A1:   v = x11-term;
      reconsider r = <*0*> as FinSequence of NAT;
      now assume q^<*0*> in dom t;
        then r in (dom t)|q = dom v by TREES_1:def 6,TREES_2:def 10;
        then <*0*> in {{}} by A1,TREES_1:29;
        hence contradiction;
      end;
      hence a in Leaves dom t by TREES_1:54;
    end;
  end;

theorem Th45A:
  for s0 being SortSymbol of S, x0 being Element of X.s0 holds
  the_sort_of t = s & C is x0-omitting & t is x0-omitting implies
  C-sub t is x0-omitting
  proof
    let s0 be SortSymbol of S;
    let x0 be Element of X.s0;
    assume the_sort_of t = s;
    then
A1: C-sub t = (C,[x,s])<-t by SUB;
    assume Z1: Coim(C,[x0,s0]) = {};
    assume Z2: Coim(t,[x0,s0]) = {};
    assume Coim(C-sub t, [x0,s0]) <> {};
    then consider a such that
A2: a in Coim(C-sub t, [x0,s0]) by XBOOLE_0:7;
A3: a in dom(C-sub t) & (C-sub t).a in {[x0,s0]} by A2,FUNCT_1:def 7;
    reconsider a as Element of dom(C-sub t) by A2,FUNCT_1:def 7;
A5: now given q being Node of C, r being Node of t such that
B1:   q in Leaves dom C & C.q = [x,s] & a = q^r;
      (C-sub t).a = t.r by A1,B1,TREES_4:def 7;
      hence contradiction by Z2,A3,FUNCT_1:def 7;
    end;
    per cases by A1,TREES_4:def 7;
    suppose
B3:   a in dom C & C.a <> [x,s];
      then (C-sub t).a = C.a by A1,TREES_4:def 7;
      hence contradiction by Z1,A3,B3,FUNCT_1:def 7;
    end;
    suppose
B2:   a in dom C & C.a = [x,s];
      then reconsider q = a as Node of C;
      reconsider r = {} as Node of t by TREES_1:22;
      q^r = a & q in Leaves dom C by B2,Lem13;
      hence contradiction by A5,B2;
    end;
    suppose ex q being Node of C, r being Node of t st
      q in Leaves dom C & C.q = [x,s] & a = q^r;
      hence contradiction by A5;
    end;
  end;

theorem Th46:
  p is x-context_including implies
  the_sort_of (x-context_in p) = (the_arity_of o).(x-context_pos_in p)
  proof
    assume p is x-context_including;
    then x-context_pos_in p in dom p = dom the_arity_of o &
    x-context_in p = p.(x-context_pos_in p) by Th71,MSUALG_3:6;
    then (the_arity_of o)/.(x-context_pos_in p) =
    (the_arity_of o).(x-context_pos_in p) & x-context_in p in
    (the Sorts of Free(S,X)).((the_arity_of o)/.(x-context_pos_in p))
    by PARTFUN1:def 6,MSUALG_6:2;
    hence the_sort_of (x-context_in p) = (the_arity_of o).(x-context_pos_in p)
    by SORT;
  end;

theorem Th47:
  for A being disjoint_valued non-empty MSAlgebra over S
  for B being non-empty MSAlgebra over S
  for o being OperSymbol of S, p,q being Element of Args(o,A)
  for h being ManySortedFunction of A,B, a being Element of A
  for i st i in dom p & q = p+*(i,a) holds h#q = (h#p)+*(i,h.a)
  proof
    let A be disjoint_valued non-empty MSAlgebra over S;
    let B be non-empty MSAlgebra over S;
    let o be OperSymbol of S;
    let p,q be Element of Args(o,A);
    let h be ManySortedFunction of A,B;
    let a be Element of A;
    let i;
    assume Z0: i in dom p;
    assume Z1: q = p+*(i,a);
A1: dom (h#q) = dom the_arity_of o = dom (h#p) = dom((h#p)+*(i,h.a)) &
    dom q = dom the_arity_of o = dom p by MSUALG_3:6,FUNCT_7:30;
    now let j be object;
      assume
A2:   j in dom (h#q);
      then reconsider k = j as Nat;
A3:   (h#q).k = h.((the_arity_of o)/.k).(q.k) &
      (h#p).k = h.((the_arity_of o)/.k).(p.k) by A1,A2,MSUALG_3:def 6;
      q.i = a by Z0,Z1,FUNCT_7:31;
      then a in (the Sorts of A).((the_arity_of o)/.i) by Z0,A1,MSUALG_6:2;
      then the_sort_of a = (the_arity_of o)/.i by SORT;
      then
A5:   h.((the_arity_of o)/.i).a = h.a by ABBR;
      per cases;
      suppose
A4:     j = i;
        hence (h#q).j = h.((the_arity_of o)/.k).a by Z1,A1,A2,A3,FUNCT_7:31
        .= ((h#p)+*(i,h.a)).j by A4,A5,A1,A2,FUNCT_7:31;
      end;
      suppose
A6:     j <> i;
        hence (h#q).j = h.((the_arity_of o)/.k).(p.k) by Z1,A3,FUNCT_7:32
        .= ((h#p)+*(i,h.a)).j by A3,A6,FUNCT_7:32;
      end;
    end;
    hence h#q = (h#p)+*(i,h.a) by A1,FUNCT_1:2;
  end;

theorem
  for t being Element of Free(S,Z) holds
  the_sort_of t = s implies
  (canonical_homomorphism R).(C9-sub(t))
  = (canonical_homomorphism R).(C9-sub @((canonical_homomorphism R).t))
  proof let t be Element of Free(S,Z); assume
A1: the_sort_of t = s;
    set H = canonical_homomorphism R;
    defpred P[context of z] means
    H.($1-sub(t)) = H.($1-sub @(H.t));
B1: the_sort_of @(H.t) = the_sort_of (H.t) by Lem00
    .= the_sort_of t by Lem0;
B3: the_sort_of ((z-term)-sub @(H.t)) = the_sort_of (z-term) by SORT
    .= s by SORT;
A2: P[z-term]
    proof
B5:   dom(H**H) = (dom H)/\dom H = dom H = the carrier of S
      by PARTFUN1:def 2,PBOOLE:def 19;
B6:   t in (the Sorts of Free(S,Z)).s & (the Sorts of R).s <> {} &
      H.s is Function of (the Sorts of Free(S,Z)).s, (the Sorts of R).s
      by A1,SORT;
B4:   (z-term)-sub t = t & (z-term)-sub @(H.t) = H.t = H.s.t
      by A1,B1,Th41,ABBR;
      hence H.((z-term)-sub t) = (H**H).s.t by MSAFREE4:48
      .= ((H.s)*(H.s)).t by B5,PBOOLE:def 19
      .= (H.s).((z-term)-sub @(H.t)) by B4,B6,FUNCT_2:15
      .= H.((z-term)-sub @(H.t)) by B3,ABBR;
    end;
A3: now
      let o be OperSymbol of S, p be Element of Args(o,Free(S,Z));
      assume
A4:   p is z-context_including;
      assume
A5:   P[z-context_in p];
      let C be context of z such that
A6:   C = o-term p;
C2:   the_sort_of ((z-context_in p)-sub t) =
      the_sort_of (z-context_in p) = (the_arity_of o).(z-context_pos_in p)
      by A4,Th46,SORT;
      then reconsider w = p+*(z-context_pos_in p,(z-context_in p)-sub t) as
      Element of Args(o,Free(S,Z)) by A4,Th42;
      Args(o,R) c= Args(o, Free(S,Z)) by MSAFREE4:41;
      then reconsider q = H#w, r = H#p as Element of Args(o,Free(S,Z));
C1:   the_sort_of @(H.t) = the_sort_of (H.t) by Lem00 .= s by A1,Lem0;
C3:   the_sort_of ((z-context_in p)-sub @(H.t))
      = the_sort_of (z-context_in p) by SORT;
      reconsider m = p+*(z-context_pos_in p, (z-context_in p)-sub @(H.t)) as
      Element of Args(o,Free(S,Z)) by A4,C2,C3,Th42;
A9:   q = r+*(z-context_pos_in p,H.((z-context_in p)-sub @(H.t)))
      by A5,A4,Th71,Th47
      .= H#m by A4,Th71,Th47;
      C-sub t = o-term w by A1,A4,A6,Th43;
      then
      H.(C-sub t) = H.(the_sort_of (o-term w)).(o-term w) by ABBR
      .= H.(the_result_sort_of o).(o-term w) by Th8
      .= H.(the_result_sort_of o).(Den(o,Free(S,Z)).w) by MSAFREE4:13
      .= Den(o,R).(H#w) by MSAFREE4:def 10,MSUALG_3:def 7
      .= H.(the_result_sort_of o).(Den(o,Free(S,Z)).m)
      by A9,MSAFREE4:def 10,MSUALG_3:def 7
      .= H.(the_result_sort_of o).(o-term m) by MSAFREE4:13
      .= H.(the_sort_of (o-term m)).(o-term m) by Th8
      .= H.(o-term m) by ABBR
      .= H.(C-sub @(H.t)) by C1,A4,A6,Th43;
      hence P[C];
    end;
    thus P[C9] from ContextInd(A2,A3);
  end;

definition
  let S,X,T,s,x;
  let h be ManySortedFunction of Free(S,X), T;
  attr h is x-constant means: CNST:
  h.(x-term) = x-term &
  for s1 for x1 being Element of X.s1 st x1 <> x or s <> s1
  holds h.(x1-term) is x-omitting;
end;

theorem Th51:
 canonical_homomorphism T is x-constant
  proof set H = canonical_homomorphism T;
    thus H.(x-term) = x-term;
    let s1; let x1 be Element of X.s1;
    assume x1 <> x or s <> s1;
    then x1-term is x-omitting by ThC1;
    hence thesis;
  end;

registration
  let S,X,T,s,x;
  cluster x-constant for Homomorphism of Free(S,X), T;
  existence
  proof
    take canonical_homomorphism T;
    thus thesis by Th51;
  end;
end;

reserve h1 for x-constant Homomorphism of Free(S,X), T,
  h2 for y-constant Homomorphism of Free(S,Y), Q;

definition
  let x,y be object;
  func x<->y -> Function equals
  {[x,y],[y,x]};
  coherence
  proof set f = {[x,y],[y,x]};
    f is Function-like
    proof
      let a,b,c be object;
      assume [a,b] in f & [a,c] in f;
      then ([a,b] = [x,y] or [a,b] = [y,x]) & ([a,c] = [x,y] or [a,c] = [y,x])
      by TARSKI:def 2;
      then (a = x & b = y or a = y & b = x) & (a = x & c = y or a = y & c = x)
      by XTUPLE_0:1;
      hence thesis;
    end;
    hence thesis;
  end;
  commutativity;
end;

theorem LemS:
  dom (a<->b) = {a,b} & (a<->b).a = b & (a<->b).b = a & rng (a<->b) = {a,b}
  proof
    [a,b] in a<->b & [b,a] in a<->b by TARSKI:def 2;
    hence thesis by RELAT_1:10,FUNCT_1:1;
  end;

registration
  let A be non empty set;
  let a,b be Element of A;
  cluster a<->b -> A-valued A-defined;
  coherence
  proof
A1: {a,b} c= A;
    hence rng (a<->b) c= A by LemS;
    thus dom (a<->b) c= A by A1,LemS;
  end;
end;

definition
  let A be set, B be non empty set;
  let f be Function of A,B;
  let g be A-defined B-valued Function;
  redefine func f+*g -> Function of A,B;  :: redefines +* (FUNCT_4, definition)
  coherence
  proof
A1: dom g c= A & rng g c= B & dom f = A & rng f c= B
    by RELAT_1:def 19,FUNCT_2:def 1;
    then
A2: dom (f+*g) = dom f\/dom g = A by XBOOLE_1:12,FUNCT_4:def 1;
    rng (f+*g) c= rng f \/ rng g c= B \/ B by A1,XBOOLE_1:13,FUNCT_4:17;
    then rng (f+*g) c= B;
    hence thesis by A2,FUNCT_2:2;
  end;
end;

definition
  let I be non empty set;
  let A,B be ManySortedSet of I;
  let f be ManySortedFunction of A,B;
  let x be Element of I;
  let g be Function of A.x,B.x;
  redefine func f+*(x,g) -> ManySortedFunction of A,B;  :: redefines +* (FUNCT_7, definition)
  coherence
  proof
A3: dom f = I by PARTFUN1:def 2;
    reconsider h = f+*(x,g) as ManySortedSet of I;
    h is ManySortedFunction of A,B
    proof
      let a be object; assume a in I;
      per cases;
      suppose a = x;
        hence h.a is Function of A.a,B.a by A3,FUNCT_7:31;
      end;
      suppose a <> x;
        then h.a = f.a by FUNCT_7:32;
        hence thesis;
      end;
    end;
    hence thesis;
  end;
end;

definition
  let S,X, T;
  let s,x1,x2;
  func Hom(T,x1,x2) -> Endomorphism of T means: HOM:
  it.s.(x1-term) = x2-term & it.s.(x2-term) = x1-term &
  for s1 for y being Element of X.s1 st s1 <> s or y <> x1 & y <> x2
  holds it.s1.(y-term) = y-term;
  existence
  proof
    reconsider y1 = x1-term, y2 = x2-term as Element of (FreeGen T).s by Th119;
    set f = (id FreeGen T)+*(s,((id FreeGen T).s)+*(y1<->y2));
A8: dom id FreeGen T = the carrier of S by PARTFUN1:def 2;
    then
A5: f.s = ((id FreeGen T).s)+*(y1<->y2) by FUNCT_7:31;
A6: dom (y1<->y2) = {y1,y2} & y1 in {y1,y2} & y2 in{y1,y2}
    by LemS,TARSKI:def 2;
    f is ManySortedFunction of FreeGen T, the Sorts of T &
    FreeGen X = FreeGen T by MSAFREE4:22;
    then consider h being ManySortedFunction of T,T such that
A1: h is_homomorphism T,T & h || FreeGen T = f by MSAFREE4:def 9;
    reconsider h as Endomorphism of T by A1,MSUALG_6:def 2;
    take h;
    thus h.s.(x1-term) = ((h.s)|((FreeGen T).s)).(x1-term) by Th119,FUNCT_1:49
    .= (h||FreeGen T).s.(x1-term) by MSAFREE:def 1
    .= (y1<->y2).y1 by A1,A5,A6,FUNCT_4:13
    .= x2-term by LemS;
    thus h.s.(x2-term) = ((h.s)|((FreeGen T).s)).(x2-term) by Th119,FUNCT_1:49
    .= (h||FreeGen T).s.(x2-term) by MSAFREE:def 1
    .= (y1<->y2).y2 by A1,A5,A6,FUNCT_4:13
    .= x1-term by LemS;
    let s1; let y be Element of X.s1;
B5: y-term in (FreeGen T).s1 by Th119;
B6: h.s1.(y-term) = ((h.s1)|((FreeGen T).s1)).(y-term) by Th119,FUNCT_1:49
    .= (h||FreeGen T).s1.(y-term) by MSAFREE:def 1;
    assume s1 <> s or y <> x1 & y <> x2;
    then per cases;
    suppose s1 <> s;
      hence h.s1.(y-term) = ((id FreeGen T).s1).(y-term)
      by A1,B6,FUNCT_7:32
      .= (id ((FreeGen T).s1)).(y-term) by MSUALG_3:def 1
      .= y-term by B5,FUNCT_1:17;
    end;
    suppose
A7:   s1 = s & y <> x1 & y <> x2;
      then [y,s1] <> [x1,s] & [y,s1] <> [x2,s] by XTUPLE_0:1;
      then y-term <> x1-term & y-term <> x2-term by TREES_4:4;
      then
A9:   y-term nin {y1,y2} by TARSKI:def 2;
      thus h.s1.(y-term) = (((id FreeGen T).s1)+*(y1<->y2)).(y-term)
      by A1,A8,B6,A7,FUNCT_7:31
      .= ((id FreeGen T).s1).(y-term) by A6,A9,FUNCT_4:11
      .= (id ((FreeGen T).s1)).(y-term) by MSUALG_3:def 1
      .= y-term by B5,FUNCT_1:17;
    end;
  end;
  uniqueness
  proof let h1,h2 be Endomorphism of T such that
A1: h1.s.(x1-term) = x2-term & h1.s.(x2-term) = x1-term &
    for s1 for y being Element of X.s1 st s1 <> s or y <> x1 & y <> x2
    holds h1.s1.(y-term) = y-term and
A2: h2.s.(x1-term) = x2-term & h2.s.(x2-term) = x1-term &
    for s1 for y being Element of X.s1 st s1 <> s or y <> x1 & y <> x2
    holds h2.s1.(y-term) = y-term;
    set s0 = s;
A3: h1 is_homomorphism T,T & h2 is_homomorphism T,T by MSUALG_6:def 2;
    h1||FreeGen T = h2||FreeGen T
    proof
      let s;
      thus (h1||FreeGen T).s = (h2||FreeGen T).s
      proof
A6:     (h1||FreeGen T).s = (h1.s)|((FreeGen T).s) &
        (h2||FreeGen T).s = (h2.s)|((FreeGen T).s) by MSAFREE:def 1;
        let t being Element of (FreeGen T).s;
        t in (FreeGen T).s;
        then t in FreeGen(s,X) by MSAFREE:def 16;
        then consider x being set such that
A5:     x in X.s & t = root-tree [x,s] by MSAFREE:def 15;
        reconsider x as Element of X.s by A5;
A7:     (h1.s)|((FreeGen T).s).t = h1.s.t & (h2.s)|((FreeGen T).s).t = h2.s.t
        by FUNCT_1:49;
        per cases;
        suppose
A9:       x = x1 & s0 = s;
          hence (h1||FreeGen T).s.t = x2-term by A1,A5,A7,MSAFREE:def 1
          .= (h2||FreeGen T).s.t by A2,A5,A7,A9,MSAFREE:def 1;
        end;
        suppose
A9:       x = x2 & s0 = s;
          hence (h1||FreeGen T).s.t = x1-term by A1,A5,A7,MSAFREE:def 1
          .= (h2||FreeGen T).s.t by A2,A5,A7,A9,MSAFREE:def 1;
        end;
        suppose
A9:       x <> x1 & x <> x2 or s0 <> s;
          hence (h1||FreeGen T).s.t = x-term by A1,A5,A6,A7
          .= (h2||FreeGen T).s.t by A2,A5,A6,A7,A9;
        end;
      end;
    end;
    hence h1 = h2 by A3,EXTENS_1:19;
  end;
end;

theorem Th52:
  for h being Endomorphism of T st
  (for s,x holds h.s.(x-term) = x-term) holds h = id the Sorts of T
  proof
    let h be Endomorphism of T;
A1: id the Sorts of T is_homomorphism T,T by MSUALG_3:9;
A2: h is_homomorphism T,T by MSUALG_6:def 2;
    assume Z0: for s,x holds h.s.(x-term) = x-term;
    h||FreeGen T = (id the Sorts of T)||FreeGen T
    proof
      let s be SortSymbol of S;
      thus (h||FreeGen T).s = ((id the Sorts of T)||FreeGen T).s
      proof
        let t be Element of (FreeGen T).s;
A6:     (FreeGen T).s c= (the Sorts of T).s by PBOOLE:def 2,def 18;
        (FreeGen T).s = FreeGen(s,X) by MSAFREE:def 16;
        then consider x being set such that
A4:     x in X.s & t = root-tree [x,s] by MSAFREE:def 15;
        reconsider x as Element of X.s by A4;
        thus (h||FreeGen T).s.t = ((h.s)|((FreeGen T).s)).t by MSAFREE:def 1
        .= h.s.(x-term) by A4,FUNCT_1:49
        .= x-term by Z0
        .= (id ((the Sorts of T).s)).t by A4,A6,FUNCT_1:18
        .= ((id the Sorts of T).s).t by MSUALG_3:def 1
        .= (((id the Sorts of T).s)|((FreeGen T).s)).t by FUNCT_1:49
        .= ((id the Sorts of T)||FreeGen T).s.t by MSAFREE:def 1;
      end;
    end;
    hence h = id the Sorts of T by A1,A2,EXTENS_1:19;
  end;

theorem
  Hom(T,x,x) = id the Sorts of T
  proof
    set h = Hom(T,x,x);
    for s,x holds h.s.(x-term) = x-term
    proof
      let s1,x11;
      per cases;
      suppose s1 = s & x11 = x;
        hence h.s1.(x11-term) = x11-term by HOM;
      end;
      suppose s1 <> s or x11 <> x;
        hence thesis by HOM;
      end;
    end;
    hence thesis by Th52;
  end;

theorem Th56:
  Hom(T,x1,x2) = Hom(T,x2,x1)
  proof
    Hom(T,x2,x1).s.(x1-term) = x2-term & Hom(T,x2,x1).s.(x2-term) = x1-term &
    for s1 for y being Element of X.s1 st s1 <> s or y <> x1 & y <> x2
    holds Hom(T,x2,x1).s1.(y-term) = y-term by HOM;
    hence thesis by HOM;
  end;

theorem Th157:
  Hom(T,x1,x2)**Hom(T,x1,x2) = id the Sorts of T
  proof
    set h = Hom(T,x1,x2);
    for s,x holds (h**h).s.(x-term) = x-term
    proof
      let s1,x11;
A2:   (FreeGen T).s1 c= (the Sorts of T).s1 by PBOOLE:def 2,def 18;
A3:   x11-term in FreeGen(s1,X) = (FreeGen T).s1 by MSAFREE:def 15,def 16;
A4:   ((h.s1)*(h.s1)).(x11-term) = (h.s1).((h.s1).(x11-term))
      by A2,A3,FUNCT_2:15;
      per cases;
      suppose s1 = s & x11 = x1;
        then h.s1.(x11-term) = x2-term & h.s1.(x2-term) = x11-term by HOM;
        hence thesis by A4,MSUALG_3:2;
      end;
      suppose s1 = s & x11 = x2;
        then h.s1.(x11-term) = x1-term & h.s1.(x1-term) = x11-term by HOM;
        hence thesis by A4,MSUALG_3:2;
      end;
      suppose s1 <> s or x11 <> x1 & x11 <> x2;
        then h.s1.(x11-term) = x11-term by HOM;
        hence thesis by A4,MSUALG_3:2;
      end;
    end;
    hence thesis by Th52;
  end;

theorem Th78:
  r is x1-omitting x2-omitting implies Hom(T,x1,x2).r = r
  proof
    set s0 = s;
    defpred P[Element of T] means $1 is x1-omitting x2-omitting implies
    Hom(T,x1,x2).(the_sort_of $1).$1 = $1;
A1: for s,x,r st r = x-term holds P[r]
    proof
      let s,x,r;
      assume Z0: r = x-term;
      assume r is x1-omitting & r is x2-omitting;
      then x-term is x1-omitting x2-omitting by Z0;
      then (s0 <> s or x <> x1) & (s0 <> s or x <> x2);
      then Hom(T,x1,x2).s.r = r & the_sort_of @r = the_sort_of r
      by Z0,HOM,Lem00;
      hence Hom(T,x1,x2).(the_sort_of r).r = r by Z0,SORT;
    end;
A2: for o, p, r st r = o-term p &
      for t being Element of T st t in rng p holds P[t]
    holds P[r]
    proof
      let o, p, r;
      assume Z1: r = o-term p;
      assume Z2: for t being Element of T st t in rng p holds P[t];
      assume r is x1-omitting x2-omitting;
      then
Z4:   o-term p is x1-omitting x2-omitting by Z1;
A9:   the_sort_of @r = the_sort_of r by Lem00;
      then the_sort_of r = the_result_sort_of o by Z1,Th8;
      then
      o-term p in (the Sorts of T).the_result_sort_of o by Z1,SORT;
      then
A5:   Den(o,Free(S,X)).p in (the Sorts of T).the_result_sort_of o
      by MSAFREE4:13;
      then reconsider q = p as Element of Args(o,T) by MSAFREE4:def 8;
A7:   Den(o,T).q = Den(o,Free(S,X)).p = o-term p by A5,MSAFREE4:def 8,13;
A8:   Hom(T,x1,x2).(the_result_sort_of o).r = Den(o,T).(Hom(T,x1,x2)#q)
      by Z1,A7,MSUALG_3:def 7,MSUALG_6:def 2;
      q = Hom(T,x1,x2)#q
      proof
B1:     dom q = dom the_arity_of o = dom (Hom(T,x1,x2)#q) by MSUALG_3:6;
        hence len q = len (Hom(T,x1,x2)#q) by FINSEQ_3:29;
        let i; assume
B5:     1 <= i <= len q;
        then
B4:     i in dom q by FINSEQ_3:25;
        then
B2:     p/.i is x1-omitting x2-omitting & p/.i = p.i = q/.i & p.i in rng p
        by Z4,Th54,FUNCT_1:def 3,PARTFUN1:def 6;
        then q/.i is x1-omitting x2-omitting;
        then
B3:     Hom(T,x1,x2).(the_sort_of (q/.i)).(q/.i) = q/.i by Z2,B2;
        q/.i in (the Sorts of T).((the_arity_of o)/.i)
        by B1,B5,B2,FINSEQ_3:25,MSUALG_6:2;
        then the_sort_of (q/.i) = (the_arity_of o)/.i by SORT;
        hence q.i = (Hom(T,x1,x2)#q).i by B4,B2,B3,MSUALG_3:def 6;
      end;
      hence Hom(T,x1,x2).(the_sort_of r).r = r by Z1,A9,A7,A8,Th8;
    end;
    P[r] from TermAlgebraInd(A1,A2);
    hence thesis by ABBR;
  end;

registration
  let S,X,T,s,x;
  reduce (canonical_homomorphism T).s.(x-term) to x-term;
  reducibility
  proof
    x-term in T by Th24;
    then reconsider t = x-term as Element of T;
    the_sort_of (x-term) = s & the_sort_of t = the_sort_of @t by SORT,Lem00;
    then t in (the Sorts of T).s by SORT;
    hence thesis by MSAFREE4:47;
  end;
end;

theorem Th66:
  (canonical_homomorphism T)**Hom(Free(S,X),x,x1) =
  Hom(T,x,x1)**canonical_homomorphism T
  proof
    set H = canonical_homomorphism T;
    set h = Hom(T,x,x1);
    set g = Hom(Free(S,X),x,x1);
    defpred P[Element of Free(S,X)] means (H**g).$1 = (h**H).$1;
A1: for s,x holds P[x-term]
    proof
      let s1; let a be Element of X.s1;
      set r = a-term;
      the_sort_of r = s1 by SORT;
      then
B1:   (H**g).r = (H**g).s1.r & (h**H).r = (h**H).s1.r & H.r = H.s1.r by ABBR;
B2:   (H**g).s1 = (H.s1)*(g.s1) & (h**H).s1 = (h.s1)*(H.s1) by MSUALG_3:2;
B3:   (H**g).r = H.s1.(g.s1.r) & (h**H).r = h.s1.(H.s1.r) by B1,B2,FUNCT_2:15;
      per cases;
      suppose
C1:     s = s1 & a = x;
        then g.s1.r = x1-term & h.s1.r = x1-term by HOM;
        hence thesis by C1,B3;
      end;
      suppose
C2:     s = s1 & a = x1;
        then g.s1.r = x-term & h.s1.r = x-term by HOM;
        hence thesis by C2,B3;
      end;
      suppose
        s <> s1 or a <> x & a <> x1;
        then g.s1.r = r & h.s1.r = r by HOM;
        hence thesis by B3;
      end;
    end;
A2: for o being OperSymbol of S, p being Element of Args(o,Free(S,X))
    st for t being Element of Free(S,X) st t in rng p holds P[t]
    holds P[o-term p]
    proof
      let o be OperSymbol of S;
      let p be Element of Args(o,Free(S,X));
      assume Z0: for t being Element of Free(S,X) st t in rng p holds P[t];
A4:   Den(o,Free(S,X)).p = o-term p by MSAFREE4:13;
      set q = o-term p;
      set r = the_sort_of q;
A5:   r = the_result_sort_of o by Th8;
A10:  g is_homomorphism Free(S,X),Free(S,X) & h is_homomorphism T,T &
      H is_homomorphism Free(S,X),T by MSUALG_6:def 2,MSAFREE4:def 10;
A8:   (H**g)#p = (h**H)#p
      proof
A9:     dom ((H**g)#p) = dom the_arity_of o = dom ((h**H)#p) by MSUALG_3:6;
        hence len ((H**g)#p) = len ((h**H)#p) by FINSEQ_3:29;
        let i be Nat; assume
C0:     1 <= i <= len ((H**g)#p);
        then
C1:     i in dom ((H**g)#p) by FINSEQ_3:25;
C3:     dom p = dom the_arity_of o by MSUALG_6:2;
        then
C5:     p/.i = p.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
        by C0,A9,FINSEQ_3:25,PARTFUN1:def 6,MSUALG_6:2;
        then
C4:     the_sort_of (p/.i) = (the_arity_of o)/.i & p.i in rng p
        by A9,C1,C3,SORT,FUNCT_1:def 3;
        thus ((H**g)#p).i = ((H**g).((the_arity_of o)/.i)).(p/.i)
        by C0,C3,C5,A9,FINSEQ_3:25,MSUALG_3:def 6
        .= (H**g).(p/.i) by C4,ABBR
        .= (h**H).(p/.i) by Z0,C4,C5
        .= ((h**H).((the_arity_of o)/.i)).(p/.i) by C4,ABBR
        .= ((h**H)#p).i by C0,C3,C5,A9,FINSEQ_3:25,MSUALG_3:def 6;
      end;
      thus (H**g).q = (H**g).r.q by ABBR
      .= Den(o,T).((h**H)#p) by A8,A4,A5,A10,MSUALG_3:10,def 7
      .= (h**H).r.q by A4,A5,A10,MSUALG_3:10,def 7
      .= (h**H).q by ABBR;
    end;
    let s;
    thus (H**g).s = (h**H).s
    proof
      let t be Element of (the Sorts of Free(S,X)).s;
A3:   P[t] from TermInd(A1,A2);
      the_sort_of t = s by SORT;
      then (H**g).t = (H**g).s.t & (h**H).t = (h**H).s.t by ABBR;
      hence thesis by A3;
    end;
  end;

theorem
  for r being Element of T,s holds
  Hom(T,x1,x2).s.r = ((canonical_homomorphism T)**Hom(Free(S,X),x1,x2)).s.r
  proof let r be Element of T,s;
    the Sorts of T is MSSubset of Free(S,X) by MSAFREE4:def 6;
    then
A1: (the Sorts of T).s c= (the Sorts of Free(S,X)).s
    by PBOOLE:def 2,def 18;
    ((canonical_homomorphism T)**Hom(Free(S,X),x1,x2)).s.r =
    (Hom(T,x1,x2)**canonical_homomorphism T).s.r =
    ((Hom(T,x1,x2).s)*((canonical_homomorphism T).s)).r =
    (Hom(T,x1,x2).s).((canonical_homomorphism T).s.r) =
    Hom(T,x1,x2).s.r by A1,Th66,MSUALG_3:2,FUNCT_2:15,MSAFREE4:47;
    hence thesis;
  end;

theorem
   x1 <> x2 & t is x2-omitting implies  Hom(Free(S,X),x1,x2).t is x1-omitting
  proof
    assume
A0: x1 <> x2;
    set T = Free(S,X);
    set h = Hom(T,x1,x2);
    set s0 = s;
    defpred P[Element of T] means
    $1 is x2-omitting implies h.$1 is x1-omitting;
A1: for s,x holds P[x-term]
    proof
      let s,x;
      set r = x-term;
      assume Z1: r is x2-omitting;
      per cases;
      suppose
A2:     s0 <> s or x1 <> x & x2 <> x;
        then Hom(T,x1,x2).s.r = r & the_sort_of @r = the_sort_of r
        by HOM;
        then Hom(T,x1,x2).(the_sort_of r).r = r & x-term is x1-omitting
        by A2,SORT,ThC1;
        hence h.r is x1-omitting by ABBR;
      end;
      suppose
        s0 = s & x1 = x;
        then h.s.r = x2-term & the_sort_of @r = the_sort_of r by HOM;
        then
A4:     h.(the_sort_of r).r = x2-term by SORT;
        x2-term is x1-omitting by A0,ThC1;
        hence h.r is x1-omitting by A4,ABBR;
      end;
      suppose
A3:     s0 = s & x2 = x;
        thus h.r is x1-omitting by Z1,A3;
      end;
    end;
A2: for o, p st for t being Element of T st t in rng p holds P[t]
    holds P[o-term p]
    proof
      let o, p;
      set r = o-term p;
      assume Z2: for t being Element of T st t in rng p holds P[t];
      assume
S4:   r is x2-omitting;
A6:   the_sort_of r = the_result_sort_of o by Th8;
      reconsider q = p as Element of Args(o,T);
      reconsider m = h#q as Element of Args(o,Free(S,X));
A7:   Den(o,T).q = Den(o,Free(S,X)).p = o-term p by MSAFREE4:13;
A9:   h.(the_result_sort_of o).r = Den(o,Free(S,X)).m
      by A7,MSUALG_3:def 7,MSUALG_6:def 2
      .= o-term m by MSAFREE4:13;
      now let i; assume
B1:     i in dom m;
B2:     dom m = dom the_arity_of o = dom p by MSUALG_3:6;
        then
B3:     p.i in rng p & p/.i = p.i = q/.i by B1,FUNCT_1:def 3,PARTFUN1:def 6;
        q/.i in (the Sorts of T).((the_arity_of o)/.i) by B1,B2,B3,MSUALG_6:2;
        then
B5:     the_sort_of (q/.i) = (the_arity_of o)/.i by SORT;
        m/.i = m.i = h.((the_arity_of o)/.i).(q/.i)
        by B1,PARTFUN1:def 6,B2,B3,MSUALG_3:def 6;
        then h.(q/.i) = m/.i & p/.i is x2-omitting by B1,B2,S4,B5,ABBR,Th54;
        hence m/.i is x1-omitting by B3,Z2;
      end;
      then o-term m is x1-omitting by Th54;
      hence h.r is x1-omitting by A6,A9,ABBR;
    end;
    thus P[t] from TermInd(A1,A2);
  end;

theorem Th3A:
  for A being finite Subset of Union the Sorts of Free(S,Y)
  ex y st for v st v in A holds v is y-omitting
  proof
    let A be finite Subset of Union the Sorts of Free(S,Y);
    set I = union {vf v: v in A};
A0: A is finite;
    deffunc F(Element of Free(S,Y)) = vf $1;
A1: {F(v): v in A} is finite from FRAENKEL:sch 21(A0);
    now let a be set; assume a in {F(v): v in A};
      then ex v st a = F(v) & v in A;
      hence a is finite;
    end;
    then reconsider I as finite set by A1,FINSET_1:7;
    set y = the Element of Y.s \ I;
    reconsider y as Element of Y.s;
    take y;
    let v;
    assume v in A;
    then F(v) in {F(v1): v1 in A};
    then y nin I & F(v) c= I by XBOOLE_0:def 5,ZFMISC_1:74;
    hence v is y-omitting by Th92;
  end;

definition
  let S,X,T;
  attr T is struct-invariant means
  for o for p being Element of Args(o,T) st Den(o,T).p = Den(o,Free(S,X)).p
  for s,x1,x2 holds
  Den(o,T).(Hom(T,x1,x2)#p) = Den(o,Free(S,X)).(Hom(T,x1,x2)#p);
end;

theorem
  T is struct-invariant implies for r being Element of T,s holds
  Hom(T,x1,x2).s.r = Hom(Free(S,X),x1,x2).s.r
  proof assume
AA: for o for p being Element of Args(o,T) st Den(o,T).p = Den(o,Free(S,X)).p
    for s,x1,x2 holds
    Den(o,T).(Hom(T,x1,x2)#p) = Den(o,Free(S,X)).(Hom(T,x1,x2)#p);
    set h = Hom(T,x1,x2);
    set g = Hom(Free(S,X),x1,x2);
    defpred P[Element of T] means
    h.(the_sort_of $1).$1 = g.(the_sort_of $1).$1;
A1: for s,x,r st r = x-term holds P[r]
    proof let s1,x11,r; assume
A2:   r = x11-term;
      then
A3:   the_sort_of r = the_sort_of @r = s1 by SORT,Lem00;
      per cases;
      suppose s = s1 & x11 = x1;
        then h.s1.r = x2-term & g.s1.r = x2-term by A2,HOM;
        hence thesis by A3;
      end;
      suppose s = s1 & x11 = x2;
        then h.s1.r = x1-term & g.s1.r = x1-term by A2,HOM;
        hence thesis by A3;
      end;
      suppose s <> s1 or x11 <> x1 & x11 <> x2;
        then h.s1.r = r & g.s1.r = r by A2,HOM;
        hence thesis by A3;
      end;
    end;
A4: for o,p,r st r = o-term p &
    for t being Element of T st t in rng p holds P[t]
    holds P[r]
    proof
      let o,p,r;
      assume Z0: r = o-term p;
      assume Z1: for t being Element of T st t in rng p holds P[t];
A6:   r = Den(o,Free(S,X)).p by Z0,MSAFREE4:13;
A7:   r in (the Sorts of T).the_sort_of r &
      the_sort_of r = the_sort_of @r = the_result_sort_of o
      by Z0,SORT,Lem00;
      then reconsider q = p as Element of Args(o,T) by A6,MSAFREE4:def 8;
      r = Den(o,T).q by A6,A7,MSAFREE4:def 8;
      then
A8:   Den(o,T).(Hom(T,x1,x2)#q) = Den(o,Free(S,X)).(Hom(T,x1,x2)#q)
      by AA,A6;
      g#p = h#q
      proof
B1:     dom (g#p) = dom the_arity_of o = dom (h#q) by MSUALG_3:6;
        hence len (g#p) = len (h#q) by FINSEQ_3:29;
        let i be Nat; assume
C0:     1 <= i <= len(g#p);
        then
C1:     i in dom(g#p) by FINSEQ_3:25;
C3:     dom p = dom the_arity_of o by MSUALG_6:2;
        then
C5:     q/.i = q.i in (the Sorts of T).((the_arity_of o)/.i)
        by C0,B1,PARTFUN1:def 6,FINSEQ_3:25,MSUALG_6:2;
        then
C4:     the_sort_of (q/.i) = (the_arity_of o)/.i & p.i in rng p
        by B1,C1,C3,SORT,FUNCT_1:def 3;
        thus ((g)#p).i = ((g).((the_arity_of o)/.i)).(q/.i)
        by C0,C3,C5,B1,FINSEQ_3:25,MSUALG_3:def 6
        .= ((h).((the_arity_of o)/.i)).(q/.i) by C4,C5,Z1
        .= ((h)#q).i by C0,C3,C5,B1,FINSEQ_3:25,MSUALG_3:def 6;
      end;
      then g.(the_result_sort_of o).r = Den(o,Free(S,X)).(h#q)
      by A6,MSUALG_6:def 2,MSUALG_3:def 7
      .= h.(the_result_sort_of o).(Den(o,T).q)
      by A8,MSUALG_6:def 2,MSUALG_3:def 7
      .= h.(the_result_sort_of o).r by A6,A7,MSAFREE4:def 8;
      hence P[r] by A7;
    end;
    let r be Element of T,s;
A9: P[r] from TermAlgebraInd(A1,A4);
    the_sort_of r = s by SORT;
    hence thesis by A9;
  end;

theorem Th79:
  T is struct-invariant & x1 <> x2 & r is x2-omitting implies
  Hom(T,x1,x2).r is x1-omitting
  proof assume that
AA: for o for p being Element of Args(o,T) st Den(o,T).p = Den(o,Free(S,X)).p
    for s,x1,x2 holds
    Den(o,T).(Hom(T,x1,x2)#p) = Den(o,Free(S,X)).(Hom(T,x1,x2)#p) and
A0: x1 <> x2;
    set h = Hom(T,x1,x2);
    set s0 = s;
    defpred P[Element of T] means
    $1 is x2-omitting implies h.$1 is x1-omitting;
A1: for s,x,r st r = x-term holds P[r]
    proof
      let s,x,r;
      assume Z0: r = x-term;
      assume Z1: r is x2-omitting;
      per cases;
      suppose
A2:     s0 <> s or x1 <> x & x2 <> x;
        then Hom(T,x1,x2).s.r = r & the_sort_of @r = the_sort_of r
        by Z0,HOM,Lem00;
        then Hom(T,x1,x2).(the_sort_of r).r = r & x-term is x1-omitting
        by A2,Z0,SORT,ThC1;
        hence h.r is x1-omitting by Z0,ABBR;
      end;
      suppose
        s0 = s & x1 = x;
        then h.s.r = x2-term & the_sort_of @r = the_sort_of r by Z0,HOM,Lem00;
        then
A4:     h.(the_sort_of r).r = x2-term by Z0,SORT;
        x2-term is x1-omitting by A0,ThC1;
        hence h.r is x1-omitting by A4,ABBR;
      end;
      suppose
A3:     s0 = s & x2 = x;
        x2-term is non x2-omitting;
        hence h.r is x1-omitting by Z0,Z1,A3;
      end;
    end;
A2: for o, p, r st r = o-term p &
      for t being Element of T st t in rng p holds P[t]
    holds P[r]
    proof
      let o, p, r;
      assume Z1: r = o-term p;
      assume Z2: for t being Element of T st t in rng p holds P[t];
      assume r is x2-omitting;
      then
S3:   o-term p is x2-omitting by Z1;
      the_sort_of @r = the_sort_of r by Lem00;
      then
A6:   the_sort_of r = the_result_sort_of o by Z1,Th8;
      then o-term p in (the Sorts of T).the_result_sort_of o by Z1,SORT;
      then
A5:   Den(o,Free(S,X)).p in (the Sorts of T).the_result_sort_of o
      by MSAFREE4:13;
      then reconsider q = p as Element of Args(o,T) by MSAFREE4:def 8;
      Args(o,T) c= Args(o,Free(S,X)) by MSAFREE4:41;
      then reconsider m = h#q as Element of Args(o,Free(S,X));
A7:   Den(o,T).q = Den(o,Free(S,X)).p = o-term p by A5,MSAFREE4:def 8,13;
A9:   h.(the_result_sort_of o).r = Den(o,T).(h#q)
      by Z1,A7,MSUALG_3:def 7,MSUALG_6:def 2
      .= Den(o,Free(S,X)).m by AA,A7 .= o-term m by MSAFREE4:13;
      now let i; assume
B1:     i in dom m;
B2:     dom m = dom the_arity_of o = dom p by MSUALG_3:6;
        then
B3:     p.i in rng p & p/.i = p.i = q/.i by B1,FUNCT_1:def 3,PARTFUN1:def 6;
        then
B4:     P[q/.i] by Z2;
        q/.i in (the Sorts of T).((the_arity_of o)/.i) by B1,B2,B3,MSUALG_6:2;
        then
B5:     the_sort_of (q/.i) = (the_arity_of o)/.i by SORT;
        m/.i = m.i = h.((the_arity_of o)/.i).(q/.i)
        by B1,PARTFUN1:def 6,B2,B3,MSUALG_3:def 6;
        then h.(q/.i) = m/.i & p/.i is x2-omitting by B1,B2,S3,B5,ABBR,Th54;
        hence m/.i is x1-omitting by B3,B4,OMIT;
      end;
      then o-term m is x1-omitting by Th54;
      hence h.r is x1-omitting by A9,A6,ABBR;
    end;
    thus P[r] from TermAlgebraInd(A1,A2);
  end;

theorem Th68:
  Q is struct-invariant & v is y-omitting implies
  (canonical_homomorphism Q).v is y-omitting
  proof assume
AA: Q is struct-invariant;
    assume Z0: v is y-omitting;
    set H = canonical_homomorphism Q;
    assume Z1: H.v is non y-omitting;
    reconsider Hv = H.v as Element of Free(S,Y) by MSAFREE4:39;
    consider x being Element of Y.s such that
A1: for v1 st v1 in {v,Hv} holds v1 is x-omitting by Th3A;
    v in {v,Hv} & Hv in {v,Hv} by TARSKI:def 2;
    then
A2: v is x-omitting & Hv is x-omitting by A1;
    then
A4: x <> y & H.v is x-omitting by Z1;
A3: Hom(Q,x,y).(H.v) = (Hom(Q,x,y)**H).v by Th14
    .= (H**Hom(Free(S,Y),x,y)).v by Th66
    .= H.(Hom(Free(S,Y),x,y).v) by Th14
    .= H.v by Z0,A2,Th78;
    Hom(Q,x,y) = Hom(Q,y,x) by Th56;
    hence thesis by Z1,A3,AA,A4,Th79;
  end;

theorem Th77:
  Q is struct-invariant implies
  for p being Element of Args(o,Q) st
  for t being Element of Q st t in rng p holds t is y-omitting
  for t being Element of Q st t = Den(o,Q).p holds t is y-omitting
  proof assume ZZ: Q is struct-invariant;
    let p be Element of Args(o,Q);
    assume Z0: for t being Element of Q st t in rng p holds
    t is y-omitting;
    let t be Element of Q;
    assume t = Den(o,Q).p;
    then
A1: t = (canonical_homomorphism Q).(the_result_sort_of o).(Den(o,Free(S,Y)).p)
    by MSAFREE4:67;
    Args(o,Q) c= Args(o, Free(S,Y)) by MSAFREE4:41;
    then reconsider q = p as Element of Args(o,Free(S,Y));
A2: Den(o,Free(S,Y)).q = o-term q by MSAFREE4:13;
    now let v; assume
A5:   v in rng p;
      then reconsider d = v as Element of Q by RELAT_1:167;
      d is y-omitting by Z0,A5;
      hence v is y-omitting;
    end;
    then
A3: o-term q is y-omitting by Th54A;
    the_sort_of (o-term q) = the_result_sort_of o by Th8;
    then t = (canonical_homomorphism Q).(o-term q) by A1,A2,ABBR;
    hence thesis by ZZ,A3,Th68;
  end;

theorem
  Q is struct-invariant & v is y-omitting implies h2.v is y-omitting
  proof assume
Z0: Q is struct-invariant;
    defpred P[Element of Free(S,Y)] means
    $1 is y-omitting implies h2.$1 is y-omitting;
    set x0 = y; set s0 = s;
A1: for s, y holds P[y-term]
    proof let s,y; assume y-term is x0-omitting;
      then x0 <> y or s <> s0;
      hence thesis by CNST;
    end;
A2: for o, q st for v st v in rng q holds P[v]
    holds P[o-term q]
    proof
      let o, q;
      assume Z3: for v st v in rng q holds P[v];
      assume
Z4:   o-term q is y-omitting;
      canonical_homomorphism Q is_homomorphism Free(S,Y),Q by MSAFREE4:def 10;
      then
A3:   h2 is_homomorphism Free(S,Y),Q by HOMO;
      the_sort_of (o-term q) = the_result_sort_of o by Th8;
      then
A4:   h2.(o-term q) = h2.(the_result_sort_of o).(o-term q) by ABBR
      .= h2.(the_result_sort_of o).(Den(o,Free(S,Y)).q) by MSAFREE4:13
      .= Den(o,Q).(h2#q) by A3,MSUALG_3:def 7;
      for t being Element of Q st t in rng (h2#q) holds t is y-omitting
      proof
        let t be Element of Q;
A5:     dom q = dom the_arity_of o = dom (h2#q) by MSUALG_3:6;
        assume t in rng (h2#q);
        then consider i being object such that
A6:     i in dom q & t = (h2#q).i by A5,FUNCT_1:def 3;
        reconsider i as Nat by A6;
A8:     q.i = q/.i by A6,PARTFUN1:def 6;
        then q/.i in (the Sorts of Free(S,Y)).((the_arity_of o)/.i)
        by A5,A6,MSUALG_6:2;
        then
A7:     the_sort_of (q/.i) = (the_arity_of o)/.i by SORT;
A9:     t = h2.((the_arity_of o)/.i).(q/.i) by A6,A8,MSUALG_3:def 6
        .= h2.(q/.i) by A7,ABBR;
        q/.i is y-omitting & q/.i in rng q by Z4,A6,A8,Th54,FUNCT_1:def 3;
        hence t is y-omitting by A9,Z3;
      end;
      hence h2.(o-term q) is y-omitting by Z0,A4,Th77;
    end;
    thus P[v] from TermInd(A1,A2);
  end;

theorem Th112:
  for R being NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X)
  holds
  (for t being Element of NFAlgebra R holds
  Hom(Free(S,X),x1,x2).(the_sort_of t).t = Hom(NFAlgebra R, x1,x2).t) &
  Hom(Free(S,X),x1,x2)||NForms R = Hom(NFAlgebra R, x1,x2)
  proof
    let R be NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    set F = Free(S,X);
    set T = NFAlgebra R;
    set HF = Hom(F,x1,x2);
    set HN = Hom(T,x1,x2);
    set N = NForms R;
    defpred P[Element of T] means HF.(the_sort_of $1).$1 = HN.$1;
A1: for s being SortSymbol of S, x being Element of X.s
    for r being Element of T st r = x-term holds P[r]
    proof set s0 = s;
      let s be SortSymbol of S;
      let x be Element of X.s;
      let r be Element of T;
      assume Z0: r = x-term;
      then
A2:   the_sort_of r = the_sort_of @r = s by SORT,Lem00;
      per cases;
      suppose s0 = s & x1 = x;
        then HF.(the_sort_of r).r = x2-term = HN.(the_sort_of r).r
        by Z0,A2,HOM;
        hence P[r] by ABBR;
      end;
      suppose s0 = s & x2 = x;
        then HF.(the_sort_of r).r = x1-term = HN.(the_sort_of r).r
        by Z0,A2,HOM;
        hence P[r] by ABBR;
      end;
      suppose s0 <> s or x1 <> x & x2 <> x;
        then HF.(the_sort_of r).r = r = HN.(the_sort_of r).r by Z0,A2,HOM;
        hence P[r] by ABBR;
      end;
    end;
A2: for o being OperSymbol of S, p being Element of Args(o,Free(S,X))
    for r being Element of T st r = o-term p &
      for t being Element of T st t in rng p holds P[t]
      holds P[r]
    proof
      let o be OperSymbol of S;
      let p be Element of Args(o,Free(S,X));
      let r be Element of T;
      assume Z1: r = o-term p;
      then
A3:   the_sort_of r = the_sort_of @r = the_result_sort_of o by Lem00,Th8;
      assume Z2: for t being Element of T st t in rng p holds P[t];
A4:   HF is_homomorphism Free(S,X),Free(S,X) & o-term p = Den(o,Free(S,X)).p
      by MSUALG_6:def 2,MSAFREE4:13;
      then
A6:   HF.(the_sort_of r).r = Den(o,Free(S,X)).(HF#p)
      by Z1,A3,MSUALG_3:def 7;
A7:   r in (the Sorts of T).the_result_sort_of o by A3,SORT;
      then
A5:   p in Args(o,T) & Den(o,T).p = o-term p by A4,Z1,MSAFREE4:def 8;
      reconsider q = p as Element of Args(o,T) by A7,A4,Z1,MSAFREE4:def 8;
      HN.(the_sort_of r).r = Den(o,T).(HN#q)
      = nf (Den(o,Free(S,X)).(HN#q), R.the_result_sort_of o)
      by Z1,A3,A5,MSUALG_3:def 7,MSAFREE4:def 20,MSUALG_6:def 2;
      then HN.(the_sort_of r).r is_a_normal_form_of Den(o,Free(S,X)).(HN#q),
      R.the_result_sort_of o by REWRITE1:54;
      then
      R.the_result_sort_of o reduces Den(o,Free(S,X)).(HN#q),
      HN.(the_sort_of r).r;
      then consider m being RedSequence of R.the_result_sort_of o such that
C1:   m.1 = Den(o,Free(S,X)).(HN#q) & m.len m = HN.(the_sort_of r).r;
C2:   HF#p = HN#q
      proof
B1:     dom (HF#p) = dom the_arity_of o = dom (HN#q) &
        dom p = dom the_arity_of o = dom q by MSUALG_3:6;
        hence len (HF#p) = len (HN#q) by FINSEQ_3:29;
        let i; assume
B0:     1 <= i <= len (HF#p);
        then i in dom (HF#p) by FINSEQ_3:25;
        then
B3:     p.i in rng p & q.i in rng q by B1,FUNCT_1:def 3;
        then reconsider t = q.i as Element of T by RELAT_1:167;
A8:     p.i = p/.i & q.i = q/.i by B1,B0,FINSEQ_3:25,PARTFUN1:def 6;
        then p/.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i) &
        q/.i in (the Sorts of T).((the_arity_of o)/.i)
        by B1,B0,FINSEQ_3:25,MSUALG_6:2;
        then
A7:     the_sort_of (p/.i) = (the_arity_of o)/.i = the_sort_of (q/.i) by SORT;
        thus (HF#p).i = (HF.((the_arity_of o)/.i)).(p/.i)
        by B1,B0,A8,FINSEQ_3:25,MSUALG_3:def 6
        .= HN.t by Z2,B3,A7,A8
        .= (HN.((the_arity_of o)/.i)).(q.i) by A7,A8,ABBR
        .= (HN#q).i by B1,B0,FINSEQ_3:25,MSUALG_3:def 6;
      end;
      assume not P[r];
      then
AA:   len m <> 1 & len m >= 0+1 by C1,C2,A6,ABBR,NAT_1:13;
      then len m > 1 by XXREAL_0:1;
      then len m >= 1+1 by NAT_1:13;
      then 1 in dom m & 1+1 in dom m by AA,FINSEQ_3:25;
      then [m.1,m.2] in R.the_result_sort_of o by REWRITE1:def 2;
      then
AB:   [HF.(the_result_sort_of o).(m.1),HF.(the_result_sort_of o).(m.2)]
      in R.the_result_sort_of o by MSUALG_6:def 9;
      HF.(the_result_sort_of o).(m.1)
      = ((HF.(the_result_sort_of o))*HF.(the_result_sort_of o)).
      (Den(o,Free(S,X)).p) by A3,A4,A6,Z1,C1,C2,FUNCT_2:15
      .= ((HF**HF).(the_result_sort_of o)).(Den(o,Free(S,X)).p) by MSUALG_3:2
      .= (id the Sorts of Free(S,X)).(the_result_sort_of o).
      (Den(o,Free(S,X)).p) by Th157
      .= (id ((the Sorts of Free(S,X)).(the_result_sort_of o))).(o-term p)
      by A4,MSUALG_3:def 1
      .= nf (Den(o,Free(S,X)).q, R.the_result_sort_of o) by A5,MSAFREE4:def 20;
      then HF.(the_result_sort_of o).(m.1) is_a_normal_form_of
      Den(o,Free(S,X)).q, R.(the_result_sort_of o) by REWRITE1:54;
      then HF.(the_result_sort_of o).(m.1) is_a_normal_form_wrt
      R.(the_result_sort_of o);
      hence thesis by AB;
    end;
    hereby let t be Element of T;
      thus P[t] from TermAlgebraInd(A1,A2);
    end;
    set s0 = s;
    let s;
    thus (Hom(Free(S,X),x1,x2)||NForms R).s = Hom(NFAlgebra R, x1,x2).s
    proof
      thus (NForms R).s = (the Sorts of T).s by MSAFREE4:def 20;
      let a be Element of (NForms R).s;
      reconsider t = a as Element of T,s by MSAFREE4:def 20;
      P[t] from TermAlgebraInd(A1,A2);
      then
AD:   HF.(the_sort_of t).t = HN.(the_sort_of t).t by ABBR;
AE:   the_sort_of t = s by SORT;
      thus (HF||N).s.a = ((HF.s)|(N.s)).a by MSAFREE:def 1
      .= HN.s.a by AD,AE,FUNCT_1:49;
    end;
  end;

theorem Th113:
  for R being NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X) holds
  i in dom p & R.((the_arity_of o)/.i) reduces t1,t2 implies
  R.the_result_sort_of o reduces Den(o,Free(S,X)).(p+*(i,t1)),
  Den(o,Free(S,X)).(p+*(i,t2))
  proof
    let R be NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    assume
A1: i in dom p & R.((the_arity_of o)/.i) reduces t1,t2;
    then consider r being RedSequence of R.((the_arity_of o)/.i) such that
A2: r.1 = t1 & r.len r = t2;
    defpred P[Nat] means $1 <= len r implies R.the_result_sort_of o reduces
    Den(o,Free(S,X)).(p+*(i,t1)), Den(o,Free(S,X)).(p+*(i,r.$1));
A3: P[1] by A2,REWRITE1:12;
A4: for i st 1 <= i & P[i] holds P[i+1]
    proof let k be Nat; assume
A5:   1 <= k & P[k] & k+1 <= len r;
      k < len r & 1 <= k+1 by A5,NAT_1:13;
      then k in dom r & k+1 in dom r by A5,FINSEQ_3:25;
      then
A7:   [r.k, r.(k+1)] in R.((the_arity_of o)/.i) by REWRITE1:def 2;
      then reconsider rk = r.k, rk1 = r.(k+1) as Element of
      (the Sorts of Free(S,X)).((the_arity_of o)/.i) by ZFMISC_1:87;
      reconsider p1 = p+*(i,rk), p2 = p+*(i,rk1) as
      Element of Args(o,Free(S,X)) by MSUALG_6:7;
      set h = transl(o,i,p,Free(S,X));
A10:  dom p1 = dom the_arity_of o = dom p by MSUALG_6:2;
      h.rk = Den(o,Free(S,X)).p1 & h.rk1 = Den(o,Free(S,X)).p2
      by MSUALG_6:def 4;
      then [Den(o,Free(S,X)).p1, Den(o,Free(S,X)).p2] in R.the_result_sort_of o
      by A7,A1,A10,MSUALG_6:def 5,def 8;
      then R.the_result_sort_of o reduces
      Den(o,Free(S,X)).p1, Den(o,Free(S,X)).p2 by REWRITE1:15;
      hence R.the_result_sort_of o reduces
      Den(o,Free(S,X)).(p+*(i,t1)), Den(o,Free(S,X)).(p+*(i,r.(k+1)))
      by A5,NAT_1:13,REWRITE1:16;
    end;
A5: 0+1 <= len r by NAT_1:13;
    for i st i >= 1 holds P[i] from NAT_1:sch 8(A3,A4);
    hence R.the_result_sort_of o reduces Den(o,Free(S,X)).(p+*(i,t1)),
    Den(o,Free(S,X)).(p+*(i,t2)) by A2,A5;
  end;

theorem Th90:
  for R being NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X)
  for t holds R.the_sort_of t reduces t, (canonical_homomorphism NFAlgebra R).t
  proof
    let R be NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    let t;
    set T = NFAlgebra R;
    set H = canonical_homomorphism T;
    defpred P[Element of Free(S,X)] means R.the_sort_of $1 reduces $1,H.$1;
A1: for s,x holds P[x-term] by REWRITE1:12;
A2: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p;
      assume Z0: for t st t in rng p holds P[t];
A3:   o-term p = Den(o,Free(S,X)).p by MSAFREE4:13;
A4:   the_sort_of (o-term p) = the_result_sort_of o by Th8;
      then H.(o-term p) = H.(the_result_sort_of o).(o-term p) by ABBR
      .= Den(o,T).(H#p) by A3,MSUALG_3:def 7,MSAFREE4:def 10
      .= nf (Den(o,Free(S,X)).(H#p), R.the_result_sort_of o)
      by MSAFREE4:def 20;
      then
A5:   H.(o-term p) is_a_normal_form_of Den(o,Free(S,X)).(H#p),
      R.the_result_sort_of o by REWRITE1:54;
      per cases;
      suppose len p = 0;
        then dom p = Seg 0 = {} by FINSEQ_1:def 3;
        then dom (H#p) = dom the_arity_of o = {} = dom p by MSUALG_6:2;
        then H#p = {} = p;
        then o-term p = Den(o,Free(S,X)).(H#p) &
        nf(Den(o,Free(S,X)).(H#p), R.the_result_sort_of o) =
        Den(o,T).(H#p) = H.(the_result_sort_of o).(Den(o,Free(S,X)).p)
        by MSUALG_3:def 7,MSAFREE4:13,def 20,def 10;
        then
A6:     H.(the_result_sort_of o).(Den(o,Free(S,X)).p) is_a_normal_form_of
        o-term p, R.the_result_sort_of o by REWRITE1:54;
        the_sort_of (o-term p) = the_result_sort_of o by Th8;
        hence thesis by A3,A6,ABBR;
      end;
      suppose
B0:     len p <> 0;
        deffunc F(FinSequence,Nat) = $1+*($2,(H#p).$2);
        defpred Q[Nat,set,set] means
        ex r being FinSequence st $2 = r & $3 = F(r,$1+1);
A7:     for r being Element of Args(o,Free(S,X))
        for n being Nat st 1 <= n <= len p holds
        F(r,n) in Args(o,Free(S,X))
        proof
          Args(o,T) c= Args(o,Free(S,X)) by MSAFREE4:41;
          then
C1:       H#p in Args(o,Free(S,X));
          let r be Element of Args(o,Free(S,X));
          let n be Nat; assume 1 <= n <= len p;
          then n in dom p = dom the_arity_of o by MSUALG_3:6,FINSEQ_3:25;
          then (H#p).n in (the Sorts of Free(S,X)).((the_arity_of o)/.n)
          by C1,MSUALG_6:2;
          hence thesis by MSUALG_6:7;
        end;
A6:     for n being Nat st 1 <= n & n < len p
        for x being Element of Args(o,Free(S,X))
        ex y being Element of Args(o,Free(S,X)) st Q[n,x,y]
        proof
          let n be Nat;
          assume 1 <= n;
          assume Z1: n < len p;
          let x be Element of Args(o,Free(S,X));
          1 <= n+1 <= len p by Z1,NAT_1:12,13;
          then reconsider y = F(x,n+1) as Element of Args(o,Free(S,X)) by A7;
          take y;
          thus Q[n,x,y];
        end;
B2:     len p >= 0+1 by B0,NAT_1:13;
        reconsider f1 = F(p,1) as Element of Args(o,Free(S,X))
        by A7,B2;
        consider f being FinSequence of Args(o,Free(S,X)) such that
B3:     len f = len p & (f.1 = f1 or len p = 0) &
        for n st 1 <= n & n < len p holds Q[n,f.n,f.(n+1)]
        from RECDEF_1:sch 4(A6);
B6:     dom f = dom p by B3,FINSEQ_3:29;
        defpred S[Nat] means $1 <= len p implies dom (f.$1) = dom p &
        (for i st 1 <= i <= $1 holds f.$1.i = (H#p).i) &
        (for i st $1+1 <= i <= len p holds f.$1.i = p.i);
BA:     S[1]
        proof
          assume 1 <= len p;
          then
C0:       1 in dom p by FINSEQ_3:25;
          thus dom (f.1) = dom p by B0,B3,FUNCT_7:30;
          hereby
            let i; assume 1 <= i <= 1;
            then i = 1 by XXREAL_0:1;
            hence f.1.i = (H#p).i by B0,B3,C0,FUNCT_7:31;
          end;
          let i; assume
C1:       1+1 <= i <= len p;
          i > 1 by C1,NAT_1:13;
          hence f.1.i = p.i by B0,B3,FUNCT_7:32;
        end;
BB:     for j st j >= 1 & S[j] holds S[j+1]
        proof let j; assume that
D1:       j >= 1 & S[j] and
D2:       j+1 <= len p;
D7:       j+1 >= 1 & j <= j+1 by NAT_1:12;
          consider r being FinSequence such that
D4:       f.j = r & f.(j+1) = F(r,j+1) by D1,B3,D2,NAT_1:13;
          thus dom (f.(j+1)) = dom p by D1,D7,D4,D2,XXREAL_0:2,FUNCT_7:30;
          hereby let i; assume
D6:         1 <= i <= j+1;
            per cases by NAT_1:13;
            suppose i <= j;
              then f.j.i = (H#p).i & i < j+1 by D1,D2,D6,NAT_1:13;
              hence f.(j+1).i = (H#p).i by D4,FUNCT_7:32;
            end;
            suppose i >= j+1;
              then i = j+1 by D6,XXREAL_0:1;
              hence f.(j+1).i = (H#p).i
              by D1,D2,D7,D4,FINSEQ_3:25,XXREAL_0:2,FUNCT_7:31;
            end;
          end;
          let i; assume
D8:       j+1+1 <= i <= len p;
D10:      j+1 < i by D8,NAT_1:13;
          then f.j.i = p.i by D1,D2,D7,D8,XXREAL_0:2;
          hence f.(j+1).i = p.i by D4,D10,FUNCT_7:32;
        end;
BC:     for j st j >= 1 holds S[j] from NAT_1:sch 8(BA,BB);
        defpred R[Nat] means $1 <= len p implies
        R.the_result_sort_of o reduces o-term p, Den(o,Free(S,X)).(f.$1);
B4:     R[1]
        proof
          assume 1 <= len p;
          then
C0:       1 in dom p = dom the_arity_of o = dom (H#p)
          by FINSEQ_3:25,MSUALG_6:2;
          then
C1:       p/.1 = p.1 in rng p by PARTFUN1:def 6,FUNCT_1:def 3;
          then P[p/.1] by Z0;
          then
C2:       R.the_sort_of (p/.1) reduces p/.1,H.(the_sort_of (p/.1)).(p/.1)
          by ABBR;
          reconsider t = (H#p)/.1 as Element of Free(S,X) by MSAFREE4:39;
C3:       the_sort_of (p/.1) = (the_arity_of o)/.1 by C0,Th4A;
          then H.(the_sort_of (p/.1)).(p/.1) = (H#p).1 = t &
          p+*(1,p/.1) = p by C0,C1,PARTFUN1:def 6,FUNCT_7:35,MSUALG_3:def 6;
          hence R.the_result_sort_of o reduces o-term p, Den(o,Free(S,X)).(f.1)
          by A3,B0,B3,C0,C2,C3,Th113;
        end;
B5:     for i st i >= 1 & R[i] holds R[i+1]
        proof let i; assume
D1:       i >= 1 & R[i] & i+1 <= len p;
          then
D2:       i < len p & 1 <= i+1 by NAT_1:13;
          then
C0:       i in dom p & i+1 in dom p = dom the_arity_of o = dom (H#p)
          by D1,FINSEQ_3:25,MSUALG_6:2;
          then
C1:       p/.(i+1) = p.(i+1) in rng p by PARTFUN1:def 6,FUNCT_1:def 3;
          then P[p/.(i+1)] by Z0;
          then
C2:       R.the_sort_of (p/.(i+1)) reduces p/.(i+1),
          H.(the_sort_of (p/.(i+1))).(p/.(i+1))
          by ABBR;
          reconsider t = (H#p)/.(i+1) as Element of Free(S,X) by MSAFREE4:39;
          reconsider fi = f.i, fi1 = f.(i+1) as Element of Args(o,Free(S,X))
          by B6,D2,D1,FINSEQ_3:25,FUNCT_1:102;
D3:       fi.(i+1) = p.(i+1) & dom fi = dom the_arity_of o
          by BC,D1,D2,MSUALG_6:2;
C3:       the_sort_of (p/.(i+1)) = (the_arity_of o)/.(i+1) by C0,Th4A;
          then
C4:       H.(the_sort_of (p/.(i+1))).(p/.(i+1)) = (H#p).(i+1) = t &
          fi+*(i+1,p/.(i+1)) = fi
          by D3,C0,C1,PARTFUN1:def 6,FUNCT_7:35,MSUALG_3:def 6;
          then
C5:       R.the_result_sort_of o reduces Den(o,Free(S,X)).(fi),
          Den(o,Free(S,X)).(fi+*(i+1,t)) by D3,C0,C2,C3,Th113;
          consider r being FinSequence such that
C6:       fi = r & fi1 = F(r,i+1) by B3,D1,NAT_1:13;
          thus thesis by C4,C5,C6,D1,NAT_1:13,REWRITE1:16;
        end;
BD:     for i st i >= 1 holds R[i] from NAT_1:sch 8(B4,B5);
        reconsider fl = f.len p as Element of Args(o,Free(S,X))
        by B6,FUNCT_1:102,B2,FINSEQ_3:25;
        fl = H#p
        proof
E1:       dom fl = dom the_arity_of o = dom (H#p) & dom the_arity_of o = dom p
          by MSUALG_6:2;
          hence len fl = len (H#p) by FINSEQ_3:29;
E2:       len fl = len p by E1,FINSEQ_3:29;
          let i; assume 1 <= i <= len fl;
          hence fl.i = (H#p).i by BC,B2,E2;
        end;
        then R.the_result_sort_of o reduces o-term p, Den(o,Free(S,X)).(H#p)
        by B2,BD;
        hence P[o-term p] by A4,A5,REWRITE1:16;
      end;
    end;
    thus P[t] from TermInd(A1,A2);
  end;

theorem Th98:
  for R being NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X)
  for o,p holds R.the_result_sort_of o reduces o-term p,
  Den(o,NFAlgebra R).((canonical_homomorphism NFAlgebra R)#p)
  proof
    let R be NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    let o,p;
    set T = NFAlgebra R;
    set h = canonical_homomorphism T;
A1: o-term p = Den(o,Free(S,X)).p by MSAFREE4:13;
A2: the_sort_of (o-term p) = the_result_sort_of o by Th8;
    h.(the_result_sort_of o).(o-term p) = Den(o,T).(h#p)
    by A1,MSUALG_3:def 7,MSAFREE4:def 10;
    then Den(o,T).(h#p) = h.(o-term p) by A2,ABBR;
    hence R.the_result_sort_of o reduces o-term p, Den(o,T).(h#p) by A2,Th90;
  end;

theorem Th69:
  for R being NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X)
  for o,p for q being Element of Args(o, NFAlgebra R) st p = q
  holds R.the_result_sort_of o reduces o-term p, Den(o,NFAlgebra R).q
  proof
    let R be NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    let o,p;
    let q be Element of Args(o, NFAlgebra R);
    assume p = q;
    then (canonical_homomorphism NFAlgebra R)#p = q by MSAFREE4:66;
    hence R.the_result_sort_of o reduces o-term p, Den(o,NFAlgebra R).q
    by Th98;
  end;

registration
  let S,X;
  let R be NF-var terminating with_UN_property invariant stable
  ManySortedRelation of Free(S,X);
  cluster NFAlgebra R -> struct-invariant;
  coherence
  proof set T = NFAlgebra R;
    let o; let p be Element of Args(o,NFAlgebra R);
    Args(o,T) c= Args(o,Free(S,X)) by MSAFREE4:41;
    then reconsider q = p as Element of Args(o,Free(S,X));
    assume
A1: Den(o,NFAlgebra R).p = Den(o,Free(S,X)).p;
    let s,x1,x2;
    set h = Hom(T,x1,x2);
    set H = Hom(Free(S,X),x1,x2);
AA: h#p = H#q
    proof
B1:   dom (h#p) = dom the_arity_of o = dom (H#q) &
      dom p = dom the_arity_of o = dom q by MSUALG_3:6;
      hence len (h#p) = len (H#q) by FINSEQ_3:29;
      let i; assume
B0:   1 <= i <= len (h#p);
B3:   (h#p).i = (h.((the_arity_of o)/.i)).(p.i) &
      (H#q).i = (H.((the_arity_of o)/.i)).(q.i)
      by B1,B0,FINSEQ_3:25,MSUALG_3:def 6;
A8:   p.i = p/.i & q.i = q/.i by B1,B0,FINSEQ_3:25,PARTFUN1:def 6;
      then q/.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i) &
      p/.i in (the Sorts of T).((the_arity_of o)/.i)
      by B1,B0,FINSEQ_3:25,MSUALG_6:2;
      then
A7:   the_sort_of (p/.i) = (the_arity_of o)/.i = the_sort_of (q/.i) by SORT;
      then H.((the_arity_of o)/.i).(p/.i) = h.(p/.i) by Th112;
      hence thesis by A7,A8,B3,ABBR;
    end;
    assume
A2: Den(o,T).(h#p) <> Den(o,Free(S,X)).(h#p);
    Args(o,T) c= Args(o,Free(S,X)) by MSAFREE4:41;
    then reconsider hp = h#p as Element of Args(o,Free(S,X));
A4: R.the_result_sort_of o reduces o-term hp, Den(o,T).(h#p) &
    o-term hp = Den(o,Free(S,X)).hp by Th69,MSAFREE4:13;
    then consider rs being RedSequence of R.the_result_sort_of o such that
A3: rs.1 = Den(o,Free(S,X)).hp & rs.len rs = Den(o,T).(h#p);
A7: len rs <> 1 & 0+1 <= len rs by A2,A3,NAT_1:13;
    then 1 < len rs by XXREAL_0:1;
    then 1+1 <= len rs by NAT_1:13;
    then 1+1 in dom rs & 1 in dom rs by A7,FINSEQ_3:25;
    then
A2: [Den(o,Free(S,X)).hp,rs.2] in R.the_result_sort_of o
    by A3,REWRITE1:def 2;
    then reconsider rsi = rs.2 as Element of Free(S,X),the_result_sort_of o
    by ZFMISC_1:87;
B2: [H.(the_result_sort_of o).(o-term hp),H.(the_result_sort_of o).rsi] in
    R.the_result_sort_of o by A2,A4,MSUALG_6:def 9;
A8: Den(o,Free(S,X)).hp = H.(the_result_sort_of o).(Den(o,Free(S,X)).q) &
    Den(o,Free(S,X)).q in Result(o,Free(S,X))
    = (the Sorts of Free(S,X)).the_result_sort_of o
    by AA,FUNCT_2:5,15,MSUALG_3:def 7,MSUALG_6:def 2;
    then
A9: H.(the_result_sort_of o).(Den(o,Free(S,X)).hp)
    = ((H.(the_result_sort_of o))*(H.(the_result_sort_of o))).
    (Den(o,Free(S,X)).q)
    by FUNCT_2:15
    .= (H**H).(the_result_sort_of o).(Den(o,Free(S,X)).q)
    by MSUALG_3:2
    .= (id the Sorts of Free(S,X)).(the_result_sort_of o).(Den(o,Free(S,X)).q)
    by Th157
    .= (id ((the Sorts of Free(S,X)).the_result_sort_of o)).
    (Den(o,Free(S,X)).q) by MSUALG_3:def 1
    .= Den(o,Free(S,X)).q by A8,FUNCT_1:18;
    set T = NFAlgebra R;
    set g = canonical_homomorphism T;
    Den(o,T).p in Result(o,T) by FUNCT_2:5;
    then Den(o,T).p is Element of T,the_result_sort_of o by FUNCT_2:15;
    then reconsider op = Den(o,T).p as Element of T;
    Den(o,T).p = nf (Den(o,Free(S,X)).p, R.the_result_sort_of o)
    by MSAFREE4:def 20;
    then Den(o,T).p is_a_normal_form_of Den(o,Free(S,X)).p,
    R.the_result_sort_of o by REWRITE1:54;
    then Den(o,T).p is_a_normal_form_wrt R.the_result_sort_of o;
    hence contradiction by A1,B2,A4,A9;
  end;
end;

registration
  let S,X;
  cluster struct-invariant for all_vars_including inheriting_operations
  free_in_itself (X,S)-terms MSAlgebra over S;
  existence
  proof
    set R = the NF-var terminating with_UN_property invariant stable
    ManySortedRelation of Free(S,X);
    take T = NFAlgebra R;
    thus thesis;
  end;
end;

begin :: Context vs translations

definition
  let S,s1,s2;
  attr s2 is s1-reachable means: REACH: TranslationRel S reduces s1,s2;
end;

registration
  let S,s1;
  cluster s1-reachable for SortSymbol of S;
  existence
  proof
    take s1;
    thus TranslationRel S reduces s1, s1 by REWRITE1:12;
  end;
end;

reserve
  s2 for s1-reachable SortSymbol of S,
  g1 for Translation of Free(S,Y),s1,s2,
  g for Translation of Free(S,X),s1,s2;

theorem
  TranslationRel S reduces s,the_sort_of C9
  proof
    defpred P[Element of Free(S,Z)] means
    TranslationRel S reduces s, the_sort_of $1;
    the_sort_of (z-term) = s by SORT;
    then
A1: P[z-term] by REWRITE1:12;
A2: now
      let o,k;
      assume
A3:   k is z-context_including;
      assume
A4:   P[z-context_in k];
      let C being context of z such that
AA:   C = o-term k;
      thus P[C]
      proof
        set t = o-term k;
        now
          take o;
          thus the_result_sort_of o = the_sort_of t by Th8;
          reconsider i = z-context_pos_in k as Element of NAT
          by ORDINAL1:def 12;
          take i;
A7:       dom k = dom the_arity_of o by MSUALG_3:6;
          hence i in dom the_arity_of o by A3,Th71;
          k.i in (the Sorts of Free(S,Z)).((the_arity_of o)/.i) &
          k.i = z-context_in k by A3,A7,Th71,MSUALG_6:2;
          hence (the_arity_of o)/.i = the_sort_of (z-context_in k)
          by SORT;
        end;
        then [the_sort_of (z-context_in k), the_sort_of (o-term k)] in
        TranslationRel S by MSUALG_6:def 3;
        then TranslationRel S reduces the_sort_of (z-context_in k),
        the_sort_of(o-term k) by REWRITE1:15;
        hence thesis by A4,AA,REWRITE1:16;
      end;
    end;
    thus P[C9] from ContextInd(A1,A2);
  end;

registration
  let S,X,s,x,C;
  cluster the_sort_of C -> s-reachable;
  coherence
  proof
    defpred P[Element of Free(S,X)] means the_sort_of $1 is s-reachable;
    s is s-reachable by REWRITE1:12;
    then
A1: P[x-term] by SORT;
A2: for o for p st p is x-context_including
    holds P[x-context_in p] implies
    for C being context of x st C = o-term p holds P[C]
    proof
      let o,p; assume that
A3:   p is x-context_including and
A4:   P[x-context_in p];
      let C such that
AA:   C = o-term p;
A6:   the_sort_of C = the_result_sort_of o by AA,Th8;
A5:   x-context_pos_in p in dom p = dom the_arity_of o &
      x-context_in p = p.(x-context_pos_in p) by A3,Th71,MSUALG_6:2;
      x-context_in p in (the Sorts of Free(S,X)).
      ((the_arity_of o)/.(x-context_pos_in p))
      = (the Sorts of Free(S,X)).((the_arity_of o).(x-context_pos_in p))
      by A5,MSUALG_6:2,PARTFUN1:def 6;
      then the_sort_of (x-context_in p) =
      (the_arity_of o)/.(x-context_pos_in p)
      = (the_arity_of o).(x-context_pos_in p) in rng the_arity_of o &
      x-context_pos_in p in NAT by A5,SORT,FUNCT_1:def 3,PARTFUN1:def 6;
      then [the_sort_of (x-context_in p),the_result_sort_of o]
      in TranslationRel S by A5,MSUALG_6:def 3;
      then TranslationRel S reduces the_sort_of (x-context_in p),
      the_result_sort_of o & TranslationRel S reduces s,
      the_sort_of (x-context_in p) by A4,REACH,REWRITE1:15;
      hence TranslationRel S reduces s, the_sort_of C
      by A6,REWRITE1:16;
    end;
    P[C] from ContextInd(A1,A2);
    hence thesis;
  end;
end;

definition
  let S,X,s1,s2,g;
  let t be Element of (the Sorts of Free(S,X)).s1;
  redefine func g.t -> Element of (the Sorts of Free(S,X)).s2;  :: redefines . (FUNCT_1, definition)
  coherence by FUNCT_2:5;
end;

definition
  let S,X,s,x,C;
  attr C is basic means
  ex o,p st C = o-term p & x-context_in p = x-term;
end;

definition
  let S,X,s,x,C;
  func transl C -> Function of (the Sorts of Free(S,X)).s,
  (the Sorts of Free(S,X)).the_sort_of C means: TRANS:
  the_sort_of t = s implies it.t = C-sub(t);
  existence
  proof
    deffunc F(Element of (the Sorts of Free(S,X)).s) = C-sub $1;
    consider f being Function of (the Sorts of Free(S,X)).s,
    (the Sorts of Free(S,X)).the_sort_of C such that
A1: for t being Element of (the Sorts of Free(S,X)).s holds f.t = F(t)
    from FUNCT_2:sch 4;
    take f; let t; assume the_sort_of t = s;
    then t in (the Sorts of Free(S,X)).s by SORT;
    hence thesis by A1;
  end;
  uniqueness
  proof
    let f1,f2 be Function of (the Sorts of Free(S,X)).s,
    (the Sorts of Free(S,X)).the_sort_of C such that
A1: the_sort_of t = s implies f1.t = C-sub(t) and
A2: the_sort_of t = s implies f2.t = C-sub(t);
    let t be Element of (the Sorts of Free(S,X)).s;
A3: the_sort_of t = s by SORT;
    thus f1.t = C-sub t by A1,A3 .= f2.t by A2,A3;
  end;
end;

theorem Th57:
  for S,s,X,x,C st C = x-term holds
  transl C = id((the Sorts of Free(S,X)).s)
  proof
    let S,s,X,x,C;
    assume Z0: C = x-term;
    let t be Element of (the Sorts of Free(S,X)).s;
A2: the_sort_of t = s by SORT;
    hence (transl C).t = C-sub(t) by TRANS
    .= (id((the Sorts of Free(S,X)).s)).t by Z0,A2,Th41;
  end;

theorem Th58:
  C9 = o-term k & z-context_in k = z-term & k1 = k+*(z-context_pos_in k,l)
  implies C9-sub l = o-term k1
  proof set C = C9, p = k, p1 = k1, x = z, t = l, X = Z;
    assume Z0: C = o-term p;
    assume Z1: x-context_in p = x-term;
    assume Z2: p1 = p+*(x-context_pos_in p,t);
    set i = x-context_pos_in p;
A1: p is x-context_including by Z0,Th53;
    then
A2: i in dom p = dom the_arity_of o & p.i = x-term by Z1,Th71,MSUALG_3:6;
    p1.i = t by A1,Z2,Th71,FUNCT_7:31;
    then t in (the Sorts of Free(S,X)).((the_arity_of o)/.i) &
    x-term in (the Sorts of Free(S,X)).((the_arity_of o)/.i) by A2,MSUALG_6:2;
    then
A3: the_sort_of t = (the_arity_of o)/.i = the_sort_of (x-context_in p) = s
    by Z1,SORT;
    then (x-context_in p)-sub t = t by Z1,Th41;
    hence C-sub t = o-term p1 by Z0,Z2,A3,Th43,Th53;
  end;

theorem
  C9 is basic implies transl C9 is_e.translation_of Free(S,Z),s,the_sort_of C9
  proof set X = Z, C = C9, x = z;
    given o,k such that
Z0: C = o-term k & x-context_in k = z-term;
    set p = k;
    take o;
    thus the_result_sort_of o = the_sort_of C by Z0,Th8;
    reconsider i = x-context_pos_in p as Element of NAT by ORDINAL1:def 12;
    take i;
A1: p is x-context_including by Z0,Th53;
    then i in dom p by Th71;
    hence i in dom the_arity_of o by MSUALG_3:6;
    then x-term = p.i in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
    by Z0,A1,Th71,MSUALG_6:2;
    then
A4: s = the_sort_of (x-context_in p) = (the_arity_of o)/.i by Z0,SORT;
    hence ((the_arity_of o)/.i) = s;
    reconsider a = p as Function;
    take a; thus a in Args(o,Free(S,X));
    dom transl C = (the Sorts of Free(S,X)).s by FUNCT_2:def 1;
    hence dom transl C = dom transl(o,i,a,Free(S,X)) by A4,MSUALG_6:def 4;
    let c be object; assume
    c in dom transl C;
    then reconsider c as Element of (the Sorts of Free(S,X)).s;
    reconsider q = p+*(i,c) as Element of Args(o,Free(S,X)) by A4,MSUALG_6:7;
A6: transl(o,i,a,Free(S,X)).c = Den(o,Free(S,X)).q by A4,MSUALG_6:def 4
    .= o-term q by MSAFREE4:13;
    C-sub c = o-term q & the_sort_of c = s by Z0,Th58,SORT;
    hence thesis by A6,TRANS;
  end;

theorem Th59:
  for V being finite set holds
  m in dom q & (the_arity_of o)/.m = s implies
  ex y,C1,q1 st y nin V & C1 = o-term q1 & q1 = q+*(m,y-term) &
  q1 is y-context_including &
  m = y-context_pos_in q1 & y-context_in q1 = y-term
  proof let V be finite set;
    assume Z0: m in dom q & (the_arity_of o)/.m = s;
    set y = the Element of Y.s \ (V \/ proj1 rng (o-term q));
A0: proj1 rng (o-term q) is finite by WAYBEL26:39;
    then reconsider y as Element of Y.s by XBOOLE_0:def 5;
    reconsider t = y-term as Element of Free(S,Y);
    reconsider q1 = q+*(m,y-term) as Element of Args(o,Free(S,Y))
    by Z0,MSUALG_6:7;
A1: q1 is y-context_including
    proof
      take m; thus m in dom q1 by Z0,FUNCT_7:30;
      thus q1.m is context of y by Z0,FUNCT_7:31;
      let j,v; assume
Z1:   j in dom q1 & j <> m & v = q1.j;
      then
A4:   j in dom q by FUNCT_7:30;
      then
A2:   v = q.j in rng q by Z1,FUNCT_7:32,FUNCT_1:def 3;
      set d = the Element of Coim(v,[y,s]);
      assume
A7:   Coim(v,[y,s]) <> {};
      then
A3:   d in dom v & v.d in {[y,s]} by FUNCT_1:def 7;
      reconsider d as Element of dom v by A7,FUNCT_1:def 7;
      consider k being Nat such that
A5:   j = 1+k by Z1,FINSEQ_3:25,NAT_1:10;
A6:   v.d = [y,s] by A3,TARSKI:def 1;
      j <= len q by A4,FINSEQ_3:25;
      then <*k*>^d in dom(o-term q) & (o-term q).(<*k*>^d) = v.d
      by A2,A5,TREES_4:11,12,NAT_1:13;
      then [y,s] in rng(o-term q) by A6,FUNCT_1:def 3;
      then y in proj1 rng(o-term q) by XTUPLE_0:def 12;
      then y in V \/ proj1 rng(o-term q) by XBOOLE_0:def 3;
      hence contradiction by A0,XBOOLE_0:def 5;
    end;
    then reconsider C9 = o-term q1 as context of y by Th53;
    take y,C9,q1;
    y nin V \/ proj1 rng (o-term q) by A0,XBOOLE_0:def 5;
    hence y nin V by XBOOLE_0:def 3;
    thus C9 = o-term q1;
    thus q1 = q+*(m,y-term);
    thus q1 is y-context_including by A1;
A7: q1.m = y-term by Z0,FUNCT_7:31;
    hence m = y-context_pos_in q1 by A1,CPI;
    hence y-context_in q1 = y-term by A1,A7,Th71;
  end;

theorem Th91:
  for s1,s2 being SortSymbol of S, V being finite set holds
  m in dom q & s1 = (the_arity_of o)/.m implies
  ex y being (Element of Y.s1), C being (context of y), q1 st
  y nin V & q1 = q+*(m,y-term) &
  q1 is y-context_including & y-context_in q1 = y-term & C = o-term q1 &
  m = y-context_pos_in q1 & transl C = transl(o,m,q,Free(S,Y))
  proof
    let s1,s2 be SortSymbol of S, V be finite set;
    assume Z1: m in dom q;
    assume Z2: s1 = (the_arity_of o)/.m;
    consider y being (Element of Y.s1), C being (context of y), q1 such that
A1: y nin V & C = o-term q1 & q1 = q+*(m,y-term) &
    q1 is y-context_including &
    m = y-context_pos_in q1 & y-context_in q1 = y-term by Z1,Z2,Th59;
    take y, C, q1;
    thus y nin V by A1;
    thus q1 = q+*(m,y-term) by A1;
    thus q1 is y-context_including by A1;
    thus y-context_in q1 = y-term by A1;
    thus C = o-term q1 by A1;
    thus m = y-context_pos_in q1 by A1;
    dom transl C = (the Sorts of Free(S,Y)).s1 by FUNCT_2:def 1;
    hence dom transl C = dom transl(o,m,q,Free(S,Y)) by Z2,MSUALG_6:def 4;
    let c be object; assume
    c in dom transl C;
    then reconsider c as Element of (the Sorts of Free(S,Y)).s1;
    reconsider q2 = q+*(m,c) as Element of Args(o,Free(S,Y))
    by Z2,MSUALG_6:7;
A6: transl(o,m,q,Free(S,Y)).c = Den(o,Free(S,Y)).q2
    by Z2,MSUALG_6:def 4
    .= o-term q2 by MSAFREE4:13;
    q2 = q1+*(m,c) by A1,FUNCT_7:34;
    then C-sub c = o-term q2 & the_sort_of c = s1 by A1,Th58,SORT;
    hence thesis by A6,TRANS;
  end;

registration
  let S,X,t;
  let a;
  cluster Coim(t,a) -> FinSequence-membered;
  coherence;
end;

theorem Th70:
  X is non-trivial & the_sort_of t = s implies
  card Coim(t,a) c= card Coim(C-sub t,a)
  proof assume that
ZZ: X is non-trivial and
Z0: the_sort_of t = s;
    defpred P[context of x] means
    for C st C = $1 holds card Coim(t,a) c= card Coim(C-sub t,a);
A0: P[x-term] by Z0,Th41;
A1: for o,p st p is x-context_including
    holds P[x-context_in p] implies
    for C being context of x st C = o-term p holds P[C]
    proof
      let o,p;
      assume Z1: p is x-context_including;
      assume Z2: P[x-context_in p];
      set i = x-context_pos_in p;
A6:   i in dom p = dom the_arity_of o by Z1,Th71,MSUALG_3:6;
      then consider j such that
A3:   i = 1+j by NAT_1:10,FINSEQ_3:25;
      card (<*j*>^^Coim((x-context_in p)-sub t,a))
      = card Coim((x-context_in p)-sub t,a) by Th1;
      then consider f being Function such that
A2:   f is one-to-one & dom f = Coim(t,a) &
      rng f c= <*j*>^^Coim((x-context_in p)-sub t,a)
      by Z2,CARD_1:10;
      let C be context of x;
      assume Z3: C = o-term p;
      x-context_in p = p.i by Z1,Th71;
      then x-context_in p in (the Sorts of Free(S,X)).((the_arity_of o)/.i)
      by A6,MSUALG_6:2;
      then the_sort_of (x-context_in p) = (the_arity_of o)/.i by SORT;
      then reconsider q = p+*(x-context_pos_in p,(x-context_in p)-sub t)
      as Element of Args(o,Free(S,X)) by MSUALG_6:7;
A4:   C-sub t = o-term q by ZZ,Z0,Z1,Z3,Th43;
      <*j*>^^Coim((x-context_in p)-sub t,a) c= Coim(C-sub t,a)
      proof
        let r be object;
        assume r in <*j*>^^Coim((x-context_in p)-sub t,a);
        then consider n being Element of Coim((x-context_in p)-sub t,a)
        such that
A5:     r = <*j*>^n & n in Coim((x-context_in p)-sub t,a);
        Coim((x-context_in p)-sub t,a) c= dom((x-context_in p)-sub t)
        by RELAT_1:132;
        then reconsider n as Element of dom((x-context_in p)-sub t) by A5;
        i <= len p & dom q = dom the_arity_of o by A6,FINSEQ_3:25,MSUALG_3:6;
        then j < len p = len q & q.i = (x-context_in p)-sub t
        by A3,Z1,Th71,MSUALG_3:6,NAT_1:13,FINSEQ_3:29,FUNCT_7:31;
        then
A9:     <*j*>^n in dom (C-sub t) &
        (C-sub t).r = ((x-context_in p)-sub t).n in {a}
        by A3,A4,A5,TREES_4:11,12,FUNCT_1:def 7;
        thus thesis by A5,A9,FUNCT_1:def 7;
      end;
      then rng f c= Coim(C-sub t,a) by A2;
      hence P[C] by A2,CARD_1:10;
    end;
    P[C] from ContextInd(A0,A1);
    hence thesis;
end;

theorem
  p is x-context_including & i in dom p implies
  (p/.i is non x-omitting iff p/.i is x-context)
  proof
    assume p is x-context_including;
    then consider j such that
A0: j in dom p & p.j is context of x &
    for n,t st n in dom p & n <> j & t = p.n
    holds t is x-omitting;
    assume Z1: i in dom p;
    then
A1: p/.i = p.i by PARTFUN1:def 6;
    thus p/.i is non x-omitting & p/.i is non x-context implies contradiction
    by A0,A1,Z1;
    assume p/.i is x-context;
    hence p/.i is non x-omitting;
  end;

theorem Th60:
  X is non-trivial & the_sort_of C = s1 implies
  for x1 being Element of X.s1
  for C1 being (context of x1), C2 being context of x st C2 = C1-sub(C)
  for t st the_sort_of t = s holds C2-sub t = C1-sub(C-sub t)
  proof assume ZZ: X is non-trivial;
    assume Z0: the_sort_of C = s1;
    let x1 be Element of X.s1;
    let C1 be (context of x1);
    let C2 be context of x;
    assume Z1: C2 = C1-sub(C);
    let t;
    assume Z2: the_sort_of t = s;
A0: the_sort_of (C-sub t) = s1 by Z0,SORT;
    defpred P[context of x1] means
    for C1 being context of x1 for C2 being context of x st C1 = $1 &
    C2 = C1-sub(C) holds C2-sub t = C1-sub(C-sub t);
A1: P[x1-term]
    proof
      let C1 be context of x1;
      let C2 be context of x;
      assume
B1:   C1 = (x1-term) & C2 = C1-sub C;
      then C2 = C by Z0,Th41;
      hence C2-sub t = C1-sub(C-sub t) by B1,A0,Th41;
    end;
A2: for o for w being Element of Args(o, Free(S,X))
    st w is x1-context_including
    holds P[x1-context_in w] implies
    for C being context of x1 st C = o-term w holds P[C]
    proof
      let o;
      let w be Element of Args(o, Free(S,X));
      assume Z3: w is x1-context_including;
      assume Z4: P[x1-context_in w];
      let C1 be context of x1;
      assume Z5: C1 = o-term w;
      let CC be context of x1;
      let C2 be context of x;
      assume
B2:   CC = C1 & C2 = CC-sub C;
      set i = x1-context_pos_in w;
B3:   x1-context_pos_in w in dom w = dom the_arity_of o &
      x1-context_in w = w.(x1-context_pos_in w) by Z3,Th71,MSUALG_3:6;
      then x1-context_in w in
      (the Sorts of Free(S,X)).((the_arity_of o)/.(x1-context_pos_in w))
      by MSUALG_6:2;
      then
B7:   the_sort_of (x1-context_in w) =
      (the_arity_of o)/.(x1-context_pos_in w) by SORT;
      then
      reconsider p = w+*(x1-context_pos_in w, (x1-context_in w)-sub(C-sub t)),
      q = w+*(x1-context_pos_in w, (x1-context_in w)-sub(C))
      as Element of Args(o,Free(S,X)) by MSUALG_6:7;
B5:   C2 = o-term q & C1-sub(C-sub t) = o-term p by ZZ,A0,Z0,Z3,Z5,B2,Th43;
      then
B6:   q is x-context_including & dom q = dom the_arity_of o by Th53,MSUALG_3:6;
      reconsider A = Coim((x1-context_in w)-sub(C),[x,s]) as finite set;
      Segm 1 = Segm card Coim(C,[x,s]) = card Coim(C,[x,s])
      c= card Coim((x1-context_in w)-sub(C),[x,s])
      = Segm card Coim((x1-context_in w)-sub(C),[x,s])
      by ZZ,Z0,Th70,CONTEXT;
      then
B9:   (x1-context_in w)-sub(C) is non x-omitting &
      q/.i = q.i = (x1-context_in w)-sub(C)
      by B3,B6,PARTFUN1:def 6,FUNCT_7:31;
      then reconsider C3 = (x1-context_in w)-sub(C) as context of x
      by B3,B6;
      the_sort_of C3 =
      (the_arity_of o)/.(x1-context_pos_in w) by B7,SORT;
      then reconsider u = w+*(x1-context_pos_in w, C3-sub t)
      as Element of Args(o,Free(S,X)) by MSUALG_6:7;
      C3 in rng q by B9,B6,B3,FUNCT_1:def 3;
      then o-term p = o-term u & x-context_pos_in q = x1-context_pos_in w &
      q+*(x1-context_pos_in w, C3-sub t) = u & x-context_in q = C3
      by B6,Z4,B9,CIn,CPI,FUNCT_7:34;
      hence thesis by B2,ZZ,Th43,Z2,B5,Th53;
    end;
    P[C1] from ContextInd(A1,A2);
    hence C2-sub t = C1-sub(C-sub t) by Z1;
  end;

theorem Th93:
  X is non-trivial & the_sort_of C = s1 implies
  for x1 being Element of X.s1
  for C1 being (context of x1), C2 being context of x st C2 = C1-sub(C)
  holds transl C2 = (transl C1)*(transl C)
  proof
    assume that
ZZ: X is non-trivial and
Z0: the_sort_of C = s1;
    let x1 be Element of X.s1;
    let C1 be (context of x1);
    let C2 be context of x;
    assume Z1: C2 = C1-sub(C);
    reconsider f = transl C as Function of (the Sorts of Free(S,X)).s,
    (the Sorts of Free(S,X)).s1 by Z0;
    transl C2 = (transl C1)*f
    proof
      let t be Element of (the Sorts of Free(S,X)).s;
A1:   the_sort_of t = s by SORT;
      then
A2:   (transl C2).t = C2-sub t & (transl C).t = C-sub t by TRANS;
      the_sort_of (C-sub t) = s1 by Z0,SORT;
      then (transl C1).(C-sub t) = C1-sub(C-sub t) by TRANS;
      then ((transl C1)*f).t = C1-sub(C-sub t) by A2,FUNCT_2:15;
      hence thesis by ZZ,A2,Z0,Z1,A1,Th60;
    end;
    hence transl C2 = (transl C1)*(transl C);
  end;

theorem
  ex y11,C12 st the_sort_of C12 = s2 & g1 = transl C12
  proof
    defpred P[Function,SortSymbol of S,SortSymbol of S] means
    for V being finite set
    ex x being Element of Y.$2 st ex C being context of x st
    x nin V & the_sort_of C = $3 & $1 = transl C;
A1: for s holds P[id ((the Sorts of Free(S,Y)).s),s,s]
    proof let s;
      let V be finite set;
      reconsider x = the Element of Y.s \ V as Element of Y.s;
      reconsider C = x-term as context of x;
      take x, C;
      thus x nin V by XBOOLE_0:def 5;
      thus the_sort_of C = s by SORT;
      thus thesis by Th57;
    end;
A2: for s1,s2,s3 being SortSymbol of S st TranslationRel S reduces s1,s2
    for t being Translation of Free(S,Y),s1,s2 st P[t,s1,s2]
    for f being Function st f is_e.translation_of Free(S,Y),s2,s3
    holds P[f*t,s1,s3]
    proof
      let s1,s2,s3 be SortSymbol of S;
      assume TranslationRel S reduces s1,s2;
      let t be Translation of Free(S,Y),s1,s2;
      assume Z1: P[t,s1,s2];
      let f be Function;
      assume f is_e.translation_of Free(S,Y),s2,s3;
      then consider o being OperSymbol of S such that
B1:   the_result_sort_of o = s3 &
      ex i being Element of NAT st i in dom the_arity_of o &
      ((the_arity_of o)/.i) = s2 &
      ex a being Function st a in Args(o,Free(S,Y)) &
      f = transl(o,i,a,Free(S,Y))
      by MSUALG_6:def 5;
      consider i being Element of NAT such that
B2:   i in dom the_arity_of o & ((the_arity_of o)/.i) = s2 &
      ex a being Function st a in Args(o,Free(S,Y)) &
      f = transl(o,i,a,Free(S,Y)) by B1;
      consider a being Function such that
B3:   a in Args(o,Free(S,Y)) & f = transl(o,i,a,Free(S,Y)) by B2;
      reconsider a as Element of Args(o,Free(S,Y)) by B3;
      let V be finite set;
      [s2,s3] in TranslationRel S & i in dom a by B1,B2,MSUALG_6:2,def 3;
      then consider y being (Element of Y.s2), C being (context of y),
      q1 being Element of Args(o,Free(S,Y)) such that
B4:   y nin V & q1 = a+*(i,y-term) &
      q1 is y-context_including & y-context_in q1 = y-term & C = o-term q1 &
      i = y-context_pos_in q1 & transl C = transl(o,i,a,Free(S,Y))
      by B2,Th91;
      consider y1 being (Element of Y.s1), C1 being context of y1 such that
B5:   y1 nin V \/ vf C & the_sort_of C1 = s2 & t = transl C1 by Z1;
      y in vf C by Th95;
      then y1 nin vf C & y <> y1 by B5,XBOOLE_0:def 3;
      then C is y1-omitting & y is y1-different by Th92;
      then reconsider C2 = C-sub C1 as context of y1 by B5,Th94;
      take y1,C2;
      thus y1 nin V by B5,XBOOLE_0:def 3;
      the_sort_of C2 = the_sort_of C by SORT;
      hence the_sort_of C2 = s3 by B1,B4,Th8;
      thus f*t = transl C2 by B3,B4,B5,Th93;
    end;
    for s1,s2 being SortSymbol of S st TranslationRel S reduces s1,s2
    for t being Translation of Free(S,Y),s1,s2 holds P[t,s1,s2]
    from MSUALG_6:sch 1(A1,A2);
    then ex x being Element of Y.s1 st ex C being context of x st
    x nin {} & the_sort_of C = s2 & g1 = transl C by REACH;
    hence thesis;
  end;

scheme LambdaTerm {S() -> non empty non void ManySortedSign,
  X() -> non-empty ManySortedSet of the carrier of S(),
  T1,T2() -> all_vars_including inheriting_operations X(),S()-terms
  MSAlgebra over S(),
  F(object) -> Element of T2()}:
  ex f being ManySortedFunction of T1(),T2() st
  for t being Element of T1() holds f.t = F(t)
provided
A0: for t being Element of T1() holds the_sort_of t = the_sort_of F(t)
  proof
    deffunc D(SortSymbol of S()) = (the Sorts of T1()).$1;
    deffunc F(object,object) = F($2);
    consider f being ManySortedFunction of the carrier of S() such that
A1: for o being SortSymbol of S() holds dom (f.o) = D(o) &
    for x being Element of D(o) holds f.o.x = F(o,x) from MSAFREE4:sch 7;
    f is ManySortedFunction of T1(),T2()
    proof
      let i be object; assume i in the carrier of S();
      then reconsider s = i as SortSymbol of S();
A2:   dom (f.s) = D(s) by A1;
      rng (f.s) c= (the Sorts of T2()).s
      proof
        let a; assume a in rng (f.s);
        then consider b such that
A3:     b in D(s) & a = f.s.b by A2,FUNCT_1:def 3;
        reconsider b as Element of D(s) by A3;
        s = the_sort_of b = the_sort_of F(b) & F(s,b) = f.s.b by A0,A1,SORT;
        hence a in (the Sorts of T2()).s by A3,SORT;
      end;
      hence f.i is Function of (the Sorts of T1()).i, (the Sorts of T2()).i
      by A2,FUNCT_2:2;
    end;
    then reconsider f as ManySortedFunction of T1(),T2();
    take f;
    let t be Element of T1();
A4: t in (the Sorts of T1()).the_sort_of t by SORT;
    thus f.t = f.(the_sort_of t).t by ABBR .= F(t) by A1,A4;
  end;

theorem Th86:
  ex g being Endomorphism of T st
  (canonical_homomorphism T)**h = g**canonical_homomorphism T &
  for t being Element of T holds g.t = (canonical_homomorphism T).(h.@t)
  proof set H = canonical_homomorphism T;
    H is_homomorphism Free(S,X),T & h is_homomorphism Free(S,X),Free(S,X)
    by MSUALG_6:def 2,MSAFREE4:def 10;
    then consider g being ManySortedFunction of T,T such that
A1: g is_homomorphism T,T & H**h = g**H by MSAFREE4:65,MSUALG_3:10;
    reconsider g as Endomorphism of T by A1,MSUALG_6:def 2;
    take g;
    thus H**h = g**H by A1;
    let t be Element of T;
    thus g.t = g.(H.@t)
    .= (g**H).@t by Th14
    .= (canonical_homomorphism T).(h.@t) by A1,Th14;
  end;

theorem
  (canonical_homomorphism T).(h.t) =
  (canonical_homomorphism T).(h.@((canonical_homomorphism T).t))
  proof
    set H = canonical_homomorphism T;
    consider g being Endomorphism of T such that
A1: H**h = g**H &
    for t being Element of T holds g.t = H.(h.@t) by Th86;
    thus H.(h.t) = (H**h).t by Th14 .= g.(H.t) by A1,Th14 .= H.(h.@(H.t))
    by A1;
  end;

begin :: Context vs endomorphism

definition
  let S;
  let B be non empty FinSequence of the carrier of S;
  let i being Element of dom B;
  redefine func B.i -> SortSymbol of S;  :: redefines . (FUNCT_1, definition)
  coherence by PARTFUN1:4;
end;

definition
  let S,X;
  let B be FinSequence of the carrier of S;
  let V be FinSequence of Union X;
  attr V is B-sorts means: SORTS: :: Element of product (X*B)
  dom V = dom B & for i st i in dom B holds V.i in X.(B.i);
end;

registration
  let S,X;
  let B be FinSequence of the carrier of S;
  cluster B-sorts for FinSequence of Union X;
  existence
  proof
    set V = the Element of product (X*B);
A0: rng B c= the carrier of S = dom X by FINSEQ_1:def 4,PARTFUN1:def 2;
A1: dom (X*B) = dom B by PARTFUN1:def 2;
A2: dom V = dom B = Seg len B by PARTFUN1:def 2,FINSEQ_1:def 3;
    then reconsider V as FinSequence by FINSEQ_1:def 2;
    rng V c= Union X
    proof
      let a; assume a in rng V;
      then consider i being object such that
A3:   i in dom V & a = V.i by FUNCT_1:def 3;
      reconsider i as Nat by A3;
      (X*B).i = X.(B.i) by A2,A3,FUNCT_1:13;
      then V.i in X.(B.i) & B.i in the carrier of S
      by A1,A2,A3,CARD_3:9,FUNCT_1:102;
      hence a in Union X by A0,A3,CARD_5:2;
    end;
    then reconsider V as FinSequence of Union X by FINSEQ_1:def 4;
    take V;
    thus dom V = dom B by PARTFUN1:def 2;
    let i; assume
A4: i in dom B;
    then (X*B).i = X.(B.i) by FUNCT_1:13;
    hence V.i in X.(B.i) by A1,A4,CARD_3:9;
  end;
end;

registration
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  cluster B-sorts -> non empty for FinSequence of Union X;
  coherence;
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union X;
  let i being Element of dom B;
  redefine func V.i -> Element of X.(B.i);  :: redefines . (FUNCT_1, definition)
  coherence by SORTS;
end;

definition
  let S,X;
  let B be FinSequence of the carrier of S;
  let D be FinSequence of Free(S,X);
  attr D is B-sorts means: SORTS2: :: Element of product ((the Sorts of Free(S,X))*B)
  dom D = dom B &
  for i st i in dom B holds D.i in (the Sorts of Free(S,X)).(B.i);
end;

registration
  let S,X;
  let B be FinSequence of the carrier of S;
  cluster B-sorts for FinSequence of Free(S,X);
  existence
  proof
    set V = the Element of product ((the Sorts of Free(S,X))*B);
A0: rng B c= the carrier of S = dom the Sorts of Free(S,X)
    by FINSEQ_1:def 4,PARTFUN1:def 2;
A1: dom ((the Sorts of Free(S,X))*B) = dom B by PARTFUN1:def 2;
A2: dom V = dom B = Seg len B by PARTFUN1:def 2,FINSEQ_1:def 3;
    then reconsider V as FinSequence by FINSEQ_1:def 2;
    rng V c= Union the Sorts of Free(S,X)
    proof
      let a; assume a in rng V;
      then consider i being object such that
A3:   i in dom V & a = V.i by FUNCT_1:def 3;
      reconsider i as Nat by A3;
      ((the Sorts of Free(S,X))*B).i = (the Sorts of Free(S,X)).(B.i)
      by A2,A3,FUNCT_1:13;
      then V.i in (the Sorts of Free(S,X)).(B.i) & B.i in the carrier of S
      by A1,A2,A3,CARD_3:9,FUNCT_1:102;
      hence a in Union the Sorts of Free(S,X) by A0,A3,CARD_5:2;
    end;
    then reconsider V as FinSequence of Union the Sorts of Free(S,X)
    by FINSEQ_1:def 4;
    take V;
    thus dom V = dom B by PARTFUN1:def 2;
    let i; assume
A4: i in dom B;
    then ((the Sorts of Free(S,X))*B).i = (the Sorts of Free(S,X)).(B.i)
    by FUNCT_1:13;
    hence V.i in (the Sorts of Free(S,X)).(B.i) by A1,A4,CARD_3:9;
  end;
end;

registration
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  cluster B-sorts -> non empty for FinSequence of Free(S,X);
  coherence;
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let D be B-sorts FinSequence of Free(S,X);
  let i being Element of dom B;
  redefine func D.i -> Element of (the Sorts of Free(S,X)).(B.i);  :: redefines . (FUNCT_1, definition)
  coherence by SORTS2;
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union X;
  let F be FinSequence of Free(S,X);
  attr F is V-context-sequence means: CONTEXTSEQ:
  dom F = dom B &
  for i being Element of dom B holds F.i is context of V.i;
end;

registration
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union X;
  cluster V-context-sequence -> non empty for FinSequence of Free(S,X);
  coherence;
end;

scheme FinSeqLambda{B() -> non empty FinSequence, F(set) -> object}:
  ex p being non empty FinSequence st dom p = dom B() &
  for i being Element of dom B() holds p.i = F(i)
  proof
    consider p being FinSequence such that
A1: len p = len B() &
    for i being natural set st i in dom p
       holds p.i = F(i) from FINSEQ_1:sch 2;
A2: dom p = dom B() by A1,FINSEQ_3:29;
    reconsider p as non empty FinSequence by A1;
    take p;
    thus thesis by A2,A1;
  end;

scheme FinSeqRecLambda{B() -> non empty FinSequence, A() -> object,
  F(object,object) -> set}:
  ex p being non empty FinSequence st dom p = dom B() & p.1 = A() &
  for i,j being Element of dom B() st j = i+1 holds p.j = F(i,p.i)
  proof
    defpred P[object,object,object] means $3 = F($1,$2);
A0: for n being Nat st 1 <= n & n < len B() for x being set ex y being set st
    P[n,x,y];
    consider p being FinSequence such that
A1: len p = len B() & (p.1 = A() or len B() = 0) &
    for i being natural set st 1 <= i < len B() holds P[i,p.i,p.(i+1)]
    from RECDEF_1:sch 3(A0);
    reconsider p as non empty FinSequence by A1;
    take p;
    thus dom p = dom B() by A1,FINSEQ_3:29;
    thus p.1 = A() by A1;
    let i,j be Element of dom B(); assume
A3: j = i+1; then i+1 <= len B() by FINSEQ_3:25;
    then 1 <= i < len B() by NAT_1:13,FINSEQ_3:25;
    hence thesis by A3,A1;
  end;

scheme FinSeqRec2Lambda{B() -> non empty FinSequence, A() -> DecoratedTree,
  F(object,DecoratedTree) -> DecoratedTree}:
  ex p being non empty DTree-yielding FinSequence st
  dom p = dom B() & p.1 = A() &
  for i,j being Element of dom B() st j = i+1
  for d being DecoratedTree st d = p.i holds p.j = F(i,d)
  proof
    defpred P[object,object,object] means
    for d being DecoratedTree st d = $2 holds $3 = F($1,d);
A0: for n being Nat st 1 <= n & n < len B() for x being set ex y being set st
    P[n,x,y]
    proof
      let n be Nat;
      assume 1 <= n;
      assume n < len B();
      let x be set;
      per cases;
      suppose x is DecoratedTree;
        then reconsider xx = x as DecoratedTree;
        take y = F(n,xx);
        thus P[n,x,y];
      end;
      suppose
A4:     x is not DecoratedTree;
        take y = 0;
        thus P[n,x,y] by A4;
      end;
    end;
    consider p being FinSequence such that
A1: len p = len B() & (p.1 = A() or len B() = 0) &
    for i being natural set st 1 <= i < len B() holds P[i,p.i,p.(i+1)]
    from RECDEF_1:sch 3(A0);
    reconsider p as non empty FinSequence by A1;
    p is DTree-yielding
    proof
      let a; assume a in rng p;
      then consider b such that
A5:   b in dom p & a = p.b by FUNCT_1:def 3;
      reconsider b as Element of dom B() by A5,A1,FINSEQ_3:29;
      defpred Q[Nat] means $1 in dom B() implies p.$1 is DecoratedTree;
A6:   Q[1] by A1;
A7:   for i st i >= 1 & Q[i] holds Q[i+1]
      proof let i;
        assume
A8:     i >= 1 & Q[i] & i+1 in dom B();
        then
AC:     i+1 <= len B() by FINSEQ_3:25;
        then i < len B() by NAT_1:13;
        then reconsider px = p.i as DecoratedTree by A8,FINSEQ_3:25;
        p.(i+1) = F(i,px) by A1,A8,AC,NAT_1:13;
        hence thesis;
      end;
      for i st i >= 1 holds Q[i] from NAT_1:sch 8(A6,A7);
      then b >= 1 implies a is DecoratedTree by A5;
      hence thesis by FINSEQ_3:25;
    end;
    then reconsider p as DTree-yielding non empty FinSequence;
    take p;
    thus dom p = dom B() by A1,FINSEQ_3:29;
    thus p.1 = A() by A1;
    let i,j be Element of dom B(); assume
A3: j = i+1; then i+1 <= len B() by FINSEQ_3:25;
    then 1 <= i < len B() by NAT_1:13,FINSEQ_3:25;
    hence thesis by A3,A1;
  end;

registration
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union X;
  cluster V-context-sequence for FinSequence of Free(S,X);
  existence
  proof
    deffunc F(Element of dom B) = (V.$1)-term;
    consider C being non empty FinSequence such that
A1: dom C = dom B & for i being Element of dom B holds C.i = F(i)
    from FinSeqLambda;
    rng C c= Union the Sorts of Free(S,X)
    proof
      let a; assume a in rng C;
      then consider i being object such that
A3:   i in dom C & a = C.i by FUNCT_1:def 3;
      reconsider i as Element of dom B by A1,A3;
      reconsider t = (V.i)-term as Element of Free(S,X);
      C.i = t & the_sort_of t = B.i by A1,SORT;
      hence a in Union the Sorts of Free(S,X) by A3;
    end;
    then reconsider C as FinSequence of Union the Sorts of Free(S,X)
    by FINSEQ_1:def 4;
    take C;
    thus dom C = dom B by A1;
    let i being Element of dom B;
    C.i = (V.i)-term by A1;
    hence thesis;
  end;
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union X;
  let F be V-context-sequence FinSequence of Free(S,X);
  let i being Element of dom B;
  redefine func F.i -> context of V.i;  :: redefines . (FUNCT_1, definition)
  coherence by CONTEXTSEQ;
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let V1,V2 be B-sorts FinSequence of Union X;
  attr V2 is V1-omitting means: OMIT2: rng V1 misses rng V2;
  let D be B-sorts FinSequence of Free(S,X);
  let F be V2-context-sequence FinSequence of Free(S,X);
  attr F is (V1,V2,D)-consequent-context-sequence means
  for i,j being Element of dom B st i+1 = j
  holds (F.j)-sub((V1.j)-term) = (F.i)-sub(D.i);
end;

definition
  let S,X;
  let B be non empty FinSequence of the carrier of S;
  let D be B-sorts FinSequence of Free(S,X);
  let V be B-sorts FinSequence of Union X;
  attr V is D-omitting means t in rng D implies vf t misses rng V;
end;

theorem OMIT4:
  for S,X for B being non empty FinSequence of the carrier of S
  for D being B-sorts FinSequence of Free(S,X)
  for V being B-sorts FinSequence of Union X st V is D-omitting
  for b1,b2 being Element of dom B holds D.b1 is V.b2-omitting
  proof
    let S,X;
    let B be non empty FinSequence of the carrier of S;
    let D be B-sorts FinSequence of Free(S,X);
    let V be B-sorts FinSequence of Union X;
    assume Z0: V is D-omitting;
    let b1,b2 be Element of dom B;
    dom D = dom B & dom V = dom B by SORTS,SORTS2;
    then D.b1 in rng D & V.b2 in rng V by FUNCT_1:def 3;
    then V.b2 nin vf (D.b1) by Z0,XBOOLE_0:3;
    hence D.b1 is V.b2-omitting by Th92;
  end;

registration
  let S,Y;
  let B be non empty FinSequence of the carrier of S;
  let V be B-sorts FinSequence of Union Y;
  let D be B-sorts FinSequence of Free(S,Y);
  cluster one-to-one V-omitting D-omitting for B-sorts FinSequence of Union Y;
  existence
  proof set N = {vf v: v in rng D}; deffunc F(Element of Free(S,Y)) = vf $1;
A0: rng D is finite;
A1: {F(v): v in rng D} is finite from FRAENKEL:sch 21(A0);
A3: N is finite-membered
    proof
      let a be set; assume a in N;
      then ex v st a = F(v) & v in rng D;
      hence thesis;
    end;
    deffunc G((Element of dom B),set) =
    {the Element of (Y.(B.($1+1)) \ (union N \/ rng V \/ $2))}\/$2;
    consider g being non empty FinSequence such that
A2: dom g = dom B & g.1 = {the Element of (Y.(B.1) \ (union N \/ rng V))} &
    for i,j being Element of dom B st j = i+1 holds g.j = G(i,g.i)
    from FinSeqRecLambda;
    deffunc F((Element of dom B),set) = union ((g.($1+1)) \ (g.$1));
    consider f being non empty FinSequence such that
AA: dom f = dom B & f.1 = union(g.1) &
    for i,j being Element of dom B st j = i+1 holds f.j = F(i,f.i)
    from FinSeqRecLambda;
    defpred P[Nat] means $1 in dom B implies g.$1 is finite;
B1: P[1] by A2;
B2: for i st i >= 1 & P[i] holds P[i+1]
    proof let i; assume
B4:   i >= 1 & P[i] & i+1 in dom B;
      then i <= i+1 <= len B by NAT_1:12,FINSEQ_3:25;
      then i <= len B by XXREAL_0:2;
      then reconsider i as Element of dom B by B4,FINSEQ_3:25;
      g.(i+1) = G(i,g.i) & g.i is finite by B4,A2;
      hence thesis;
    end;
B3: for i st i >= 1 holds P[i] from NAT_1:sch 8(B1,B2);
    defpred Q[Nat] means $1+1 in dom B implies g.($1+1) = {f.($1+1)}\/g.$1 &
    f.($1+1) nin g.$1 &
    f.($1+1) = the Element of Y.(B.($1+1)) \ (union N \/ rng V \/ g.$1);
C1: Q[1]
    proof
      assume
C2:   1+1 in dom B;
      then 1+1 <= len B by FINSEQ_3:25;
      then 1 <= len B by XXREAL_0:2;
      then reconsider i = 1, j = 1+1 as Element of dom B by C2,FINSEQ_3:25;
      reconsider gi = g.i as finite set by A2;
      set x = the Element of (Y.(B.j) \ (union N \/ rng V \/ gi));
C6:   x nin union N \/ rng V \/ gi by A1,A3,XBOOLE_0:def 5;
      then
C3:   x nin g.i by XBOOLE_0:def 3;
      g.2 = G(i,g.1) = {x}\/(g.1) & f.2 = F(i,f.1) = union((g.(i+1))\(g.i))
      by A2,AA,C2;
      then f.2 = union {x} = x by C3,EXCHSORT:3;
      hence thesis by C6,A2,XBOOLE_0:def 3;
    end;
C5: for i st i >= 1 & Q[i] holds Q[i+1]
    proof
      let i;
      assume Z0: i >= 1;
      assume Q[i];
      assume Z2: i+1+1 in dom B;
      then i+1 <= i+1+1 <= len B by NAT_1:12,FINSEQ_3:25;
      then
C6:   1 <= i+1 <= len B by NAT_1:12,XXREAL_0:2;
      then reconsider j2 = i+1+1, j = 1+i as Element of dom B
      by Z2,FINSEQ_3:25;
      i <= i+1 by NAT_1:12;
      then i <= len B by C6,XXREAL_0:2;
      then i in dom B by Z0,FINSEQ_3:25;
      then reconsider gi = g.i, gj = g.j as finite set by B3,FINSEQ_3:25;
      set x = the Element of (Y.(B.j2) \ (union N \/ rng V \/ gj));
C7:   x nin union N \/ rng V \/ gj by A1,A3,XBOOLE_0:def 5;
      then
C3:   x nin g.j by XBOOLE_0:def 3;
      g.j2 = G(j,g.j) = {x}\/(g.j) & f.j2 = F(j,f.j) = union((g.(j+1))\(g.j))
      by A2,AA;
      then f.j2 = union {x} = x by C3,EXCHSORT:3;
      hence thesis by C7,A2,XBOOLE_0:def 3;
    end;
C7: for i st i >= 1 holds Q[i] from NAT_1:sch 8(C1,C5);
C6: now let i be Element of dom B;
      i >= 1 by FINSEQ_3:25;
      hence i+1 in dom B implies g.(i+1) = {f.(i+1)}\/g.i & f.(i+1) nin g.i &
      f.(i+1) = the Element of Y.(B.(i+1)) \ (union N \/ rng V \/ g.i)
      by C7;
    end;
    rng f c= Union Y
    proof
      let a; assume a in rng f;
      then consider b such that
A5:   b in dom f & a = f.b by FUNCT_1:def 3;
      reconsider b as Element of dom B by AA,A5;
      b >= 1 by FINSEQ_3:25;
      then per cases by XXREAL_0:1;
      suppose b = 1;
        then a in Y.(B.b) & B.b in the carrier of S = dom Y
        by A1,A2,A3,AA,A5,XBOOLE_0:def 5,PARTFUN1:def 2;
        hence thesis by CARD_5:2;
      end;
      suppose b > 1;
        then b >= 1+1 by NAT_1:13;
        then consider c being Nat such that
D1:     b = 1+1+c by NAT_1:10;
D2:     b = 1+c+1 by D1;
        then len B >= b > 1+c by NAT_1:13,FINSEQ_3:25;
        then len B >= 1+c >= 1 by NAT_1:12,XXREAL_0:2;
        then reconsider c1 = 1+c as Element of dom B by FINSEQ_3:25;
        g.c1 is finite by B3,FINSEQ_3:25;
        then a = the Element of Y.(B.b) \ (union N \/ rng V \/ g.c1) &
        Y.(B.b) \ (union N \/ rng V \/ g.c1) <> {} by C6,A1,A3,D2,A5;
        then a in Y.(B.b) & B.b in the carrier of S = dom Y
        by XBOOLE_0:def 5,PARTFUN1:def 2;
        hence thesis by CARD_5:2;
      end;
    end;
    then reconsider f as FinSequence of Union Y by FINSEQ_1:def 4;
E0: for i,j being Element of dom B st i <= j holds g.i c= g.j
    proof let i,j be Element of dom B;
      defpred R[Nat] means $1 in dom B implies g.i c= g.$1;
E1:   R[i];
E2:   for j st j >= i & R[j] holds R[j+1]
      proof let j; assume
E3:     j >= i & R[j] & j+1 in dom B;
        then len B >= j+1 >= j & i >= 1 by NAT_1:12,FINSEQ_3:25;
        then
E4:     len B >= j >= 1 by E3,XXREAL_0:2;
        then j in dom B by FINSEQ_3:25;
        then g.(j+1) = {f.(j+1)}\/(g.j) by C6,E3;
        then g.i c= g.j c= g.(j+1) by E3,E4,XBOOLE_1:7,FINSEQ_3:25;
        hence thesis;
      end;
      for j st j >= i holds R[j] from NAT_1:sch 8(E1,E2);
      hence thesis;
    end;
F0: for i,j being Element of dom B st i < j holds f.j nin g.i & f.j in g.j
    proof let i,j be Element of dom B; assume i < j;
      then i+1 <= j by NAT_1:13;
      then consider k being Nat such that
E5:   j = i+1+k by NAT_1:10;
E6:   j = i+k+1 by E5;
      len B >= i+k+1 by E5,FINSEQ_3:25;
      then len B > i+k >= i >= 1 by NAT_1:12,13,FINSEQ_3:25;
      then len B >= i+k >= 1 by XXREAL_0:2;
      then reconsider ik = i+k as Element of dom B by FINSEQ_3:25;
      g.i c= g.ik & f.j nin g.ik & g.j = {f.j}\/g.ik by C6,E6,E0,NAT_1:12;
      hence thesis by ZFMISC_1:136;
    end;
F1: for b being Element of dom B holds f.b in g.b
    proof
      let b be Element of dom B;
      b >= 1 by FINSEQ_3:25;
      then per cases by XXREAL_0:1;
      suppose b = 1;
        hence thesis by AA,A2,TARSKI:def 1;
      end;
      suppose
D0:     b > 1;
        b <= len B by FINSEQ_3:25;
        then 1 <= len B by D0,XXREAL_0:2;
        then reconsider c1 = 1 as Element of dom B by FINSEQ_3:25;
        c1 < b by D0;
        hence thesis by F0;
      end;
    end;
    f is B-sorts
    proof
      thus dom f = dom B by AA;
      let i; assume i in dom B;
      then reconsider j = i as Element of dom B;
      j >= 1  by FINSEQ_3:25;
      then per cases by XXREAL_0:1;
      suppose i = 1;
        then f.i = union{the Element of (Y.(B.j) \ (union N \/ rng V))} &
        Y.(B.j) \ (union N \/ rng V) <> {} by AA,A1,A2,A3;
        hence f.i in Y.(B.i) by XBOOLE_0:def 5;
      end;
      suppose i > 1;
        then i >= 1+1 by NAT_1:13;
        then consider c being Nat such that
D1:     i = 1+1+c by NAT_1:10;
D2:     j = 1+c+1 by D1;
        then len B >= j > 1+c by NAT_1:13,FINSEQ_3:25;
        then len B >= 1+c >= 1 by NAT_1:12,XXREAL_0:2;
        then reconsider c1 = 1+c as Element of dom B by FINSEQ_3:25;
        g.c1 is finite by B3,FINSEQ_3:25;
        then f.j = the Element of Y.(B.j) \ (union N \/ rng V \/ g.c1) &
        Y.(B.j) \ (union N \/ rng V \/ g.c1) <> {} by C6,A1,A3,D2;
        hence f.i in Y.(B.i) by XBOOLE_0:def 5;
      end;
    end;
    then reconsider f as B-sorts FinSequence of Union Y;
    take f;
    thus f is one-to-one
    proof
      let a,b; assume
F2:   a in dom f & b in dom f & f.a = f.b & a <> b;
      then reconsider a,b as Element of dom B by AA;
      a < b or b < a by F2,XXREAL_0:1;
      then f.b in g.a & f.b nin g.a or f.a in g.b & f.a nin g.b by F0,F1,F2;
      hence thesis;
    end;
    now
      let a; assume a in rng f;
      then consider b such that
A5:   b in dom f & a = f.b by FUNCT_1:def 3;
      reconsider b as Element of dom B by AA,A5;
      1 <= b by FINSEQ_3:25;
      then per cases by XXREAL_0:1;
      suppose b = 1;
        then a = union{the Element of (Y.(B.b) \ (union N \/ rng V))} &
        Y.(B.b) \ (union N \/ rng V) <> {} by AA,A1,A2,A3,A5;
        hence a nin union N \/ rng V by XBOOLE_0:def 5;
      end;
      suppose b > 1;
        then b >= 1+1 by NAT_1:13;
        then consider c being Nat such that
D1:     b = 1+1+c by NAT_1:10;
D2:     b = 1+c+1 by D1;
        then len B >= b > 1+c by NAT_1:13,FINSEQ_3:25;
        then len B >= 1+c >= 1 by NAT_1:12,XXREAL_0:2;
        then reconsider c1 = 1+c as Element of dom B by FINSEQ_3:25;
        g.c1 is finite by B3,FINSEQ_3:25;
        then a = the Element of Y.(B.b) \ (union N \/ rng V \/ g.c1) &
        Y.(B.b) \ (union N \/ rng V \/ g.c1) <> {} by C6,A1,A3,D2,A5;
        then a nin union N \/ rng V \/ g.c1 by XBOOLE_0:def 5;
        hence a nin union N \/ rng V by XBOOLE_0:def 3;
      end;
    end;
    then
A4: rng f misses union N \/ rng V by XBOOLE_0:3;
    thus rng V misses rng f by A4,XBOOLE_1:7,63;
    let t be Element of Free(S,Y);
    assume t in rng D; then vf t in N;
    then vf t c= union N by ZFMISC_1:74;
    hence thesis by A4,XBOOLE_1:10,63;
  end;
end;

definition
  let S,X,t;
  mode vf-sequence of t -> FinSequence means: VFS:
  ex f being one-to-one FinSequence st
  rng f = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]} &
  dom it = dom f & for i st i in dom it holds it.i = t.(f.i);
  existence
  proof set I = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]};
    I c= dom t
    proof
      let a; assume a in I;
      then ex xi being Element of dom t st a = xi & ex s,x st t.xi = [x,s];
      hence thesis;
    end;
    then consider f being FinSequence such that
A1: rng f = I & f is one-to-one by FINSEQ_4:58;
    reconsider f as one-to-one FinSequence by A1;
    deffunc F(object) = t.(f.$1);
    consider V being FinSequence such that
A2: len V = len f & for i st i in dom V holds V.i = F(i) from FINSEQ_1:sch 2;
    take V,f; thus rng f = I by A1;
    thus dom V = dom f by A2,FINSEQ_3:29;
    thus thesis by A2;
  end;
end;

registration
  let f be FinSequence;
  cluster pr1 f -> FinSequence-like;
  coherence
  proof
    dom pr1 f = dom f = Seg len f by MCART_1:def 12,FINSEQ_1:def 3;
    hence thesis by FINSEQ_1:def 2;
  end;
  cluster pr2 f -> FinSequence-like;
  coherence
  proof
    dom pr2 f = dom f = Seg len f by MCART_1:def 13,FINSEQ_1:def 3;
    hence thesis by FINSEQ_1:def 2;
  end;
end;

theorem Th96:
  for f being vf-sequence of t holds pr2 f is FinSequence of the carrier of S
  proof
    let f be vf-sequence of t;
    consider g being one-to-one FinSequence such that
A1: rng g = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]} &
    dom f = dom g & for i st i in dom f holds f.i = t.(g.i) by VFS;
    let a; assume a in rng pr2 f;
    then consider b such that
A2: b in dom pr2 f & a = (pr2 f).b by FUNCT_1:def 3;
    reconsider b as Nat by A2;
A3: dom pr2 f = dom f by MCART_1:def 13;
    then g.b in rng g by A1,A2,FUNCT_1:def 3;
    then consider xi being Element of dom t such that
A4: g.b = xi & ex s,x st t.xi = [x,s] by A1;
    consider s,x such that
A5: t.xi = [x,s] by A4;
    a = (f.b)`2 by A2,A3,MCART_1:def 13 .= [x,s]`2 by A1,A2,A3,A4,A5 .= s;
    hence a in the carrier of S;
  end;

theorem Th97:
  for f being vf-sequence of t, B being FinSequence of the carrier of S
  st B = pr2 f holds pr1 f is B-sorts FinSequence of Union X
  proof
    let f be vf-sequence of t;
    let B be FinSequence of the carrier of S;
    assume Z0: B = pr2 f;
    consider g being one-to-one FinSequence such that
A1: rng g = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]} &
    dom f = dom g & for i st i in dom f holds f.i = t.(g.i) by VFS;
    pr1 f is FinSequence of Union X
    proof
      let a; assume a in rng pr1 f;
      then consider b such that
A2:   b in dom pr1 f & a = (pr1 f).b by FUNCT_1:def 3;
      reconsider b as Nat by A2;
A3:   dom pr1 f = dom f by MCART_1:def 12;
      then g.b in rng g by A1,A2,FUNCT_1:def 3;
      then consider xi being Element of dom t such that
A4:   g.b = xi & ex s,x st t.xi = [x,s] by A1;
      consider s,x such that
A5:   t.xi = [x,s] by A4;
      a = (f.b)`1 by A2,A3,MCART_1:def 12 .= [x,s]`1 by A1,A2,A3,A4,A5;
      hence a in Union X;
    end;
    then reconsider V = pr1 f as FinSequence of Union X;
    V is B-sorts
    proof
A6:   dom V = dom f = dom B by Z0,MCART_1:def 12,def 13;
      hence dom V = dom B;
      let i; assume
A7:   i in dom B;
      then g.i in rng g by A1,A6,FUNCT_1:def 3;
      then consider xi being Element of dom t such that
A4:   g.i = xi & ex s,x st t.xi = [x,s] by A1;
      consider s,x such that
A5:   t.xi = [x,s] by A4;
      B.i = (f.i)`2 & V.i = (f.i)`1 & f.i = [x,s]
      by Z0,A1,A4,A5,A6,A7,MCART_1:def 12,def 13;
      hence V.i in X.(B.i);
    end;
    hence pr1 f is B-sorts FinSequence of Union X;
  end;

registration
  let f be non empty FinSequence;
  reduce In(1, dom f) to 1;
  reducibility by FINSEQ_5:6,SUBSET_1:def 8;
  reduce In(len f, dom f) to len f;
  reducibility by SUBSET_1:def 8,FINSEQ_5:6;
end;

theorem Th117:
  for xi being Element of dom t st t.xi = [x,s]
  holds the_sort_of t1 = s implies
  t with-replacement (xi,t1) is Element of Free(S,X), the_sort_of t
  proof
    let xi be Element of dom t;
    assume Z0: t.xi = [x,s];
    assume Z1: the_sort_of t1 = s;
    defpred P[Element of Free(S,X)] means
    for xi being Element of dom $1
    for x1,t st $1.xi = [x1,s] & t = $1 holds $1 with-replacement (xi,t1)
    is Element of Free(S,X), the_sort_of t;
A1: P[x11-term]
    proof
      let xi be Element of dom(x11-term);
      dom(x11-term) = {{}} by TREES_1:29;
      then
A1:   xi = <*>NAT;
      let x1,t; assume (x11-term).xi = [x1,s];
      then [x11,s1] = [x1,s];
      then
A2:   s1 = s & x11 = x1 by XTUPLE_0:1;
      (x11-term) with-replacement(xi, t1) in
      (the Sorts of Free(S,X)).the_sort_of t1 by A1,SORT;
      hence thesis by A2,Z1,SORT;
    end;
A3: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p; assume
A4:   for t st t in rng p holds P[t];
      let xi being Element of dom (o-term p);
      let x1,t; assume
A5:   (o-term p).xi = [x1,s] & t = o-term p;
A6:   dom(o-term p) = tree doms p & doms p is Tree-yielding by TREES_4:10;
      then per cases by TREES_3:def 15;
      suppose xi = {};
        then (o-term p).xi = [o,the carrier of S] by TREES_4:def 4;
        then s in the carrier of S = s by A5,XTUPLE_0:1;
        hence (o-term p) with-replacement (xi,t1)
        is Element of Free(S,X), the_sort_of t;
      end;
      suppose
        ex n being Nat, w being FinSequence st
        n < len doms p & w in (doms p).(n+1) & xi = <*n*>^w;
        then consider w being FinSequence, n being Nat such
        that
B1:     n < len doms p & w in (doms p).(n+1) & xi = <*n*>^w;
        1 <= n+1 <= len doms p by B1,NAT_1:12,13;
        then
B2:     n+1 in dom doms p = dom p by FINSEQ_3:25,TREES_3:37;
        then
B3:     p/.(n+1) = p.(n+1) in rng p & (doms p).(n+1) = dom (p.(n+1))
        by FUNCT_1:def 3,PARTFUN1:def 6,FUNCT_6:def 2;
        reconsider w as Element of dom (p/.(n+1)) by B1,B3;
B4:     n < len p by B1,TREES_3:38;
        then (p/.(n+1)).w = [x1,s] by A5,B1,B3,TREES_4:12;
        then (p/.(n+1)) with-replacement (w,t1) is
        Element of Free(S,X), the_sort_of (p/.(n+1)) by B3,A4;
        then (p/.(n+1)) with-replacement (w,t1) is
        Element of Free(S,X), (the_arity_of o)/.(n+1) by B2,Th4A;
        then reconsider q = p+*(n+1, (p/.(n+1)) with-replacement (w,t1)) as
        Element of Args(o,Free(S,X)) by MSUALG_6:7;
        (Sym(o,X)-tree p) with-replacement (xi,t1) = Sym(o,X)-tree q
        by B1,B3,B4,A6,Th123;
        then (o-term p) with-replacement (xi,t1)
        is Element of Free(S,X), the_sort_of (o-term q) by SORT;
        then (o-term p) with-replacement (xi,t1)
        is Element of Free(S,X), the_result_sort_of o by Th8;
        hence (o-term p) with-replacement (xi,t1)
        is Element of Free(S,X), the_sort_of t by A5,Th8;
      end;
    end;
    P[t] from TermInd(A1,A3);
    hence t with-replacement (xi,t1) is Element of Free(S,X), the_sort_of t
    by Z0;
  end;

theorem Th118:
  X is non-trivial implies
  for xi being Element of dom C st C.xi = [x,s]
  holds the_sort_of t = s implies C-sub t = C with-replacement (xi,t)
  proof
    assume ZZ: X is non-trivial;
    let xi be Element of dom C;
    assume Z0: C.xi = [x,s];
    assume Z1: the_sort_of t = s;
    defpred P[Element of Free(S,X)] means for C being context of x st C = $1
    for xi being Element of dom C st C.xi = [x,s]
    holds C-sub t = C with-replacement (xi,t);
A1: P[x-term]
    proof
      let C such that
A2:   C = x-term;
      let xi be Element of dom C;
      xi in {{}} by A2,TREES_1:29;
      then xi = <*>NAT;
      hence thesis by Z1,A2,Th41;
    end;
A3: for o being OperSymbol of S
    for w being Element of Args(o, Free(S,X))
    st w is x-context_including
    holds P[x-context_in w] implies
    for C being context of x st C = o-term w holds P[C]
    proof
      let o be OperSymbol of S;
      let w be Element of Args(o, Free(S,X));
      assume Z2: w is x-context_including;
      assume Z3: P[x-context_in w];
      let C be context of x;
      assume Z4: C = o-term w;
      let D be context of x;
      assume Z5: D = C;
      let xi be Element of dom D;
      assume Z6: D.xi = [x,s];
      dom D = tree doms w by Z4,Z5,TREES_4:10;
      then per cases by TREES_3:def 15;
      suppose xi = {};
        then D.xi = [o,the carrier of S] by Z4,Z5,TREES_4:def 4;
        then s in the carrier of S = s by Z6,XTUPLE_0:1;
        hence thesis;
      end;
      suppose ex i being Nat, r being FinSequence st i < len doms w &
        r in (doms w).(i+1) & xi = <*i*>^r;
        then consider i being Nat, r being FinSequence such that
A4:     i < len doms w & r in (doms w).(i+1) & xi = <*i*>^r;
A5:     len doms w = len w by TREES_3:38;
        then
AB:     1 <= i+1 <= len w by A4,NAT_1:12,13;
        then
A6:     i+1 in dom w by FINSEQ_3:25;
        then
A7:     w/.(i+1) = w.(i+1) in rng w & (doms w).(i+1) = dom (w.(i+1))
        by PARTFUN1:def 6,FUNCT_6:def 2,FUNCT_1:def 3;
        then reconsider r as Element of dom (w/.(i+1)) by A4;
A8:     D.xi = (w/.(i+1)).r & [x,s] in {[x,s]}
        by Z4,Z5,A4,A5,A7,TARSKI:def 1,TREES_4:12;
        then w/.(i+1) is not x-omitting by Z6,FUNCT_1:def 7;
        then
AA:     x-context_pos_in w = i+1 by Z2,AB,Th72,FINSEQ_3:25;
        then
A9:     x-context_in w = w/.(i+1) by Z2,A7,Th71;
        the_sort_of (x-context_in w) =
        (the_arity_of o)/.(x-context_pos_in w) by A6,AA,A9,Th4A;
        then
        reconsider u = w+*(x-context_pos_in w, (x-context_in w)-sub t)
        as Element of Args(o,Free(S,X)) by MSUALG_6:7;
A11:    D-sub t = o-term u by ZZ,Z1,Z2,Z4,Z5,Th43;
        xi in dom D; then
        i < len w & xi in tree doms w &
        x-context_in w = w.(i+1) &
        u = w+*(i+1,(x-context_in w) with-replacement (r, t))
        by Z4,Z5,A4,AA,A9,Z3,Z6,A8,A6,TREES_3:38,TREES_4:10,PARTFUN1:def 6;
        hence thesis by A11,Z4,Z5,A4,Th123;
      end;
    end;
    P[C] from ContextInd(A1,A3);
    hence C-sub t = C with-replacement (xi,t) by Z0;
  end;

theorem Lem9:
  for xi1,xi2 being FinSequence st xi1 <> xi2 & xi1 in dom t & xi2 in dom t
  for s1,s2 being SortSymbol of S, x1 being Element of X.s1
  for x2 being Element of X.s2 st t.xi1 = [x1,s1]
  holds not xi1 is_a_prefix_of xi2
  proof
    let xi1,xi2 be FinSequence;
    assume Z0: xi1 <> xi2;
    assume xi1 in dom t;
    then reconsider nu1 = xi1 as Element of dom t;
    assume Z2: xi2 in dom t;
    let s1,s2 be SortSymbol of S;
    let x1 be Element of X.s1;
    let x2 be Element of X.s2;
    assume Z3: t.xi1 = [x1,s1];
    assume xi1 is_a_prefix_of xi2;
    then consider r being FinSequence such that
A1: xi2 = xi1^r by TREES_1:1;
    reconsider t1 = t|nu1 as Element of Free(S,X) by MSAFREE4:44;
    <*>NAT in (dom t qua Tree)|(nu1 qua FinSequence of NAT) by TREES_1:22;
    then
A2: t1.{} = t.(nu1^{}) by TREES_2:def 10;
    xi2 is Element of dom t by Z2;
    then reconsider r as FinSequence of NAT by A1,FINSEQ_1:36;
    per cases by Th16;
    suppose ex s,x st t1 = x-term;
      then consider s,x such that
A4:   t1 = x-term;
      dom t1 = (dom t)|nu1 by TREES_2:def 10;
      then r in dom t1 by Z2,A1,TREES_1:def 6;
      then r in {{}} by A4,TREES_1:29;
      then r = {};
      hence thesis by Z0,A1;
    end;
    suppose ex o,p st t1 = o-term p;
      then consider o,p such that
A3:   t1 = o-term p;
      t1.{} = [o,the carrier of S] by A3,TREES_4:def 4;
      then s1 in the carrier of S = s1 by A2,Z3,XTUPLE_0:1;
      hence thesis;
    end;
  end;

theorem Lem10:
  for t,t1 for xi being Element of dom t st
  t1 = t with-replacement(xi,x-term) & t is x-omitting holds t1 is context of x
  proof
    let t,t1;
    let xi be Element of dom t;
    assume Z1: t1 = t with-replacement(xi,x-term);
    assume Z2: t is x-omitting;
    Coim(t1,[x,s]) = {xi}
    proof
      thus Coim(t1,[x,s]) c= {xi}
      proof
        let a; assume
A0:     a in Coim(t1,[x,s]);
        then
A1:     a in dom t1 & t1.a in {[x,s]} by FUNCT_1:def 7;
        reconsider nu = a as Element of dom t1 by A0,FUNCT_1:def 7;
        nu in dom t1;
        then
A5:     xi in dom t & nu in dom t with-replacement(xi, dom (x-term))
        by Z1,TREES_2:def 11;
        then per cases by Z1,TREES_2:def 11;
        suppose
A3:       t1.nu = t.nu & not xi is_a_prefix_of nu;
          then not ex r being FinSequence of NAT st r in dom (x-term) &
          nu = xi^r by TREES_1:1;
          then [x,s] in {[x,s]} & nu in dom t by A5,TARSKI:def 1,TREES_1:def 9;
          hence thesis by Z2,A3,A1,FUNCT_1:def 7;
        end;
        suppose ex r being FinSequence of NAT st r in dom (x-term) & nu = xi^r
          & t1.nu = (x-term).r;
          then consider r being FinSequence of NAT such that
A6:       r in dom (x-term) & nu = xi^r & t1.nu = (x-term).r;
          r in {{}} by A6,TREES_1:29;
          then r = {};
          hence thesis by A6,TARSKI:def 1;
        end;
      end;
      let a; assume a in {xi};
      then
A7:   a = xi by TARSKI:def 1;
A9:   xi in dom t with-replacement(xi, dom(x-term)) = dom t1
      by Z1,TREES_1:def 9,TREES_2:def 11;
      then consider r being FinSequence of NAT such that
A8:   r in dom (x-term) & xi = xi^r & t1.xi = (x-term).r by Z1,TREES_2:def 11;
      r = {} by A8,FINSEQ_1:87;
      then t1.xi = [x,s] in {[x,s]} by A8,TARSKI:def 1,TREES_4:3;
      hence thesis by A7,A9,FUNCT_1:def 7;
    end;
    then card Coim(t1,[x,s]) = 1 by CARD_1:30;
    hence t1 is context of x by CONTEXT;
  end;

theorem Lem11:
  for t,t1 for xi being Element of dom t st t.xi = [x,s]
  holds dom t c= dom (t with-replacement(xi,t1))
  proof
    let t,t1;
    let xi be Element of dom t;
    assume Z0: t.xi = [x,s];
    let a;
    assume a in dom t;
    then reconsider q = a as Element of dom t;
    xi in Leaves dom t by Z0,Lem13;
    then not xi c< q by TREES_1:def 5;
    then q in dom t with-replacement(xi, dom t1) by TREES_1:def 9;
    hence a in dom (t with-replacement(xi,t1)) by TREES_2:def 11;
  end;

theorem Lem11A:
  for t for xi being Element of dom t st t.xi = [x,s]
  holds dom t = dom (t with-replacement(xi,x1-term))
  proof
    let t; set t1 = x1-term;
    let xi be Element of dom t;
    assume t.xi = [x,s];
    then
A0: dom t c= dom (t with-replacement(xi,x1-term)) by Lem11;
    dom (t with-replacement(xi,x1-term)) c= dom t
    proof let a;
      assume a in dom (t with-replacement(xi,x1-term));
      then reconsider q = a as Element of dom (t with-replacement(xi,x1-term));
      dom (t with-replacement(xi,x1-term)) = dom t with-replacement(xi, dom t1)
      by TREES_2:def 11;
      then per cases by TREES_1:def 9;
      suppose q in dom t;
        hence a in dom t;
      end;
      suppose ex r being FinSequence of NAT st r in dom t1 & q = xi^r;
        then consider r being FinSequence of NAT such that
A1:     r in dom t1 & q = xi^r;
        r in {{}} by A1,TREES_1:29;
        then r = {};
        hence a in dom t by A1;
      end;
    end;
    hence thesis by A0,XBOOLE_0:def 10;
  end;

theorem Th129:
  for t,t1 being Tree, xi being Element of t holds
  (t with-replacement(xi,t1))|xi = t1
  proof
    let t,t1 be Tree;
    let xi be Element of t;
    let p be FinSequence of NAT;
A1: xi in t with-replacement(xi,t1) by TREES_1:def 9;
    hereby assume p in (t with-replacement(xi,t1))|xi;
      then xi^p in t with-replacement(xi,t1) by A1,TREES_1:def 6;
      hence p in t1 by Th01;
    end;
    assume p in t1;
    then xi^p in t with-replacement(xi,t1) by TREES_1:def 9;
    hence thesis by A1,TREES_1:def 6;
  end;

theorem Th130:
  for t,t1 being DecoratedTree, xi being Node of t holds
  (t with-replacement(xi,t1))|xi = t1
  proof
    let t,t1 be DecoratedTree;
    let xi be Node of t;
A1: xi in dom t with-replacement(xi,dom t1)
    = dom(t with-replacement(xi,t1)) by TREES_1:def 9,TREES_2:def 11;
A2: dom((t with-replacement(xi,t1))|xi)
    = (dom (t with-replacement(xi,t1)))|xi by TREES_2:def 10;
    hence dom((t with-replacement(xi,t1))|xi) = dom t1 by A1,Th129;
    let p be Node of (t with-replacement(xi,t1))|xi;
    xi^p in dom(t with-replacement(xi,t1)) & xi c= xi^p
    by A1,A2,TREES_1:1,def 6;
    then consider r being FinSequence of NAT such that
A4: r in dom t1 & xi^p = xi^r & (t with-replacement(xi,t1)).(xi^p) = t1.r
    by A1,TREES_2:def 11;
    thus ((t with-replacement(xi,t1))|xi).p
    = (t with-replacement(xi,t1)).(xi^p) by A2,TREES_2:def 10
    .= t1.p by A4,FINSEQ_1:33;
  end;

theorem Th131:
  for xi being Node of t st t1 = t|xi holds (h.t)|xi = h.t1
  proof
    let xi be Node of t;
    defpred P[Element of Free(S,X)] means for xi being Node of $1
    for t1 st t1 = $1|xi holds (h.$1)|xi = h.t1 & xi in dom (h.$1);
A1: P[x-term]
    proof
      let xi be Node of x-term;
      dom(x-term) = {{}} by TREES_1:29;
      then
A2:   xi = {};
      let t1; assume t1 = (x-term)|xi;
      then t1 = x-term by A2,TREES_9:1;
      hence (h.(x-term))|xi = h.t1 by A2,TREES_9:1;
      thus thesis by A2,TREES_1:22;
    end;
A3: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p; assume
A4:   for t st t in rng p holds P[t];
      let xi be Node of o-term p;
      let t1; assume
A5:   t1 = (o-term p)|xi;
      per cases by TREES_4:11;
      suppose
A6:     xi = {};
        hence (h.(o-term p))|xi = h.(o-term p) by TREES_9:1
        .= h.t1 by A5,A6,TREES_9:1;
        thus thesis by A6,TREES_1:22;
      end;
      suppose ex n being Nat,t being DecoratedTree,q being Node of t
        st n < len p & t = p.(n+1) & xi = <*n*>^q;
        then consider n being Nat,t being DecoratedTree,q being Node of t
        such that
A6:     n < len p & t = p.(n+1) & xi = <*n*>^q;
A8:     t1 = (o-term p)|<*n*>|q by A5,A6,TREES_9:3;
        1 <= n+1 <= len p by A6,NAT_1:12,13;
        then
A10:    n+1 in dom p by FINSEQ_3:25;
        then reconsider t as Element of Free(S,X) by A6,FUNCT_1:102;
A9:     t = (o-term p)|<*n*> by A6,TREES_4:def 4;
        t in rng p by A6,A10,FUNCT_1:def 3;
        then
A12:    (h.t)|q = h.t1 & q in dom (h.t) by A8,A9,A4;
        the_sort_of (o-term p) = the_result_sort_of o by Th8;
        then h.(o-term p) = h.(the_result_sort_of o).(o-term p) &
        o-term p = Den(o,Free(S,X)).p
        by ABBR,MSAFREE4:13;
        then
A13:    h.(o-term p) = Den(o,Free(S,X)).(h#p) by MSUALG_6:def 2,MSUALG_3:def 7
        .= o-term (h#p) by MSAFREE4:13;
        dom (h#p) = dom the_arity_of o = dom p by MSUALG_6:2;
        then
A16:    len (h#p) = len p by FINSEQ_3:29;
        then
A14:    (h#p).(n+1) = (o-term (h#p))|<*n*> by A6,TREES_4:def 4;
        (h#p).(n+1) = h.((the_arity_of o)/.(n+1)).t & t = p/.(n+1)
        by A6,A10,MSUALG_3:def 6,PARTFUN1:def 6;
        then
A15:    (h#p).(n+1) = h.(the_sort_of t).t by A10,Th4A .= h.t by ABBR;
        then <*n*>^q in dom(o-term (h#p)) by A6,A12,A16,TREES_4:11;
        hence thesis by A6,A12,A13,A14,A15,TREES_9:3;
      end;
    end;
    P[t] from TermInd(A1,A3);
    hence thesis;
  end;

theorem Th132:
  for xi being Node of t st t.xi = [x,s] holds t|xi = x-term
  proof
    let xi be Node of t;
    assume Z0: t.xi = [x,s];
    reconsider tx = t|xi as Element of Free(S,X) by MSAFREE4:44;
    per cases by Th16;
    suppose ex s1,x11 st tx = x11-term;
      then consider s1,x11 such that
A1:   tx = x11-term;
      <*>NAT in dom tx = (dom t)|xi by TREES_1:22,TREES_2:def 10;
      then tx.{} = t.(xi^{}) by TREES_2:def 10;
      hence t|xi = x-term by Z0,A1,TREES_4:3;
    end;
    suppose ex o,p st tx = o-term p;
      then consider o,p such that
A2:   tx = o-term p;
      <*>NAT in dom tx = (dom t)|xi by TREES_1:22,TREES_2:def 10;
      then tx.{} = t.(xi^{}) by TREES_2:def 10;
      then [o,the carrier of S] = [x,s] by Z0,A2,TREES_4:def 4;
      then s in the carrier of S = s by XTUPLE_0:1;
      hence thesis;
    end;
  end;

theorem Th134:
  for t,t1 being Tree, xi,nu being Element of t st not xi c= nu &
  not nu c= xi holds (t with-replacement(xi,t1))|nu = t|nu
  proof
    let t,t1 be Tree;
    let xi,nu be Element of t;
    assume Z0: not xi c= nu;
    assume Z1: not nu c= xi;
    let a be FinSequence of NAT;
    hereby
      assume a in (t with-replacement(xi,t1))|nu;
      then reconsider b = a as Element of (t with-replacement(xi,t1))|nu;
      not xi c< nu by Z0,XBOOLE_0:def 8;
      then nu in t with-replacement(xi,t1) by TREES_1:def 9;
      then nu^b in t with-replacement(xi,t1) by TREES_1:def 6;
      then per cases by TREES_1:def 9;
      suppose nu^b in t & not xi c< nu^b;
        hence a in t|nu by TREES_1:def 6;
      end;
      suppose ex r being FinSequence of NAT st r in t1 & nu^b = xi^r;
        then consider r being FinSequence of NAT such that
B1:     r in t1 & nu^b = xi^r;
        nu c= xi^r & xi c= nu^b by B1,Lem8;
        hence a in t|nu by Z0,Z1,Lem8B;
      end;
    end;
    assume a in t|nu;
    then
A2: nu^a in t by TREES_1:def 6;
    not xi c< nu^a by Z0,Z1,Lem8B,XBOOLE_0:def 8;
    then
A3: nu^a in t with-replacement(xi,t1) by A2,TREES_1:def 9;
    not xi c< nu by Z0,XBOOLE_0:def 8;
    then nu in t with-replacement(xi,t1) by TREES_1:def 9;
    hence thesis by A3,TREES_1:def 6;
  end;

theorem Th133:
  for t,t1 being DecoratedTree, xi,nu being Node of t st not xi c= nu &
  not nu c= xi holds (t with-replacement(xi,t1))|nu = t|nu
  proof
    let t,t1 be DecoratedTree;
    let xi,nu be Node of t;
    assume Z0: not xi c= nu;
    assume Z1: not nu c= xi;
    not xi c< nu by Z0,XBOOLE_0:def 8;
    then
A1: nu in dom t with-replacement(xi,dom t1)
    = dom(t with-replacement(xi,t1)) by TREES_1:def 9,TREES_2:def 11;
A2: dom((t with-replacement(xi,t1))|nu) = (dom(t with-replacement(xi,t1)))|nu
    by TREES_2:def 10;
    hence
A4: dom((t with-replacement(xi,t1))|nu) = (dom t)|nu by Z0,Z1,A1,Th134
    .= dom (t|nu) by TREES_2:def 10;
    let p be Node of (t with-replacement(xi,t1))|nu;
A8: (dom t)|nu = dom (t|nu) by TREES_2:def 10;
    then
A5: nu^p in dom t & (t|nu).p = t.(nu^p) by A4,TREES_1:def 6,TREES_2:def 10;
    not xi c< nu^p by Z0,Z1,Lem8B,XBOOLE_0:def 8;
    then
A7: nu^p in dom t with-replacement(xi,dom t1) by A5,TREES_1:def 9;
A6: not ex r being FinSequence of NAT st r in dom t1 & nu^p = xi^r &
    (t with-replacement(xi,t1)).(nu^p) = t1.r by Z0,Z1,Lem8B,TREES_1:1;
    thus ((t with-replacement(xi,t1))|nu).p
    = (t with-replacement(xi,t1)).(nu^p) by A2,TREES_2:def 10
    .= t.(nu^p) by A6,A7,TREES_2:def 11
    .= (t|nu).p by A8,TREES_2:def 10,A4;
  end;

theorem Th136:
  t c= t1 implies t = t1
  proof
    assume
A1: t c= t1;
    defpred P[Element of Free(S,X)] means for t1 st $1 c= t1 holds $1 = t1;
A2: P[x-term]
    proof
      let t1;
      assume
A3:   x-term c= t1;
      {} in dom (x-term) by TREES_1:22;
      then
A4:   t1.{} = (x-term).{} = [x,s] by A3,GRFUNC_1:2,TREES_4:3;
      per cases by Th16;
      suppose ex s,x st t1 = x-term;
        then consider s1,x11 such that
A5:     t1 = x11-term;
        thus thesis by A5,A4,TREES_4:3;
      end;
      suppose ex o,p st t1 = o-term p;
        then consider o,p such that
A6:     t1 = o-term p;
        t1.{} = [o,the carrier of S] by A6,TREES_4:def 4;
        then s in the carrier of S = s by A4,XTUPLE_0:1;
        hence thesis;
      end;
    end;
A7: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p;
      assume Z0: for t st t in rng p holds P[t];
      let t1; assume Z1: o-term p c= t1;
      {} in dom (o-term p) by TREES_1:22;
      then
A8:   t1.{} = (o-term p).{} = [o,the carrier of S]
      by Z1,GRFUNC_1:2,TREES_4:def 4;
      per cases by Th16;
      suppose ex s,x st t1 = x-term;
        then consider s1,x11 such that
A5:     t1 = x11-term;
        t1.{} = [x11,s1] by A5,TREES_4:3;
        then s1 in the carrier of S = s1 by A8,XTUPLE_0:1;
        hence thesis;
      end;
      suppose ex o,p st t1 = o-term p;
        then consider o1 being OperSymbol of S,
        p1 being Element of Args(o1,Free(S,X)) such that
A6:     t1 = o1-term p1;
        t1.{} = [o1,the carrier of S] by A6,TREES_4:def 4;
        then
A7:     o = o1 by A8,XTUPLE_0:1;
        p = p1
        proof
A8:       dom p = dom the_arity_of o = dom p1 by A7,MSUALG_6:2;
          hence
B3:       len p = len p1 by FINSEQ_3:29;
          let i; assume
A9:       1 <= i <= len p;
          then
B8:       i in dom p by FINSEQ_3:25;
          reconsider t = p.i, t1 = p1.i as Element of Free(S,X)
          by A8,A9,FUNCT_1:102,FINSEQ_3:25;
          consider j such that
B2:       i = 1+j by A9,NAT_1:10;
B7:       j < len p by A9,B2,NAT_1:13;
          then
B4:       t = (o-term p)|<*j*> & t1 = (o1-term p1)|<*j*>
          by B2,B3,TREES_4:def 4;
          then
B5:       dom t = (dom(o-term p))|<*j*> & dom t1 = (dom(o1-term p1))|<*j*>
          by TREES_2:def 10;
          (doms p).(j+1) = dom t by B2,B8,FUNCT_6:def 2;
          then {} in (doms p).(j+1) & dom(o-term p) = tree doms p &
          len doms p = len p by TREES_3:38,TREES_4:10,TREES_1:22;
          then
B6:       <*j*>^{} in dom(o-term p) by B7,TREES_3:48;
          (doms p1).(j+1) = dom t1 by B2,A9,A8,FINSEQ_3:25,FUNCT_6:def 2;
          then {} in (doms p1).(j+1) & dom(o1-term p1) = tree doms p1 &
          len doms p1 = len p1 by TREES_3:38,TREES_4:10,TREES_1:22;
          then
BB:       <*j*>^{} in dom(o1-term p1) by B3,B7,TREES_3:48;
BE:       t c= t1
          proof
            let a,b; assume
B1:         [a,b] in t;
            then reconsider a as Node of t by XTUPLE_0:def 12;
            t.a = b by B1,FUNCT_1:1;
            then
BA:         (o-term p).(<*j*>^a) = b & <*j*>^a in dom (o-term p)
            by B4,B5,B6,TREES_1:def 6,TREES_2:def 10;
            then
BC:         (o1-term p1).(<*j*>^a) = b & dom(o-term p) c= dom(o1-term p1)
            by Z1,A6,GRFUNC_1:2;
            then
BD:         a in dom t1 by BA,BB,B5,TREES_1:def 6;
            then t1.a = b by BC,B4,B5,TREES_2:def 10;
            hence thesis by BD,FUNCT_1:1;
          end;
          t in rng p by B8,FUNCT_1:def 3;
          hence thesis by BE,Z0;
        end;
        hence thesis by A6,A8,TREES_4:def 4;
      end;
    end;
    P[t] from TermInd(A2,A7);
    hence thesis by A1;
  end;

theorem Th135:
  for t
  for h being Endomorphism of Free(S,X) holds dom t c= dom (h.t) &
  for I st
  I = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]}
  holds t|((dom t) \ I) = (h.t)|((dom t) \ I)
  proof
    let t;
    let h be Endomorphism of Free(S,X);
    defpred P[Element of Free(S,X)] means dom $1 c= dom (h.$1) & for I st
    I = {xi where xi is Element of dom $1: ex s,x st $1.xi = [x,s]}
    holds $1|((dom $1) \ I) = (h.$1)|((dom $1) \ I);
A1: P[x-term]
    proof
      {} in dom (h.(x-term)) by TREES_1:22;
      then {{}} c= dom (h.(x-term));
      hence dom (x-term) c= dom (h.(x-term)) by TREES_1:29;
      let I; assume
A2:   I = {xi where xi is Node of x-term: ex s,x1 st (x-term).xi = [x1,s]};
      {} in dom (x-term) & (x-term).{} = [x,s] by TREES_1:22,TREES_4:3;
      then {} in I by A2;
      then {{}} c= I;
      then dom (x-term) c= I by TREES_1:29;
      then (x-term)|((dom(x-term))\I) = {} &
      (h.(x-term))|((dom(x-term))\I) = {};
      hence thesis;
    end;
A3: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p;
      assume Z0: for t st t in rng p holds P[t];
      the_sort_of (o-term p) = the_result_sort_of o by Th8;
      then
A6:   h.(o-term p) = h.(the_result_sort_of o).(o-term p) by ABBR
      .= h.(the_result_sort_of o).(Den(o,Free(S,X)).p) by MSAFREE4:13
      .= Den(o,Free(S,X)).(h#p) by MSUALG_6:def 2,MSUALG_3:def 7
      .= o-term (h#p) by MSAFREE4:13;
      thus
B3:   dom(o-term p) c= dom(h.(o-term p))
      proof let a;
        assume a in dom(o-term p);
        then per cases by TREES_4:11;
        suppose a = {};
          hence thesis by TREES_1:22;
        end;
        suppose
          ex i being Nat, T being DecoratedTree, r being Node of T st
          i < len p & T = p.(i+1) & a = <*i*>^r;
          then consider i being Nat, T being DecoratedTree, r being Node of T
          such that
A7:       i < len p & T = p.(i+1) & a = <*i*>^r;
          1 <= i+1 <= len p by A7,NAT_1:12,13;
          then
A8:       i+1 in dom p by FINSEQ_3:25;
          then reconsider T as Element of Free(S,X) by A7,FUNCT_1:102;
          T in rng p by A7,A8,FUNCT_1:def 3;
          then dom T c= dom (h.T) by Z0;
          then
A9:       r in dom(h.T);
A10:      (h#p).(i+1) = h.((the_arity_of o)/.(i+1)).T by A7,A8,MSUALG_3:def 6
          .= h.((the_arity_of o)/.(i+1)).(p/.(i+1)) by A7,A8,PARTFUN1:def 6
          .= h.(the_sort_of (p/.(i+1))).(p/.(i+1)) by A8,Th4A
          .= h.(p/.(i+1)) by ABBR
          .= h.T by A7,A8,PARTFUN1:def 6;
          dom (h#p) = dom the_arity_of o = dom p by MSUALG_6:2;
          then len(h#p) = len p by FINSEQ_3:29;
          hence thesis by A7,A9,A10,A6,TREES_4:11;
        end;
      end;
      let I; assume
A4:   I = {xi where xi is Node of o-term p: ex s,x st (o-term p).xi = [x,s]};
B2:   (dom (o-term p))\I c= dom(h.(o-term p)) by B3;
      thus dom((o-term p)|((dom (o-term p))\I))
      = dom((h.(o-term p))|((dom (o-term p))\I)) by B2,RELAT_1:62;
      let q being object; assume
BB:   q in dom((o-term p)|((dom (o-term p))\I));
      reconsider q as Node of o-term p by BB;
B6:   ((o-term p)|((dom (o-term p))\I)).q = (o-term p).q &
      ((h.(o-term p))|((dom (o-term p))\I)).q = h.(o-term p).q
      by BB,FUNCT_1:49;
      per cases by TREES_4:11;
      suppose q = {};
        then (o-term p).q = [o,the carrier of S] = (o-term (h#p)).q
        by TREES_4:def 4;
        hence thesis by A6,B6;
      end;
      suppose
        ex i being Nat, T being DecoratedTree, r being Node of T st
        i < len p & T = p.(i+1) & q = <*i*>^r;
        then consider i being Nat, T being DecoratedTree, r being Node of T
        such that
A7:     i < len p & T = p.(i+1) & q = <*i*>^r;
        1 <= i+1 <= len p by A7,NAT_1:12,13;
        then
A8:     i+1 in dom p by FINSEQ_3:25;
        then reconsider T as Element of Free(S,X) by A7,FUNCT_1:102;
        set II = {xi where xi is Node of T: ex s,x st T.xi = [x,s]};
        T in rng p by A7,A8,FUNCT_1:def 3;
        then
B9:     dom T c= dom (h.T) & T|((dom T)\II) = (h.T)|((dom T)\II) by Z0;
B8:     (o-term p).q = T.r by A7,TREES_4:12;
        r nin II
        proof
          assume r in II;
          then consider xi being Node of T such that
B7:       r = xi & ex s,x st T.xi = [x,s];
          q in I by A4,B8,B7;
          hence contradiction by BB,XBOOLE_0:def 5;
        end;
        then r in (dom T)\II by XBOOLE_0:def 5;
        then
A11:    T.r = (T|((dom T)\II)).r = h.T.r by B9,FUNCT_1:49;
A10:    (h#p).(i+1) = h.((the_arity_of o)/.(i+1)).T by A7,A8,MSUALG_3:def 6
        .= h.((the_arity_of o)/.(i+1)).(p/.(i+1)) by A7,A8,PARTFUN1:def 6
        .= h.(the_sort_of (p/.(i+1))).(p/.(i+1)) by A8,Th4A
        .= h.(p/.(i+1)) by ABBR
        .= h.T by A7,A8,PARTFUN1:def 6;
        dom (h#p) = dom the_arity_of o = dom p by MSUALG_6:2;
        then len(h#p) = len p & r in dom(h.T) by B9,FINSEQ_3:29;
        hence thesis by B6,B8,A6,A7,A10,A11,TREES_4:12;
      end;
    end;
    thus P[t] from TermInd(A1,A3);
  end;

theorem Th137:
  for t st I = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]}
  for xi being Node of h.t holds
  xi in (dom t)\I or ex nu being Element of dom t st nu in I &
  ex mu being Node of (h.t)|nu st xi = nu^mu
  proof
    let t;
    defpred P[Element of Free(S,X)] means for I st
    I = {xi where xi is Element of dom $1: ex s,x st $1.xi = [x,s]}
    for xi being Node of h.$1 holds
    xi in (dom $1)\I or ex nu being Element of dom $1 st nu in I &
    ex mu being Node of (h.$1)|nu st xi = nu^mu;
A1: P[x-term]
    proof
      let I; assume
A2:   I = {xi where xi is Node of x-term: ex s1,x11 st (x-term).xi = [x11,s1]};
      let xi being Node of h.(x-term);
      assume xi nin (dom(x-term))\I;
      reconsider nu = {} as Node of x-term by TREES_1:22;
      take nu; (x-term).nu = [x,s];
      hence nu in I by A2;
      reconsider mu = xi as Node of (h.(x-term))|nu by TREES_9:1;
      take mu; thus xi = nu^mu;
    end;
A3: for o,p st for t st t in rng p holds P[t] holds P[o-term p]
    proof
      let o,p;
      assume Z0: for t st t in rng p holds P[t];
      let I; assume
A4:   I = {xi where xi is Node of o-term p: ex s,x st (o-term p).xi = [x,s]};
      let xi being Node of h.(o-term p);
      assume
A5:   xi nin (dom(o-term p))\I;
      the_sort_of (o-term p) = the_result_sort_of o by Th8;
      then
A6:   h.(o-term p) = h.(the_result_sort_of o).(o-term p) by ABBR
      .= h.(the_result_sort_of o).(Den(o,Free(S,X)).p) by MSAFREE4:13
      .= Den(o,Free(S,X)).(h#p) by MSUALG_6:def 2,MSUALG_3:def 7
      .= o-term (h#p) by MSAFREE4:13;
      then per cases by TREES_4:11;
      suppose xi = {};
        then
B0:     (o-term p).xi = [o,the carrier of S] & xi in dom (o-term p)
        by TREES_1:22,TREES_4:def 4;
        xi nin I
        proof
          assume xi in I;
          then consider nu being Node of o-term p such that
B1:       xi = nu & ex s,x st (o-term p).nu = [x,s] by A4;
          consider s,x such that
B2:       (o-term p).xi = [x,s] by B1;
          s in the carrier of S = s by B0,B2,XTUPLE_0:1;
          hence contradiction;
        end;
        hence thesis by B0,A5,XBOOLE_0:def 5;
      end;
      suppose
        ex i being Nat, T being DecoratedTree, q being Node of T st
        i < len (h#p) & T = (h#p).(i+1) & xi = <*i*>^q;
        then consider i being Nat, T being DecoratedTree, q being Node of T
        such that
B3:     i < len (h#p) & T = (h#p).(i+1) & xi = <*i*>^q;
        dom (h#p) = dom the_arity_of o = dom p by MSUALG_6:2;
        then
BA:     len (h#p) = len p by FINSEQ_3:29;
        then 1 <= i+1 <= len p by B3,NAT_1:12,13;
        then
B4:     i+1 in dom p by FINSEQ_3:25;
        then reconsider t = p.(i+1) as Element of Free(S,X) by FUNCT_1:102;
        set II = {xi where xi is Element of dom t: ex s,x st t.xi = [x,s]};
B5:     t = p/.(i+1) by B4,PARTFUN1:def 6;
B6:     T = h.((the_arity_of o)/.(i+1)).t by B3,B4,MSUALG_3:def 6
        .= h.(the_sort_of (p/.(i+1))).t by B4,Th4A
        .= h.t by B5,ABBR;
        then reconsider q as Node of h.t;
        t in rng p by B4,FUNCT_1:def 3;
        then per cases by Z0;
        suppose
BB:       q in (dom t)\II;
          then
B7:       q in dom t & q nin II by XBOOLE_0:def 5;
B8:       xi in dom (o-term p) by B3,BA,BB,TREES_4:11;
          xi nin I
          proof
            assume xi in I;
            then consider nu being Node of o-term p such that
B1:         xi = nu & ex s,x st (o-term p).nu = [x,s] by A4;
            consider s,x such that
B2:         (o-term p).xi = [x,s] by B1;
            t.q = [x,s] by B2,B3,BA,BB,TREES_4:12;
            hence contradiction by B7;
          end;
          hence thesis by A5,B8,XBOOLE_0:def 5;
        end;
        suppose ex nu being Element of dom t st nu in II &
          ex mu being Node of (h.t)|nu st q = nu^mu;
          then consider nu being Node of t, mu being Node of (h.t)|nu such that
C1:       nu in II & q = nu^mu;
          reconsider inu = <*i*>^nu as Node of o-term p by B3,BA,TREES_4:11;
          take inu;
          consider xi1 being Node of t such that
C2:       nu = xi1 & ex s,x st t.xi1 = [x,s] by C1;
          ex s,x st (o-term p).inu = [x,s] by C2,B3,BA,TREES_4:12;
          hence inu in I by A4;
          h.t = (h.(o-term p))|<*i*> &
          inu in dom(o-term p) c= dom(h.(o-term p))
          by B3,A6,B6,Th135,TREES_4:def 4;
          then reconsider mu as Node of (h.(o-term p))|inu by TREES_9:3;
          take mu;
          thus thesis by B3,C1,FINSEQ_1:32;
        end;
      end;
    end;
    P[t] from TermInd(A1,A3);
    hence thesis;
  end;

theorem Th138:
  for v,v1
  for h being Endomorphism of Free(S,Y)
  for g being one-to-one FinSequence of dom v st
  rng g = {xi where xi is Element of dom v: ex s,y st v.xi = [y,s]} &
  dom v c= dom v1 & v|((dom v) \ rng g) = v1|((dom v) \ rng g) &
  for i st i in dom g holds (h.v)|(g/.i qua Node of v)=v1|(g/.i qua Node of v)
  holds h.v = v1
  proof
    let v,v1;
    let h be Endomorphism of Free(S,Y);
    let g be one-to-one FinSequence of dom v;
    assume
Z0: rng g = {xi where xi is Element of dom v: ex s,y st v.xi = [y,s]};
    assume Z1: dom v c= dom v1;
    assume v|((dom v) \ rng g) = v1|((dom v) \ rng g);
    then
A5: (h.v)|((dom v) \ rng g) = v1|((dom v) \ rng g) by Z0,Th135;
    assume Z3: for i st i in dom g holds
    (h.v)|(g/.i qua Node of v) = v1|(g/.i qua Node of v);
    h.v c= v1
    proof let a,b;
      assume [a,b] in h.v;
      then
A1:   a in dom(h.v) & b = h.v.a by FUNCT_1:1;
      then per cases by Z0,Th137;
      suppose a in (dom v)\rng g;
        then
A2:     ((h.v)|((dom v) \ rng g)).a = h.v.a & a in dom v &
        (v1|((dom v) \ rng g)).a = v1.a by FUNCT_1:49;
        thus thesis by Z1,A5,A1,A2,FUNCT_1:1;
      end;
      suppose ex nu being Element of dom v st nu in rng g &
        ex mu being Node of (h.v)|nu st a = nu^mu;
        then consider nu being (Element of dom v), mu being Node of (h.v)|nu
        such that
A3:     nu in rng g & a = nu^mu;
        consider i being object such that
A6:     i in dom g & nu = g.i by A3,FUNCT_1:def 3;
        reconsider i as Nat by A6;
        nu = g/.i by A6,PARTFUN1:def 6;
        then
A7:     (h.v)|nu = v1|nu by A6,Z3;
A8:     nu in dom v c= dom (h.v) by Th135;
        mu in dom((h.v)|nu) = (dom (h.v))|nu & dom(v1|nu) = (dom v1)|nu
        by TREES_2:def 10;
        then b = ((h.v)|nu).mu = v1.a & a in dom v1
        by Z1,A7,A1,A3,A8,TREES_1:def 6,TREES_2:def 10;
        hence thesis by FUNCT_1:1;
      end;
    end;
    hence h.v = v1 by Th136;
  end;

theorem
  for h being Endomorphism of Free(S,Y)
  for f being vf-sequence of v st f <> {}
  ex B being non empty FinSequence of the carrier of S st
  ex V1 be B-sorts FinSequence of Union Y
  st dom B = dom f & B = pr2 f & V1 = pr1 f &
  ex D being B-sorts FinSequence of Free(S,Y) st
  ex V2 being V1-omitting D-omitting B-sorts FinSequence of Union Y
  st (for i being Element of dom B holds D.i = h.((V1.i)-term)) &
  ex F be V2-context-sequence FinSequence of Free(S,Y) st
  F is (V1,V2,D)-consequent-context-sequence &
  (F.In(1,dom B))-sub((V1.In(1,dom B))-term) = v &
  h.v = (F.In(len B,dom B))-sub(D.In(len B,dom B))
  proof
    let h be Endomorphism of Free(S,Y);
    let f be vf-sequence of v;
    assume
A0: f <> {};
    then {} <> dom f = dom pr2 f by MCART_1:def 13;
    then
    reconsider B = pr2 f as non empty FinSequence of the carrier of S by Th96;
    consider g being one-to-one FinSequence such that
AA: rng g = {xi where xi is Element of dom v: ex s,y st v.xi = [y,s]} &
    dom f = dom g & for i st i in dom f holds f.i = v.(g.i) by VFS;
    rng g c= dom v
    proof let a;
      assume a in rng g;
      then ex xi being Element of dom v st a = xi & ex s,y st v.xi = [y,s]
      by AA;
      hence thesis;
    end;
    then reconsider g as one-to-one FinSequence of dom v by FINSEQ_1:def 4;
    take B;
    B = pr2 f;
    then reconsider V1 = pr1 f as B-sorts FinSequence of Union Y by Th97;
    take V1;
    thus
AB: dom B = dom f & B = pr2 f & V1 = pr1 f by MCART_1:def 13;
    deffunc F(Element of dom B) = h.((V1.$1)-term);
    consider D being non empty FinSequence such that
A2: dom D = dom B &
    for i being Element of dom B holds D.i = F(i) from FinSeqLambda;
    D is FinSequence of Free(S,Y)
    proof
      let a; assume a in rng D;
      then consider b such that
A3:   b in dom D & a = D.b by FUNCT_1:def 3;
      reconsider b as Element of dom B by A2,A3;
      a = F(b) by A2,A3;
      hence thesis;
    end;
    then reconsider D as FinSequence of Free(S,Y);
    D is B-sorts
    proof
      thus dom D = dom B by A2;
      let i; assume i in dom B;
      then reconsider i as Element of dom B;
      reconsider t = ((V1.i)-term) as Element of Free(S,Y);
      the_sort_of t = B.i by SORT;
      then the_sort_of (h.t) = B.i by Lem0;
      then h.t in (the Sorts of Free(S,Y)).(B.i) by SORT;
      hence thesis by A2;
    end;
    then reconsider D as B-sorts FinSequence of Free(S,Y);
    take D;
    set V2 = the one-to-one V1-omitting D-omitting B-sorts
    FinSequence of Union Y;
    take V2;
    thus for i being Element of dom B holds D.i = h.((V1.i)-term) by A2;
    deffunc H((Element of dom B), DecoratedTree)
    = $2 with-replacement((g/.$1 qua Element of dom v)
    qua FinSequence of NAT, D.$1)
    with-replacement((g/.($1+1) qua Element of dom v) qua FinSequence of NAT,
    root-tree [V2.($1+1),B.($1+1)]);
    consider F being non empty DTree-yielding FinSequence such that
A7: dom F = dom B & F.1 = v with-replacement ((g/.1 qua Element of dom v)
    qua FinSequence of NAT, root-tree [V2.1,B.1]) &
    for i,j being Element of dom B st j = i+1
    for d being DecoratedTree st d = F.i holds F.j = H(i,d)
    from FinSeqRec2Lambda;
    rng F c= Union the Sorts of Free(S,Y)
    proof let a;
      assume a in rng F;
      then consider b such that
B1:   b in dom F & a = F.b by FUNCT_1:def 3;
      reconsider b as Element of dom B by A7,B1;
      defpred R[Nat] means
      $1 in dom B implies F.$1 in Union the Sorts of Free(S,Y) &
      g.$1 in dom (F.$1) & F.$1.(g.$1) = [V2.$1,B.$1] &
      for j st j > $1 & j in dom B holds g.j in dom (F.$1) &
      F.$1.(g.j) = [V1.j,B.j];
B2:   R[1]
      proof assume 1 in dom B;
        then reconsider b = 1 as Element of dom B;
        reconsider bb = b as Element of dom g by AA,MCART_1:def 13;
        g.b in rng g by AA,AB,FUNCT_1:def 3;
        then consider xi being Element of dom v such that
B3:     g.b = xi & ex s,y st v.xi = [y,s] by AA;
        consider s,y such that
B4:     v.xi = [y,s] by B3;
        reconsider v2 = (V2.b)-term as Element of Free(S,Y);
        f.b = v.(g.b) by AA,AB;
        then V1.b = [y,s]`1 & B.b = [y,s]`2
        by B3,B4,AB,MCART_1:def 12,def 13;
        then
B6:     v.(g.b) = [V1.b,B.b] & the_sort_of (v2) = B.b by B3,B4,SORT;
B7:     g/.bb = g.bb by AA,A0,PARTFUN1:def 6;
        F.b is Element of Free(S,Y),the_sort_of v by A7,B6,B7,Th117;
        hence F.1 in Union the Sorts of Free(S,Y);
C1:     dom(F.b) = dom v with-replacement((g/.bb qua Element of dom v)
        qua FinSequence of NAT, dom((V2.b)-term)) by B3,B7,A7,TREES_2:def 11;
        hence g.1 in dom (F.1) by B3,B7,TREES_1:def 9;
        then consider r being FinSequence of NAT such that
CD:     r in dom((V2.b)-term) & xi = xi^r & (F.b).xi = ((V2.b)-term).r
        by C1,A7,B7,B3,TREES_2:def 11;
        r = {} by CD,FINSEQ_1:87;
        hence F.1.(g.1) = [V2.1,B.1] by CD,B3,TREES_4:3;
        let j; assume
C2:     j > 1 & j in dom B;
        then g.j in rng g by AA,AB,FUNCT_1:def 3;
        then consider xi2 being Element of dom v such that
C3:     g.j = xi2 & ex s,y st v.xi2 = [y,s] by AA;
        consider s,y such that
C4:     v.xi2 = [y,s] by C3;
        f.j = v.(g.j) by C2,AA,AB;
        then
B0:     V1.j = [y,s]`1 & B.j = [y,s]`2
        by C3,C4,C2,AB,MCART_1:def 12,def 13;
        xi <> xi2 by AA,AB,C2,C3,B3,FUNCT_1:def 4;
        then
C6:     not xi c= xi2 by B4,Lem9;
        then
C8:     not ex r being FinSequence of NAT st r in dom((V2.b)-term) & xi2 = xi^r
        & (v with-replacement((g/.bb qua Element of dom v)
        qua FinSequence of NAT, (V2.b)-term)).xi2
        = ((V2.b)-term).r by TREES_1:1;
C7:     not xi c< xi2 & dom (F.b) = dom v with-replacement(xi,
        dom((V2.b)-term)) by A7,B3,C6,B7,TREES_2:def 11,XBOOLE_0:def 8;
        hence g.j in dom (F.1) by C3,TREES_1:def 9;
        hence thesis by C7,C8,B3,B7,A7,B0,C3,C4,TREES_2:def 11;
      end;
B8:   for i st i >= 1 & R[i] holds R[i+1]
      proof
        let i;
        assume Z1: i >= 1;
        assume Z2: R[i];
        assume Z3: i+1 in dom B;
        then i+1 <= len B by FINSEQ_3:25;
        then
D0:     i < len B by NAT_1:13;
        then
D1:     i in dom B & i+1 > i by Z1,NAT_1:13,FINSEQ_3:25;
        reconsider v1 = F.i as Element of Free(S,Y)
        by Z2,D0,Z1,FINSEQ_3:25;
        reconsider b = i, b1 = i+1 as Element of dom B
        by D0,Z3,Z1,FINSEQ_3:25;
D2:     g.(i+1) in dom v1 & v1.(g.(i+1)) = [V1.b1,B.b1] by D1,Z2,Z3;
D3:     g.b in dom v1 & v1.(g.b) = [V2.b,B.b] by Z2;
        reconsider xi1 = g.b, xi2 = g.(i+1) as Element of dom v1
        by Z2,D1,Z3;
D4:     g/.b = xi1 & g/.b1 = xi2 by AA,AB,PARTFUN1:def 6;
        the_sort_of (D.b) = B.b by SORT;
        then reconsider v2 = v1 with-replacement(xi1, D.b) as
        Element of Free(S,Y), the_sort_of v1 by D3,Th117;
        xi1 <> xi2 by AA,AB,Z3,D1,FUNCT_1:def 4;
        then
D5:     not xi1 c= xi2 by D3,Lem9;
        then
D6:     not ex r being FinSequence of NAT st r in dom(D.b) & xi2 = xi1^r &
        v2.xi2 = (D.b).r by TREES_1:1;
        reconsider t1 = (V2.b1)-term as Element of Free(S,Y);
        not xi1 c< xi2 by D5,XBOOLE_0:def 8;
        then
DD:     xi2 in dom v1 with-replacement(xi1, dom(D.b)) by TREES_1:def 9;
        then
D7:     xi2 in dom v2 & v2.xi2 = [V1.b1,B.b1] & the_sort_of t1 = B.b1
        by D6,D2,SORT,TREES_2:def 11;
        reconsider xi3 = xi2 as Element of dom v2
        by DD,TREES_2:def 11;
        reconsider v3 = v2 with-replacement(xi3,t1) as
        Element of Free(S,Y), the_sort_of v2 by D7,Th117;
D8:     F.(i+1) = v3 by D4,A7;
        hence F.(i+1) in Union the Sorts of Free(S,Y);
D9:     dom (F.b1) = dom v2 with-replacement(xi3,dom t1) by D8,TREES_2:def 11;
        thus g.(i+1) in dom(F.(i+1)) by D9,TREES_1:def 9;
        then consider r being FinSequence of NAT such that
D10:    r in dom t1 & xi3 = xi3^r & v3.xi3 = t1.r by D9,TREES_2:def 11;
        r = {} by D10,FINSEQ_1:87;
        hence F.(i+1).(g.(i+1)) = [V2.(i+1),B.(i+1)] by D8,D10,TREES_4:3;
        let j; assume
E1:     j > i+1 & j in dom B;
        then reconsider b2 = j as Element of dom B;
EE:     j > i by E1,NAT_1:13;
        then
E2:     g.j in dom v1 & v1.(g.j) = [V1.b2,B.b2]
        by E1,Z2,D0,Z1,FINSEQ_3:25;
        reconsider xi = g.j as Element of dom v1
        by EE,E1,Z2,D0,Z1,FINSEQ_3:25;
        xi1 <> xi by E1,AA,AB,D1,FUNCT_1:def 4;
        then
E5:     not xi1 c= xi by D3,Lem9;
        then
E6:     not ex r being FinSequence of NAT st r in dom(D.b) & xi = xi1^r &
        v2.xi = (D.b).r by TREES_1:1;
        reconsider t2 = (V2.b2)-term as Element of Free(S,Y);
        not xi1 c< xi by E5,XBOOLE_0:def 8;
        then
EF:     xi in dom v1 with-replacement(xi1, dom(D.b)) by TREES_1:def 9;
        then
E7:     xi in dom v2 & v2.xi = [V1.b2,B.b2] & the_sort_of t2 = B.b2
        by E6,E2,SORT,TREES_2:def 11;
        reconsider xi as Element of dom v2 by EF,TREES_2:def 11;
        xi3 <> xi by AA,AB,Z3,E1,FUNCT_1:def 4;
        then
E9:     not xi3 c= xi by Lem9,D2;
        then not xi3 c< xi by XBOOLE_0:def 8;
        hence
E8:     g.j in dom(F.(i+1)) by D9,TREES_1:def 9;
        not ex r being FinSequence of NAT st r in dom t1 & xi = xi3^r &
        v3.xi = t1.r by E9,TREES_1:1;
        hence F.(i+1).(g.j) = [V1.j,B.j] by E7,D8,D9,E8,TREES_2:def 11;
      end;
B9:   for i st i >= 1 holds R[i] from NAT_1:sch 8(B2,B8);
      b >= 1 by FINSEQ_3:25;
      hence thesis by B1,B9;
    end;
    then reconsider F as FinSequence of Free(S,Y) by FINSEQ_1:def 4;
    defpred Q[Nat] means for b being Element of dom B st $1 = b holds
    F.b is context of V2.b & dom v c= dom (F.b) & F.b.(g/.b) = [V2.b,B.b] &
    for b1 being Element of dom B st b1 > b
    holds F/.b is V2.b1-omitting & (F.b).(g/.b1) = [V1.b1,B.b1];
F1: Q[1]
    proof
      let b be Element of dom B such that
F2:   1 = b;
      reconsider xi = g/.b as Element of dom v;
      reconsider t = (V2.b)-term as Element of Free(S,Y);
      reconsider F1 = F.1 as Element of Free(S,Y) by A7,F2,FUNCT_1:102;
F3:   F1 = v with-replacement (xi,t) by A7,F2;
FD:   dom F1 = dom v with-replacement (xi,dom t) by A7,F2,TREES_2:def 11;
      v is V2.b-omitting
      proof
        assume Coim(v,[V2.b,B.b]) <> {};
        then consider a such that
F4:     a in Coim(v,[V2.b,B.b]) by XBOOLE_0:7;
F5:     a in dom v & v.a in {[V2.b,B.b]} by F4,FUNCT_1:def 7;
        reconsider a as Element of dom v by F4,FUNCT_1:def 7;
F7:     v.a = [V2.b,B.b] by F5,TARSKI:def 1;
        then a in rng g by AA;
        then consider i being object such that
F6:     i in dom g & g.i = a by FUNCT_1:def 3;
        reconsider i as Element of dom B by AA,F6,MCART_1:def 13;
        f.i = v.a by AA,F6;
        then V1.i = [V2.b,B.b]`1 & dom V1 = dom f
        by AB,F7,MCART_1:def 12;
        then V2.b in rng V1 misses rng V2 by AB,OMIT2,FUNCT_1:def 3;
        then V2.b nin rng V2 & dom V2 = dom B by SORTS,XBOOLE_0:3;
        hence contradiction by FUNCT_1:def 3;
      end;
      hence F.b is context of V2.b by F2,F3,Lem10;
      g.b = xi by AA,AB,PARTFUN1:def 6;
      then xi in rng g by AA,AB,FUNCT_1:def 3;
      then consider nu being Element of dom v such that
G0:   xi = nu & ex s,y st v.nu = [y,s] by AA;
      thus dom v c= dom (F.b) by G0,F2,F3,Lem11;
      then xi^{} = xi in dom F1 by F2;
      then consider mu being FinSequence of NAT such that
H0:   mu in dom t & xi = xi^mu & F1.xi = t.mu by A7,F2,FD,TREES_2:def 11;
      mu = {} by H0,FINSEQ_1:87;
      hence F.b.(g/.b) = [V2.b,B.b] by F2,H0,TREES_4:3;
      let b1 be Element of dom B; assume
G1:   b1 > b;
      thus F/.b is V2.b1-omitting
      proof
        assume Coim(F/.b,[V2.b1,B.b1]) <> {};
        then consider i being object such that
G2:     i in Coim(F/.b,[V2.b1,B.b1]) by XBOOLE_0:7;
G3:     i in dom (F/.b) & (F/.b).i in {[V2.b1,B.b1]} by G2,FUNCT_1:def 7;
        reconsider i as Element of dom (F/.b) by G2,FUNCT_1:def 7;
G4:     F/.b = F.b by A7,PARTFUN1:def 6;
G5:     (F/.b).i = [V2.b1,B.b1] by G3,TARSKI:def 1;
G7:     dom F1 = dom v with-replacement(xi,dom t) by A7,F2,TREES_2:def 11;
        then per cases by F2,A7,G4,TREES_2:def 11;
        suppose
G6:       not xi is_a_prefix_of i & F1.i = v.i;
          then not ex r being FinSequence of NAT st r in dom t & i = xi^r
          by TREES_1:1;
          then i is Element of dom v by G4,G7,F2,TREES_1:def 9;
          then i in rng g by AA,G5,G6,G4,F2;
          then consider j being object such that
G8:       j in dom g & g.j = i by FUNCT_1:def 3;
          reconsider j as Element of dom B by AA,G8,MCART_1:def 13;
          f.j = v.(g.j) by AA,AB;
          then V1.j = [V2.b1,B.b1]`1 & dom V1 = dom B
          by AB,G8,G6,G5,G4,F2,MCART_1:def 12;
          then V2.b1 in rng V1 misses rng V2
          by OMIT2,FUNCT_1:def 3;
          then V2.b1 nin rng V2 & dom V2 = dom B by SORTS,XBOOLE_0:3;
          hence contradiction by FUNCT_1:def 3;
        end;
        suppose ex r being FinSequence of NAT st
          r in dom t & i = xi^r & F1.i = t.r;
          then consider r being FinSequence of NAT such that
G9:       r in dom t & i = xi^r & F1.i = t.r;
          r in {{}} by G9,TREES_1:29;
          then r = {};
          then
G10:      F1.i = [V2.b,B.b] & dom V2 = dom B by G9,SORTS,TREES_4:3;
          then V2.b <> V2.b1 by G1,FUNCT_1:def 4;
          hence contradiction by G5,G4,F2,G10,XTUPLE_0:1;
        end;
      end;
K2:   xi = g.b & g/.b1 = g.b1 by AA,AB,PARTFUN1:def 6;
      then
K0:   v.xi = f.b & v.(g/.b1) = f.b1 & g/.b1 in rng g & xi in rng g
      by AA,AB,FUNCT_1:def 3;
      then consider mu being Element of dom v such that
K1:   mu = g/.b1 & ex s,y st v.mu = [y,s] by AA;
      reconsider fb1 = f.b1 as pair object by K2,K1,AA,AB;
K3:   v.mu = [(fb1)`1,(fb1)`2] by K2,K1,AA,AB
      .= [V1.b1,fb1`2] by AB,MCART_1:def 12
      .= [V1.b1,B.b1] by AB,MCART_1:def 13;
      consider nu being Element of dom v such that
K4:   nu = xi & ex s,y st v.nu = [y,s] by AA,K0;
      reconsider fb = f.b as pair object by K2,K4,AA,AB;
K5:   v.xi = [(fb)`1,(fb)`2] by K2,AA,AB
      .= [V1.b,fb`2] by AB,MCART_1:def 12
      .= [V1.b,B.b] by AB,MCART_1:def 13;
      xi <> mu by AA,AB,K1,K2,G1,FUNCT_1:def 4;
      then
K6:   not xi c= mu by K5,Lem9;
      then not xi c< mu by XBOOLE_0:def 8;
      then
K7:   mu in dom v with-replacement(xi, dom t) by TREES_1:def 9;
      not ex r being FinSequence of NAT st r in dom t & mu = xi^r &
      F1.mu = t.r by K6,TREES_1:1;
      hence F.b.(g/.b1) = [V1.b1,B.b1] by F2,A7,K1,K3,K7,TREES_2:def 11;
    end;
WW: for i holds 1 <= i & Q[i] implies Q[i+1]
    proof let i;
      assume
H1:   1 <= i & Q[i];
      let b be Element of dom B; assume
H2:   i+1 = b;
      reconsider xi = g/.b as Element of dom v;
      reconsider t = (V2.b)-term as Element of Free(S,Y);
      i+1 <= len F by A7,H2,FINSEQ_3:25;
      then
HH:   1 <= i < len F by H1,NAT_1:13;
      reconsider F1 = F.(i+1), Fi = F.i as Element of Free(S,Y)
      by HH,A7,H2,FUNCT_1:102,FINSEQ_3:25;
      reconsider bi = i as Element of dom B by HH,A7,FINSEQ_3:25;
      reconsider Fi as context of V2.bi by H1;
      reconsider nu = g/.bi as Element of dom v;
F3:   F1 = Fi with-replacement(nu, D.bi) with-replacement(xi,t) by A7,H2;
H8:   b > bi & F/.bi = Fi by A7,H2,NAT_1:13,PARTFUN1:def 6;
      then
H5:   Fi is V2.b-omitting & Fi.xi = [V1.b,B.b] by H1;
I2:   D.bi in (the Sorts of Free(S,Y)).(B.bi) & dom v c= dom Fi
      by H1;
      nu = g.bi & xi = g.b by AA,AB,PARTFUN1:def 6;
      then
H6:   Fi.nu = [V2.bi,B.bi] & the_sort_of (D.bi) = B.bi & nu in dom Fi &
      xi in dom Fi & nu <> xi by AA,AB,I2,H1,H8,SORT,FUNCT_1:def 4;
      then
H7:   Fi with-replacement(nu, D.bi) = Fi-sub(D.bi) by Th118;
I1:   not nu c= xi by H6,Lem9;
      then not nu c< xi by XBOOLE_0:def 8;
      then
I3:   xi in dom Fi with-replacement(nu, dom(D.bi)) by H6,TREES_1:def 9;
      then
H9:   xi in dom(Fi-sub(D.bi)) by H6,H7,TREES_2:def 11;
      D.bi is V2.b-omitting by OMIT4;
      then Fi-sub(D.bi) is V2.b-omitting by H5,H6,Th45A;
      hence F.b is context of V2.b by H2,F3,H7,H9,Lem10;
      not ex r being FinSequence of NAT st r in dom (D.bi) & xi = nu^r &
      (Fi with-replacement(nu,D.bi)).xi = D.bi.r by I1,TREES_1:1;
      then (Fi-sub(D.bi)).xi = [V1.b,B.b] by I3,H5,H6,H7,TREES_2:def 11;
      then
L1:   dom Fi c= dom (Fi-sub(D.bi)) c= dom F1 by F3,H7,H9,H6,Lem11;
      hence dom v c= dom (F.b) by I2,H2;
      xi in dom F1 = dom (Fi-sub(D.bi)) with-replacement(xi, dom t)
      by L1,F3,H7,H6,TREES_2:def 11;
      then consider r being FinSequence of NAT such that
J0:   r in dom t & xi = xi^r & F1.xi = t.r by H7,H9,F3,TREES_2:def 11;
      r = {} by J0,FINSEQ_1:87;
      hence F.b.(g/.b) = [V2.b,B.b] by H2,J0,TREES_4:3;
      let b1 be Element of dom B; assume
J1:   b1 > b;
      thus F/.b is V2.b1-omitting
      proof
        assume Coim(F/.b,[V2.b1,B.b1]) <> {};
        then consider a such that
J2:     a in Coim(F/.b,[V2.b1,B.b1]) by XBOOLE_0:7;
J3:     a in dom (F/.b) & (F/.b).a in {[V2.b1,B.b1]} by J2,FUNCT_1:def 7;
        reconsider q = a as Element of dom (F/.b) by J2,FUNCT_1:def 7;
J4:     F/.b = F.b by A7,PARTFUN1:def 6;
        then
J5:     q in dom (Fi-sub(D.bi)) with-replacement(xi,dom t) = dom F1
        by F3,J3,H2,H7,H9,TREES_2:def 11;
        then per cases by F3,H7,H9,TREES_2:def 11;
        suppose
J6:       not xi is_a_prefix_of q & F1.q = (Fi-sub(D.bi)).q;
          then
J7:       q in dom (Fi-sub(D.bi)) by H9,J5,Th01;
          b1 > bi by J1,H2,NAT_1:13;
          then Fi is V2.b1-omitting & D.bi is V2.b1-omitting by H1,H8,OMIT4;
          then Fi-sub(D.bi) is V2.b1-omitting by H6,Th45A;
          hence contradiction by J7,H2,J3,J4,J6,FUNCT_1:def 7;
        end;
        suppose
          ex r being FinSequence of NAT st
          r in dom t & q = xi^r & F1.q = t.r;
          then consider r being FinSequence of NAT such that
J8:       r in dom t & q = xi^r & F1.q = t.r;
          dom V2 = dom B by SORTS;
          then V2.b <> V2.b1 by J1,FUNCT_1:def 4;
          then t is V2.b1-omitting by ThC1;
          hence contradiction by H2,J3,J4,J8,FUNCT_1:def 7;
        end;
      end;
      reconsider mu = g/.b1 as Node of v;
L5:   bi < b1 & b > bi by J1,H2,NAT_1:13;
      then
L2:   Fi.(g/.b1) = [V1.b1,B.b1] & Fi.(g/.b) = [V1.b,B.b] by H1;
      g/.b1 = g.b1 & g/.b = g.b & g/.bi = g.bi by AA,AB,PARTFUN1:def 6;
      then g/.b1 <> g/.b & g/.bi <> g/.b1 & g/.b1 in dom Fi & g/.b in dom Fi &
      g/.bi in dom Fi by AB,AA,J1,I2,L5,FUNCT_1:def 4;
      then
L3:   not g/.b c= g/.b1 & not nu c= mu by H6,L2,Lem9;
      then
L4:   not ex r being FinSequence of NAT st
      r in dom (D.bi) & mu = nu^r & (Fi-sub(D.bi)).mu = D.bi.r
      by TREES_1:1;
L6:   nu in dom Fi & g/.b1 in dom (Fi-sub(D.bi)) by I2,L1;
      then g/.b1 in dom Fi with-replacement(nu,dom (D.bi))
      by H7,TREES_2:def 11;
      then
L7:   (Fi-sub(D.bi)).(g/.b1) = [V1.b1,B.b1]
      by L4,L2,L6,H7,TREES_2:def 11;
L4:   not ex r being FinSequence of NAT st
      r in dom t & mu = xi^r & F1.mu = t.r
      by L3,TREES_1:1;
      g/.b1 in dom Fi by I2;
      then
L6:   xi in dom (Fi-sub(D.bi)) & g/.b1 in dom F1 by I2,L1;
      then g/.b1 in dom (Fi-sub(D.bi)) with-replacement(xi,dom t)
      by H7,F3,TREES_2:def 11;
      hence F.b.(g/.b1) = [V1.b1,B.b1]
      by H2,L4,L6,L7,F3,H7,TREES_2:def 11;
    end;
L8: for i st i >= 1 holds Q[i] from NAT_1:sch 8(F1,WW);
    F is V2-context-sequence
    proof
      thus dom F = dom B by A7;
      let b be Element of dom B;
      1 <= b by FINSEQ_3:25;
      hence thesis by L8;
    end;
    then reconsider F as V2-context-sequence FinSequence of Free(S,Y);
    take F;
    thus F is (V1,V2,D)-consequent-context-sequence
    proof
      let i,j be Element of dom B;
      reconsider nu = g/.i, xi = g/.j as Node of v;
      reconsider Fi = F.i, Fj = F.j as Element of Free(S,Y);
      reconsider t = (V2.j)-term as Element of Free(S,Y);
H1:   i >= 1 by FINSEQ_3:25;
      assume
H2:   i+1 = j;
H3:   j >= 1 by H2,NAT_1:12;
F3:   F.j = Fi with-replacement(nu, D.i) with-replacement(xi,t) by A7,H2;
H8:   j > i & F/.i = Fi by A7,H2,NAT_1:13,PARTFUN1:def 6;
      then
H5:   Fi is V2.j-omitting & Fi.xi = [V1.j,B.j] by H1,L8;
I2:   D.i in (the Sorts of Free(S,Y)).(B.i) & dom v c= dom Fi
      by H1,L8;
      nu = g.i & xi = g.j by AA,AB,PARTFUN1:def 6;
      then
H6:   Fi.nu = [V2.i,B.i] & the_sort_of (D.i) = B.i & nu in dom Fi &
      xi in dom Fi & nu <> xi by H1,AA,AB,I2,L8,H8,SORT,FUNCT_1:def 4;
      then
H7:   Fi with-replacement(nu, D.i) = (F.i)-sub(D.i) by Th118;
      reconsider q = (V1.j)-term as Element of Free(S,Y);
M1:   not nu c= xi by H6,Lem9;
      then
H4:   not ex r being FinSequence of NAT st r in dom (D.i) & xi = nu^r &
      ((F.i)-sub(D.i)).xi = D.i.r by TREES_1:1;
      not nu c< xi by M1,XBOOLE_0:def 8;
      then xi in dom Fi with-replacement(nu, dom (D.i)) by H6,TREES_1:def 9;
      then
M8:   ((F.i)-sub(D.i)).xi = [V1.j,B.j] & xi in dom ((F.i)-sub(D.i))
      by H4,H5,H6,H7,TREES_2:def 11;
      then
M3:   dom ((F.i)-sub(D.i)) = dom Fj & dom v c= dom Fj
      by H3,L8,F3,H7,Lem11A;
M2:   Fj.xi = [V2.j,B.j] & the_sort_of q = B.j & xi in dom Fj
      by M8,H3,L8,SORT,F3,H7,Lem11A;
      then
M5:   (F.j)-sub(q) = (F.j) with-replacement(xi, q) by Th118;
      hence
M4:   dom ((F.j)-sub((V1.j)-term)) = dom ((F.i)-sub(D.i)) by M3,M2,Lem11A;
      let a be Node of (F.j)-sub((V1.j)-term);
      a in dom((F.j)-sub((V1.j)-term)) = dom Fj with-replacement(xi, dom q)
      by M2,M5,TREES_2:def 11;
      then per cases by M5,M2,TREES_2:def 11;
      suppose
M6:     not xi c= a & ((F.j)-sub(q)).a = Fj.a;
        then not xi c< a by XBOOLE_0:def 8;
        then
M7:     a in dom((F.i)-sub(D.i)) with-replacement(xi,dom t)
        by M8,M4,TREES_1:def 9;
        not ex r being FinSequence of NAT st r in dom t & a = xi^r & Fj.a = t.r
        by M6,TREES_1:1;
        hence ((F.j)-sub((V1.j)-term)).a = ((F.i)-sub(D.i)).a
        by F3,H7,M6,M7,M8,TREES_2:def 11;
      end;
      suppose ex r being FinSequence of NAT st r in dom q & a = xi^r &
        ((F.j)-sub(q)).a = q.r;
        then consider r being FinSequence of NAT such that
N1:     r in dom q & a = xi^r & ((F.j)-sub(q)).a = q.r;
        r in {{}} by N1,TREES_1:29;
        then r = {};
        hence ((F.j)-sub((V1.j)-term)).a = ((F.i)-sub(D.i)).a
        by M8,N1,TREES_4:3;
      end;
    end;
    set b = In(1,dom B);
    reconsider nu = g/.b, xi = g/.len B as Node of v;
NK: 1 <= b <= len B by FINSEQ_3:25;
N6: F.b = v with-replacement(nu,(V2.b)-term) by A7;
NM: nu = g.b by AA,AB,PARTFUN1:def 6;
    then v.nu = f.b & nu in rng g by AB,AA,FUNCT_1:def 3;
    then consider mu being Node of v such that
N5: nu = mu & ex s,y st v.mu = [y,s] by AA;
    reconsider fb = f.b as pair object by NM,N5,AB,AA;
N7: v.nu = [fb`1,fb`2] by NM,AB,AA
    .= [V1.b,fb`2] by AB,MCART_1:def 12
    .= [V1.b,B.b] by AB,MCART_1:def 13;
    then
N8: dom (F.b) = dom v by N6,Lem11A;
    reconsider t = (V1.b)-term as Element of Free(S,Y);
O3: dom (F.b) = dom v with-replacement(nu,dom((V2.b)-term))
    by A7,TREES_2:def 11;
    then consider mu being FinSequence of NAT such that
N9: mu in dom((V2.b)-term) & nu = nu^mu & F.b.nu = ((V2.b)-term).mu
    by A7,N8,TREES_2:def 11;
OA: mu = {} by N9,FINSEQ_1:87;
    then F.b.nu = [V2.b,B.b] & the_sort_of t = B.b by N9,SORT,TREES_4:3;
    then
O1: (F.b)-sub t = (F.b) with-replacement(nu,t) by N8,Th118;
    hence
O5: dom ((F.In(1,dom B))-sub((V1.In(1,dom B))-term)) = dom v
    by N8,OA,Lem11A,N9,TREES_4:3;
    hereby let a be Node of (F.In(1,dom B))-sub((V1.In(1,dom B))-term);
      dom ((F.b)-sub t) = dom (F.b) with-replacement(nu,dom t)
      by N8,O1,TREES_2:def 11;
      then per cases by N8,O1,TREES_2:def 11;
      suppose
O4:     not nu c= a & ((F.b)-sub t).a = F.b.a;
        then not ex r being FinSequence of NAT st r in dom((V2.b)-term) &
        a = nu^r & F.b.a = ((V2.b)-term).r by TREES_1:1;
        hence ((F.In(1,dom B))-sub((V1.In(1,dom B))-term)).a = v.a
        by A7,N8,O3,O4,O5,TREES_2:def 11;
      end;
      suppose ex r being FinSequence of NAT st r in dom t & a = nu^r &
        ((F.b)-sub t).a = t.r;
        then consider r being FinSequence of NAT such that
O6:     r in dom t & a = nu^r & ((F.b)-sub t).a = t.r;
        r in {{}} by O6,TREES_1:29;
        then r = {};
        hence ((F.In(1,dom B))-sub((V1.In(1,dom B))-term)).a = v.a
        by N7,O6,TREES_4:3;
      end;
    end;
    defpred S[Nat] means for b,b1 being Element of dom B st $1 = b & b1 <= b
    holds ((F.b)-sub(D.b))|(g/.b1 qua Node of v) = (h.v)|(g/.b1 qua Node of v)&
    ((F.b)-sub(D.b))|((dom v)\rng g) = v|((dom v)\rng g);
S1: S[1]
    proof
      let b,b1 be Element of dom B such that
S2:   1 = b & b1 <= b;
      b1 >= 1 by FINSEQ_3:25;
      then
S3:   b1 = 1 by S2,XXREAL_0:1;
      reconsider nu = g/.b as Node of v;
S4:   F.b.nu = [V2.b,B.b] & nu in dom v c= dom (F.b) & the_sort_of (D.b) = B.b
      by S2,F1,SORT;
      then
S8:   (F.b)-sub(D.b) = (F.b) with-replacement(nu, D.b) by Th118;
      then
S7:   ((F.b)-sub(D.b))|nu = D.b by S4,Th130;
SD:   nu = g.b by AA,AB,PARTFUN1:def 6;
      then
S5:   v.nu = f.b & nu in rng g by AA,AB,FUNCT_1:def 3;
      then consider mu being Node of v such that
S6:   nu = mu & ex s,y st v.mu = [y,s] by AA;
      reconsider fb = f.b as pair object by SD,S6,AA,AB;
SC:   v.nu = [fb`1,fb`2] by SD,AA,AB
      .= [V1.b,fb`2] by AB,MCART_1:def 12
      .= [V1.b,B.b] by AB,MCART_1:def 13;
      then v|nu = (V1.b)-term by Th132;
      then (h.v)|nu = h.((V1.b)-term) by Th131;
      hence ((F.b)-sub(D.b))|(g/.b1 qua Node of v)
      = (h.v)|(g/.b1 qua Node of v) by A2,S7,S2,S3;
      dom(F.b) c= dom((F.b)-sub(D.b)) by S4,S8,Lem11;
      then (dom v)\rng g c= dom((F.b)-sub(D.b)) by S4;
      hence dom(((F.b)-sub(D.b))|((dom v)\rng g)) = dom(v|((dom v)\rng g))
      by RELAT_1:62;
      let a; assume
SK:   a in dom(((F.b)-sub(D.b))|((dom v)\rng g));
      then a in (dom v)\rng g;
      then reconsider a as Node of v;
SJ:   (((F.b)-sub(D.b))|((dom v)\rng g)).a = ((F.b)-sub(D.b)).a &
      (v|((dom v)\rng g)).a = v.a by SK,FUNCT_1:49;
      nu <> a by S5,SK,XBOOLE_0:def 5;
      then
SD:   not nu c= a by SC,Lem9;
      then
SE:   not ex r being FinSequence of NAT st r in dom ((V2.b)-term) &
      a = nu^r & F.b.a = ((V2.b)-term).r by TREES_1:1;
SG:   not nu c< a by SD,XBOOLE_0:def 8;
      then
      a in dom v with-replacement(nu, dom((V2.b)-term)) by TREES_1:def 9;
      then
SI:   v.a = (F.b).a by A7,S2,SE,TREES_2:def 11;
SF:   not ex r being FinSequence of NAT st r in dom (D.b) &
      a = nu^r & ((F.b)-sub(D.b)).a = (D.b).r by SD,TREES_1:1;
      a in dom (F.b) & nu in dom (F.b) by S4;
      then a in dom (F.b) with-replacement(nu,dom(D.b)) by SG,TREES_1:def 9;
      hence thesis by SI,SJ,SF,S4,S8,TREES_2:def 11;
    end;
T1: for i st i >= 1 & S[i] holds S[i+1]
    proof
      let i; assume
T2:   i >= 1 & S[i];
      let b,b1 be Element of dom B; assume
T3:   b = i+1 & b1 <= b;
      then i+1 <= len B by FINSEQ_3:25;
      then i < len B by NAT_1:13;
      then reconsider b2 = i as Element of dom B by T2,FINSEQ_3:25;
T5:   F.b = (F.b2) with-replacement(g/.b2 qua Node of v, D.b2)
      with-replacement(g/.b qua Node of v, (V2.b)-term) by A7,T3;
      v.(g.b) = f.b & g.b in rng g by AA,AB,FUNCT_1:def 3;
      then consider nu being Node of v such that
U2:   g.b = nu & ex s,y st v.nu = [y,s] by AA;
      reconsider fb = f.b as pair object by U2,AA,AB;
U3:   v.(g/.b) = v.(g.b) by AA,AB,PARTFUN1:def 6
      .= [fb`1,fb`2] by AA,AB
      .= [V1.b,fb`2] by AB,MCART_1:def 12
      .= [V1.b,B.b] by AB,MCART_1:def 13;
T7:   the_sort_of (D.b2) = B.b2 & F.b2.(g/.b2) = [V2.b2,B.b2] &
      g/.b2 in dom v c= dom (F.b2) by T2,L8,SORT;
      then
T6:   (F.b2)-sub(D.b2) =
      (F.b2) with-replacement(g/.b2 qua Node of v, D.b2) by Th118;
T18:  g/.b1 = g.b1 & g/.b = g.b by AA,AB,PARTFUN1:def 6;
      dom (F.b2) c= dom((F.b2)-sub(D.b2)) by T6,T7,Lem11;
      then
T21:  g/.b in dom((F.b2)-sub(D.b2)) & g/.b1 in dom((F.b2)-sub(D.b2)) by T7;
      per cases by T3,XXREAL_0:1;
      suppose b1 < b;
        then
T8:     b1 <= b2 & g.b1 <> g.b by AA,AB,T3,FUNCT_1:def 4,NAT_1:13;
        then
T4:     ((F.b2)-sub(D.b2))|(g/.b1 qua Node of v) =
        (h.v)|(g/.b1 qua Node of v) by T2;
        v.(g.b1) = f.b1 & g.b1 in rng g by AA,AB,FUNCT_1:def 3;
        then consider nu being Node of v such that
U5:     g.b1 = nu & ex s,y st v.nu = [y,s] by AA;
        reconsider fb1 = f.b1 as pair object by U5,AA,AB;
U6:     v.(g/.b1) = v.(g.b1) by AA,AB,PARTFUN1:def 6
        .= [fb1`1,fb1`2] by AA,AB
        .= [V1.b1,fb1`2] by AB,MCART_1:def 12
        .= [V1.b1,B.b1] by AB,MCART_1:def 13;
T9:     not g/.b c= g/.b1 & not g/.b1 c= g/.b by T18,T8,U3,U6,Lem9;
        then
T10:    (F.b)|(g/.b1 qua Node of v) = (h.v)|(g/.b1 qua Node of v)
        by T21,T4,T5,T6,Th133;
        1 <= i+1 by NAT_1:12;
        then
T12:    F.b.(g/.b) = [V2.b,B.b] & g/.b in dom v c= dom (F.b) & g/.b1 in dom v &
        the_sort_of (D.b) = B.b by T3,L8,SORT;
        then
T11:    (F.b)-sub(D.b) =
        (F.b) with-replacement(g/.b qua Node of v, D.b) by Th118;
        hence ((F.b)-sub(D.b))|(g/.b1 qua Node of v)
        = (h.v)|(g/.b1 qua Node of v) by T10,T12,T9,Th133;
        dom v c= dom (F.b) c= dom((F.b)-sub(D.b)) by T12,T11,Lem11;
        then (dom v)\rng g c= dom((F.b)-sub(D.b));
        hence dom (((F.b)-sub(D.b))|((dom v)\rng g)) = dom (v|((dom v)\rng g))
        by RELAT_1:62;
        let a; assume
TT:     a in dom(((F.b)-sub(D.b))|((dom v)\rng g));
        reconsider a as Node of (F.b)-sub(D.b) by TT,RELAT_1:57;
T16:    (((F.b)-sub(D.b))|((dom v)\rng g)).a = ((F.b)-sub(D.b)).a &
        (((F.b2)-sub(D.b2))|((dom v)\rng g)).a = ((F.b2)-sub(D.b2)).a &
        (v|((dom v)\rng g)).a = v.a by TT,FUNCT_1:49;
        then
T17:    ((F.b2)-sub(D.b2)).a = v.a by T2;
        g/.b in rng g & a nin rng g & a in dom v
        by T18,AA,AB,TT,XBOOLE_0:def 5,FUNCT_1:def 3;
        then
T19:    not g/.b c= a & a in dom (F.b) =
        dom((F.b2)-sub(D.b2)) with-replacement(g/.b qua Node of v,
        dom((V2.b)-term))
        by T18,U2,T21,T5,T6,T12,Lem9,TREES_2:def 11;
        then not ex r being FinSequence of NAT st r in dom((V2.b)-term) &
        a = (g/.b)^r & (F.b).a = ((V2.b)-term).r by TREES_1:1;
        then
T22:    (F.b).a = v.a by T18,U2,T17,T19,T21,T5,T6,TREES_2:def 11;
T24:    a in dom((F.b)-sub(D.b)) = dom (F.b) with-replacement
        (g/.b qua Node of v, dom(D.b))
        by T12,T18,U2,T11,TREES_2:def 11;
        not ex r being FinSequence of NAT st r in dom (D.b) & a = (g/.b)^r &
        ((F.b)-sub(D.b)).a = D.b.r by T19,TREES_1:1;
        hence thesis by T16,T18,U2,T11,T22,T12,T24,TREES_2:def 11;
      end;
      suppose
U7:     b1 = b;
        reconsider nu = g/.b as Node of v;
        i+1 >= 1 by NAT_1:12; then
S4:     F.b.nu = [V2.b,B.b] & nu in dom v c= dom (F.b) &
        the_sort_of (D.b) = B.b by T3,L8,SORT;
        then
T11:    (F.b)-sub(D.b) = (F.b) with-replacement(nu, D.b) by Th118;
        then
S7:     ((F.b)-sub(D.b))|nu = D.b by S4,Th130;
T18:    nu = g.b by AA,AB,PARTFUN1:def 6;
        then v.nu = f.b & nu in rng g by AA,AB,FUNCT_1:def 3;
        then consider mu being Node of v such that
S6:     nu = mu & ex s,y st v.mu = [y,s] by AA;
        reconsider fb = f.b as pair object by T18,S6,AA,AB;
        v.nu = [fb`1,fb`2] by T18,AA,AB
        .= [V1.b,fb`2] by AB,MCART_1:def 12
        .= [V1.b,B.b] by AB,MCART_1:def 13;
        then v|nu = (V1.b)-term by Th132;
        then (h.v)|nu = h.((V1.b)-term) by Th131;
        hence ((F.b)-sub(D.b))|(g/.b1 qua Node of v)
        = (h.v)|(g/.b1 qua Node of v) by A2,S7,U7;
        dom v c= dom (F.b) c= dom((F.b)-sub(D.b)) by S4,T11,Lem11;
        then (dom v)\rng g c= dom((F.b)-sub(D.b));
        hence dom (((F.b)-sub(D.b))|((dom v)\rng g)) = dom (v|((dom v)\rng g))
        by RELAT_1:62;
        let a; assume
T24:    a in dom(((F.b)-sub(D.b))|((dom v)\rng g));
        then reconsider a as Node of (F.b)-sub(D.b) by RELAT_1:57;
T16:    (((F.b)-sub(D.b))|((dom v)\rng g)).a = ((F.b)-sub(D.b)).a &
        (((F.b2)-sub(D.b2))|((dom v)\rng g)).a = ((F.b2)-sub(D.b2)).a &
        (v|((dom v)\rng g)).a = v.a by T24,FUNCT_1:49;
        then
T17:    ((F.b2)-sub(D.b2)).a = v.a by T2;
        g/.b in rng g & a nin rng g & a in dom v
        by T18,AA,AB,T24,XBOOLE_0:def 5,FUNCT_1:def 3;
        then
T19:    not g/.b c= a & a in dom (F.b) =
        dom((F.b2)-sub(D.b2)) with-replacement(g/.b qua Node of v,
        dom((V2.b)-term)) by T21,T5,T6,S4,Lem9,TREES_2:def 11;
        then not ex r being FinSequence of NAT st r in dom((V2.b)-term) &
        a = (g/.b)^r & (F.b).a = ((V2.b)-term).r by TREES_1:1;
        then
T22:    (F.b).a = v.a by T18,T17,T19,T21,T5,T6,TREES_2:def 11;
T24:    a in dom((F.b)-sub(D.b)) = dom (F.b) with-replacement
        (g/.b qua Node of v, dom(D.b))
        by S4,T11,TREES_2:def 11;
        not ex r being FinSequence of NAT st r in dom (D.b) & a = (g/.b)^r &
        ((F.b)-sub(D.b)).a = D.b.r by T19,TREES_1:1;
        hence thesis by T16,T11,T22,S4,T24,TREES_2:def 11;
      end;
    end;
    set b = In(len B, dom B);
    set v1 = (F.b)-sub(D.b);
SK: for i st i >= 1 holds S[i] from NAT_1:sch 8(S1,T1);
S8: F.b.(g/.b) = [V2.b,B.b] & dom v c= dom (F.b) by L8,NK;
    then
SA: the_sort_of (D.b) = B.b & g/.b in dom (F.b) by SORT;
    then v1 = (F.b)with-replacement(g/.b qua Node of v,D.b) by S8,Th118;
    then dom(F.b) c= dom v1 by SA,S8,Lem11;
    then
S9: dom v c= dom v1 & v|((dom v) \ rng g) = v1|((dom v) \ rng g)
    by SK,S8,NK;
    now let i; assume i in dom g;
      then reconsider b1 = i as Element of dom B by AA,MCART_1:def 13;
      b1 <= len B by FINSEQ_3:25;
      hence (h.v)|(g/.i qua Node of v) = v1|(g/.i qua Node of v)
      by SK,NK;
    end;
    hence h.v = (F.In(len B,dom B))-sub(D.In(len B,dom B)) by AA,S9,Th138;
  end;