The PolynomialIdeals package is a collection of commands that support computations with commutative polynomial ideals in one or more variables over fields, such as computing the primary decomposition of a polynomial ideal.

•

The main computational engine behind the package is Groebner bases, but no knowledge of them is required to use this package.

•

All package commands support computations over the rational numbers, algebraic number fields, rational function fields, and algebraic function fields, as well as finite fields. Coefficients from algebraic extension fields can be specified using radicals or RootOfs.

Each command in the PolynomialIdeals package can be accessed by using either the long form or the short form of the command name in the command calling sequence.

Because the underlying implementation of the PolynomialIdeals package is a module, it is also possible to use the form PolynomialIdeals:-command to access a command from the package. For more information, see Module Members.

•

You can use the Groebner package in conjunction with the PolynomialIdeals package.

Note: Both packages have the following exports of the same name and almost identical functionality: HilbertDimension, IsProper, IsZeroDimensional, and UnivariatePolynomial. After loading both packages using with, these names refer to the corresponding exports of the most recently loaded package, but you can still access the exports with the same name in the other package using the long form name, that is, by prepending the package name.

We first create an ideal J using the PolynomialIdeal command. This ideal is generated by the two polynomials given to the constructor. The ideal is assumed to lie in the polynomial ring by default.

>

(1)

Now we test if a polynomial in the polynomial ring is in the ideal using the IdealMembership command. Because the polynomial is a polynomial combination of the generators, it is in .

>

(2)

>

(3)

Now we show how to do this using a shortcut syntax that corresponds more closely to a standard notation for ideals. This syntax is available whenever the package has been loaded using with(PolynomialIdeals). Otherwise, enclosing a quantity in angled brackets constructs a Vector for use with the LinearAlgebra package. For further options and details for constructing polynomial ideals, see PolynomialIdeal.

>

(4)

>

(5)

The PrimeDecomposition and PrimaryDecomposition commands compute prime and primary decompositions, respectively. Both return a sequence of ideals whose intersection contains the input ideal. For a prime decomposition, this intersection has the same solutions as the original ideal (the intersection is equal to the radical), whereas for a primary decomposition the intersection is identically equal to the given ideal. The Intersect command is used below to compute this intersection. In this case, our ideal is radical, so the prime and primary decompositions are the same.

>

(6)

>

(7)

>

(8)

How do we know that ? The IdealContainment command can be used to test multiple inclusions simultaneously. It returns true if all of the inclusions are true, and false if any of them fail. A particularly useful form of the command is shown below, where it is used to test ideal equality.

>

(9)

Turning back to the prime decomposition, to extract the set of generators for one of the components: the Generators command accepts a single ideal, and returns the set of generators in a set.

>

(10)

>

(11)

How are these computations done? An ideal membership test and an ideal decomposition are performed by first computing a Groebner basis for the ideal. If we inspect the data representation for the ideal J, we notice that a Groebner basis was implicitly computed.

Groebner bases are used extensively by almost every command in this package. They are computed by the system as required. You need not be familiar with Groebner bases to use this package. The Groebner[Basis] command computes a Groebner basis explicitly for an ideal with respect to a given monomial order. A variety of monomial orders are implemented, with a complete list available under MonomialOrders. The default monomial ordering used is known as graded reverse lexicographical order or tdeg in Maple. Here, we explicitly compute a Groebner basis for our ideal J using lexicographic order with . See Groebner[Basis] for details. From this example, you can see that the Groebner basis depends on the monomial ordering used. We extract the leading terms of the generators for the Groebner basis; they are , , and .

>

(12)

>

(13)

>

(14)

>

(15)

The next ideal is the intersection of two components, both of which are maximal, that is, prime over and zero-dimensional. We extract the smaller component of interest, and then simplify it.

>

There are a finite number of solutions.

>

(16)

There are no repeated solutions.

>

(17)

There is more than one irreducible component.

>

(18)

>

(19)

There are 10 distinct solutions.

>

(20)

There are two irreducible components.

>

(21)

The smaller component:

>

(22)

In the mathematical literature, the letters I, J, and K are often used to denote ideals. We have so far refrained from using I because Maple, by default, uses I to denote the imaginary unit whose square is . We can use a different letter for the square root of after using the following command, leaving us free to use the letter I for an ideal. We show an example of this next.

>

(23)

>

(24)

>

(25)

>

(26)

In addition to the generators (which are always specified as polynomials), we can also input options for the polynomial ring (which are always specified as equations). Two of the most important options are , which forces all computations onto the integers modulo p, and , in which a set S specifies the variables of the polynomial ring. We make use of both options in the following example. The resulting ideal will lie in the polynomial ring , rather than the default . When using the shortcut syntax, the Maple operator precedence rules require that you enclose any options in parentheses.

>

(27)

As an example of a computation with ideals, the intersection of two ideals and in is given by the following formula: . We make use of the Operators subpackage, which provides binary operators for ideal arithmetic.

>

>

(28)

>

(29)

>

(30)

>

(31)

Note: When ideal operations are applied to different rings, for example, and , the ideals are first put into a common ring, in this case, the ring . For our final example, we explain how to test if an ideal is zero-dimensional, that is, the polynomial system of equations has finitely many solutions if in characteristic zero. You can use the HilbertDimension command to compute the dimension of an ideal to do this. Another way is the following; an ideal J in has dimension zero if the set of leading monomials of the ideal contains , for .