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.240736 seconds o23 = ideal (y, x) o23 : Ideal of R |
i24 : time testIdeal(1/60, x^45*y^40*(x + y)^36) -- used 0.336351 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.