Re: PolynomialReduce

*To*: mathgroup at smc.vnet.net*Subject*: [mg8811] Re: PolynomialReduce*From*: Daniel Lichtblau <danl>*Date*: Fri, 26 Sep 1997 00:33:36 -0400*Organization*: Wolfram Research, Inc.*Sender*: owner-wri-mathgroup at wolfram.com

Gianluca Gorni wrote: > > Hello mathgroupers! > > I have just found what looks like a shortcoming > of PolynomialReduce. I have got a polynomial "poly" > and a list of three other polynomials "polylist", > and it turns out that poly is a linear combination of > the polynomials from the list: > > In[3]:= poly == Expand[{-(1/4), -1, 1/4} . polylist] > > Out[3]= True > > Still, PolynomialReduce does not seem to notice: > > In[4]:= Last[PolynomialReduce[poly, polylist]]===0 > > Out[4]= False > > The documentation says that the last element in PolynomialReduce > is "minimal", but it does not elaborate. Wouldn't it be > reasonable that it checked at least for linear dependence? > > Cheers! > Gianluca Gorni > > The version and the actual polynomials are as follows: > > <...> > > Gianluca Gorni > Universita` di Udine > Dipartimento di Matematica e Informatica > via delle Scienze 208 > I-33100 Udine UD > Italy > > Ph.:(39) (432) 558422 Fax:(39) (432) 558499 > mailto:gorni at dimi.uniud.it > http://www.dimi.uniud.it PolynomialRedice will perform what is called "generalized division" with respect to a given set of polynomials and a given term ordering. This latter is lexicographic by default, and moreover depends on the ordering of the variables. This in turn is determined by the order in which they are given in the optional "variables" (third) argument to PolynomialReduce or by the order in which they get put internally if they are not explicitly given as an argument. If we reduce with respect to a Groebner basis then we are guaranteed to get a reduction to zero if poly is in the ideal generated by polylist (as it is in this case). This is a bit subtle, though. A set may be a Groebner basis with respect to one ordering but not another, and the ordering that matters is the one by which we reduce (not the one by which the basis was created, if they are different orderings). Here is your example with variables rewritten in an obvious way. In[8]:= poly = v1*b11*b12 + v3*b11*b12 + 2*v3*b12^2 + 2*v3*b11*b22 + v2*b12*b22 + 4*v3*b12*b22; In[9]:= polylist = {v1*b11^2 + v2*b12^2 + v3*(b11 + 2*b12)^2, v1*b12^2 + v2*b22^2 + v3*(b12 + 2*b22)^2, v1*(b11 + 2*b12)^2 + v2*(b12 + 2*b22)^2 + v3*(b11 + 4*b12 + 4*b22)^2}; We will use the variable order given below to create a Groebner basis. In[10]:= vars = {v1,v2,v3,b11,b12,b13}; In[11]:= gb = GroebnerBasis[polylist, vars]; We reduce with respect to this basis, but the reduction term order may be different because we do not specify a variable order. In[12]:= PolynomialReduce[poly, gb] // InputForm Out[12]//InputForm= {{0, 0, 0, 2, 0, 0}, b11*b12*v1 - 2*b12^2*v1 + b12*b22*v2 - 2*b22^2*v2 + b11*b12*v3 + 2*b11*b22*v3 - 4*b12*b22*v3 - 8*b22^2*v3} We did not get zero. This time we reduce with respect to the same order we used to create the Groebner basis. In[13]:= PolynomialReduce[poly, gb, vars] // InputForm Out[13]//InputForm= {{0, 0, 0, 0, 1, 0}, 0} And voila, as my kids would say. Daniel Lichtblau Wolfram Research danl at wolfram.com