Let Rbar = R/(f1..fc), a complete intersection of codimension c, and let M,N be Rbar-modules. We assume that the pushForward of M to R has finite free resolution. The script then computes the total Ext(M,N) as a module over S = kk(s_1..s_c,gens R), using EisenbudShamashTotal.
If Check => true, then the result is compared with the built-in global Ext written by Avramov and Grayson (but note the difference, explained below).
If Lift => false the result is returned over and extension of Rbar; if Lift => true the result is returned over and extension of R.
If Grading => 2, the default, then the result is bigraded (this is necessary when Check=>true
The default Variables => symbol "s" gives the new variables the name s_i, i=0..c-1. (note that the builtin Ext uses X_1..X_c.
On Some examples newExt is faster than Ext; on others it's slower.
A simple example: if R = k[x_1..x_n] and I is contained in the cube of the maximal ideal, then Ext(k,k) is a free S/(x_1..x_n) = k[s_0..s_(c-1)]- module with binomial(n,i) generators in degree i
i1 : n = 3;c=2;
|
i3 : R = ZZ/101[x_0..x_(n-1)]
o3 = R
o3 : PolynomialRing
|
i4 : Rbar = R/(ideal apply(c, i-> R_i^3))
o4 = Rbar
o4 : QuotientRing
|
i5 : Mbar = Nbar = coker vars Rbar
o5 = cokernel | x_0 x_1 x_2 |
1
o5 : Rbar-module, quotient of Rbar
|
i6 : E = newExt(Mbar,Nbar)
o6 = cokernel {0, 0} | x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-2, -2} | 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 |
{-2, -2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 |
{-2, -2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 |
{-1, -1} | 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-1, -1} | 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-1, -1} | 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-3, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 |
ZZ / ZZ \
---[s ..s , x ..x ] |---[s ..s , x ..x ]|
101 0 1 0 2 |101 0 1 0 2 |8
o6 : --------------------module, quotient of |-------------------|
3 3 | 3 3 |
(x , x ) | (x , x ) |
0 1 \ 0 1 /
|
i7 : tally degrees E
o7 = Tally{{-1, -1} => 3}
{-2, -2} => 3
{-3, -3} => 1
{0, 0} => 1
o7 : Tally
|
i8 : annihilator E
o8 = ideal (x , x , x )
2 1 0
ZZ
---[s ..s , x ..x ]
101 0 1 0 2
o8 : Ideal of -------------------
3 3
(x , x )
0 1
|
An example where the built-in global Ext is hard to compare directly with our method of computation: I *guess* that the sign choices in the built-in amount essentially to a change of variable in the new variables, and spoil an easy comparison. But for example the bi-graded Betti numbers are equal. this seems to start with c=3.
i9 : setRandomSeed 0
o9 = 0
|
i10 : n = 3
o10 = 3
|
i11 : c = 3
o11 = 3
|
i12 : kk = ZZ/101
o12 = kk
o12 : QuotientRing
|
i13 : R = kk[x_0..x_(n-1)]
o13 = R
o13 : PolynomialRing
|
i14 : I = ideal apply(c, i->R_i^2)
2 2 2
o14 = ideal (x , x , x )
0 1 2
o14 : Ideal of R
|
i15 : ff = gens I
o15 = | x_0^2 x_1^2 x_2^2 |
1 3
o15 : Matrix R <-- R
|
i16 : Rbar = R/I
o16 = Rbar
o16 : QuotientRing
|
i17 : bar = map(Rbar, R)
o17 = map (Rbar, R, {x , x , x })
0 1 2
o17 : RingMap Rbar <-- R
|
i18 : K = coker vars Rbar
o18 = cokernel | x_0 x_1 x_2 |
1
o18 : Rbar-module, quotient of Rbar
|
i19 : Mbar = prune coker random(Rbar^2, Rbar^{-2,-2})
o19 = cokernel | x_0x_1+15x_0x_2+38x_1x_2 45x_0x_2+29x_1x_2 |
| 35x_0x_2-30x_1x_2 x_0x_1-10x_0x_2-22x_1x_2 |
2
o19 : Rbar-module, quotient of Rbar
|
i20 : ES = newExt(Mbar,K,Lift => true)
o20 = cokernel {0, 0} | x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_2 s_1 s_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{0, 0} | 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_2 s_1 s_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_0-11s_1-40s_2 -s_1 9s_1-23s_2 17s_1 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 45s_1-35s_2 38s_1 s_0-7s_1+15s_2 s_1 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 -10s_1-26s_2 s_0+49s_1-40s_2 34s_1+4s_2 9s_1-23s_2 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 50s_1-s_2 45s_1-35s_2 10s_1+26s_2 s_0-48s_1+15s_2 0 0 |
{-1, -2} | 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 s_0^2+42s_0s_1-30s_1^2-25s_0s_2-35s_1s_2+9s_2^2 0 |
{-1, -2} | 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 s_0^2+42s_0s_1-30s_1^2-25s_0s_2-35s_1s_2+9s_2^2 |
8
o20 : kk[s ..s , x ..x ]-module, quotient of (kk[s ..s , x ..x ])
0 2 0 2 0 2 0 2
|
i21 : S = ring ES
o21 = S
o21 : PolynomialRing
|
i29 : EEtoES = map(ring ES,ring EE, gens ring ES)
o29 = map (S, S', {s , s , s , x , x , x })
0 1 2 0 1 2
o29 : RingMap S <-- S'
|
i30 : EE' = coker EEtoES presentation EE
o30 = cokernel {0, 0} | x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_2 s_1 s_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{0, 0} | 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_2 s_1 s_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-1, -2} | 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 s_0^2+41s_0s_1-37s_1^2-14s_0s_2-29s_1s_2+45s_2^2 0 |
{-1, -2} | 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 s_0^2+41s_0s_1-37s_1^2-14s_0s_2-29s_1s_2+45s_2^2 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 0 0 0 s_0-18s_1-32s_2 -27s_1+25s_2 42s_1 -22s_1 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 0 0 0 23s_1-41s_2 s_0-42s_1+18s_2 -45s_1 -42s_1 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 0 0 0 -42s_2 22s_2 s_0-18s_1-32s_2 -27s_1+25s_2 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_2 x_1 x_0 45s_2 42s_2 23s_1-41s_2 s_0-42s_1+18s_2 0 0 |
8
o30 : S-module, quotient of S
|
i31 : H = Hom(EE',ES);
|
i32 : Q = positions(degrees target presentation H, i-> i == {0,0})
o32 = {8, 9, 10, 11}
o32 : List
|
i33 : f = sum(Q, p-> random (S^1, S^1)**homomorphism H_{p})
o33 = {0, 0} | -38 39 0 0 0 0 0 0 |
{0, 0} | -16 21 0 0 0 0 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 |
{-2, -3} | 0 0 0 0 0 0 0 0 |
{-1, -2} | 0 0 0 0 0 0 0 0 |
{-1, -2} | 0 0 0 0 0 0 0 0 |
o33 : Matrix ES <-- EE'
|