Given a ring $R$ with canonical module $\omega$, this function computes the image of $F^e_* \omega \to \omega$ for $e >> 0$. This image is sometimes called the HSLG module (named for Hartshorne-Speiser, Lyubeznik, and Gabber), and it roughly tells us where a ring is non-$F$-injective. It can also be used to compute the maximal $F$-pure sub-Cartier module of a given rank-1 Cartier module (represented as an ideal). The name of the function is based on this interpretation.
Specifically, this function returns a sequence (FPMod, canMod, frobTrace, count), where canMod is a canonical module of the ring (expressed as an ideal), FPMod is the HSLG module, given as a submodule of canMod, frobTrace is a list of elements of the ambient polynomial ring representing the trace of Frobenius on the canonical module, and count is the number of times the trace of Frobenius was computed before the image stabilized, sometimes called the HSLG number of the canonical module as a Cartier module.
i1 : R = ZZ/7[x,y,z]/(x^5 + y^5 + z^5); |
i2 : (FPMod, canMod, frobTrace, count) = FPureModule(R); |
i3 : canMod --the ambient canonical module o3 = ideal 1 o3 : Ideal of R |
i4 : FPMod --the F-pure submodule of the canonical module 3 2 2 2 2 3 2 2 3 o4 = ideal (z , y*z , x*z , y z, x*y*z, x z, y , x*y , x y, x ) o4 : Ideal of R |
i5 : frobTrace --the element representing trace of Frobenius 30 25 5 20 10 15 15 10 20 5 25 30 25 5 20 5 5 o5 = {x - x y + x y - x y + x y - x y + y - x z + 2x y z ------------------------------------------------------------------------ 15 10 5 10 15 5 5 20 5 25 5 20 10 15 5 10 - 3x y z - 3x y z + 2x y z - y z + x z - 3x y z - ------------------------------------------------------------------------ 10 10 10 5 15 10 20 10 15 15 10 5 15 5 10 15 15 15 x y z - 3x y z + y z - x z - 3x y z - 3x y z - y z ------------------------------------------------------------------------ 10 20 5 5 20 10 20 5 25 5 25 30 + x z + 2x y z + y z - x z - y z + z } o5 : List |
i6 : count --how many times it took until the image stabilized o6 = 2 |
Sometimes it is convenient to specify the ambient canonical module across multiple calls of FPureModule. This can be done by using the option CanonicalIdeal. One can also pass it something other than the canonical module as well (for example, a submodule of the canonical module).
Likewise, one can use the GeneratorList option to specify the dual Frobenius action on the canonical module (or ideal playing the role of the canonical module).
In the following example, the non-$F$-pure ideal of a $\mathbb{Q}$-Gorenstein ring is computed by hijacking this functionality.
i7 : T = ZZ/7[a,b]; |
i8 : S = ZZ/7[x,y,z,w]; |
i9 : f = map(T, S, {a^3, a^2*b, a*b^2, b^3}); o9 : RingMap T <--- S |
i10 : R = S/(ker f); |
i11 : J = ideal 1_R; o11 : Ideal of R |
i12 : u = QGorensteinGenerator(1, R); |
i13 : FPureModule(CanonicalIdeal => J, GeneratorList => {u}) 2 6 12 3 4 13 3 5 11 4 3 12 5 13 o13 = (ideal 1, ideal 1, {x y z + x y z + x y z w + x y z w + x y*z w ----------------------------------------------------------------------- 12 6 2 3 6 9 2 4 4 10 2 5 2 11 2 6 12 2 13 4 3 + y z w + x y z w + x y z w + x y z w + x z w + y z w + ----------------------------------------------------------------------- 11 5 3 2 9 6 3 4 5 8 3 5 3 9 3 6 10 3 12 3 4 x*y z w + x y z w + x y z w + x y z w + x y*z w + x*y z w + ----------------------------------------------------------------------- 2 10 4 4 3 8 5 4 4 6 6 4 5 4 7 4 6 2 8 4 7 9 4 x y z w + x y z w + x y z w + x y z w + x y z w + x z w + ----------------------------------------------------------------------- 13 5 2 11 2 5 3 9 3 5 4 7 4 5 5 5 5 5 6 3 6 5 x*y z*w + x y z w + x y z w + x y z w + x y z w + x y z w + ----------------------------------------------------------------------- 7 7 5 2 12 6 3 10 6 4 8 2 6 5 6 3 6 6 4 4 6 x y*z w + x y w + x y z*w + x y z w + x y z w + x y z w + ----------------------------------------------------------------------- 7 2 5 6 8 6 6 4 9 7 5 7 7 6 5 2 7 7 3 3 7 8 4 7 x y z w + x z w + x y w + x y z*w + x y z w + x y z w + x y*z w ----------------------------------------------------------------------- 6 6 8 7 4 8 8 2 2 8 9 3 8 8 3 9 9 9 10 10 + x y w + x y z*w + x y z w + x z w + x y w + x y*z*w + x w }, ----------------------------------------------------------------------- 0) o13 : Sequence |
Additionally, one can specify a pair ($R$, $f^{ t}$), as long as $t$ is a rational number with a denominator prime to the characteristic of the ring.
i14 : R = ZZ/7[x,y]; |
i15 : M = FPureModule(5/6, y^2 - x^3); |
i16 : M#1 -- the canonical module o16 = ideal 1 o16 : Ideal of R |
i17 : M#0 -- the F-pure submodule o17 = ideal 1 o17 : Ideal of R |
i18 : N = FPureModule(9/10, y^2 - x^3); |
i19 : N#0 -- the F-pure submodule o19 = ideal (y, x) o19 : Ideal of R |
Finally, one can specify a pair ($R$, $f_1^{t_1}\cdots f_n^{t_n}$), even when $R$ is not regular (although $R$ is required to be $\mathbb{Q}$-Gorenstein, with index not divisible by the characteristic).
i20 : R = ZZ/3[x,y,z]/(x^2 - y*z); |
i21 : f = y; |
i22 : g = z; |
i23 : FPureModule({1/2, 1/2, 1/2}, {y, z, y + z}) 4 2 2 2 o23 = (ideal (z, y, x), ideal 1, {x + x y*z + y z }, 1) o23 : Sequence |
The option FrobeniusRootStrategy is passed to internal frobeniusRoot calls.
The object FPureModule is a method function with options.