minimalReduction takes an ideal I that is homogeneous or inhomogeneous (in the latter case the ideal is to be regarded as an ideal in the localization of the polynomial ring at the origin.). It returns an ideal $J$ contained in $I$, with a minimal number of generators such that $I$ is integrally dependent on $J$. This minimal number is called the analyticSpread of $I$.
This routine is probabilistic: $J$ is computed as the ideal generated by the right number of random linear combinations of the generators of $I$. However, the routine checks rigorously that the output ideal is a reduction, and tries probabilistically again if it is not. If it cannot find a minimal reduction after a certain number of tries, it returns an error. The number of tries defaults to 20, but can be set with the optional argument Tries.
To say that $I$ is integrally dependent on $J$ means that $JI^k = I^{k+1}$ for some non-negative integer $k$. The smallest $k$ with this property is called the reduction number of $I$, and can be computed with reductionNumber i.
See the book Huneke, Craig; Swanson, Irena: Integral closure of ideals, rings, and modules. London Mathematical Society Lecture Note Series, 336. Cambridge University Press, Cambridge, 2006. for further information.
i1 : kk = ZZ/101; |
i2 : S = kk[a..c]; |
i3 : m = ideal vars S; o3 : Ideal of S |
i4 : i = (ideal"a,b")*m+ideal"c3" 2 2 3 o4 = ideal (a , a*b, a*c, a*b, b , b*c, c ) o4 : Ideal of S |
i5 : analyticSpread i o5 = 3 |
i6 : minimalReduction i 3 2 2 3 2 o6 = ideal (- 10c + 24a + 36a*b + 19b - 30a*c + 19b*c, - 16c - 29a - ------------------------------------------------------------------------ 2 3 2 2 37a*b - 24b - 22a*c - 38b*c, - 18c + 39a + 40a*b - 47b + 34a*c - ------------------------------------------------------------------------ 39b*c) o6 : Ideal of S |
Note that this is inhomogeneous-- it is generated by 3 random linear combinations of the generators of i. There is no homogeneous ideal with just 3 generators on which i is integrally dependent.
i7 : f = gens i o7 = | a2 ab ac ab b2 bc c3 | 1 7 o7 : Matrix S <--- S |
i8 : for a from 0 to 3 do(jhom:=ideal (f*random(source f, S^{3-a:-2,a:-3})); print(i^6 == (i^5)*jhom)) false false false false |
It is possible that the ideal returned is not a minimal reduction, due to the probabilistic nature of the routine. This will be addressed in a future version of the package. The larger the size of the base field, the less likely this is to happen.
The object minimalReduction is a method function with options.