|
Calling Sequence
|
|
MultivariateCyclicVector(NFproc, FDproc, TMproc, M)
|
|
Parameters
|
|
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
|
|
|
|
|
Description
|
|
•
|
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 ;
|
NF
|
a table with monomials already dealt with as indices and normal forms already computed as corresponding entries;
|
M
|
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 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);
|
NF
|
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
|
|
a list of monomials that generate a monoideal (that is, a set of monomials that is stable under product);
|
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.
|
|
|
Examples
|
|
Change of orderings
The FGLM algorithm was originally introduced to compute Groebner bases by a change of monomial orderings.
>
|
|
>
|
|
>
|
|
>
|
|
Here is the initial Groebner basis.
>
|
|
| (1) |
Check that you are in the zero-dimensional case.
>
|
|
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:
|
>
|
|
>
|
|
Up to reordering, here is the final Groebner basis.
>
|
|
| (3) |
Computation of dependencies
Find equations that define the product , where is the n-th Legendre polynomial and is the generating function of the Legendre polynomials.
Compute the derivative of .
>
|
`diff/P`:=proc(x,v) Q[op(1,procname)](x)*diff(args) end proc:
|
Compute the derivative of .
>
|
`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 and .
>
|
P[n+2](x):=((2*n+3)*x*P[n+1](x)-(n+1)*P[n](x))/(n+2);
|
| (5) |
>
|
Q[n+1](x):=(n+1)*(P[n](x)-x*Q[n](x))/(1-x^2);
|
| (6) |
Declare an Ore algebra and a monomial order to define phi, P and Q.
>
|
|
>
|
|
Define NFproc and FDproc in view of a call to MultivariateCyclicVector.
>
|
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:
|
>
|
TMproc:=proc(border,monoideal,MOrd)
border<>[]
end proc:
|
Compute equations satisfied by .
>
|
|
>
|
|
| (7) |
>
|
|
| (8) |
|
|
References
|
|
|
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.
|
|
|
|