If I is an ideal in an affine ring (i.e. a quotient of a polynomial ring over a field), and if the characteristic of this field is large enough (see below), then this routine yields the radical of the ideal I. The method used is the Eisenbud-Huneke-Vasconcelos algorithm.
The algorithms used generally require that the characteristic of the ground field is larger than the degree of each primary component. In practice, this means that if the characteristic is something like 32003, rather than, for example, 5, the methods used will produce the radical of I. Of course, you may do the computation over QQ, but it will often run much slower. In general, this routine still needs to be tuned for speed.
i1 : R = QQ[x, y] o1 = R o1 : PolynomialRing |
i2 : I = ideal((x^2+1)^2*y, y+1) 4 2 o2 = ideal (x y + 2x y + y, y + 1) o2 : Ideal of R |
i3 : radical I 2 o3 = ideal (y + 1, x + 1) o3 : Ideal of R |
If I is a monomial ideal, a faster, combinatorial algorithm is used.
i4 : R = ZZ/101[a..d] o4 = R o4 : PolynomialRing |
i5 : I = intersect(ideal(a^2,b^2,c), ideal(a,b^3,c^2)) 2 2 3 2 o5 = ideal (c , a*c, a , b , a*b ) o5 : Ideal of R |
i6 : elapsedTime radical(ideal I_*, Strategy => Monomial) -- 0.000578315 seconds elapsed o6 = ideal (a, b, c) o6 : Ideal of R |
i7 : elapsedTime radical(ideal I_*, Unmixed => true) -- 0.0121779 seconds elapsed o7 = ideal (c, b, a) o7 : Ideal of R |
For another example, see PrimaryDecomposition.
Eisenbud, Huneke, Vasconcelos, Invent. Math. 110 207-235 (1992).
The current implementation requires that the characteristic of the ground field is either zero or a large prime (unless I is a monomial ideal).
The object radical is a method function with options.