MultivariateCyclicVector - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Mathematics : Algebra : Polynomials : Groebner : MultivariateCyclicVector

Groebner

  

MultivariateCyclicVector

  

general-purpose and parametrizable iteration algorithm

 

Calling Sequence

Parameters

Description

Examples

References

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 Malgebra;

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 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);

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.

withOre_algebra:

withGroebner:

Apoly_algebrax,y,z,t:

Gx31x6xy,x8z,x10t,x2+y2+z2t2:

MorgMonomialOrderA,wdeg1,31,8,10,x,y,z,t:

Here is the initial Groebner basis.

GBorgBasisG,Morg

GBorgx8z,x2zt,tx6+z2,x6t3x+x+y,2t3x7+t6x2+tx6+2x72t3x2+tx2t2+2x2,t2x6+t6z2t4x32t3z+t2x2+2tx3+tz+2z,2t4x5+t7+t2x4+2tx52t4t2z+t2+2t

(1)

Check that you are in the zero-dimensional case.

HilbertDimension,Morg

0

(2)

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:

MnewMonomialOrderA&comma;tdegx&comma;y&comma;z&comma;t&colon;

fglmMultivariateCyclicVectorNFproc&comma;FDproc&comma;TMproc&comma;Mnew&colon;

Up to reordering, here is the final Groebner basis.

mapop&comma;entriesfglm2

t4z+t3yx+t2y2xz2yx+z4+t3ty2tz2t2txtytz2xy&comma;t3yxt2z2y+z3xz4t2x+tyx+t22y2z2&comma;t4t2yx+2t2y2+tz3+y3x+z2yxy4+z4+2tzzx&comma;t2+x2+y2+z2&comma;tz3yx+2t3xt2z2z3+t2+txty2x2y&comma;t3yx+t2z2xz4t3+ty2+tz2+t2+2xyz2&comma;t4y+t3y2t2zxtzyx+z4+t2xt2+txty+z2&comma;t4yt3z2t2zx+z3x+t2x+txty+z2&comma;t2z+zy2+z3+t&comma;t4x+tx+ty+z2&comma;z4y+t3xt3zty2xtz2xt2yy2x+y3+z2y+z&comma;tz4t3tyx+ty2+tz2z2x&comma;z5t4&comma;2t4yt4z+4t2y3+tz3x+tz3y2y52t3x+2t3z+2ty2x+2tz2x+z2yx+2t2y+tzx+4tzy+2y2xzyx2y32z2y+tzt2z&comma;t5+tzyx+z3x+t2&comma;t4z+zxt3+t3zyt2z3tz2xz2yx+tzxtz2zy&comma;2t4yzxt3+ty42t2zxtzyx+z3x+2z4t3+2t2x2t2ztyx+ty2+tz2z2xt2+2tx2ty+zx+zy+2z2&comma;z4xt2xt2y+y2x+z2x+y3+z2yz

(3)

Computation of dependencies

Find equations that define the product φx&comma;yPnx, where Pnx is the n-th Legendre polynomial and φx&comma;y is the generating function of the Legendre polynomials.

φ1sqrt12xy+y2

φ12xy+y2+1

(4)

Compute the derivative Qnx of Pnx.

`diff/P`:=proc(x,v) Q[op(1,procname)](x)*diff(args) end proc:

Compute the derivative of Qnx.

`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 Pnx and Qnx.

P[n+2](x):=((2*n+3)*x*P[n+1](x)-(n+1)*P[n](x))/(n+2);

Pn+2x2n+3xPn+1xn+1Pnxn+2

(5)

Q[n+1](x):=(n+1)*(P[n](x)-x*Q[n](x))/(1-x^2);

Qn+1xn+1PnxxQnxx2+1

(6)

Declare an Ore algebra and a monomial order to define phi, P and Q.

Askew_algebrashift=Sn&comma;n&comma;diff=Dx&comma;x&comma;diff=Dy&comma;y&colon;

MMonomialOrderA&comma;tdegSn&comma;Dx&comma;Dy&colon;

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 φx&comma;yPnx.

fglmMultivariateCyclicVectorNFproc&comma;FDproc&comma;TMproc&comma;M&colon;

mapop&comma;entriesfglm2

2xyy21Dy+xy&comma;x1x+12xyy212Dx2+23x2yy2xxy2xyy21Dx4n2x2y2+4n2xy3n2y44nx2y2+4nxy3ny4+4n2xy2n2y2+3x2y22y3x+4nxy2ny2n22xy+y2n&comma;x1x+12xyy21DxSnxn+12xyy21Dx+yx1x+1Sn+xyy21n+1&comma;Sn2n+2x2n+3Sn+n+1

(7)

normalevalmapapplyopr&comma;&comma;φPnx&comma;A

0&comma;0&comma;0&comma;0

(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.

See Also

Groebner

Groebner[FGLM]

Groebner[MonomialOrder]

Ore_algebra

proc