Macaulay2 » Documentation
Packages » SimplicialComplexes :: complex(SimplicialComplex)
next | previous | forward | backward | up | index | toc

complex(SimplicialComplex) -- create the chain complex associated to a simplicial complex.

Synopsis

Description

Each abstract simplicial complex $\Delta$ determines a chain complex of free modules over its coefficient ring. For all integers $i$, the $i$-th module in this chain complex has a basis corresponding to the $i$-dimensional faces in the simplicial complex $\Delta$.

When the argument $\mathrm{Labels}$ has the default value, this method function constructs $\widetilde C(D;k)$, where $k$ is the coefficient ring of $\Delta$. The reduced homology of an abstract simplicial complex $\Delta$ is, by definition, the homology of this chain complex. We illustrate this method with a triangulation of the torus and Klein bottle.

i1 : S = QQ[a..g];
i2 : torus = smallManifold(2, 7, 6, S)

o2 = simplicialComplex | cfg afg beg aeg cdg bdg def bef adf bcf cde ace abd abc |

o2 : SimplicialComplex
i3 : C = complex torus

       1       7       21       14
o3 = QQ  <-- QQ  <-- QQ   <-- QQ
                               
     -1      0       1        2

o3 : Complex
i4 : fVector torus

o4 = {1, 7, 21, 14}

o4 : List
i5 : prune HH C

       2       1
o5 = QQ  <-- QQ
              
     1       2

o5 : Complex
i6 : assert(prune HH_1 C == QQ^2)
i7 : assert(prune HH_2 C == QQ^1)
i8 : prune HH torus

       2       1
o8 = QQ  <-- QQ
              
     1       2

o8 : Complex
i9 : R = ZZ[a..h];
i10 : Δ = kleinBottleComplex R

o10 = simplicialComplex | cgh agh cfh afh efg dfg aeg cdg bef adf bcf cde bde ace abd abc |

o10 : SimplicialComplex
i11 : C' = complex Δ

        1       8       24       16
o11 = ZZ  <-- ZZ  <-- ZZ   <-- ZZ
                                
      -1      0       1        2

o11 : Complex
i12 : C'.dd

             1                                    8
o12 = -1 : ZZ  <------------------------------- ZZ  : 0
                  | -1 -1 -1 -1 -1 -1 -1 -1 |

            8                                                                                    24
      0 : ZZ  <------------------------------------------------------------------------------- ZZ   : 1
                 | 1  1  1  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  |
                 | -1 0  0  0  0  0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  |
                 | 0  -1 0  0  0  0  0  -1 0  0  0  1  1  1  1  1  0  0  0  0  0  0  0  0  |
                 | 0  0  -1 0  0  0  0  0  -1 0  0  -1 0  0  0  0  1  1  1  0  0  0  0  0  |
                 | 0  0  0  -1 0  0  0  0  0  -1 0  0  -1 0  0  0  -1 0  0  1  1  0  0  0  |
                 | 0  0  0  0  -1 0  0  0  0  0  -1 0  0  -1 0  0  0  -1 0  -1 0  1  1  0  |
                 | 0  0  0  0  0  -1 0  0  0  0  0  0  0  0  -1 0  0  0  -1 0  -1 -1 0  1  |
                 | 0  0  0  0  0  0  -1 0  0  0  0  0  0  0  0  -1 0  0  0  0  0  0  -1 -1 |

            24                                                            16
      1 : ZZ   <------------------------------------------------------- ZZ   : 2
                  | -1 -1 0  0  0  0  0  0  0  0  0  0  0  0  0  0  |
                  | 1  0  -1 0  0  0  0  0  0  0  0  0  0  0  0  0  |
                  | 0  1  0  -1 0  0  0  0  0  0  0  0  0  0  0  0  |
                  | 0  0  1  0  -1 0  0  0  0  0  0  0  0  0  0  0  |
                  | 0  0  0  1  0  -1 0  0  0  0  0  0  0  0  0  0  |
                  | 0  0  0  0  1  0  -1 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  |
                  | -1 0  0  0  0  0  0  -1 0  0  0  0  0  0  0  0  |
                  | 0  -1 0  0  0  0  0  0  -1 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  0  0  0  0  1  0  1  0  0  0  0  0  0  |
                  | 0  0  0  0  0  0  0  0  0  0  -1 -1 0  0  0  0  |
                  | 0  0  -1 0  0  0  0  0  0  0  1  0  0  0  0  0  |
                  | 0  0  0  0  0  0  0  -1 0  0  0  0  -1 0  0  0  |
                  | 0  0  0  0  0  0  0  0  0  0  0  1  0  -1 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  0  -1 0  -1 0  0  0  0  0  |
                  | 0  0  0  -1 0  0  0  0  0  0  0  0  0  0  -1 0  |
                  | 0  0  0  0  0  0  0  0  0  0  0  -1 0  0  1  0  |
                  | 0  0  0  0  0  0  0  0  0  -1 0  0  0  0  0  -1 |
                  | 0  0  0  0  -1 0  0  0  0  0  0  0  0  0  0  1  |
                  | 0  0  0  0  0  0  0  0  0  0  0  0  0  0  -1 -1 |
                  | 0  0  0  0  0  -1 0  0  0  0  0  0  -1 0  0  0  |
                  | 0  0  0  0  0  0  -1 0  0  0  0  0  0  -1 0  0  |

