
Elementarize:= proc(Poly,Vars)
#######################################################################
#
# This procedure converts a polynomial which is symmetric in the variables
# Vars into a polynomial in the elementary smmmetric polynomials.
#
#######################################################################
local Temp,EPoly,Eterm,TERM,e,E,
      DEG,ii,j,VR,m,S,A,i,term:
with(Groebner):
################################################
#   Makes the elementary symetric polynomials in Vars
#
 for m from 1 to nops(Vars) do
  S:=combinat[choose](nops(Vars),m):
  e.m:=0:
  for A in S do
   term:=1:   for i in A do term:=term*Vars[i]: od:
   e.m:=e.m+term
  od:
 od:
###############################
 Temp:=sort(eval(Poly),Vars);
 EPoly:=0:
 VR:=[Vars[1]]:
 for i from 2 to nops(Vars) do VR:=[Vars[i],VR[]]: od:
 while not(Temp=0) do
 Eterm:=leadcoeff(Temp,plex(Vars[]));
 TERM:=leadterm(Temp,plex(Vars[]));
  while not(TERM=1)  do 
   DEG:=0:  ii:=0: 
   while (DEG=0) do 
    ii:=ii+1;   DEG:= degree(TERM,VR[ii]);
   od:
   Eterm:=Eterm*(E.(nops(Vars)+1-ii))^DEG:
   for j from ii to nops(Vars) do
    TERM:=TERM/(VR[j]^DEG):
   od:
  od:
  EPoly:= EPoly + eval(Eterm):
  for i from 1 to nops(Vars) do   
   Eterm := subs(E.i=e.i,Eterm): 
  od:
  Temp:= simplify(Temp - Eterm);
od:

EPoly
end:
