62.1.1 Notes on the grobner package

and is released 2002-05-24 under the terms of the General Public License(GPL) (see file `grobner.lisp').
This documentation was extracted from the files

`README', `grobner.lisp', `grobner.demo', `grobner-demo.output'

by Günter Nowak. Suggestions for improvement of the documentation can
be discussed at the maxima-mailing-list maxima@math.utexas.edu.
The code is a little bit out of date now. Modern implementation use the fast F4 algorithm described in

This switch indicates the coefficient ring of the polynomials that
will be used in grobner calculations. If not set, maxima's general
expression ring will be used. This variable may be set to
ring_of_integers if desired.

Name of the default elimination order used in elimination
calculations. If set, it overrides the settings in variables
poly_primary_elimination_order and poly_secondary_elimination_order.
The user must ensure that this is a true elimination order valid
for the number of eliminated variables.

62.2.2 Simple operators in grobner

poly_add, poly_subtract, poly_multiply and poly_expt
are the arithmetical operations on polynomials.
These are performed using the internal representation, but the results are converted back to the
maxima general form.

62.2.3 Other functions in grobner

Function:poly_expand (poly, varlist)

This function parses polynomials to internal form and back. It
is equivalent to expand(poly) if poly parses correctly to
a polynomial. If the representation is not compatible with a
polynomial in variables varlist, the result is an error.
It can be used to test whether an expression correctly parses to the
internal representation. The following examples illustrate that
indexed and transcendental function variables are allowed.

Pseudo-divide a polynomial poly by the list of n polynomials polylist. Return
multiple values. The first value is a list of quotients a. The
second value is the remainder r. The third argument is a scalar
coefficient c, such that c*poly can be divided by polylist within the ring
of coefficients, which is not necessarily a field. Finally, the
fourth value is an integer count of the number of reductions
performed. The resulting objects satisfy the equation:

Returns true if polylist is a Groebner basis with respect to the current term
order, by using the Buchberger
criterion: for every two polynomials h1 and h2 in polylist the
S-polynomial S(h1,h2) reduces to 0 modulopolylist.

62.2.4 Standard postprocessing of Groebner Bases

The k-th elimination IdealI_k of an Ideal I over K[ x[1],...,x[n] ] is the ideal intersect(I, K[ x[k+1],...,x[n] ]).
The colon idealI:J is the ideal {h|for all w in J: w*h in I}.
The ideal I:p^inf is the ideal {h| there is a n in N: p^n*h in I}.
The ideal I:J^inf is the ideal {h| there is a n in N and a p in J: p^n*h in I}.
The radical idealsqrt(I) is the ideal
{h| there is a n in N : h^n in I }.

Function:poly_reduction (polylist, varlist)

poly_reduction reduces a list of polynomials polylist, so that
each polynomial is fully reduced with respect to the other polynomials.

Returns a sublist of the polynomial list polylist spanning the same
monomial ideal as polylist but minimal, i.e. no leading monomial
of a polynomial in the sublist divides the leading monomial
of another polynomial.

poly_grobner_equal tests whether two Groebner Bases generate the same ideal.
Returns true if two lists of polynomials polylist1 and polylist2, assumed to be Groebner Bases,
generate the same ideal, and false otherwise.
This is equivalent to checking that every polynomial of the first basis reduces to 0
modulo the second basis and vice versa. Note that in the example below the
first list is not a Groebner basis, and thus the result is false.