Given a normal $\mathbb{Q}$-Gorenstein ring $R$, testIdeal(R) simply computes the test ideal \tau($R$).
i1 : R = ZZ/5[x,y,z]/(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 nonnegative rational number $t$ and an element $f$ of a normal $\mathbb{Q}$-Gorenstein ring $R$, testIdeal(t,f) computes the test ideal \tau($R$, $f^{ t}$).
i8 : R = ZZ/5[x,y,z]; |
i9 : f = y^2 - x^3; |
i10 : apply({1/2, 4/5, 5/6, 1}, t -> testIdeal(t, f) )
3 2
o10 = {ideal 1, ideal (y, x), ideal (y, x), ideal(x - y )}
o10 : List
|
i11 : R = ZZ/7[x,y,z]; |
i12 : f = y^2 - x^3; |
i13 : apply({1/2, 4/5, 5/6, 1}, t -> testIdeal(t, f) )
3 2
o13 = {ideal 1, ideal 1, ideal (y, x), ideal(x - y )}
o13 : List
|
The ring $R$ need not be a polynomial ring, as the next example illustrates.
i14 : R = ZZ/11[x,y,z]/(x^2 - y*z); |
i15 : testIdeal(1/2, y) o15 = ideal (y, x) o15 : Ideal of R |
i16 : testIdeal(1/3, y) o16 = ideal 1 o16 : Ideal of R |
Given nonnegative rational numbers $t_1, t_2, \ldots$ and ring elements $f_1, f_2, \ldots$, testIdeal(\{t_1,t_2,\ldots\},\{f_1,f_2,\ldots\}) computes the test ideal \tau($R$, $f_1^{t_1} f_2^{t_2}\cdots$).
i17 : R = ZZ/7[x,y]; |
i18 : L = {x, y, x + y};
|
i19 : f = x*y*(x + y); |
i20 : testIdeal({2/3, 2/3, 2/3}, L)
o20 = ideal (y, x)
o20 : Ideal of R
|
i21 : testIdeal(2/3, f) o21 = ideal (y, x) o21 : Ideal of R |
i22 : testIdeal({3/4, 2/3, 3/5}, L)
o22 = ideal (y, x)
o22 : Ideal of R
|
It is often more efficient to pass a list, as opposed to finding a common denominator and passing a single element, since testIdeal can do things in a more intelligent way for such a list.
i23 : time testIdeal({3/4, 2/3, 3/5}, L)
-- used 0.19293 seconds
o23 = ideal (y, x)
o23 : Ideal of R
|
i24 : time testIdeal(1/60, x^45*y^40*(x + y)^36)
-- used 0.314069 seconds
o24 = ideal (y, x)
o24 : Ideal of R
|
The option AssumeDomain (default value false) is used when finding a test element. The option FrobeniusRootStrategy (default value Substitution) is passed to internal frobeniusRoot calls.
When working in a $\mathbb{Q}$-Gorenstein ring $R$, testIdeal looks for a positive integer $N$ such that $N K_R$ is Cartier. The option MaxCartierIndex (default value $10$) controls the maximum value of $N$ to consider in this search. If the smallest such $N$ turns out to be greater than the value passed to MaxCartierIndex, then testIdeal returns an error.
The $\mathbb{Q}$-Gorenstein index can be specified by the user through the option QGorensteinIndex; when this option is used, the search for $N$ is bypassed, and the option MaxCartierIndex ignored.
The object testIdeal is a method function with options.