The algorithm is based on the following result by Eisenbud-Huneke-Vasconcelos, in their 1993 Inventiones Mathematicae paper:
$\bullet$ codim $Ext^d(M,R) \geq d$ for all $d$
$\bullet$ If $P$ is an associated prime of $M$ of codimension $d :=$ codim $P > $ codim $M$, then codim $Ext^d(M,R) = d$ and the annihilator of $Ext^d(M,R)$ is contained in $P$
$\bullet$ If codim $Ext^d(M,R) = d$, then there really is an associated prime of codimension $d$.
i1 : R = QQ[x,y,z,a,b] o1 = R o1 : PolynomialRing |
i2 : J = intersect(ideal(x,y,z),ideal(a,b)) o2 = ideal (z*b, y*b, x*b, z*a, y*a, x*a) o2 : Ideal of R |
i3 : assPrimesHeight(J) o3 = {2, 3} o3 : List |
bigHeight works faster than using assPrimesHeight and then taking the maximum
The object assPrimesHeight is a method function.