8.12 Primary Decomposition of Ideals
Axiom provides a facility for the primary decomposition
ideal:primary decomposition of primary decomposition of
ideal polynomial ideals over fields of characteristic zero. The
algorithm
is discussed in \cite{gtz:gbpdpi} and
works in essentially two steps:
-
the problem is solved for 0-dimensional ideals by ``generic''
projection on the last coordinate
- a ``reduction process'' uses localization and ideal quotients
to reduce the general case to the 0-dimensional one.
The Axiom constructor PolynomialIdeals represents ideals with
coefficients in any field and supports the basic ideal operations,
including intersection, sum and quotient. IdealDecompositionPackage
contains the specific operations for the
primary decomposition and the computation of the radical of an ideal
with polynomial coefficients in a field of characteristic 0 with an
effective algorithm for factoring polynomials.
The following examples illustrate the capabilities of this facility.
First consider the ideal generated by
(which defines a circle in the -plane) and the ideal
generated by (corresponding to the
straight lines and .
(n,m) : List DMP([x,y],FRAC INT)
Type: Void
Type: List
DistributedMultivariatePolynomial([x,y],Fraction Integer)
Type: List
DistributedMultivariatePolynomial([x,y],Fraction Integer)
We find the equations defining the intersection of the two loci.
This correspond to the sum of the associated ideals.
Type: PolynomialIdeals(Fraction Integer,
DirectProduct(2,NonNegativeInteger),OrderedVariableList [x,y],
DistributedMultivariatePolynomial([x,y],Fraction Integer))
We can check if the locus contains only a finite number of points,
that is, if the ideal is zero-dimensional.
Type: Boolean
Type: Boolean
Type: PositiveInteger
We can find polynomial relations among the generators ( and are
the parametric equations of the knot).
(f,g):DMP([x,y],FRAC INT)
Type: Void
Type: DistributedMultivariatePolynomial([x,y],Fraction Integer)
Type: DistributedMultivariatePolynomial([x,y],Fraction Integer)
|
Type: SuchThat(List Polynomial Fraction Integer,
List Equation Polynomial Fraction Integer)
We can compute the primary decomposition of an ideal.
l: List DMP([x,y,z],FRAC INT)
Type: Void
l:=[x**2+2*y**2,x*z**2-y*z,z**2-4]
Type: List
DistributedMultivariatePolynomial([x,y,z],Fraction Integer)
ld:=primaryDecomp ideal l
|
Type: List PolynomialIdeals(Fraction Integer,
DirectProduct(3,NonNegativeInteger),
OrderedVariableList [x,y,z],
DistributedMultivariatePolynomial([x,y,z],Fraction Integer))
We can intersect back.
Type: PolynomialIdeals(Fraction Integer,
DirectProduct(3,NonNegativeInteger),
OrderedVariableList [x,y,z],
DistributedMultivariatePolynomial([x,y,z],Fraction Integer))
We can compute the radical of every primary component.
reduce(intersect,[radical ld.i for i in 1..2])
Type: PolynomialIdeals(Fraction Integer,
DirectProduct(3,NonNegativeInteger),
OrderedVariableList [x,y,z],
DistributedMultivariatePolynomial([x,y,z],Fraction Integer))
Their intersection is equal to the radical of the ideal of .
Type: PolynomialIdeals(Fraction Integer,
DirectProduct(3,NonNegativeInteger),
OrderedVariableList [x,y,z],
DistributedMultivariatePolynomial([x,y,z],Fraction Integer))