next | previous | forward | backward | up | top | index | toc | Macaulay2 website
ExactCouples :: Mayer-Vietoris Spectral Sequence

Mayer-Vietoris Spectral Sequence -- A spectral sequence that assembles homology from an open cover

Let $X$ be a simplicial complex, and suppose $U_1, ..., U_n$ is an open cover of $X$ where each $U_i$ is itself a union of open stars, and moreover, each closed face of $X$ sits inside some $U_u$. The following code initializes one possible $X$ and cover.

i1 : Xfacets = {{1,2,3},{1,3,4},{1,4,5},{1,2,5},{2,3,6},{3,4,6},{4,5,6},{2,5,6},{1,6}};
i2 : Usets = {{1,2,3,4,5},{2,3,4,5,6},{1,2,6}};

In the example, $X$ is an octahedron with an extra segment connecting two antipodal points, 1 and 6. The open cover is the complement of 1, the complement of 6, and the union of the open stars around 1, 2, and 6.

i3 : Xfaces = k -> unique flatten apply(Xfacets, f -> subsets(f, k+1));
i4 : Xdim = max apply(Xfacets, f -> #f - 1);
i5 : Xfacelist = flatten apply(Xdim + 1, Xfaces);
i6 : MVfacets = flatten for f in Xfacelist list {f|select(Usets, us->isSubset(f,us))}

o6 = {{1, {1, 2, 3, 4, 5}, {1, 2, 6}}, {2, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6},
     ------------------------------------------------------------------------
     {1, 2, 6}}, {3, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}}, {4, {1, 2, 3, 4, 5},
     ------------------------------------------------------------------------
     {2, 3, 4, 5, 6}}, {5, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}}, {6, {2, 3, 4,
     ------------------------------------------------------------------------
     5, 6}, {1, 2, 6}}, {1, 2, {1, 2, 3, 4, 5}, {1, 2, 6}}, {1, 3, {1, 2, 3,
     ------------------------------------------------------------------------
     4, 5}}, {2, 3, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}}, {1, 4, {1, 2, 3, 4,
     ------------------------------------------------------------------------
     5}}, {3, 4, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}}, {1, 5, {1, 2, 3, 4, 5}},
     ------------------------------------------------------------------------
     {4, 5, {1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}}, {2, 5, {1, 2, 3, 4, 5}, {2, 3,
     ------------------------------------------------------------------------
     4, 5, 6}}, {2, 6, {2, 3, 4, 5, 6}, {1, 2, 6}}, {3, 6, {2, 3, 4, 5, 6}},
     ------------------------------------------------------------------------
     {4, 6, {2, 3, 4, 5, 6}}, {5, 6, {2, 3, 4, 5, 6}}, {1, 6, {1, 2, 6}}, {1,
     ------------------------------------------------------------------------
     2, 3, {1, 2, 3, 4, 5}}, {1, 3, 4, {1, 2, 3, 4, 5}}, {1, 4, 5, {1, 2, 3,
     ------------------------------------------------------------------------
     4, 5}}, {1, 2, 5, {1, 2, 3, 4, 5}}, {2, 3, 6, {2, 3, 4, 5, 6}}, {3, 4,
     ------------------------------------------------------------------------
     6, {2, 3, 4, 5, 6}}, {4, 5, 6, {2, 3, 4, 5, 6}}, {2, 5, 6, {2, 3, 4, 5,
     ------------------------------------------------------------------------
     6}}}

o6 : List
i7 : MVdim = max apply(MVfacets, f -> #f - 1)

o7 = 3
i8 : rowfilt = f -> #select(f,e->instance(e,ZZ)) - 1;
i9 : colfilt = f -> #select(f,e->not instance(e,ZZ)) - 1;
i10 : MVfaces = k -> if k == -1 then {{}} else select(unique flatten apply(MVfacets, f -> subsets(f, k+2)), (
              f -> (rowfilt(f) >= 0 and colfilt(f) >= 0)
              ));
i11 : R = ZZ[t];
i12 : chains = apply(1+MVdim,k->R^(-apply(MVfaces k, colfilt)))

        13   27   15
o12 = {R  , R  , R  , 0}

o12 : List
i13 : omega = (a,b)->if isSubset(a,b) then (-1)^(position(b, v->not member(v,a))) * t^(colfilt(b)-colfilt(a)) else 0;
i14 : diffs = apply(MVdim-1,k->map(chains#k, chains#(k+1), matrix table(MVfaces k, MVfaces (k+1),omega)));
i15 : sm = sequenceModule(R[D,Degrees=>{{-1}}]/D^2, (reverse diffs) | {map(R^{}, first chains, {})});
i16 : sm = sm ** (ring sm)^{{1-MVdim,0}};
i17 : smm = restackModule({2,1},sm);
i18 : print("pruning module");
pruning module
i19 : M = prune restackModule({1,1},smm);
i20 : print("computing couple");
computing couple
i21 : 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
i22 : plotPages((-1..(MVdim+1),-3..3,1..2), eid, 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  |0  |
+----++----+---+---+---+---+---+
|    ||    |   |   |  1|   |   |
|q=2 ||0   |0  |0  |ZZ |0  |0  |
+----++----+---+---+---+---+---+
|    ||    |   |  3|  1|   |   |
|q=1 ||0   |0  |ZZ |ZZ |0  |0  |
+----++----+---+---+---+---+---+
|    ||    |  3|  1|   |   |   |
|q=0 ||0   |ZZ |ZZ |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-1||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-2||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-3||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|    ||p=-1|p=0|p=1|p=2|p=3|p=4|
+----++----+---+---+---+---+---+

page 2, with differential of degree {-1, -2}:
+----++----+---+---+---+---+---+
|q=3 ||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=2 ||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|    ||    |   |   |  1|   |   |
|q=1 ||0   |0  |0  |ZZ |0  |0  |
+----++----+---+---+---+---+---+
|    ||    |  1|  1|   |   |   |
|q=0 ||0   |ZZ |ZZ |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-1||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-2||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|q=-3||0   |0  |0  |0  |0  |0  |
+----++----+---+---+---+---+---+
|    ||p=-1|p=0|p=1|p=2|p=3|p=4|
+----++----+---+---+---+---+---+

The q=0 row gives the sum of the homologies of the opens individually. Generally, row q is the sum of the homologies of the (q+1)-fold overlaps among the opens, with a rightward shift of q so that the total homology appears in columns on page infinity.