next | previous | forward | backward | up | top | index | toc | Macaulay2 website
ExactCouples :: Cellular chains as an E1 page

Cellular chains as an E1 page -- A spectral sequence construction of the usual cellular differential

One way to define the cellular chain complex of a CW-complex uses the spectral sequence associated to its skeletal filtration.

Consider, for example, an empty cube with its usual CW-structure: 8 vertices, 12 edges, and 6 faces. We depict the cube unfolded.

|   1 ________ 2
|    |        |
|    |        |
|    |        |
|    |________|________ 2
|   3|       4|        |
|    |        |        |
|    |        |        |
|    |________|________|________ 2
|   5        6|       8|        |
|             |        |        |
|             |        |        |
|             |________|________|
|            5        7|        |1
|                      |        |
|                      |        |
|                      |________|
|                     5          3

By introducing diagonals on every square facet (crudely indicated below), we obtain a simplicial complex with 8 vertices, 18 edges, and 12 faces.

|   1 ________ 2
|    |\       |
|    |   \    |
|    |      \ |
|    |________|________ 2
|   3|\      4|\       |
|    |   \    |   \    |
|    |      \ |      \ |
|    |________|________|________ 2
|   5        6|\      8|\       |
|             |   \    |   \    |
|             |      \ |      \ |
|             |________|________|
|            5        7|\       |1
|                      |   \    |
|                      |      \ |
|                      |________|
|                     5          3

The facets are now triangles. We list these, and use them to populate the lists of edges and vertices.

i1 : face2 = {{1,2,4},{1,3,4},{3,4,6},{3,5,6},{2,4,8},{4,6,8},{5,6,7},{6,7,8},
                           {1,2,8},{1,7,8},{1,3,7},{3,5,7}};
i2 : face1 = unique(flatten(apply(subsets({0,1,2},2), s-> apply(face2, f->f_s))));
i3 : face0 = unique(flatten(apply(subsets({0,1,2},1), s-> apply(face2, f->f_s))));

Here are the diagonal edges that we added

i4 : diags = {{1,4},{3,6},{4,8},{6,7},{1,8},{3,7}};

We now write the function that takes a simplex and returns the CW-skeleton to which it belongs. The vertices are in the 0-skeleton, and the faces are in the 2-skeleton, but the diagonal edges we added are not actually present in the 1-skeleton of the original CW-structure on the cube. So these edges have skeletal degree 2.

i5 : skel = f -> if #f != 2 then #f-1 else if member(f,diags) then 2 else 1;

Let t be the variable that's in charge of recording filtration degree. We build free modules for the 0-, 1-, and 2-chains for simplicial homology using the function skel to determine degrees:

i6 : R = ZZ[t]

o6 = R

o6 : PolynomialRing
i7 : free0 = R^(-apply(face0,skel))

      8
o7 = R

o7 : R-module, free
i8 : free1 = R^(-apply(face1,skel))

      18
o8 = R

o8 : R-module, free, degrees {7:1, 2, 1..2, 2, 1..2, 2:1, 2:2, 1}
i9 : free2 = R^(-apply(face2,skel))

      12
o9 = R

o9 : R-module, free, degrees {12:2}

The usual differential for simplicial chains must be modified by powers of t to maintain homogeneity. These powers appear when a simplex has a face of lower filtration degree.

i10 : omega = (a,b)->if isSubset(a,b) then (-1)^(position(b, v->not member(v,a))) * t^(skel(b)-skel(a)) else 0

o10 = omega

o10 : FunctionClosure
i11 : d12 = map(free1, free2, matrix table(face1,face2,omega))

o11 = {1} | t  0  0  0  0  0  0  0  t  0  0  0  |
      {1} | 0  t  0  0  0  0  0  0  0  0  t  0  |
      {1} | 0  t  t  0  0  0  0  0  0  0  0  0  |
      {1} | 0  0  0  t  0  0  0  0  0  0  0  t  |
      {1} | t  0  0  0  t  0  0  0  0  0  0  0  |
      {1} | 0  0  t  0  0  t  0  0  0  0  0  0  |
      {1} | 0  0  0  t  0  0  t  0  0  0  0  0  |
      {2} | 0  0  0  0  0  0  1  1  0  0  0  0  |
      {1} | 0  0  0  0  0  0  0  0  0  t  -t 0  |
      {2} | -1 -1 0  0  0  0  0  0  0  0  0  0  |
      {2} | 0  0  -1 -1 0  0  0  0  0  0  0  0  |
      {1} | 0  0  0  0  -t 0  0  0  t  0  0  0  |
      {2} | 0  0  0  0  1  -1 0  0  0  0  0  0  |
      {1} | 0  0  0  0  0  0  -t 0  0  0  0  t  |
      {1} | 0  0  0  0  0  t  0  -t 0  0  0  0  |
      {2} | 0  0  0  0  0  0  0  0  -1 -1 0  0  |
      {2} | 0  0  0  0  0  0  0  0  0  0  1  -1 |
      {1} | 0  0  0  0  0  0  0  t  0  t  0  0  |

              18       12
