A routine to compute the stable set of associated prime ideals of a monomial ideal

In the paper On the stable set of associated prime ideals of a monomial ideal by Shamila Bayati, Juergen Herzog and Giancarlo Rinaldo, (section 2), the authors describe an algorithm to compute Ass(I) for a monomial ideal I. Here is a preprint of the article.

In this page we give an example of this computation by the routines that we implemented in Macaulay 2 which are downloadable from here. We refer to the article for an in-depth description of the algorithm.

In this page we give an example of this computation by the routines that we implemented in Macaulay 2 which are downloadable from here. We refer to the article for an in-depth description of the algorithm.

As done in the article we want to see if the prime ideal P=(a,b,c,e,f)⊂K[a,b,c,d,e,f] is in Ass(I) where I=(a3b2e,bc3d,b4de2f, ab2cf3). For this purpose we have to load the file isInAssInfinity.m2 and after defining the ambient ring, the ideal I and the set of generators of P, we call the function isInAssInfinity(P,I) that returns true or false. We show the input and the output in the console.


S=QQ[a..f];
I=monomialIdeal(a^3*b^2*e,b*c^3*d,b^4*d*e^2*f, a*b^2*c*f^3);
P={a,b,c,e,f};
isInAssInfinity(P,I)


true


Now we describe a way to compute all the prime ideals in Ass(I). Let Min(I)=Ass(rad(I)). Since rad(I)=rad(Ik) for all k, we have to consider all the monomial prime ideals P in K[a,b,c,d,e,f] such that there exists Q in Min(I) with P⊃Q. Hence it is useful to have a routine, called candidates(I), that calculates such candidates depending on the monomial ideal I. In the above example we get:

C=candidates(I)


{{b}, {a, b}, {b, c}, {a, b, c}, {a, d}, {b, d}, {a, b, d}, {a, c, d}, {b,
--------------------------------------------------------------------------
c, d}, {a, b, c, d}, {b, e}, {a, b, e}, {c, e}, {a, c, e}, {b, c, e}, {a,
--------------------------------------------------------------------------
b, c, e}, {a, d, e}, {b, d, e}, {a, b, d, e}, {c, d, e}, {a, c, d, e}, {b,
--------------------------------------------------------------------------
c, d, e}, {a, b, c, d, e}, {b, f}, {a, b, f}, {a, c, f}, {b, c, f}, {a, b,
--------------------------------------------------------------------------
c, f}, {a, d, f}, {b, d, f}, {a, b, d, f}, {a, c, d, f}, {b, c, d, f}, {a,
--------------------------------------------------------------------------
b, c, d, f}, {b, e, f}, {a, b, e, f}, {c, e, f}, {a, c, e, f}, {b, c, e,
--------------------------------------------------------------------------
f}, {a, b, c, e, f}, {d, e, f}, {a, d, e, f}, {b, d, e, f}, {a, b, d, e,
--------------------------------------------------------------------------
f}, {c, d, e, f}, {a, c, d, e, f}, {b, c, d, e, f}, {a, b, c, d, e, f}}


Then we scan within the candidates the ones that are in Ass(I).

scan(C, P-> if isInAssInfinity(P,I) then print P);


{b}
{b, c}
{a, b, c}
{a, d}
{b, d}
{a, c, d}
{a, b, c, d}
{c, e}
{a, c, e}
{b, c, e}
{a, c, f}
{a, b, c, f}
{a, d, f}
{a, c, d, f}
{a, b, c, d, f}
{c, e, f}
{a, c, e, f}
{a, b, c, e, f}
{d, e, f}