Macaulay2 » Documentation
Packages » PrimaryDecomposition » primaryDecomposition
next | previous | forward | backward | up | index | toc

# primaryDecomposition -- irredundant primary decomposition of an ideal

- Usage:
    `primaryDecomposition I`
- Inputs:
  - I, an ideal, in a (quotient of a) polynomial ring R
- Optional inputs:
  - MinimalGenerators => a Boolean value, default value true, if false, the components will not be minimalized
  - Strategy => ..., default value null,
- Outputs:
  - a list, containing a minimal list of primary ideals whose intersection is I

## Description

This routine returns an irredundant primary decomposition for the ideal I. The specific algorithm used varies depending on the characteristics of the ideal, and can also be specified using the Strategy option. In all cases, the radical of each entry of the output is equal to the corresponding entry of the output of associatedPrimes.

Primary decomposition algorithms are very sensitive to the input. Some algorithms work very well on certain classes of ideals, but poorly on other classes. If this function seems to be taking too long, try another algorithm using primaryDecomposition(...,Strategy=>...).

    i1 : R = QQ[a..i];

    i2 : I = permanents(2,genericMatrix(R,a,3,3))

    o2 = ideal (b*d + a*e, c*d + a*f, c*e + b*f, b*g + a*h, c*g + a*i, c*h + b*i,
         ------------------------------------------------------------------------
         e*g + d*h, f*g + d*i, f*h + e*i)

    o2 : Ideal of R

    i3 : C = primaryDecomposition I;

    i4 : I == intersect C

    o4 = true

    i5 : #C

    o5 = 16

Recall that List / Function applies a function to each element of a list, returning the results as a list. This is often useful with lists of ideals, such as the list C of primary components.

    i6 : C / toString / print;
    ideal(i,h,g,f,e,d)
    ideal(i,h,g,f,c,b*d+a*e)
    ideal(i,h,g,e,b,c*d+a*f)
    ideal(i,h,g,d,a,c*e+b*f)
    ideal(i,h,g,c,b,a)
    ideal(i,h,f,e,c,b)
    ideal(i,g,f,d,c,a)
    ideal(i,f,e,d,c,b*g+a*h)
    ideal(i,f,c,b,a,e*g+d*h)
    ideal(h,g,e,d,b,a)
    ideal(h,f,e,d,b,c*g+a*i)
    ideal(h,e,c,b,a,f*g+d*i)
    ideal(g,f,e,d,a,c*h+b*i)
    ideal(g,d,c,b,a,f*h+e*i)
    ideal(f,e,d,c,b,a)
    ideal(i^2,f*h+e*i,c*h+b*i,f*g+d*i,e*g+d*h,c*g+a*i,b*g+a*h,c*e+b*f,c*d+a*f,b*d+a*e,a^2,g*h*i,c*f*i,h^3,g*h^2,e*h^2,d*h^2,b*h^2,a*h^2,b*e*h,g^3,d*g^2,a*g^2,a*d*g,f^3,e*f^2,d*f^2,c*f^2,b*f^2,a*f^2,d*e*f,e^3,d*e^2,b*e^2,a*e^2,d^3,a*d^2,c^3,b*c^2,a*c^2,a*b*c,b^3,a*b^2)

    i7 : C / codim

    o7 = {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9}

    o7 : List

    i8 : C / degree

    o8 = {1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 82}

    o8 : List

The corresponding list of associated prime ideals is cached and can be obtained by using associatedPrimes(Ideal).

    i9 : associatedPrimes I / print;
    ideal (i, h, g, f, e, d)
    ideal (i, h, g, f, c, b*d + a*e)
    ideal (i, h, g, e, b, c*d + a*f)
    ideal (i, h, g, d, a, c*e + b*f)
    ideal (i, h, g, c, b, a)
    ideal (i, h, f, e, c, b)
    ideal (i, g, f, d, c, a)
    ideal (i, f, e, d, c, b*g + a*h)
    ideal (i, f, c, b, a, e*g + d*h)
    ideal (h, g, e, d, b, a)
    ideal (h, f, e, d, b, c*g + a*i)
    ideal (h, e, c, b, a, f*g + d*i)
    ideal (g, f, e, d, a, c*h + b*i)
    ideal (g, d, c, b, a, f*h + e*i)
    ideal (f, e, d, c, b, a)
    ideal (i, h, g, f, e, d, c, b, a)

## Caveat

The ground ring must be a prime field.

## See also

- primaryDecomposition(Module) -- irredundant primary decomposition of a module
- associatedPrimes(Ideal) -- find associated primes
- radical -- the radical of an ideal
- minimalPrimes -- minimal primes of an ideal
- topComponents -- compute top dimensional component of an ideal or module
- removeLowestDimension -- remove components of lowest dimension

## Ways to use primaryDecomposition:

- `primaryDecomposition(Ideal)`
- primaryDecomposition(Module) -- irredundant primary decomposition of a module
- `primaryDecomposition(Ring)` -- see primaryDecomposition(Module) -- irredundant primary decomposition of a module

## For the programmer

The object primaryDecomposition is a method function with options.

The source of this document is in /build/macaulay2-88fgJW/macaulay2-1.25.11+ds/M2/Macaulay2/packages/PrimaryDecomposition/doc.m2:750:0.