next | previous | forward | backward | up | top | index | toc | Macaulay2 website
ExactCouples :: derivedCouple

derivedCouple -- builds the derived couple of an exact couple

Synopsis

Description

Suppose the ring of M is the couple ring R[e, f].

Let S be the subring R[e^2, f]. Homogeneous elements of S are restricted to an index-two subgroup of the bidegrees of M; as an S-module, M splits as a direct sum of its even part and its odd part. We write A for the odd part and E for the even part. Multiplication by e induces maps from E to A and back again. Since M encodes an exact couple, we have

image(f : A --> A) = kernel(e : A --> E)

image(e : A --> E) = kernel(e : E --> A)

image(e : E --> A) = kernel(f : A --> A).

The derived couple then replaces A with image(f : A --> A) and E with ker(e^2 : E --> E) / im(e^2 : E --> E). Our grading convention is logical, if nonstandard. Since the differential on E is e^2, which the the composite E -e-> A -e-> E, we place A at the midpoint of the differential. Moreover, since the construction of the derived couple makes use of the first isomorphism theorem between the image and coimage of f, which therefore have equal claim to being A', we place A' at the midpoint of f. We keep E' in the same degrees.

This all works well, except that the degree of f must be divisible by 2 so that A' can live at its midpoint. The current implementation doubles all degrees of the input module so that these midpoints exist and are unique. In a future version of M2 that allows grading by a general abelian group, the user would be expected to supply a degree that doubles to the degree of f.

i1 : R = QQ[d,t,Degrees=>{{0,1},{1,0}}]/d^2;
i2 : declareGenerators(R,{a=>{0,0},b=>{0,0},c=>{0,0},ab=>{0,1},ac=>{0,1},bc=>{0,1}});
i3 : M = cospan(d*a+ab+ac, d*b-ab+bc, d*c-ac-bc, d*ab, d*ac, d*bc,
                t*bc, t^2*ac, t^3*ab, t^4*c, t^5*b, t^6*a);
i4 : Q = QQ[e_1,f_1,Degrees=>{{-1,1},{2,0}}];
i5 : E1 = exactCouple(Q, M)

o5 = cokernel {1, -1}  | e_1^2 e_1f_1 0 0   0     0    0 0   0     0 0     f_1^4 0 0   0     0 0     0 0   0 e_1^2 e_1f_1 0     0   0     0      0     0   0     0      0     0   0     0   |
              {2, 0}   | 0     0      0 f_1 0     0    0 0   0     0 0     0     0 0   0     0 0     0 0   0 0     0      e_1^3 f_1 0     0      0     0   0     0      0     0   0     0   |
              {5, -1}  | 0     0      0 0   e_1^2 f_1  0 0   0     0 0     0     0 0   0     0 0     0 0   0 0     0      0     0   e_1^2 e_1f_1 0     0   0     0      0     0   0     0   |
              {8, -2}  | 0     0      0 0   0     -e_1 0 f_1 e_1^2 0 0     0     0 0   0     0 0     0 0   0 0     0      0     0   0     0      e_1^3 f_1 0     0      0     0   0     0   |
              {7, -1}  | 0     0      0 0   0     0    0 0   0     0 e_1^2 -f_1  0 0   0     0 f_1^2 0 0   0 0     0      0     0   0     0      0     0   e_1^2 e_1f_1 0     0   0     0   |
              {10, -2} | 0     0      0 0   0     0    0 0   0     0 0     -e_1  0 f_1 e_1^2 0 0     0 0   0 0     0      0     0   0     0      0     0   0     0      e_1^3 f_1 0     0   |
              {12, -2} | 0     0      0 0   0     0    0 0   0     0 0     0     0 0   0     0 -e_1  0 f_1 0 0     0      0     0   0     0      0     0   0     0      0     0   e_1^3 f_1 |

                            7
o5 : Q-module, quotient of Q
i6 : expectExactCouple E1;
i7 : E2 = derivedCouple E1
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

o7 = cokernel {8, -2}  | 0     0      f_2 e_2^3 0   0     0     0   |
              {10, -2} | 0     0      0   0     f_2 e_2^3 0     0   |
              {12, -2} | 0     0      0   0     0   0     -e_2  f_2 |
              {2, -1}  | e_2^2 e_2f_2 0   0     0   0     f_2^4 0   |

                                                4
o7 : QQ[e , f ]-module, quotient of (QQ[e , f ])
         2   2                           2   2
i8 : expectExactCouple E2;

Caveat

See also

Ways to use derivedCouple:

For the programmer

The object derivedCouple is a method function.