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);
reserve
  r,r1,r2 for (Element of T),
  t,t1,t2 for (Element of Free(S,X));
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));
reserve c,c1,c2 for set, d,d1 for DecoratedTree;
reserve
  w for (Element of Args(o,T)),
  p,p1 for Element of Args(o,Free(S,X));
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;
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);

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;