o12 : ComplexMap
i13 : fVector Δ

o13 = {1, 8, 24, 16}

o13 : List
i14 : prune HH C'

o14 = cokernel | 2 |
               | 0 |
       
      1

o14 : Complex
i15 : prune HH Δ

o15 = cokernel | 2 |
               | 0 |
       
      1

o15 : Complex
i16 : assert(prune HH_1 C' == ZZ^1/ideal(2) ++ ZZ^1)

When the optional argument $\mathrm{Labels}$ is a list of monomials, corresponding to the vertices of $\Delta$, this method returns a chain complex of free modules over the ring containing monomial labels. Each face, or basis vector, is labelled by the least common multiple of the labels on its vertices. In other words, the chain complex associated to a labelled simplicial complex is the homogenization of the canonical chain complex associated to $\Delta$; see Chapter 4 in Miller-Sturmfels' Combinatorial Commutative Algebra or Section 55 in Irena Peeva's Graded Syzygies.

As the next example establishes, this approach can sometimes produce a minimal free resolution of a monomial ideal.

i17 : S = QQ[a..d];
i18 : Γ = simplicialComplex{a*b*c, b*c*d};
i19 : C = complex Γ

        1       4       5       2
o19 = QQ  <-- QQ  <-- QQ  <-- QQ
                               
      -1      0       1       2

o19 : Complex
i20 : C.dd

             1                        4
o20 = -1 : QQ  <------------------- QQ  : 0
                  | -1 -1 -1 -1 |

            4                           5
      0 : QQ  <---------------------- QQ  : 1
                 | 1  1  0  0  0  |
                 | -1 0  1  1  0  |
                 | 0  -1 -1 0  1  |
                 | 0  0  0  -1 -1 |

            5                  2
      1 : QQ  <------------- QQ  : 2
                 | -1 0  |
                 | 1  0  |
                 | -1 -1 |
                 | 0  1  |
                 | 0  -1 |

o20 : ComplexMap
i21 : R = QQ[x_0..x_3];
i22 : hC = complex(Γ, Labels => {x_0*x_1, x_3, x_1*x_2, x_0*x_2})

       1      4      5      2
o22 = R  <-- R  <-- R  <-- R
                            
      0      1      2      3

o22 : Complex
i23 : hC.dd

           1                                    4
o23 = 0 : R  <-------------------------------- R  : 1
                | x_0x_1 x_3 x_1x_2 x_0x_2 |

           4                                                5
      1 : R  <-------------------------------------------- R  : 2
                {2} | -x_3   -x_2 0       0       0    |
                {1} | x_0x_1 0    -x_1x_2 -x_0x_2 0    |
                {2} | 0      x_0  x_3     0       -x_0 |
                {2} | 0      0    0       x_3     x_1  |

           5                         2
      2 : R  <--------------------- R  : 3
                {3} | x_2  0    |
                {3} | -x_3 0    |
                {3} | x_0  x_0  |
                {3} | 0    -x_1 |
                {3} | 0    x_3  |

o23 : ComplexMap
i24 : prune homology hC

o24 = cokernel | x_3 x_1x_2 x_0x_2 x_0x_1 |
       
      0

o24 : Complex

By convention, the smallest nonzero term in the homogenized chain complex appears in homological degree $0$, rather than homological degree $-1$. This shift in homological degree changes the signs in the differentials.

The homogenization of the chain complex associated to an abstract simplicial complex does not always produce a free resolution. Reordering the labels in the previous example demonstrates this.

i25 : hC' = complex(Γ, Labels => {x_3, x_0*x_1, x_1*x_2, x_0*x_2})

       1      4      5      2
o25 = R  <-- R  <-- R  <-- R
                            
      0      1      2      3

o25 : Complex
i26 : hC'.dd

           1                                    4
o26 = 0 : R  <-------------------------------- R  : 1
                | x_3 x_0x_1 x_1x_2 x_0x_2 |

           4                                              5
      1 : R  <------------------------------------------ R  : 2
                {1} | -x_0x_1 -x_1x_2 0    0    0    |
                {2} | x_3     0       -x_2 -x_2 0    |
                {2} | 0       x_3     x_0  0    -x_0 |
                {2} | 0       0       0    x_1  x_1  |

           5                       2
      2 : R  <------------------- R  : 3
                {3} | x_2  0  |
                {3} | -x_0 0  |
                {3} | x_3  1  |
                {3} | 0    -1 |
                {3} | 0    1  |

o26 : ComplexMap
i27 : prune HH hC'

o27 = cokernel | x_3 x_1x_2 x_0x_2 x_0x_1 | <-- cokernel {3} | x_1 |
                                                 
      0                                         1

o27 : Complex

See also

Ways to use this method: