Chain Complexes Code

When we looked at the delta complex we got a chain of 'face maps' between each dimension and the next lower one. homology face maps

In homology we treat this as a chain of Abelian groups (more detail on the page here).

For implementation of co-chain see page here.

  chain and cochain

FriCAS Implementation

In our FriCAS Implementation 'ChainComplex' represents, not the faces at each dimension, but the maps between them. Each map is represented by a (not necessarily square) matrix. These matrices may have a width or a height of zero.

Since the chain starts and ends with zero (trivial group) then:

Creating Chain Complexes

Here are two ways to construct a chain complex:

Usually it is easier to construct a simplicial or delta complex first and then call chain function.

Here we construct a simplicial complex then call chain function:

(1) -> b1 := sphereSolid(2)$SimplicialComplexFactory(Integer)

   (1)  points 1..3
          (1,2,3)
                         Type: FiniteSimplicialComplex(Integer)
(2) -> chain(b1)

                  + 1    1    0 + + 1 +
                  |             | |   |
   (2)  [0  0  0],|- 1   0    1 |,|- 1|,[]
                  |             | |   |
                  + 0   - 1  - 1+ + 1 +
                                        Type: ChainComplex
We could alternatively construct from a list of matrices.  

Example 1 - Solid 2D circle.

(1) -> )expose DeltaComplex

   DeltaComplex is now explicitly exposed in frame frame1

(1) -> b1 := sphereSolid(2)$SimplicialComplexFactory(Integer)

   (1)  points 1..3
          (1,2,3)
          Type: FiniteSimplicialComplex(Integer)
