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);
reserve h1 for x-constant Homomorphism of Free(S,X), T,
  h2 for y-constant Homomorphism of Free(S,Y), Q;

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;
