Groebner
MultivariateCyclicVector
general-purpose and parametrizable iteration algorithm
Calling Sequence
Parameters
Description
Examples
References
MultivariateCyclicVector(NFproc, FDproc, TMproc, M)
NFproc
-
function to compute normal forms
FDproc
function to find dependencies
TMproc
function to decide when to terminate
M
monomial order on an Ore algebra
The MultivariateCyclicVector command performs an iteration algorithm (similar to FGLM) to compute a Groebner basis with respect to M of (skew) polynomials whose normal forms under NFproc are zero.
Common uses of the MultivariateCyclicVector command are the following.
(i) - To compute Groebner bases by change of ordering (a first Groebner basis is known for a monomial order, a second one is computed for another order).
(ii) - To find equations defining a function. See the Examples section.
More specifically, NFproc takes three arguments.
m
a monomial in the algebra Malgebra;
NF
a table with monomials already dealt with as indices and normal forms already computed as corresponding entries;
a monomial order (actually, the table M of the call to MultivariateCyclicVector).
It returns a normal form for the monomial m and stores it as NFm into NF.
FDproc takes two arguments:
mi
a list of monomials that generate a monoideal (that is, a set of monomials that is stable under product);
is a table of the same type as above.
It returns either a nontrivial linear combination of the indices of NF that evaluates to 0 under NFproc, or FAIL when no such dependency exists. This function must not use entries in NF corresponding to indices that are elements of the monoideal generated by mi.
The procedure TMproc is used to decide when to stop the algorithm. It takes three arguments.
border
a list of monomials still to be dealt with by the algorithm;
monoideal
TOrd
the monomial order with respect to which they are enumerated.
The MultivariateCyclicVector command returns an expseq NF, EQ, where NF is the table of all normal forms computed during the calculations and EQ is a table of all linear dependencies found.
Note: The algorithm cannot detect non-zero-dimensional cases; it may loop forever when called on such cases.
For the purpose of computing changes of orderings in the commutative case, the alternative command FGLM is more efficient.
Change of orderings
The FGLM algorithm was originally introduced to compute Groebner bases by a change of monomial orderings.
with⁡Ore_algebra:
with⁡Groebner:
A≔poly_algebra⁡x,y,z,t:
G≔x31−x6−x−y,x8−z,x10−t,x2+y2+z2−t2:
Morg≔MonomialOrder⁡A,wdeg⁡1,31,8,10,x,y,z,t:
Here is the initial Groebner basis.
GBorg≔Basis⁡G,Morg
GBorg≔x8−z,x2⁢z−t,−t⁢x6+z2,x6−t3⁢x+x+y,−2⁢t3⁢x7+t6⁢x2+t⁢x6+2⁢x7−2⁢t3⁢x2+t⁢x2−t2+2⁢x2,−t2⁢x6+t6⁢z−2⁢t4⁢x3−2⁢t3⁢z+t2⁢x2+2⁢t⁢x3+t⁢z+2⁢z,−2⁢t4⁢x5+t7+t2⁢x4+2⁢t⁢x5−2⁢t4−t2⁢z+t2+2⁢t
Check that you are in the zero-dimensional case.
HilbertDimension⁡,Morg
0
Define NFproc and FDproc in view of a call to MultivariateCyclicVector.
NFproc:=proc(m,NF,MOrd) NF[m]:=NormalForm(m,GB[org],M[org]) end proc:
FDproc:=proc(M,NF) local ind_lst,term,eta,sol; ind_lst:=map(op,[indices(NF)]); for term in M do ind_lst:=remove(divide,ind_lst,term) end do; expand(numer(normal(add(eta[term]*NF[term],term=ind_lst)))); sol:=[solve({coeffs(%,{x,y,z,t})},{seq(eta[term],term=ind_lst)})]; subs(op(1,sol),add(eta[term]*term,term=ind_lst)); `if`(%=0,FAIL,collect(primpart(numer(subs(map(n->n=1, map2(op,1,select(evalb,sol[1]))),%)),[x,y,z,t]), [x,y,z,t],distributed,factor)) end proc:
TMproc:=proc(border,monoideal,MOrd) border<>[] end proc:
Mnew≔MonomialOrder⁡A,tdeg⁡x,y,z,t:
fglm≔MultivariateCyclicVector⁡NFproc,FDproc,TMproc,Mnew:
Up to reordering, here is the final Groebner basis.
map⁡op,entries⁡fglm2
t4⁢z+t3⁢y⁢x+t2⁢y2⁢x−z2⁢y⁢x+z4+t3−t⁢y2−t⁢z2−t2−t⁢x−t⁢y−t⁢z−2⁢x⁢y,t3⁢y⁢x−t2⁢z2⁢y+z3⁢x−z4−t2⁢x+t⁢y⁢x+t2−2⁢y2−z2,−t4−t2⁢y⁢x+2⁢t2⁢y2+t⁢z3+y3⁢x+z2⁢y⁢x−y4+z4+2⁢t⁢z−z⁢x,−t2+x2+y2+z2,t⁢z3⁢y⁢x+2⁢t3⁢x−t2⁢z2−z3+t2+t⁢x−t⁢y−2⁢x−2⁢y,−t3⁢y⁢x+t2⁢z2⁢x−z4−t3+t⁢y2+t⁢z2+t2+2⁢x⁢y−z2,t4⁢y+t3⁢y2−t2⁢z⁢x−t⁢z⁢y⁢x+z4+t2⁢x−t2+t⁢x−t⁢y+z2,t4⁢y−t3⁢z2−t2⁢z⁢x+z3⁢x+t2⁢x+t⁢x−t⁢y+z2,−t2⁢z+z⁢y2+z3+t,−t4⁢x+t⁢x+t⁢y+z2,z4⁢y+t3⁢x−t3⁢z−t⁢y2⁢x−t⁢z2⁢x−t2⁢y−y2⁢x+y3+z2⁢y+z,t⁢z4−t3−t⁢y⁢x+t⁢y2+t⁢z2−z2⁢x,z5−t4,−2⁢t4⁢y−t4⁢z+4⁢t2⁢y3+t⁢z3⁢x+t⁢z3⁢y−2⁢y5−2⁢t3⁢x+2⁢t3⁢z+2⁢t⁢y2⁢x+2⁢t⁢z2⁢x+z2⁢y⁢x+2⁢t2⁢y+t⁢z⁢x+4⁢t⁢z⁢y+2⁢y2⁢x−z⁢y⁢x−2⁢y3−2⁢z2⁢y+t⁢z−t−2⁢z,−t5+t⁢z⁢y⁢x+z3⁢x+t2,t4⁢z+z⁢x⁢t3+t3⁢z⁢y−t2⁢z3−t⁢z2⁢x−z2⁢y⁢x+t⁢z⁢x−t⁢z−2⁢z⁢y,2⁢t4⁢y−z⁢x⁢t3+t⁢y4−2⁢t2⁢z⁢x−t⁢z⁢y⁢x+z3⁢x+2⁢z4−t3+2⁢t2⁢x−2⁢t2⁢z−t⁢y⁢x+t⁢y2+t⁢z2−z2⁢x−t2+2⁢t⁢x−2⁢t⁢y+z⁢x+z⁢y+2⁢z2,z4⁢x−t2⁢x−t2⁢y+y2⁢x+z2⁢x+y3+z2⁢y−z
Computation of dependencies
Find equations that define the product φ⁡x,y⁢Pn⁡x, where Pn⁡x is the n-th Legendre polynomial and φ⁡x,y is the generating function of the Legendre polynomials.
φ≔1sqrt⁡1−2⁢x⁢y+y2
φ≔1−2⁢x⁢y+y2+1
Compute the derivative Qn⁡x of Pn⁡x.
`diff/P`:=proc(x,v) Q[op(1,procname)](x)*diff(args) end proc:
Compute the derivative of Qn⁡x.
`diff/Q`:=proc(x,v) local n; n:=op(1,procname); (2*x*Q[n](x)-n*(n+1)*P[n](x))*diff(args)/(1-x^2) end proc:
Shift Pn⁡x and Qn⁡x.
P[n+2](x):=((2*n+3)*x*P[n+1](x)-(n+1)*P[n](x))/(n+2);
Pn+2⁡x≔2⁢n+3⁢x⁢Pn+1⁡x−n+1⁢Pn⁡xn+2
Q[n+1](x):=(n+1)*(P[n](x)-x*Q[n](x))/(1-x^2);
Qn+1⁡x≔n+1⁢Pn⁡x−x⁢Qn⁡x−x2+1
Declare an Ore algebra and a monomial order to define phi, P and Q.
A≔skew_algebra⁡shift=Sn,n,diff=Dx,x,diff=Dy,y:
M≔MonomialOrder⁡A,tdeg⁡Sn,Dx,Dy:
NFproc:=proc(t,NF,MOrd) NF[t]:=normal(eval(subs(n=n+degree(t,Sn), diff(P[n](x)*phi,[x$degree(t,Dx),y$degree(t,Dy)])))) end proc:
FDproc:=proc(M,NF) local ind_lst,t,eta,sol; ind_lst:=map(op,[indices(NF)]); for t in M do ind_lst:=remove(divide,ind_lst,t) end do; expand(numer(normal(add(eta[t]*NF[t],t=ind_lst)))); coeffs(%,[P[n](x),P[n+1](x),Q[n](x)]); sol:=[solve({%},{seq(eta[t],t=ind_lst)})]; subs(op(1,sol),add(eta[t]*t,t=ind_lst)); `if`(%=0,FAIL,collect(primpart(numer(subs(map(n->n=1, map2(op,1,select(evalb,sol[1]))),%)),[Dx,Dy,Sn]), [Dx,Dy,Sn],distributed,factor)) end proc:
Compute equations satisfied by φ⁡x,y⁢Pn⁡x.
fglm≔MultivariateCyclicVector⁡NFproc,FDproc,TMproc,M:
2⁢x⁢y−y2−1⁢Dy+x−y,x−1⁢x+1⁢2⁢x⁢y−y2−12⁢Dx2+2⁢3⁢x2⁢y−y2⁢x−x−y⁢2⁢x⁢y−y2−1⁢Dx−4⁢n2⁢x2⁢y2+4⁢n2⁢x⁢y3−n2⁢y4−4⁢n⁢x2⁢y2+4⁢n⁢x⁢y3−n⁢y4+4⁢n2⁢x⁢y−2⁢n2⁢y2+3⁢x2⁢y2−2⁢y3⁢x+4⁢n⁢x⁢y−2⁢n⁢y2−n2−2⁢x⁢y+y2−n,x−1⁢x+1⁢2⁢x⁢y−y2−1⁢Dx⁢Sn−x⁢n+1⁢2⁢x⁢y−y2−1⁢Dx+y⁢x−1⁢x+1⁢Sn+x⁢y−y2−1⁢n+1,Sn2⁢n+2−x⁢2⁢n+3⁢Sn+n+1
normal⁡eval⁡map⁡applyopr,,φ⁢Pn⁡x,A
0,0,0,0
Faugere, J. C.; Gianni, P.; Lazard, D.; and Mora, T. "Efficient Computation of Zero-dimensional Grobner Bases by Change of Ordering." J. Symbolic Comput., Vol. 16, (1993): 329-344.
See Also
Groebner[FGLM]
Groebner[MonomialOrder]
Ore_algebra
proc
Download Help Document