Sometimes a module has multiple ways of being considered as a diagram. For example, set
$A = \QQ[a]/a^2$
$B = \QQ[b]/b^2$
$AB = A[b]/b^2$
$BA = B[a]/a^2$.
An $AB$-modules is then the same as a cochain complex of $A$-modules where the differential is named "b". It may be useful to recast this data as a cochain complex of $B$-modules with differential "a". This is certainly possible because the rings $AB$ and $BA$ are isomorphic. In fact, the isomorphism $\phi$ between these rings can be computed with restackRing, and the present function is then computed by
tensorFlat(phi, M)
For example, suppose we have an exact couple of $\QQ[x,y,z]$-modules, and we wish to evaluate it in degree $0$ to obtain an exact couple of $\QQ$-modules. Let's build an example couple
i1 : R = QQ[x,y,z]; |
i2 : p = y^2*z-x^3+17*z^3; |
i3 : filt = {module ideal(p^2), module ideal(p), R^1}; |
i4 : k = max({0} | apply(filt,regularity)); |
i5 : W = module ideal(x^k,y^k,z^k); |
i6 : couple = prune covariantExtCouple(W, filt) 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 o6 = cokernel {3, 5, -18} | e_1^2 e_1f_1 x3-y2z-17z3 0 (x3-y2z-17z3)e_1 0 0 0 z6 y6 x6 0 0 0 0 0 0 0 0 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, 3, -15} | 0 0 f_1 e_1^2 0 x3-y2z-17z3 0 (x3-y2z-17z3)e_1 0 0 0 -x3y2-y4z+34x3z2+17y2z3+578z5 z6 y6 x6 0 0 0 0 0 0 0 -x3z4-y2z5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {3, 1, -12} | 0 0 0 0 0 f_1 e_1^2 0 0 0 0 0 0 0 0 0 -x3y2-y4z+34x3z2+17y2z3+578z5 z6 y6 x6 0 0 0 0 0 0 0 0 -x3z4-y2z5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 4, -10} | 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 0 f_1 0 0 0 0 x3-y2z-17z3 0 0 y4+34y2z2+1156z4 0 0 -z4 0 0 0 -z5 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 2, -7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 0 0 f_1 0 0 x3-y2z-17z3 0 0 0 0 y4+34y2z2+1156z4 0 0 -z4 0 -z5 0 0 0 0 0 0 0 0 | {2, 4, -8} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 z2 y2 f_1 0 0 x3 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 2, -5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 z2 y2 f_1 x3 0 0 0 0 0 0 0 0 | {-1, 5, 0} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1^2 e_1f_1 x3-y2z-17z3 0 (x3-y2z-17z3)e_1 0 0 0 | {-1, 3, 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 0 0 0 0 0 0 0 0 0 0 f_1 e_1^2 0 x3-y2z-17z3 0 (x3-y2z-17z3)e_1 | {-1, 1, 6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 f_1 e_1^2 0 | 10 o6 : R[e , f ]-module, quotient of (R[e , f ]) 1 1 1 1 |
We wish to evaluate this couple in $(x,y,z)$-degree 0, obtaining another couple. However, the function evaluateInDegree always eliminates the outermost level of the acting ring. So in this case, we can evaluate at an external bidegree of (ring couple). This will return one of the constituent modules of the couple. For example, the page entry $E_1^{1,2}$ may be computed
i7 : prune evaluateInDegree(2*{1,2},couple) o7 = cokernel {-10} | x3-y2z-17z3 0 z4 y4+34y2z2 0 | {-8} | 0 z2 -y2 1156y2 x3-y2z | 2 o7 : R-module, quotient of R |
but this is not the sort of evaluation we want.
In order to evaluate in $(x,y,z)$-degree 0, we must restack the module so that these variables are external and the couple variables are internal.
i8 : coupleRestacked = 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 f to allow access to subscripted variables based on it : debug with expression debug 3406 or with command line option --debug 3406 o8 = cokernel {-18, 3, 5} | e_1^2 e_1f_1 x3-y2z-17z3 0 e_1x3-e_1y2z-17e_1z3 0 0 0 z6 y6 x6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-15, 3, 3} | 0 0 f_1 e_1^2 0 x3-y2z-17z3 0 e_1x3-e_1y2z-17e_1z3 0 0 0 -x3y2-y4z+34x3z2+17y2z3+578z5 z6 y6 x6 0 0 0 0 0 0 0 -x3z4-y2z5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-12, 3, 1} | 0 0 0 0 0 f_1 e_1^2 0 0 0 0 0 0 0 0 0 -x3y2-y4z+34x3z2+17y2z3+578z5 z6 y6 x6 0 0 0 0 0 0 0 0 -x3z4-y2z5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {-10, 2, 4} | 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 0 f_1 0 0 0 0 x3-y2z-17z3 0 0 y4+34y2z2+1156z4 0 0 -z4 0 0 0 -z5 0 0 0 0 0 0 0 0 0 0 0 0 | {-7, 2, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 0 0 f_1 0 0 x3-y2z-17z3 0 0 0 0 y4+34y2z2+1156z4 0 0 -z4 0 -z5 0 0 0 0 0 0 0 0 | {-8, 2, 4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 z2 y2 f_1 0 0 x3 0 0 0 0 0 0 0 0 0 0 0 0 | {-5, 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 e_1 0 0 z2 y2 f_1 x3 0 0 0 0 0 0 0 0 | {0, -1, 5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1^2 e_1f_1 x3-y2z-17z3 0 e_1x3-e_1y2z-17e_1z3 0 0 0 | {3, -1, 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 0 0 0 0 0 0 0 0 0 0 f_1 e_1^2 0 x3-y2z-17z3 0 e_1x3-e_1y2z-17e_1z3 | {6, -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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 f_1 e_1^2 0 | 10 o8 : QQ[e , f ][x, y, z]-module, quotient of (QQ[e , f ][x, y, z]) 1 1 1 1 |
Now we may evaluate in degree zero with the desired effect.
i9 : coupleEvaluated = prune evaluateInDegree({0}, coupleRestacked) o9 = cokernel {3, 1} | 0 0 0 0 0 0 0 0 0 0 0 e_1^2 0 0 0 f_1 0 0 0 0 0 0 0 0 | {2, 2} | 0 0 f_1 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 0 0 0 0 0 0 | {2, 2} | 0 0 0 f_1 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 0 0 0 0 0 | {2, 2} | 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 0 0 0 0 | {2, 4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 e_1 0 0 0 0 0 0 f_1 e_1^2 | {2, 2} | 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 0 0 | {2, 2} | 0 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 0 | {2, 2} | 0 0 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 0 | {2, 2} | 0 0 0 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 0 | {2, 2} | 0 0 0 0 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 0 | {2, 2} | 0 0 0 0 0 0 0 0 0 0 f_1 0 0 0 0 0 0 0 0 0 0 e_1^3 0 0 | {-1, 5} | e_1^2 e_1f_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 12 o9 : QQ[e , f ]-module, quotient of (QQ[e , f ]) 1 1 1 1 |
From here, we easily view the spectral sequence, if we like
i10 : plotPages((-1..3,-1..3,1..3), prune @@ evaluateInDegree, coupleEvaluated) page 1, with differential of degree {1, -1}: +----++----+---+---+----+---+ |q=3 ||0 |0 |0 |0 |0 | +----++----+---+---+----+---+ | || | 1| 1| | | |q=2 ||0 |QQ |QQ |0 |0 | +----++----+---+---+----+---+ | || | | 9| | | |q=1 ||0 |0 |QQ |0 |0 | +----++----+---+---+----+---+ | || | | | 10| | |q=0 ||0 |0 |0 |QQ |0 | +----++----+---+---+----+---+ |q=-1||0 |0 |0 |0 |0 | +----++----+---+---+----+---+ | ||p=-1|p=0|p=1|p=2 |p=3| +----++----+---+---+----+---+ page 2, with differential of degree {1, -2}: +----++----+---+---+---+---+ |q=3 ||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ | || | 1| 1| | | |q=2 ||0 |QQ |QQ |0 |0 | +----++----+---+---+---+---+ |q=1 ||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ | || | | | 1| | |q=0 ||0 |0 |0 |QQ |0 | +----++----+---+---+---+---+ |q=-1||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ | ||p=-1|p=0|p=1|p=2|p=3| +----++----+---+---+---+---+ page 3, with differential of degree {1, -3}: +----++----+---+---+---+---+ |q=3 ||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ | || | 1| | | | |q=2 ||0 |QQ |0 |0 |0 | +----++----+---+---+---+---+ |q=1 ||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ |q=0 ||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ |q=-1||0 |0 |0 |0 |0 | +----++----+---+---+---+---+ | ||p=-1|p=0|p=1|p=2|p=3| +----++----+---+---+---+---+ |
The ring of M must be restackable: each level may only introduce relations among the most-recent variables.
The object restackModule is a method function.