Macaulay2 » Documentation
Packages » PrimaryDecomposition :: strategies for computing primary decomposition
next | previous | forward | backward | up | index | toc

strategies for computing primary decomposition

Primary Decomposition of Modules

In this case, the only available strategy is similar to the Eisenbud-Huneke-Vasconcelos strategy and is implemented by Justin Chen. Optionally, it is possible to specify the strategy for finding the embedded components by passing

Strategy => Hybrid{strategy for getEmbeddedComponents}

where the strategy is one of "Hom", "Sat", or "Res". See primaryDecomposition(Module) for more information.

Primary Decomposition of Ideals

In this case, the strategy option value should be one of the following:

  • Monomial -- uses Alexander duality of a monomial ideal
  • Binomial -- finds a cellular resolution of a binomial ideal (see binomialPrimaryDecomposition)
  • Hybrid -- uses parts of the above two algorithms
  • ShimoyamaYokoyama -- uses the algorithm of Shimoyama-Yokoyama
  • EisenbudHunekeVasconcelos -- uses the algorithm of Eisenbud-Huneke-Vasconcelos
  • GTZ -- uses the algorithm of Gianni-Trager-Zacharias (NOT YET IMPLEMENTED)

The strategies are implemented as hooks, meaning that each strategy is attempted in the reverse order in which it was added until one is successful.

i1 : hooks(primaryDecomposition, Ideal)

o1 = {0 => (primaryDecomposition, Ideal, Strategy => Comodule)                 }
     {1 => (primaryDecomposition, Ideal, Strategy => EisenbudHunekeVasconcelos)}
     {2 => (primaryDecomposition, Ideal, Strategy => ShimoyamaYokoyama)        }
     {3 => (primaryDecomposition, Ideal, Strategy => Hybrid)                   }
     {4 => (primaryDecomposition, Ideal, Strategy => Monomial)                 }

o1 : NumberedVerticalList

Strategy => Monomial

This strategy only works for monomial ideals, and is automatically used for such ideals. See the chapter on "Monomial Ideals" in the Macaulay2 book.

i2 : Q = QQ[a..d]

o2 = Q

o2 : PolynomialRing
i3 : I = ideal(a^2*b,a*c^2,b*d,c*d^2);

o3 : Ideal of Q
i4 : primaryDecomposition(I, Strategy => Monomial)

                                                2              2   2        
o4 = {ideal (d, a), ideal (c, b), ideal (b, a, d ), ideal (d, c , a ), ideal
     ------------------------------------------------------------------------
          2   2
     (b, d , c )}

o4 : List

Strategy => EisenbudHunekeVasconcelos

See Direct methods for primary decomposition by Eisenbud, Huneke, and Vasconcelos, Invent. Math. 110, 207-235 (1992).

i5 : primaryDecomposition(I, Strategy => EisenbudHunekeVasconcelos)

                                                2              2   2        
o5 = {ideal (d, a), ideal (c, b), ideal (b, a, d ), ideal (d, c , a ), ideal
     ------------------------------------------------------------------------
          2   2
     (b, d , c )}

o5 : List

Strategy => ShimoyamaYokoyama

This strategy is the default for non-monomial ideals. See Localization and Primary Decomposition of Polynomial ideals by Shimoyama and Yokoyama, J. Symb. Comp. 22, 247-277 (1996).

i6 : primaryDecomposition(I, Strategy => ShimoyamaYokoyama)

                                                2              2   2        
o6 = {ideal (d, a), ideal (c, b), ideal (b, a, d ), ideal (d, c , a ), ideal
     ------------------------------------------------------------------------
          2   2
     (b, d , c )}

o6 : List

Strategy => Hybrid{associated primes strategy, localize strategy}

Uses a hybrid of the Eisenbud-Huneke-Vasconcelos and Shimoyama-Yokoyama strategies. To use this strategy, the field Strategy should be a list of two integers, indicating the strategy to use for finding associated primes and localizing, respectively.

Warning: Setting the second parameter to 1 works only if the ideal is homogeneous and equidimensional.

i7 : Q = QQ[x,y];
i8 : I = intersect(ideal(x^2), ideal(y^2))

            2 2
o8 = ideal(x y )

o8 : Ideal of Q
i9 : primaryDecomposition(I, Strategy => Hybrid{1,1})

             2         2
o9 = {ideal x , ideal y }

o9 : List
i10 : primaryDecomposition(I, Strategy => Hybrid{1,2})

              2         2
o10 = {ideal x , ideal y }

o10 : List
i11 : primaryDecomposition(I, Strategy => Hybrid{2,1})

              2         2
o11 = {ideal x , ideal y }

o11 : List
i12 : primaryDecomposition(I, Strategy => Hybrid{2,2})

              2         2
o12 = {ideal x , ideal y }

o12 : List