#### Literature for computation of homology between two chains that Dionysus is based on

o.lamarre7@...

Hi! I am a student and I've been using the Dionysus library for a few months (thank you!). My use case is fairly simple - I have a simplicial complex of dimension 2, and I evaluate whether two 1-chains (with the same start and end vertices) are homologous.

I am looking for an intuition behind the implementation of the homologous() function in Dionysus. Specifically, is there any literature this function is based on? I'm familiar with the theory behind homology, persistence, etc., just not with implementation details.

There is a lot of information in the literature about efficient implementations related persistent homology (ex: filtration, reduced boundary matrices, Betti numbers, etc.), but as simple as it sounds, I couldn't find much about calculating whether two chains are homologous. For example, are two chains combined into a cycle and then checked whether they are a boundary of a higher-dimensionality chain? Can that be inferred from a boundary matrix?

Any details about the inspiration for the implementation in Dionysus (and/or a brief description of it) would be super appreciated. Thank you very much!

Dmitriy Morozov

homologous() does exactly what you describe. It takes (c1 - c2) and checks if it is a boundary, meaning it checks that (c1 - c2) is in the image of the boundary matrix. The persistence algorithm does this for the boundaries of all simplices in the filtration: it checks whether the boundary of a simplex is already a boundary (and therefore the addition of the simplex creates a cycle). That's what the column reduction of the standard persistence algorithm does. (It does more than this, of course, but this is part of it does.) homologous() simply takes (c1 - c2) and reduces it using the columns of the reduced boundary matrix; the reduced part allows the greedy reduction algorithm to just work. If you get a 0 as a result of the reduction, it means (c1 - c2) is a boundary, and the function returns True; otherwise False.

I hope this helps.

On Sun, Jan 5, 2020 at 3:29 PM <o.lamarre7@...> wrote:

Hi! I am a student and I've been using the Dionysus library for a few months (thank you!). My use case is fairly simple - I have a simplicial complex of dimension 2, and I evaluate whether two 1-chains (with the same start and end vertices) are homologous.

I am looking for an intuition behind the implementation of the homologous() function in Dionysus. Specifically, is there any literature this function is based on? I'm familiar with the theory behind homology, persistence, etc., just not with implementation details.

There is a lot of information in the literature about efficient implementations related persistent homology (ex: filtration, reduced boundary matrices, Betti numbers, etc.), but as simple as it sounds, I couldn't find much about calculating whether two chains are homologous. For example, are two chains combined into a cycle and then checked whether they are a boundary of a higher-dimensionality chain? Can that be inferred from a boundary matrix?

Any details about the inspiration for the implementation in Dionysus (and/or a brief description of it) would be super appreciated. Thank you very much!

o.lamarre7@...

Hi Dmitriy,

Yes, all clear now. Thank you very much for the explanation!

- Olivier