next | previous | forward | backward | up | top | index | toc | Macaulay2 website
TestIdeals :: testModule

testModule -- find the parameter test module of a reduced ring

Synopsis

Description

The function testModule computes the parameter test module of a ring $R$, returning a sequence with three elements: the parameter test submodule (as a submodule of the canonical module), the canonical module of which it is a subset, and the element (or elements) of the ambient polynomial ring that determines the Frobenius trace on the canonical module (see frobeniusTraceOnCanonicalModule).

i1 : R = ZZ/7[x,y,z]/(x^3 + y^3 + z^3);
i2 : testModule(R)

                                 18    15 3    12 6    9 9    6 12    3 15  
o2 = (ideal (z, y, x), ideal 1, x   - x  y  + x  y  - x y  + x y   - x y   +
     ------------------------------------------------------------------------
      18    15 3     12 3 3     9 6 3     6 9 3     3 12 3    15 3    12 6  
     y   - x  z  + 2x  y z  - 3x y z  - 3x y z  + 2x y  z  - y  z  + x  z  -
     ------------------------------------------------------------------------
       9 3 6    6 6 6     3 9 6    12 6    9 9     6 3 9     3 6 9    9 9  
     3x y z  - x y z  - 3x y z  + y  z  - x z  - 3x y z  - 3x y z  - y z  +
     ------------------------------------------------------------------------
      6 12     3 3 12    6 12    3 15    3 15    18
     x z   + 2x y z   + y z   - x z   - y z   + z  )

o2 : Sequence

The canonical module returned is always embedded as an ideal of $R$, and not of the ambient polynomial ring. Likewise, the parameter test module is viewed as a subideal of that ideal of $R$.

Because the ring in the example above is a Gorenstein ring, the ambient canonical module is the unit ideal. In contrast, the ring in the next example is not Gorenstein.

i3 : S = ZZ/3[x,y,u,v];
i4 : T = ZZ/3[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 : testModule(R)

                                       5     4 2 2      2 3 2    2 4 2    5 3
o7 = (ideal (v, u), ideal (v, u), x*y*u v + y u v  + x*y u v  + x u v  + y v 
     ------------------------------------------------------------------------
          3   3    2   2 3    2 2 4    3   4
     + x*y u*v  + x y*u v  + x y v  + x u*v )

o7 : Sequence

Note that the output in this case has the parameter test module equal to the canonical module, as it should be, since the ring is $F$-rational. Let us now consider a non-Gorenstein example that is not $F$-rational.

i8 : R = ZZ/5[x,y,z]/(y*z, x*z, x*y);
i9 : (testMod, canMod, u) = testModule(R)

              2   2   2                          8 4 4    4 8 4    4 4 8
o9 = (ideal (z , y , x ), ideal (y + z, x + z), x y z  + x y z  + x y z )

o9 : Sequence
i10 : testMod : canMod

o10 = ideal (z, y, x)

o10 : Ideal of R

This function can be used to compute parameter test ideals in Cohen-Macaulay rings, as an alternative to parameterTestIdeal.

i11 : S = ZZ/2[X_1..X_5];
i12 : E = matrix {{X_1, X_2, X_2, X_5}, {X_4, X_4, X_3, X_1}};

              2       4
o12 : Matrix S  <--- S
i13 : R = S/minors(2, E);
i14 : (testMod, canMod, u) = testModule(R);
i15 : testMod : canMod

o15 = ideal (X  + X , X , X )
              3    4   2   1

o15 : Ideal of R
i16 : parameterTestIdeal(R)

o16 = ideal (X  + X , X , X )
              3    4   2   1

o16 : Ideal of R

The function testModule can also be used to compute the parameter test module of a pair ($R, f^{ t}$), or ($R,f_1^{t_1}\cdots f_n^{t_n}$).

i17 : R = ZZ/7[x,y];
i18 : f = y^2 - x^3;
i19 : testModule(5/6, f)

o19 = (ideal (y, x), ideal 1, 1)

o19 : Sequence
i20 : testModule(5/7, f)

o20 = (ideal 1, ideal 1, 1)

o20 : Sequence
i21 : g = x^2 - y^3;
i22 : testModule({1/2, 1/2}, {f, g})

o22 = (ideal (y, x), ideal 1, 1)

o22 : Sequence

Sometimes it is convenient to specify the ambient canonical module, or the choice of element(s) that determines the Frobenius trace on the canonical module, across multiple calls of testModule. This can be done by using the options CanonicalIdeal and GeneratorList.

i23 : R = ZZ/5[x,y,z]/(x*y, y*z, z*x);
i24 : I = ideal(x - z, y - z);

o24 : Ideal of R
i25 : testModule(CanonicalIdeal => I)

               2   2   2                          8 4 4    4 8 4    4 4 8
o25 = (ideal (z , y , x ), ideal (y - z, x - z), x y z  + x y z  + x y z )

o25 : Sequence

Finally, the option FrobeniusRootStrategy is passed to any calls of frobeniusRoot, and the option AssumeDomain is used when computing a test element.

See also

Ways to use testModule :

For the programmer

The object testModule is a method function with options.