The exact couples described in Exact couples for Tor and Ext are functorial in a sense that we explain here.
As a basic first example, suppose we have two R-modules, $X$ and $Y$, two submodules $A \subseteq X$ and $B \subseteq Y$, and a map $g : X \to Y$ with $g(A) \subseteq B$.
Fix some other R-module W. Applying Hom(W,-), we obtain two long exact sequences in Ext
$0 \to Hom(W,A) \to Hom(W,X) \to Hom(W,X/A) \to Ext^1(W,A) \to \cdots $
$0 \to Hom(W,B) \to Hom(W,Y) \to Hom(W,Y/B) \to Ext^1(W,B) \to \cdots $
and downwards maps induced by $g$ that give a commuting ladder.
The pages Exact couples for Tor and Ext and covariantExtCouple explain how to build each row of this ladder individually, but how can we obtain the downward maps?
In brief, we encode the action of g by introducing a ring R[g] and reformulate the ladder as a long exact sequence over this larger ring. Each vertical rung becomes a snippet of a graded R[g]-module (since there are two rows, we only care about g-degrees 0 and 1). So the final output is a long exact sequence of R[g]-modules recording the two sequences in degrees 0 and 1 and the map as multiplication by g.
Shapiro's lemma allows us to compute this new sequence in terms of a single covariant Ext couple over R[g]. Specifically, we replace W with an appropriate R[g]-module W', and replace X, Y, A, B with a single R[g][t]-module M encoding their comparison maps, and then call covariantExtCouple(W',M).
A small example
Set R = $\QQ[z]$, and build the commuting square
| A - - t - -> X | | | | g g | | | | v v | B - - t - -> Y |
by giving a presentation over the ring R[g][t], placing A in bidegree $(0,0)$. The example square we have in mind:
| cokernel {3} | z13 | - z^2 -> cokernel {1} | z15 | | | | | z z | | | | v v | cokernel {2} | z6 | - x^2 -> cokernel {0} | z8 | |
Building it is a matter of naming generators, specifying degrees, and imposing relations.
i1 : R = QQ[z]; S = R[g][t]; declareGenerators(S,{a=>{0,0,3},x=>{1,0,1},b=>{0,1,2},y=>{1,1,0}}); |
i4 : M = cospan(z^13*a,z^15*x,z^6*b,z^8*y,g*a-z*b,g*x-z*y,t*a-z^2*x,t*b-z^2*y); isHomogeneous M o5 = true |
i6 : (dt, dg) = degree \ (S_0, S_1); |
i7 : {A,X,B,Y} = (deg -> prune eid({deg#1},eid({deg#0},M))) \ ({0,0},dt,dg,dt+dg); |
i8 : netList {{A, X}, {B, Y}} +--------------------+--------------------+ o8 = |cokernel {3} | z13 ||cokernel {1} | z15 || +--------------------+--------------------+ |cokernel {2} | z6 | |cokernel | z8 | | +--------------------+--------------------+ |
We also need another module W.
i9 : W = R^1 / (R_0^10); |
Since R[g] is projective as an R-module, Shapiro's lemma applies, and Ext can be computed over R[g] if we replace W with its extension.
i10 : W' = extensionInDegree({0}, coefficientRing S, W) o10 = cokernel | z10 | 1 o10 : R[g]-module, quotient of (R[g]) |
And now we can build the couple.
i11 : couple = prune covariantExtCouple(W',M) warning: clearing value of symbol t to allow access to subscripted variables based on it : debug with expression debug 5504 or with command line option --debug 5504 o11 = cokernel {1, 3, 0, -9} | -g 0 e_1^2 0 -z2 0 -zg 0 z2e_1 zge_1 e_1t_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 3, 1, -10} | z 0 0 e_1^2 0 0 0 0 0 0 0 e_1t_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 1, 0, -7} | 0 -g 0 0 t_1 e_1^2 0 0 0 0 0 0 z5g 0 0 0 0 -z8 0 0 0 0 0 0 0 0 0 | {1, 1, 1, -8} | 0 z 0 0 0 0 t_1 e_1^2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-1, 3, 1, 0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1^2 -z2 0 ze_1 0 e_1t_1 0 0 0 0 0 0 0 0 | {-1, 1, 1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 t_1 e_1^2 0 0 0 0 0 0 -z4 0 z6 0 0 | {0, 2, 0, 1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -g e_1 0 z2 zg t_1 0 0 0 0 0 | {-1, 1, 0, 6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g e_1^2 0 e_1t_1 z10 | 8 o11 : R[g][e , t ]-module, quotient of (R[g][e , t ]) 1 1 1 1 |
i12 : expectExactCouple couple |
To view the long exact sequence, we use excerptCouple.
i13 : excerptCouple({-2,2},4,couple) o13 = .- -> 0 0 ( \ 0 \ .- -> 0 - - -> 0 - - -> 0 - -' 0 ( 0 \ 0 \ .- -> cokernel {0, -9} | g 0 z10 | - - - - - - - - - -> cokernel {0, -9} | g z2 0 | - - -> 0 - -' {0, -9} | z2 0 |( {1, -10} | -z z8 0 | {0, -9} | 1 0 | {1, -10} | -z 0 z2 | {1, -10} | 0 z2 | \ {1, -10} | 0 1 | {0, -7} | 0 z8 | {1, -8} | 0 0 | \ .- -> cokernel {1, 0} | -z6 z8 0 | - - - - - - - - -> cokernel {1, 0} | -z z2 0 | - - - - - - - - - -> cokernel {0, -7} | g 0 z10 | - -' {1, 0} | z2 0 | ( {0, 6} | g 0 z10 | {1, 0} | 1 0 | {0, 1} | g 0 z2 | {1, -8} | -z z6 0 | {0, 6} | 0 1 | \ {0, 1} | 0 0 | 0 \ .- -> 0 - - -> 0 - - -> cokernel {1, 2} | -z4 z6 0 | - -' 0 ( 0 {0, 6} | g 0 z10 | \ \ 0 - -' |
Note that each entry in this long exact sequence is still an R[g]-module. This is by design! The long exact ladder is now encoded as an exact sequence of R[g]-modules whose degree 0 part and degree 1 part make up the two exact rows, and where the action of g gives the ladder's rungs.
Interpreting the output
As an example, we focus on the bottom nonzero entry in the middle column:
i14 : relHom = eid({0,2},couple) o14 = cokernel {1, 0} | -z z2 0 | {0, 1} | g 0 z2 | 2 o14 : R[g]-module, quotient of (R[g]) |
The degree $(0,2)$ comes from the conventions explained at covariantExtCouple, which also explains that relHom, when expanded along its g action, should look like this:
| Hom(W,X/A) | | | g | | | v | Hom(W,Y/B) |
By evaluating in degrees 0 and 1, we verify that relHom has these expected values.
i15 : (eid({0},relHom), Hom(W,coker map(X,A,{{z^2}}))) o15 = (cokernel {1} | z2 |, cokernel {1} | z2 |) o15 : Sequence |
i16 : (eid({1},relHom), Hom(W,coker map(Y,B,{{z^2}}))) o16 = (cokernel | z2 |, cokernel | z2 |) o16 : Sequence |
We can also compute the action of g on relHom in these degrees:
i17 : structureMap({0},{1},g,relHom) o17 = {0} | 0 | {1} | 1 | o17 : Matrix |
Contravariant functoriality
We give a similar example for contravariantExtCouple, evaluating on a cofiltration (surjections instead of inclusions). See Exact couples for Tor and Ext for more details on this way of using contravariantExtCouple.
Start with a commuting square of R-modules
| X - - t - ->> C | | | | g g | | | | v v | Y - - t - ->> D |
For convenience, set A = ker(t : X - -> C) and B = ker(t : Y - -> D). If Z is some other module, we have a ladder
| 0 - - -> Hom(D,Z) - - -> Hom(Y,Z) - - -> Hom(B,Z) - - -> Ext^1(D,Z) - - -> ... | | | | | | | g g g g g | | | | | | | v v v v v | 0 - - -> Hom(C,Z) - - -> Hom(X,Z) - - -> Hom(A,Z) - - -> Ext^1(C,Z) - - -> ... |
To use Shapiro's lemma in this setting, we would like to replace the R-module Z with an R[g]-module Z' that captures the action of g on these Ext groups. Such a Z' exists, but it is usually not finitely generated. In this case, Z' would have a copy of Z in every non-positive degree.
In order to maintain finite generation, we replace $R[g]$ with a quotient ring $R[g]/g^n$ for some $n$ large enough to accommodate the maps we care about. (In our case, we have a two-row ladder, so $R[g]/g^2$ suffices. If we had other action maps, a similar truncation trick would work for larger rings $R[g,h,...]$.)
Using the ring $R[g]/g^n$, we may take
Z' = extensionInDegree({-n+1},Z) |
since this module is isomorphic to the right Kan extension of Z to the ring $R[g]/g^n$; this module is also known as a "coinduced module".
A small example
Set $R=\QQ[z]$, and build the commuting square
| cokernel {5} | z6 | - - ->> cokernel {5} | z3 | | | | | z5 z5 | | | | v v | cokernel {0} | z10 | - - ->> cokernel {0} | z7 | |
As indicated above, since we only care about the map induced by the matrix
{0} | g | |
and not the action of g in other degrees, we may take n=2 since this number exceeds the row- and column-degrees of this matrix.
i18 : erase(symbol x); erase(symbol y); |
i20 : n = 2; |
i21 : R = QQ[z]; S = (R[g]/g^n)[t]; declareGenerators(S,{x=>{0,0,5},y=>{0,1,0}}); |
i24 : M = cospan(z^6*x,z^3*t*x,z^10*y,z^7*t*y,g*x-z^5*y,t^2*x,t^2*y); isHomogeneous M o25 = true |
i26 : (dt, dg) = degree \ (S_0, S_1); |
i27 : {X,C,Y,D} = (deg -> prune eid({deg#1},eid({deg#0},M))) \ ({0,0},dt,dg,dt+dg); |
i28 : netList {{X, C}, {Y, D}} +-------------------+-------------------+ o28 = |cokernel {5} | z6 ||cokernel {5} | z3 || +-------------------+-------------------+ |cokernel | z10 | |cokernel | z7 | | +-------------------+-------------------+ |
Set Z to be $\QQ[z]/z^7$, and build the coinduced/Hom/right-Kan-extension module Z'
i29 : Z = R^1 / (R_0^7); |
i30 : Z' = extensionInDegree({-n+1}, coefficientRing S, Z) o30 = cokernel {-1, 0} | z7 | R[g] /R[g]\1 o30 : -----module, quotient of |----| 2 | 2 | g \ g / |
We are now ready to build the couple using the larger ring.
i31 : couple = prune contravariantExtCouple(M,Z') warning: clearing value of symbol e to allow access to subscripted variables based on it : debug with expression debug 3903 or with command line option --debug 3903 warning: clearing value of symbol t to allow access to subscripted variables based on it : debug with expression debug 5504 or with command line option --debug 5504 o31 = cokernel {1, 1, 0, -11} | g -z e_1^2 0 0 0 e_1t_1 0 -z3 0 0 0 0 z3e_1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 1, -1, -10} | 0 g 0 e_1^2 0 0 0 e_1t_1 0 0 -z3 0 0 0 z3e_1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, 0, -8} | 0 0 0 0 g -z 0 0 t_1 e_1^2 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -1, -7} | 0 0 0 0 0 g 0 0 0 0 t_1 e_1^2 z2 0 0 0 0 0 0 0 z4 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 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -2, -5} | 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 e_1^2 0 e_1t_1 0 0 0 0 0 0 0 0 0 0 0 0 0 z5 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 0 | {-1, 1, 0, -4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g 0 e_1^2 ze_1 0 0 0 e_1t_1 0 -z3 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 0 0 0 0 0 0 0 | {0, 0, -1, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -g e_1 0 0 0 t_1 0 0 0 0 0 0 0 z3 z2g 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 | {-1, -1, 0, -1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g -z 0 0 t_1 e_1^2 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 0 0 0 0 0 0 | {-1, -1, -1, 0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 e_1^2 0 0 -z2 0 0 0 e_1t_1 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 | {5, 1, -3, -11} | 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 0 g -z 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 -z3 0 -z3e_1 0 0 0 0 0 0 z7 0 0 0 0 0 | {5, 1, -4, -10} | 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 0 0 g 0 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 -z3 0 0 z3e_1 0 0 0 0 0 z7 0 0 0 0 | {-1, -1, -2, 2} | 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 0 0 0 g 0 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 0 0 0 0 z5 0 0 0 0 0 0 0 0 | {5, -1, -3, -8} | 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 0 0 0 0 0 0 0 0 0 0 0 g -z 0 0 0 e_1^2 0 t_1 0 0 0 0 0 0 0 0 0 0 z7 0 0 0 | {5, -1, -4, -7} | 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 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 e_1^2 0 t_1 0 0 0 0 0 0 0 0 0 0 z7 0 0 | {5, 1, -4, -8} | 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g z ge_1 e_1^2 -ze_1 0 0 e_1t_1 0 0 0 0 0 z7 0 | {5, 1, -5, -7} | 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -g 0 0 ge_1 e_1^2 0 0 e_1t_1 0 0 0 0 0 z7 | R[g] /R[g] \16 o31 : ----[e , t ]-module, quotient of |----[e , t ]| 2 1 1 | 2 1 1 | g \ g / |
i32 : excerptCouple({-2,0},4,couple) o32 = .- -> cokernel {-3, -11} | g -z z7 0 0 0 | {-3, -11} | z3 0 | ( {-4, -10} | 0 g 0 z7 0 0 | {-4, -10} | 0 z3 | \ {-4, -8} | 0 0 0 0 z7 0 | {-4, -8} | -g -z | {-5, -7} | 0 0 0 0 0 z7 | {-5, -7} | 0 g | 0 \ .- -> 0 - - -> 0 - - -> cokernel {-3, -8} | g -z z7 0 | - -' 0 ( 0 {-4, -7} | 0 g 0 z7 | \ 0 \ .- -> cokernel {0, -11} | g -z 0 0 0 | - - - - - - - - - - -> cokernel {0, -11} | g -z z3 0 | - - -> 0 - -' {0, -11} | z3 0 0 |( {-1, -10} | 0 g z5 z7 0 | {0, -11} | 1 0 0 | {-1, -10} | 0 g 0 z3 | {-1, -10} | 0 z3 0 | \ {-2, -5} | 0 0 g 0 z5 | {-1, -10} | 0 1 0 | {-2, -5} | 0 0 1 | {0, -8} | 0 0 | {-1, -7} | 0 -z4 | {-2, -5} | 0 0 | \ .- -> cokernel {0, -4} | g -z4 0 0 | - - - - - - - - - - -> cokernel {0, -4} | g -z z3 0 | - - - - - - - - - - -> cokernel {0, -8} | g -z 0 0 | - -' {0, -4} | z3 0 0 | ( {-1, 0} | 0 g -z2 0 | {0, -4} | 1 0 0 | {-1, -3} | 0 g 0 z3 | {-1, -7} | 0 g z2 0 | {-1, 0} | 0 1 0 | \ {-2, 2} | 0 0 g z5 | {-1, -3} | 0 0 0 | {-2, -5} | 0 0 g z5 | {-2, 2} | 0 0 1 | 0 \ .- -> 0 - - -> 0 - - -> cokernel {0, -1} | g -z 0 0 | - -' 0 ( 0 {-1, 0} | 0 g -z2 0 | \ {-2, 2} | 0 0 g z5 | \ 0 - -' |
It may be alarming to see non-zero entries in positions that appear at the point in the sequence that should hold Ext^3. Fortunately, these entries disappear after evaluation at the two degrees $(0)$ and $(-1)$, which are the two long exact sequences we are trying to relate. (The degrees are negated because of contravariance. Alternatively, we could have set the degree of g to be -1)
To check this, we restack and evaluate to see both rows.
i33 : C = restackModule({2,1},couple) warning: clearing value of symbol e to allow access to subscripted variables based on it : debug with expression debug 3903 or with command line option --debug 3903 warning: clearing value of symbol t to allow access to subscripted variables based on it : debug with expression debug 5504 or with command line option --debug 5504 o33 = cokernel {0, 1, 1, -11} | g -z e_1^2 0 0 0 e_1t_1 0 -z3 0 0 0 0 z3e_1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-1, 1, 1, -10} | 0 g 0 e_1^2 0 0 0 e_1t_1 0 0 -z3 0 0 0 z3e_1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {0, 1, -1, -8} | 0 0 0 0 g -z 0 0 t_1 e_1^2 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-1, 1, -1, -7} | 0 0 0 0 0 g 0 0 0 0 t_1 e_1^2 z2 0 0 0 0 0 0 0 z4 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 0 0 0 0 0 0 0 0 0 0 0 0 | {-2, 1, -1, -5} | 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 e_1^2 0 e_1t_1 0 0 0 0 0 0 0 0 0 0 0 0 0 z5 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 0 | {0, -1, 1, -4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g 0 e_1^2 ze_1 0 0 0 e_1t_1 0 -z3 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 0 0 0 0 0 0 0 | {-1, 0, 0, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -g e_1 0 0 0 t_1 0 0 0 0 0 0 0 z3 z2g 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, -1, -1, -1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g -z 0 0 t_1 e_1^2 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 0 0 0 0 0 0 | {-1, -1, -1, 0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 e_1^2 0 0 -z2 0 0 0 e_1t_1 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 | {-3, 5, 1, -11} | 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 0 g -z 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 -z3 0 -z3e_1 0 0 0 0 0 0 z7 0 0 0 0 0 | {-4, 5, 1, -10} | 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 0 0 g 0 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 -z3 0 0 z3e_1 0 0 0 0 0 z7 0 0 0 0 | {-2, -1, -1, 2} | 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 0 0 0 g 0 0 0 0 0 0 e_1^2 0 0 0 0 e_1t_1 0 0 0 0 0 0 0 0 z5 0 0 0 0 0 0 0 0 | {-3, 5, -1, -8} | 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 0 0 0 0 0 0 0 0 0 0 0 g -z 0 0 0 e_1^2 0 t_1 0 0 0 0 0 0 0 0 0 0 z7 0 0 0 | {-4, 5, -1, -7} | 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 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 e_1^2 0 t_1 0 0 0 0 0 0 0 0 0 0 z7 0 0 | {-4, 5, 1, -8} | 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 g z e_1g e_1^2 -ze_1 0 0 e_1t_1 0 0 0 0 0 z7 0 | {-5, 5, 1, -7} | 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -g 0 0 e_1g e_1^2 0 0 e_1t_1 0 0 0 0 0 z7 | R[e , t ][g] /R[e , t ][g]\ 1 1 | 1 1 |16 o33 : -------------module, quotient of |------------| 2 | 2 | g \ g / |
i34 : C0 = evaluateInDegree({0},C) o34 = cokernel {1, 1, -11} | -z e_1^2 0 0 e_1t_1 0 -z3 0 0 0 0 z3e_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 1, -10} | 1 0 e_1^2 0 0 e_1t_1 0 0 -z3 0 0 0 z3e_1 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -8} | 0 0 0 -z 0 0 t_1 e_1^2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -7} | 0 0 0 1 0 0 0 0 t_1 e_1^2 z2 0 0 0 0 z4 0 0 0 0 0 0 0 0 0 0 | {-1, 1, -4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1^2 ze_1 0 0 e_1t_1 0 -z3 0 0 0 0 0 0 | {0, 0, -3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 e_1 0 0 t_1 0 0 0 0 z3 z2 0 | {-1, -1, -1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -z 0 0 t_1 e_1^2 0 0 0 0 0 | {-1, -1, 0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 e_1^2 -z2 0 0 e_1t_1 | 8 o34 : R[e , t ]-module, quotient of (R[e , t ]) 1 1 1 1 |
i35 : expectExactCouple C0 |
i36 : C1 = evaluateInDegree({-1},C) o36 = cokernel {1, 1, -10} | e_1^2 e_1t_1 -z3 0 0 z3e_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -7} | 0 0 t_1 e_1^2 z2 0 0 0 z4 0 0 0 0 0 0 0 0 0 0 0 | {1, -1, -5} | 0 0 0 0 1 0 e_1^2 e_1t_1 0 0 0 0 0 z5 0 0 0 0 0 0 | {0, 0, -3} | 0 0 0 0 0 0 0 0 e_1 t_1 0 0 0 0 z3 0 0 0 0 0 | {-1, -1, 0} | 0 0 0 0 0 0 0 0 0 0 e_1^2 0 -z2 0 0 e_1t_1 0 0 0 0 | {-1, -1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 e_1^2 0 e_1t_1 z5 | 6 o36 : R[e , t ]-module, quotient of (R[e , t ]) 1 1 1 1 |
i37 : expectExactCouple C1 |
i38 : excerptCouple({-2,0},4,C0) o38 = .- -> 0 0 ( \ 0 \ .- -> 0 - - -> 0 - - -> 0 - -' 0 ( 0 \ 0 \ .- -> cokernel {-11} | z6 | - - - - - - -> cokernel {-11} | z3 | - - -> 0 - -' {-11} | z3 |( {-11} | 1 | \ 0 \ .- -> cokernel {-4} | z6 | - - - - - - -> cokernel {-4} | z3 | - - -> cokernel {-8} | z3 | - -' {-4} | z3 |( {-4} | 1 | \ 0 \ .- -> 0 - - -> 0 - - -> cokernel {-1} | z3 | - -' 0 ( 0 \ \ 0 - -' |
i39 : excerptCouple({-2,0},4,C1) o39 = .- -> 0 0 ( \ 0 \ .- -> 0 - - -> 0 - - -> 0 - -' 0 ( 0 \ 0 \ .- -> cokernel {-10} | z7 | - - - - - - -> cokernel {-10} | z3 | - - -> 0 - -' {-10} | z3 |( {-10} | 1 | \ {-7} | -z4 | \ .- -> cokernel | z7 | - - -> cokernel {-3} | z3 | - - - - - - - -> cokernel {-7} | z7 | - -' | 1 | ( 0 \ 0 \ .- -> 0 - - -> 0 - - -> cokernel | z7 | - -' 0 ( 0 \ \ 0 - -' |
We can verify by recomputing these two sequences directly.
i40 : A = image map(X,,{{z^3}}); |
i41 : B = image map(Y,,{{z^7}}); |
i42 : contravariantExtLES(4,X,A,Z) warning: clearing value of symbol f to allow access to subscripted variables based on it : debug with expression debug 3406 or with command line option --debug 3406 o42 = .- -> 0 0 ( \ 0 \ .- -> 0 - - -> 0 - - -> 0 - -' 0 ( 0 \ 0 \ .- -> cokernel {-11} | z6 | - - - - - - -> cokernel {-11} | z3 | - - -> 0 - -' {-11} | z3 |( {-11} | 1 | \ 0 \ .- -> cokernel {-4} | z6 | - - - - - - -> cokernel {-4} | z3 | - - -> cokernel {-8} | z3 | - -' {-4} | z3 |( {-4} | 1 | \ 0 \ .- -> 0 - - -> 0 - - -> cokernel {-1} | z3 | - -' 0 ( 0 \ \ 0 - -' |
i43 : contravariantExtLES(4,Y,B,Z) warning: clearing value of symbol e to allow access to subscripted variables based on it : debug with expression debug 3903 or with command line option --debug 3903 warning: clearing value of symbol f to allow access to subscripted variables based on it : debug with expression debug 3406 or with command line option --debug 3406 o43 = .- -> 0 0 ( \ 0 \ .- -> 0 - - -> 0 - - -> 0 - -' 0 ( 0 \ 0 \ .- -> cokernel {-10} | z7 | - - - - - - -> cokernel {-10} | z3 | - - -> 0 - -' {-10} | z3 |( {-10} | 1 | \ {-7} | z4 | \ .- -> cokernel | z7 | - - -> cokernel {-3} | z3 | - - - - - - -> cokernel {-7} | z7 | - -' | 1 | ( 0 \ 0 \ .- -> 0 - - -> 0 - - -> cokernel | z7 | - -' 0 ( 0 \ \ 0 - -' |