o11 : Matrix R   <--- R
i12 : d01 = map(free0, free1, matrix table(face0,face1,omega))

o12 = | -t -t 0  0  0  0  0  0   -t -t2 0   0  0   0  0  -t2 0   0  |
      | 0  t  -t -t 0  0  0  0   0  0   -t2 0  0   0  0  0   -t2 0  |
      | t  0  0  0  -t 0  0  0   0  0   0   -t 0   0  0  0   0   0  |
      | 0  0  t  0  t  -t 0  0   0  t2  0   0  -t2 0  0  0   0   0  |
      | 0  0  0  t  0  0  -t 0   0  0   0   0  0   -t 0  0   0   0  |
      | 0  0  0  0  0  t  t  -t2 0  0   t2  0  0   0  -t 0   0   0  |
      | 0  0  0  0  0  0  0  t2  t  0   0   0  0   t  0  0   t2  -t |
      | 0  0  0  0  0  0  0  0   0  0   0   t  t2  0  t  t2  0   t  |

              8       18
o12 : Matrix R  <--- R

We build the chain complex, shift it appropriately, and restack until it is a module for the ring $\ZZ[d,t]/d^2$.

i13 : sm = sequenceModule(R[d,Degrees=>{{-1}}]/d^2,{d12,d01,map(R^{},free0,{})});
i14 : sm = sm ** (ring sm)^{{-2,0}};
i15 : smm = restackModule({2,1},sm);
i16 : M = restackModule({1,1},smm)

o16 = cokernel {2, 2} | d  0  0  0  0  0  0  0  0  0  0  0  0  0  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, 2} | 0  d  0  0  0  0  0  0  0  0  0  0  0  0  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, 2} | 0  0  d  0  0  0  0  0  0  0  0  0  0  0  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, 2} | 0  0  0  d  0  0  0  0  0  0  0  0  0  0  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, 2} | 0  0  0  0  d  0  0  0  0  0  0  0  0  0  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, 2} | 0  0  0  0  0  d  0  0  0  0  0  0  0  0  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, 2} | 0  0  0  0  0  0  d  0  0  0  0  0  0  0  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, 2} | 0  0  0  0  0  0  0  d  0  0  0  0  0  0  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, 2} | 0  0  0  0  0  0  0  0  d  0  0  0  0  0  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, 2} | 0  0  0  0  0  0  0  0  0  d  0  0  0  0  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, 2} | 0  0  0  0  0  0  0  0  0  0  d  0  0  0  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, 2} | 0  0  0  0  0  0  0  0  0  0  0  d  0  0  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} | -t 0  0  0  0  0  0  0  -t 0  0  0  d  0  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  -t 0  0  0  0  0  0  0  0  -t 0  0  d  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  -t -t 0  0  0  0  0  0  0  0  0  0  0  d  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  0  0  -t 0  0  0  0  0  0  0  -t 0  0  0  d  0  0  0  0   0  0   0   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | -t 0  0  0  -t 0  0  0  0  0  0  0  0  0  0  0  d  0  0  0   0  0   0   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  -t 0  0  -t 0  0  0  0  0  0  0  0  0  0  0  d  0  0   0  0   0   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  0  -t 0  0  -t 0  0  0  0  0  0  0  0  0  0  0  d  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  -1 -1 0  0  0  0  0  0  0  0  0  0  0  d   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  0  0  0  -t t  0  0  0  0  0  0  0  0  0   d  0   0   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 2} | 1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0   0  d   0   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 2} | 0  0  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0   0  0   d   0  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  0  0  t  0  0  0  -t 0  0  0  0  0  0  0  0  0  0  0   0  0   0   d  0   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 2} | 0  0  0  0  -1 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0   0  0   0   0  d   0  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  0  0  0  0  t  0  0  0  0  -t 0  0  0  0  0  0  0  0   0  0   0   0  0   d  0  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  0  0  0  -t 0  t  0  0  0  0  0  0  0  0  0  0  0  0   0  0   0   0  0   0  d  0   0   0  0 0 0 0 0 0 0 0 |
               {1, 2} | 0  0  0  0  0  0  0  0  1  1  0  0  0  0  0  0  0  0  0  0   0  0   0   0  0   0  0  d   0   0  0 0 0 0 0 0 0 0 |
               {1, 2} | 0  0  0  0  0  0  0  0  0  0  -1 1  0  0  0  0  0  0  0  0   0  0   0   0  0   0  0  0   d   0  0 0 0 0 0 0 0 0 |
               {1, 1} | 0  0  0  0  0  0  0  -t 0  -t 0  0  0  0  0  0  0  0  0  0   0  0   0   0  0   0  0  0   0   d  0 0 0 0 0 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  t  t  0  0  0  0  0  0   t  t2  0   0  0   0  0  t2  0   0  d 0 0 0 0 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  -t t  t  0  0  0  0   0  0   t2  0  0   0  0  0   t2  0  0 d 0 0 0 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  -t 0  0  0  t  0  0  0   0  0   0   t  0   0  0  0   0   0  0 0 d 0 0 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  -t 0  -t t  0  0   0  -t2 0   0  t2  0  0  0   0   0  0 0 0 d 0 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  -t 0  0  t  0   0  0   0   0  0   t  0  0   0   0  0 0 0 0 d 0 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  -t -t t2  0  0   -t2 0  0   0  t  0   0   0  0 0 0 0 0 d 0 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  -t2 -t 0   0   0  0   -t 0  0   -t2 t  0 0 0 0 0 0 d 0 |
               {0, 0} | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0   0  0   0   -t -t2 0  -t -t2 0   -t 0 0 0 0 0 0 0 d |

      ZZ[d, t]                     /ZZ[d, t]\38