(2) -> d1 := deltaComplex(b1)

   (2)
                2D:[[1,- 2,3]]
         1D:[[1,- 2],[1,- 3],[2,- 3]]
               0D:[[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(3) -> c1 := chain(d1)

                  + 1    1    0 + + 1 +
   (3)  [0  0  0],|- 1   0    1 |,|- 1|,[]
                  + 0   - 1  - 1+ + 1 +
                              Type: ChainComplex

Example2 - Solid 3D Sphere.

(4) -> b2 := sphereSolid(3)$SimplicialComplexFactory(Integer)

   (4)  points 1..4
         (1,2,3,4)
          Type: FiniteSimplicialComplex(Integer)
(5) -> d2 := deltaComplex(b2)

   (5)
                          3D:[[1,- 2,3,- 4]]
             2D:[[1,- 2,4],[1,- 3,5],[2,- 3,6],[4,- 5,6]]
         1D:[[1,- 2],[1,- 3],[1,- 4],[2,- 3],[2,- 4],[3,- 4]]
                         0D:[[0],[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(6) -> c2 := chain(d2)

   (6)
                                               + 1    1    0    0 +
                + 1    1    1    0    0    0 + |- 1   0    1    0 | + 1 +
                |- 1   0    0    1    1    0 | | 0   - 1  - 1   0 | |- 1|
   [0  0  0  0],|                            |,|                  |,|   |,[]
                | 0   - 1   0   - 1   0    1 | | 1    0    0    1 | | 1 |
                + 0    0   - 1   0   - 1  - 1+ | 0    1    0   - 1| +- 1+
                                               + 0    0    1    1 +
                              Type: ChainComplex

Example 3 - Hollow 2D circle.

(7) -> b3 := sphereSurface(2)$SimplicialComplexFactory(Integer)

   (7)  points 1..3
           (1,2)
          -(1,3)
           (2,3)
          Type: FiniteSimplicialComplex(Integer)
(8) -> d3 := deltaComplex(b3)

   (8)
         1D:[[1,- 2],[- 1,3],[2,- 3]]
               0D:[[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(9) -> c3 := chain(d3)

                  + 1   - 1   0 + ++
   (9)  [0  0  0],|- 1   0    1 |,||
                  + 0    1   - 1+ ++
                              Type: ChainComplex

Example 4 - Hollow 3D Sphere.

(10) -> b4 := sphereSurface(3)$SimplicialComplexFactory(Integer)

   (10)  points 1..4
           (1,2,3)
          -(1,2,4)
           (1,3,4)
          -(2,3,4)
          Type: FiniteSimplicialComplex(Integer)
(11) -> d4 := deltaComplex(b4)

   (11)
            2D:[[1,- 2,4],[- 1,3,- 5],[2,- 3,6],[- 4,5,- 6]]
          1D:[[1,- 2],[1,- 3],[1,- 4],[2,- 3],[2,- 4],[3,- 4]]
                          0D:[[0],[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(12) -> c4 := chain(d4)

                                                     + 1   - 1   0    0 +
                      + 1    1    1    0    0    0 + |- 1   0    1    0 | ++
                      |- 1   0    0    1    1    0 | | 0    1   - 1   0 | ||
   (12)  [0  0  0  0],|                            |,|                  |,||
                      | 0   - 1   0   - 1   0    1 | | 1    0    0   - 1| ||
                      + 0    0   - 1   0   - 1  - 1+ | 0   - 1   0    1 | ++
                                                     + 0    0    1   - 1+
                              Type: ChainComplex

Example 5 - Torus Surface.

(13) -> b5 := torusSurface()$SimplicialComplexFactory(Integer)

   (13)  points 1..7
           (1,2,3)
           (2,3,5)
           (2,4,5)
           (2,4,7)
           (1,2,6)
           (2,6,7)
           (3,4,6)
           (3,5,6)
           (3,4,7)
           (1,3,7)
           (1,4,5)
           (1,4,6)
           (5,6,7)
           (1,5,7)
          Type: FiniteSimplicialComplex(Integer)
(14) -> d5 := deltaComplex(b5)

   (14)
   VCONCAT
      VCONCAT
         VCONCAT
        ,
             2D:
              [[1,- 2,7], [1,- 5,10], [2,- 6,15], [3,- 4,16], [3,- 5,17],
               [4,- 6,20], [7,- 9,13], [8,- 9,16], [8,- 11,18], [10,- 11,21],
               [12,- 14,17], [12,- 15,18], [13,- 14,19], [19,- 20,21]]
     ,
          1D:
           [[1,- 2], [1,- 3], [1,- 4], [1,- 5], [1,- 6], [1,- 7], [2,- 3],
            [2,- 4], [2,- 5], [2,- 6], [2,- 7], [3,- 4], [3,- 5], [3,- 6],
            [3,- 7], [4,- 5], [4,- 6], [4,- 7], [5,- 6], [5,- 7], [6,- 7]]
  ,
       0D:[[0],[0],[0],[0],[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(15) -> c5 := chain(d5)

   (15)
     [0  0  0  0  0  0  0]
  ,
   [[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [- 1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
    [0,- 1,0,0,0,0,- 1,0,0,0,0,1,1,1,1,0,0,0,0,0,0],
    [0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,0,1,1,1,0,0,0],
    [0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,- 1,0,0,1,1,0],
    [0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,- 1,0,- 1,0,1],
    [0,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,- 1,0,- 1,- 1]]
  ,
     + 1    1    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    0    0   - 1   0    1    0    0    0    0    0    0    0    0 |
     |                                                                    | ++
     | 0   - 1   0    0   - 1   0    0    0    0    0    0    0    0    0 | ||
     | 0    0   - 1   0    0   - 1   0    0    0    0    0    0    0    0 | ||
     | 1    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 | ||
     | 0    0    0    0    0    0   - 1  - 1   0    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  - 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    1    0    0    0    0    0    1    0 | ||
     | 0    0    0    0    0    0    0    0    0    0   - 1   0   - 1   0 | ||
     | 0    0    1    0    0    0    0    0    0    0    0   - 1   0    0 | ||
     | 0    0    0    1    0    0    0    1    0    0    0    0    0    0 | ||
     | 0    0    0    0    1    0    0    0    0    0    1    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    0    0    0    0    1    1 |
     | 0    0    0    0    0    1    0    0    0    0    0    0    0   - 1|
     + 0    0    0    0    0    0    0    0    0    1    0    0    0    1 +
                              Type: ChainComplex

Example 6 - Projective Plane.

(16) -> b6 := projectiveSpace(2)$SimplicialComplexFactory(Integer)

   (16)  points 1..6
           (1,2,3)
           (1,3,4)
           (1,2,6)
           (1,5,6)
           (1,4,5)
           (2,3,5)
           (2,4,5)
           (2,4,6)
           (3,4,6)
           (3,5,6)
          Type: FiniteSimplicialComplex(Integer)
(17) -> d6 := deltaComplex(b6)

   (17)
   VCONCAT
      VCONCAT
         VCONCAT
        ,
             2D:
              [[1,- 2,6], [1,- 5,9], [2,- 3,10], [3,- 4,13], [4,- 5,15],
               [6,- 8,11], [7,- 8,13], [7,- 9,14], [10,- 12,14], [11,- 12,15]]
     ,
          1D:
           [[1,- 2], [1,- 3], [1,- 4], [1,- 5], [1,- 6], [2,- 3], [2,- 4],
            [2,- 5], [2,- 6], [3,- 4], [3,- 5], [3,- 6], [4,- 5], [4,- 6],
            [5,- 6]]
  ,
       0D:[[0],[0],[0],[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(18) -> c6 := chain(d6)

   (18)
     [0  0  0  0  0  0]
  ,
     + 1    1    1    1    1    0    0    0    0    0    0    0    0    0    0 +
     |- 1   0    0    0    0    1    1    1    1    0    0    0    0    0    0 |
     | 0   - 1   0    0    0   - 1   0    0    0    1    1    1    0    0    0 |
     | 0    0   - 1   0    0    0   - 1   0    0   - 1   0    0    1    1    0 |
     | 0    0    0   - 1   0    0    0   - 1   0    0   - 1   0   - 1   0    1 |
     + 0    0    0    0   - 1   0    0    0   - 1   0    0   - 1   0   - 1  - 1+
  ,
     + 1    1    0    0    0    0    0    0    0    0 +
     |- 1   0    1    0    0    0    0    0    0    0 |
     | 0    0   - 1   1    0    0    0    0    0    0 |
     |                                                | ++
     | 0    0    0   - 1   1    0    0    0    0    0 | ||
     | 0   - 1   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    1    0    0 | ||
     | 0    0    0    0    0   - 1  - 1   0    0    0 |,||
     | 0    1    0    0    0    0    0   - 1   0    0 | ||
     | 0    0    1    0    0    0    0    0    1    0 | ||
     | 0    0    0    0    0    1    0    0    0    1 | ||
     | 0    0    0    0    0    0    0    0   - 1  - 1| ||
     |                                                | ++
     | 0    0    0    1    0    0    1    0    0    0 |
     | 0    0    0    0    0    0    0    1    1    0 |
     + 0    0    0    0    1    0    0    0    0    1 +
                              Type: ChainComplex

Example 7 - Klein Bottle.

(19) -> b7 := kleinBottle()$SimplicialComplexFactory(Integer)

   (19)  points 1..8
           (3,4,8)
           (2,3,4)
           (2,4,6)
           (2,6,8)
           (2,5,8)
           (3,5,7)
           (2,3,7)
           (1,2,7)
           (1,2,5)
           (1,3,5)
           (4,5,8)
           (4,5,7)
           (4,6,7)
           (1,6,7)
           (1,3,6)
           (3,6,8)
          Type: FiniteSimplicialComplex(Integer)
(20) -> d7 := deltaComplex(b7)

   (20)
   VCONCAT
      VCONCAT
         VCONCAT
        ,
             2D:
              [[1,- 3,8], [1,- 5,10], [2,- 3,13], [2,- 4,14], [4,- 5,23],
               [6,- 7,12], [6,- 10,15], [7,- 9,18], [8,- 11,22], [9,- 11,24],
               [12,- 16,20], [13,- 15,21], [14,- 16,24], [17,- 19,21],
               [17,- 20,22], [18,- 19,23]]
     ,
          1D:
           [[1,- 2], [1,- 3], [1,- 5], [1,- 6], [1,- 7], [2,- 3], [2,- 4],
            [2,- 5], [2,- 6], [2,- 7], [2,- 8], [3,- 4], [3,- 5], [3,- 6],
            [3,- 7], [3,- 8], [4,- 5], [4,- 6], [4,- 7], [4,- 8], [5,- 7],
            [5,- 8], [6,- 7], [6,- 8]]
  ,
       0D:[[0],[0],[0],[0],[0],[0],[0],[0]]
                     Type: DeltaComplex(Integer)
(21) -> c7 := chain(d7)

   (21)
     [0  0  0  0  0  0  0  0]
  ,
   [[1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [- 1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,- 1,0,0,0,- 1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,0,1,1,1,1,0,0,0,0],
    [0,0,- 1,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,0,1,1,0,0],
    [0,0,0,- 1,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,0,0,0,1,1],
    [0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,- 1,0,- 1,0],
    [0,0,0,0,0,0,0,0,0,0,- 1,0,0,0,0,- 1,0,0,0,- 1,0,- 1,0,- 1]]
  ,
   [[1,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,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,0,0,0,0,0],
    [0,- 1,0,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,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,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,1,0,0,0,0,- 1,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,0,0,1,0,0,0,0,1,0,0,0,0,0],
    [0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,1,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,0,0,1,1,0], [0,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,0,- 1,0,- 1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,- 1,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,1,0,0,0,0,0,1,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,1,0,0,1,0,0,0]]
  ,
     ++
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ||
     ++
                              Type: ChainComplex

Next

To go on to implementation of co-chain see page here.


metadata block
see also:
  • I have put the code here.
Correspondence about this page

This site may have errors. Don't use for critical systems.

Copyright (c) 1998-2023 Martin John Baker - All rights reserved - privacy policy.