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 (= analyticSpread I), such that I is integrally dependent on J.
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 (missing documentation).
To say that I is integrally dependent on J means that JIk = Ik+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.
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 (- 38c - 45a - 32a*b - 3b + 48a*c + 6b*c, - 41c + 21a + 31a*b ------------------------------------------------------------------------ 2 3 2 2 + 4b - 34a*c - 30b*c, - 12c + 49a + 11a*b - 22b - 11a*c + 16b*c) o6 : Ideal of S |
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 |