reserve x,y,z for set;

theorem
  for S being non void Signature for X being non-empty ManySortedSet of
  the carrier of S holds Free(S, X) = FreeMSA X
proof
  let S be non void Signature;
  let X be non-empty ManySortedSet of the carrier of S;
  set Y = X (\/) ((the carrier of S)-->{0});
A1: the Sorts of Free(S, X) = S-Terms(X,Y) by Th24;
A2: FreeMSA X = MSAlgebra(#FreeSort X, FreeOper X#) by MSAFREE:def 14;
A3: the Sorts of Free(S, X) = the Sorts of FreeMSA X
  proof
      let s be Element of S;
      reconsider s9 = s as SortSymbol of S;
      thus (the Sorts of Free(S, X)).s c= (the Sorts of FreeMSA X).s
      proof
        let x be object;
        assume
A4:     x in (the Sorts of Free(S, X)).s;
        then reconsider t = x as Term of S, Y by A1,Th16;
        variables_in t c= X by A1,A4,Th17;
        then reconsider t9 = t as Term of S,X by Th30;
        the_sort_of t = s by A1,A4,Th17;
        then the_sort_of t9 = s by Th29;
        then x in FreeSort(X, s9) by MSATERM:def 5;
        hence thesis by A2,MSAFREE:def 11;
      end;
      reconsider s9 = s as SortSymbol of S;
      let x be object;
      assume x in (the Sorts of FreeMSA X).s;
      then
A5:   x in FreeSort(X, s9) by A2,MSAFREE:def 11;
      FreeSort(X, s9) c= S-Terms X by MSATERM:12;
      then reconsider t = x as Term of S,X by A5;
      X c= Y by PBOOLE:14;
      then reconsider t9 = t as Term of S,Y by MSATERM:26;
      variables_in t = S variables_in t;
      then
A6:   variables_in t9 c= X by Th28;
      the_sort_of t = s by A5,MSATERM:def 5;
      then the_sort_of t9 = s by Th29;
      then
      t in {q where q is Term of S,Y: the_sort_of q = s9 & variables_in q
      c= X} by A6;
      hence thesis by A1,Def5;
  end;
  FreeMSA X is MSSubAlgebra of FreeMSA X & ex A being MSSubset of FreeMSA
  Y st Free(S, X) = GenMSAlg A & A = (Reverse Y)""X by Def1,MSUALG_2:5;
  hence thesis by A3,Th26;
end;
