# 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