o16 : ---------module, quotient of |--------|
          2                        |    2   |
         d                         \   d    /

The module M records the simplicial chain complex of the (empty interior, faces triangulated) cube with t acting by the filtration inclusions coming from the usual CW structure of the empty cube.

To build the corresponding exact couple, use exactCouple.

i17 : couple = prune exactCouple 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

o17 = cokernel {5, 5} | e_1^2 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     0      |
               {4, 4} | 0     0      t_1 0   0   0   0   e_1^3 0     0     0     0     0   0   0   0   0   0   0   0     0     0     0     0     0     0     0     0      |
               {4, 4} | 0     0      0   t_1 0   0   0   0     e_1^3 0     0     0     0   0   0   0   0   0   0   0     0     0     0     0     0     0     0     0      |
               {4, 4} | 0     0      0   0   t_1 0   0   0     0     e_1^3 0     0     0   0   0   0   0   0   0   0     0     0     0     0     0     0     0     0      |
               {4, 4} | 0     0      0   0   0   t_1 0   0     0     0     e_1^3 0     0   0   0   0   0   0   0   0     0     0     0     0     0     0     0     0      |
               {4, 4} | 0     0      0   0   0   0   t_1 0     0     0     0     e_1^3 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     t_1 0   0   0   0   0   0   e_1^3 0     0     0     0     0     0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   t_1 0   0   0   0   0   0     e_1^3 0     0     0     0     0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   0   t_1 0   0   0   0   0     0     e_1^3 0     0     0     0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   0   0   t_1 0   0   0   0     0     0     e_1^3 0     0     0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   0   0   0   t_1 0   0   0     0     0     0     e_1^3 0     0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   0   0   0   0   t_1 0   0     0     0     0     0     e_1^3 0     0     0      |
               {2, 2} | 0     0      0   0   0   0   0   0     0     0     0     0     0   0   0   0   0   0   t_1 0     0     0     0     0     0     e_1^3 0     0      |
               {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     e_1^2 e_1t_1 |

                                                 14
o17 : ZZ[e , t ]-module, quotient of (ZZ[e , t ])
          1   1                           1   1
i18 : plotPages((-1..3,-1..3,1..2), prune @@ evaluateInDegree, 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
page 1, with differential of degree {-1, -1}:
+----++----+---+----+---+---+
|q=3 ||0   |0  |0   |0  |0  |
+----++----+---+----+---+---+
|    ||    |   |    |  6|   |
|q=2 ||0   |0  |0   |ZZ |0  |
+----++----+---+----+---+---+
|    ||    |   |  12|   |   |
|q=1 ||0   |0  |ZZ  |0  |0  |
+----++----+---+----+---+---+
|    ||    |  8|    |   |   |
|q=0 ||0   |ZZ |0   |0  |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|   |
|q=2 ||0   |0  |0  |ZZ |0  |
+----++----+---+---+---+---+
|q=1 ||0   |0  |0  |0  |0  |
+----++----+---+---+---+---+
|    ||    |  1|   |   |   |
|q=0 ||0   |ZZ |0  |0  |0  |
+----++----+---+---+---+---+
|q=-1||0   |0  |0  |0  |0  |
+----++----+---+---+---+---+
|    ||p=-1|p=0|p=1|p=2|p=3|
+----++----+---+---+---+---+

Page 1 consists of the CW-chains, and page 2 consists of the CW-homology, which is therefore isomorphic to the simplicial homology.

See also