Given a normal Q-Gorenstein ring R, passing the ring simply computes the test ideal τ(R).
i1 : R = ZZ/5[x,y,z]/ideal(x^3+y^3+z^3);
|
i2 : testIdeal(R)
o2 = ideal (z, y, x)
o2 : Ideal of R
|
i3 : S = ZZ/5[x,y,z,w];
|
i4 : T = ZZ/5[a,b];
|
i5 : f = map(T, S, {a^3, a^2*b, a*b^2, b^3});
o5 : RingMap T <--- S
|
i6 : R = S/(ker f);
|
i7 : testIdeal(R)
o7 = ideal 1
o7 : Ideal of R
|
Given a normal Q-Gorenstein ring R, a rational number t ≥0 and a ring element f ∈R, we can also compute the test ideal τ(R, ft).
i8 : R = ZZ/5[x,y,z];
|
i9 : f = y^2 - x^3;
|
i10 : testIdeal(1/2, f)
o10 = ideal 1
o10 : Ideal of R
|
i11 : testIdeal(5/6, f)
o11 = ideal (y, x)
o11 : Ideal of R
|
i12 : testIdeal(4/5, f)
o12 = ideal (y, x)
o12 : Ideal of R
|
i13 : testIdeal(1, f)
3 2
o13 = ideal(x - y )
o13 : Ideal of R
|
i14 : R = ZZ/7[x,y,z];
|
i15 : f = y^2 - x^3;
|
i16 : testIdeal(1/2, f)
o16 = ideal 1
o16 : Ideal of R
|
i17 : testIdeal(5/6, f)
o17 = ideal (y, x)
o17 : Ideal of R
|
i18 : testIdeal(4/5, f)
o18 = ideal 1
o18 : Ideal of R
|
i19 : testIdeal(1, f)
3 2
o19 = ideal(x - y )
o19 : Ideal of R
|
It even works if the ambient ring is not a polynomial ring.
i20 : R = ZZ/11[x,y,z]/ideal(x^2-y*z);
|
i21 : f = y;
|
i22 : testIdeal(1/2, f)
o22 = ideal (y, x)
o22 : Ideal of R
|
i23 : testIdeal(1/3, f)
o23 = ideal 1
o23 : Ideal of R
|
Alternately, you can instead pass a list of rational numbers {t1, t2, ...} and a list of ring elements {f1, f2, ...}. In this case it will compute the test ideal τ(R, f1t1 f2t2 ...).
i24 : R = ZZ/7[x,y];
|
i25 : L = {x,y,(x+y)};
|
i26 : f = x*y*(x+y);
|
i27 : testIdeal({1/2,1/2,1/2}, L)
o27 = ideal 1
o27 : Ideal of R
|
i28 : testIdeal(1/2, f)
o28 = ideal 1
o28 : Ideal of R
|
i29 : testIdeal({2/3,2/3,2/3}, L)
o29 = ideal (y, x)
o29 : Ideal of R
|
i30 : testIdeal(2/3, f)
o30 = ideal (y, x)
o30 : Ideal of R
|
i31 : time testIdeal({3/4,2/3,3/5}, L)
-- used 0.0978275 seconds
o31 = ideal (y, x)
o31 : Ideal of R
|
i32 : time testIdeal(1/60, x^45*y^40*(x+y)^36)
-- used 0.185081 seconds
o32 = ideal (y, x)
o32 : Ideal of R
|
As above, frequently passing a list will be faster (as opposed to finding a common denominator and passing a single element) since the testIdeal can do things in a more intelligent way for such a list.