If M is a graded module over a ring S, then the S2-ification of M is \sum_{d \in ZZ} H^0((sheaf M)(d)), which may be computed as lim_{d->\infty} Hom(I_d,M), where I_d is any sequence of ideals contained in higher and higher powers of S_+. There is a natural restriction map f: M = Hom(S,M) \to Hom(I_d,M). We compute all this using the ideals I_d generated by the d-th powers of the variables in S.
Since the result may not be finitely generated (this happens if and only if M has an associated prime of dimension 1), we compute only up to a specified degree bound b. For the result to be correct down to degree b, it is sufficient to compute Hom(I,M) where I \subset (S_+)^{r-b}.
i1 : kk=ZZ/101 o1 = kk o1 : QuotientRing |
i2 : S = kk[a,b,c,d] o2 = S o2 : PolynomialRing |
i3 : M = truncate(3,S^1) o3 = image | d3 cd2 bd2 ad2 c2d bcd acd b2d abd a2d c3 bc2 ac2 b2c abc a2c b3 ab2 a2b a3 | 1 o3 : S-module, submodule of S |
i4 : betti matrix S2(0,M) 0 1 o4 = total: 1 20 0: 1 . 1: . . 2: . 20 o4 : BettiTally |
i5 : betti matrix S2(1,M) 0 1 o5 = total: 1 20 0: 1 . 1: . . 2: . 20 o5 : BettiTally |
i6 : M = S^1/intersect(ideal"a,b,c", ideal"b,c,d",ideal"c,d,a",ideal"d,a,b") o6 = cokernel | cd bd ad bc ac ab | 1 o6 : S-module, quotient of S |
i7 : prune source S2(0,M) o7 = cokernel | cd bd ad bc ac ab | 1 o7 : S-module, quotient of S |
i8 : prune target S2(0,M) o8 = cokernel {-1} | d c b 0 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 d c a 0 0 0 0 0 0 | {-1} | 0 0 0 0 0 0 d b a 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 c b a | 4 o8 : S-module, quotient of S |
At one time DE hoped that, if M were a module over the complete intersection R with residue field k, then the natural map from "complete" Ext module "(widehat Ext)_R(M,k)" to the the S2-ification of Ext_R(M,k) would be surjective; equivalently, if N were a sufficiently negative syzygy of M, then the first local cohomology module of Ext_R(M,k) would be zero. This is false, as shown by the following example:
i9 : S = ZZ/101[x_0..x_2]; |
i10 : ff = apply(3, i->x_i^2); |
i11 : R = S/ideal ff; |
i12 : M = cokernel matrix {{x_0, x_1*x_2}}; |
i13 : b = 5; |
i14 : Mb = prune syzygyModule(-b,M); |
i15 : E = prune evenExtModule Mb; |
i16 : S2map = S2(0,E); o16 : Matrix |
i17 : SE = prune target S2map; |
i18 : extra = prune coker S2map; |
i19 : KE = prune ker S2map; |
i20 : betti res(Mb, LengthLimit => 10) 0 1 2 3 4 5 6 7 8 9 10 o20 = total: 20 14 9 5 2 1 2 4 7 11 16 -6: 20 14 9 5 2 . . . . . . -5: . . . . . 1 1 1 1 1 1 -4: . . . . . . 1 3 6 10 15 o20 : BettiTally |
i21 : apply (5, i-> hilbertFunction(i, KE)) o21 = {20, 9, 2, 0, 0} o21 : List |
i22 : apply (5, i-> hilbertFunction(i, E)) o22 = {20, 9, 2, 2, 7} o22 : List |
i23 : apply (5, i-> hilbertFunction(i, SE)) o23 = {1, 1, 1, 2, 7} o23 : List |
i24 : apply (5, i-> hilbertFunction(i, extra)) o24 = {1, 1, 1, 0, 0} o24 : List |
Text S2-ification is related to computing cohomology and to computing integral closure; there are scripts in those packages that produce an S2-ification, but one takes a ring as argument and the other doesn't produce the comparison map.
The object S2 is a method function.