Adding Chain Complexes

At the moment there is not an '+' function to do superposition, I think the code needs to updated to provide this but first there need to to be some changes to ensure the facets can be aligned for this to work properly.

Here I have tried to illustrate the situation with a very simple example.

If we have one edge from a point and we want to add it to a different edge from the same point.

The chain complexes are shown on the right. Note how the matricies can be added to give the correct result but only if they are padded out with zeroes to leave space for the other points and lines.

add chain complex

We want to add two chain complexes together in a linear way to give a new chain complex. This is provided that we are sure the indexes are aligned properly. The easiest way to do this would be to have a preexisting framework of points, lines, etc. At the start they can all have zero multipliers to indicate empty space, then we can add facets in a linear way.

 
(1) -> p1:List(List(NNI)) := [[1::NNI,2::NNI]]         

   (1)  [[1, 2]]
                               Type: List(List(NonNegativeInteger))
(2) -> p2:List(List(NNI)) := [[1::NNI,3::NNI]]

   (2)  [[1, 3]]
                               Type: List(List(NonNegativeInteger))
(3) -> p3:List(List(NNI)) := [[1::NNI,2::NNI],[1::NNI,3::NNI]]

   (3)  [[1, 2], [1, 3]]
                               Type: List(List(NonNegativeInteger))
(4) -> ASIMP := FiniteSimplicialComplex(Integer)

   (4)  FiniteSimplicialComplex(Integer)
                                                         Type: Type

(5) -> c1 := simplicialComplex([],3,p1)$ASIMP

   (5)  points 1..3
           (1, 2)
                             Type: FiniteSimplicialComplex(Integer)
(6) -> c2 := simplicialComplex([],3,p2)$ASIMP

   (6)  points 1..3
           (1, 3)
                             Type: FiniteSimplicialComplex(Integer)
(7) -> c3 := simplicialComplex([],3,p3)$ASIMP

   (7)  points 1..3
           (1, 2)
           (1, 3)
                             Type: FiniteSimplicialComplex(Integer)
(8) -> chain(c1)

                    + 1 +
                    |   |
   (8)  [0  0  0], |- 1|, []
                    |   |
                    + 0 +
                                                 Type: ChainComplex
(9) -> chain(c2)

                    + 1 +
                    |   |
   (9)  [0  0  0], |- 1|, []
                    |   |
                    + 0 +
                                                 Type: ChainComplex
(10) -> chain(c3)

                    + 1    1 +
                    |        |  ++
   (10)  [0  0  0], |- 1   0 |, ||
                    |        |  ++
                    + 0   - 1+
                                                 Type: ChainComplex
(11) -> 

chain(c2) seems wrong

 
((21) -> deltaComplex(c1)$DeltaComplex(Integer)

   (21)
            1D:[[1, - 2]]
          0D:[[0], [0], []]
                                                  Type: DeltaComplex(Integer)
20) -> deltaComplex(c2)$DeltaComplex(Integer)

   (20)
            1D:[[1, - 2]]
          0D:[[0], [], [0]]
                                                  Type: DeltaComplex(Integer)

 

 


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.