Chain Groups and the Chain Complex
In Incidence Structure & Cycle/Cut Spaces, we discovered that the
oriented incidence matrix \(\boldsymbol{B}\) of a graph encodes far more than adjacency. Its kernel \(\ker \boldsymbol{B}\)
is the cycle space \(Z_1\), the set of all edge-flows that circulate without accumulating at any vertex. In
Simplicial Complexes, we generalized this operator to all
dimensions. The boundary operator \(\partial_k : C_k \to C_{k-1}\) maps \(k\)-chains to \((k-1)\)-chains, and the fundamental
property \(\partial^2 = 0\) guarantees that \(\operatorname{im}(\partial_{k+1}) \subseteq \ker(\partial_k)\), so every
boundary is a cycle. We now ask the converse question: is every cycle a boundary? The answer, measured
precisely by the quotient \(\ker(\partial_k) / \operatorname{im}(\partial_{k+1})\), is homology.
We pause for a note on notation. Throughout this page, \(B_k = \operatorname{im}(\partial_{k+1})\) denotes the \(k\)-th
boundary group, the set of \(k\)-chains that are boundaries of \((k+1)\)-chains. This is not the
oriented incidence matrix
\(\boldsymbol{B}\) (boldface). The two are related, since \(\boldsymbol{B}\) represents \(\partial_1\) up to sign and hence
\(B_0 = \operatorname{im}(\partial_1) = \operatorname{im}(\boldsymbol{B})\). Nevertheless, the italic \(B_k\) and the
boldface \(\boldsymbol{B}\) are different objects. Likewise, the
cut space
\(B_1(G) = \operatorname{im}(\boldsymbol{B}^\top)\) of a graph shares the letter but not the meaning, since for a graph our
\(B_1\) is \(\{0\}\).
Cycles and Boundaries
Let \(K\) be a simplicial complex with chain groups \(C_k = C_k(K; \mathbb{R})\) and boundary operators \(\partial_k\), as
defined on the previous page. Recall the chain complex:
\[
\begin{align*}
\cdots \xrightarrow{\partial_{k+2}} C_{k+1} \xrightarrow{\partial_{k+1}} C_k
&\xrightarrow{\partial_k} C_{k-1} \xrightarrow{\partial_{k-1}} \cdots \\\\
&\xrightarrow{\partial_1} C_0 \xrightarrow{\partial_0} 0.
\end{align*}
\]
At each level \(k\), two subspaces of \(C_k\) play a central role.
Definition: Cycle Group and Boundary Group
The \(k\)-th cycle group is the kernel of
\(\partial_k\):
\[
Z_k = \ker(\partial_k) = \{ c \in C_k \mid \partial_k(c) = 0 \}.
\]
Its elements are called \(k\)-cycles: chains with empty
boundary. The \(k\)-th boundary group is the image of
\(\partial_{k+1}\):
\[
B_k = \operatorname{im}(\partial_{k+1}) = \{ \partial_{k+1}(d) \mid d \in C_{k+1} \}.
\]
Its elements are called \(k\)-boundaries: chains that
are the boundary of some \((k+1)\)-chain.
For graphs (\(1\)-complexes), the cycle group recovers the
cycle space. Since \(\partial_1\) and
\(\boldsymbol{B}\) differ only by sign, they have the same kernel, so \(Z_1 = \ker(\partial_1) = \ker(\boldsymbol{B})\)
consists of the edge-flows that satisfy Kirchhoff's current law at every vertex. The boundary group
\(B_1 = \operatorname{im}(\partial_2)\) consists of 1-chains that bound some 2-chain. But a graph has no 2-simplices, so
\(C_2 = \{0\}\) and \(B_1 = \{0\}\). Hence no nonzero 1-cycle in a graph is a boundary. The situation changes when the
complex has higher-dimensional simplices, and homology is precisely the tool that measures that change.
The inclusion \(B_k \subseteq Z_k\) is a direct consequence of the fundamental property
\(\partial^2 = 0\). If
\(c = \partial_{k+1}(d) \in B_k\), then \(\partial_k(c) = \partial_k(\partial_{k+1}(d)) = 0\), so \(c \in Z_k\). In words,
every boundary is a cycle. Whether the converse holds, that is, whether every cycle is a boundary, depends on the
topology of the complex.
Cycles, Boundaries, and Homology
We now arrive at the central construction of algebraic topology. Since \(B_k \subseteq Z_k\), we can form the
quotient vector space \(Z_k / B_k\). Its elements are the equivalence classes
\([z] = \{z + b \mid b \in B_k\}\), and its operations are \([z_1] + [z_2] = [z_1 + z_2]\) and \(\alpha [z] = [\alpha z]\).
(These are well-defined precisely because \(B_k\) is a subspace of \(Z_k\).)
The quotient collapses two cycles to the same class whenever they differ by a boundary. Intuitively, the two cycles then
jointly bound a \((k+1)\)-dimensional region, and "filling in" that region carries one to the other. What remains after this
collapse is the essential cycle structure: the "holes" that cannot be filled.
Definition: Homology Group and Betti Number
The \(k\)-th homology group of \(K\) (with real coefficients) is the quotient vector space
\[
H_k(K; \mathbb{R}) = Z_k \,/\, B_k
= \ker(\partial_k) \,/\, \operatorname{im}(\partial_{k+1}).
\]
Two \(k\)-cycles \(z, z' \in Z_k\) represent the same element of \(H_k\) if and only if their difference is a boundary:
\(z - z' \in B_k\). Such cycles are called homologous, written \(z \sim z'\). The dimension
\[
\beta_k = \dim H_k(K; \mathbb{R})
\]
is the \(k\)-th Betti number. It counts the number of independent \(k\)-dimensional "holes" in \(K\).
The first three Betti numbers have a direct geometric reading:
- \(\beta_0\) = number of connected components
- \(\beta_1\) = number of independent 1-dimensional loops
- \(\beta_2\) = number of enclosed cavities (voids)
We now compute these for several examples, starting from the simplest and
building to a complete matrix-level calculation.
\(H_0\): Connected Components
By convention, \(\partial_0 = 0\), so every 0-chain is a 0-cycle: \(Z_0 = \ker(\partial_0) = C_0 = \mathbb{R}^{f_0}\).
The boundary group \(B_0 = \operatorname{im}(\partial_1)\) consists of all 0-chains that can be written as the
boundary of a 1-chain. The boundary of an oriented edge \([a, b]\) is \([b] - [a]\), a difference of two vertices.
Hence \(B_0\) is the subspace of \(\mathbb{R}^{f_0}\) spanned by all difference vectors
\(\mathbf{e}_b - \mathbf{e}_a\) for edges \(\{a, b\} \in K\).
The quotient \(H_0 = \mathbb{R}^{f_0} / B_0\) identifies two vertices whenever they are connected by a path. Within each
connected component, all vertices therefore represent the same class. Thus \(\beta_0 = \dim H_0\) equals the number of
connected components of \(K\).
We can verify this with
rank-nullity. The map
\(\partial_1 : C_1 \to C_0\) has image \(B_0\). Let \(c\) be the number of connected components. Since
\(\partial_1 = -\boldsymbol{B}\) has the same rank as \(\boldsymbol{B}\), the
rank of the incidence matrix gives
\(\operatorname{rank}(\partial_1) = f_0 - c\). Each component contributes one dimension to the kernel of \(\partial_1^\top\),
or equivalently, removes one from the rank of \(\partial_1\). Therefore
\[
\beta_0 = \dim(C_0 / B_0) = f_0 - \operatorname{rank}(\partial_1) = f_0 - (f_0 - c) = c.
\]
\(H_1\) for Graphs: Recovery of the Cycle Rank
For a graph (1-complex), \(C_2 = \{0\}\), so \(B_1 = \operatorname{im}(\partial_2) = \{0\}\). This means
\[
H_1 = Z_1 / B_1 = Z_1 / \{0\} \cong Z_1 = \ker(\partial_1).
\]
The dimension formula for the cycle space gives
\(\dim Z_1 = |E| - |V| + c\), where \(|V| = f_0\) and \(|E| = f_1\). Thus \(\beta_1 = |E| - |V| + c\), the number of
independent cycles in the graph. For a connected graph, \(\beta_1 = |E| - |V| + 1\). Each edge beyond a spanning tree creates
exactly one independent loop.
The graph case is the "prototype" of homology. In a graph, every nonzero cycle is interesting. None of them bounds
anything, because there are no 2-simplices to fill them in. When we add 2-simplices (triangles), some cycles become
boundaries and \(H_1\) shrinks. The next example illustrates this phenomenon vividly.
The Central Example: Hollow vs. Solid Tetrahedron
We already computed the f-vectors and Euler characteristics of
the hollow and solid tetrahedra. We now use homology to explain why their Euler characteristics differ.
Setup. Let the vertices be \(\{1, 2, 3, 4\}\). We orient the edges as
\(e_1 = [1,2]\), \(e_2 = [1,3]\), \(e_3 = [1,4]\), \(e_4 = [2,3]\), \(e_5 = [2,4]\), \(e_6 = [3,4]\), and the
four triangular faces as \(\sigma_1 = [1,2,3]\), \(\sigma_2 = [1,2,4]\),
\(\sigma_3 = [1,3,4]\), \(\sigma_4 = [2,3,4]\).
The boundary matrix \([\partial_1]\). This is the \(4 \times 6\) matrix mapping the
edge space \(C_1 = \mathbb{R}^6\) to the vertex space \(C_0 = \mathbb{R}^4\). The column for edge \([a, b]\) has
\(-1\) in row \(a\) and \(+1\) in row \(b\):
\[
[\partial_1] =
\begin{pmatrix}
-1 & -1 & -1 & 0 & 0 & 0 \\
1 & 0 & 0 & -1 & -1 & 0 \\
0 & 1 & 0 & 1 & 0 & -1 \\
0 & 0 & 1 & 0 & 1 & 1
\end{pmatrix}.
\]
This has rank 3 (one less than the number of vertices, since the complex is connected).
The boundary matrix \([\partial_2]\). This is the \(6 \times 4\) matrix mapping the triangle space
\(C_2 = \mathbb{R}^4\) to \(C_1 = \mathbb{R}^6\). The column for triangle \([a, b, c]\) has the entry pattern from the
boundary formula \(\partial_2[a,b,c] = [b,c] - [a,c] + [a,b]\):
\[
[\partial_2] =
\begin{pmatrix}
1 & 1 & 0 & 0 \\
-1 & 0 & 1 & 0 \\
0 & -1 & -1 & 0 \\
1 & 0 & 0 & 1 \\
0 & 1 & 0 & -1 \\
0 & 0 & 1 & 1
\end{pmatrix}.
\]
Let us verify \(\partial^2 = 0\). The product \([\partial_1][\partial_2]\) is a \(4 \times 4\) matrix, and each column
computes \(\partial_1(\partial_2(\sigma_j))\), the boundary of the boundary of a triangle. For instance, the first column is
\[
\begin{align*}
[\partial_1] \cdot (1, -1, 0, 1, 0, 0)^\top
&= (-1 + 1, 1 - 1, -1 + 1, 0) \\\\
&= (0, 0, 0, 0).
\end{align*}
\]
The remaining three columns vanish in the same way, so \([\partial_1][\partial_2] = \mathbf{0}_{4 \times 4}\), confirming
\(\partial^2 = 0\) at the matrix level.
Case 1: The Hollow Tetrahedron (\(\partial \Delta^3\)).
This complex has \(\boldsymbol{f} = (4, 6, 4)\): four vertices, six edges,
four triangles, and no 3-simplex. We compute all Betti numbers.
Computation: Betti Numbers of the Hollow Tetrahedron
\(\beta_0\). The complex is connected, so \(\beta_0 = 1\).
\(\beta_1\). We need
\(\dim Z_1 = \dim \ker(\partial_1) = f_1 - \operatorname{rank}(\partial_1) = 6 - 3 = 3\) and
\(\dim B_1 = \operatorname{rank}(\partial_2)\). The four columns of \([\partial_2]\) satisfy exactly one linear
dependence up to scaling. Rows 1, 2, and 4 of \([\partial_2]\) show that a combination
\(c_1\sigma_1 + c_2\sigma_2 + c_3\sigma_3 + c_4\sigma_4\) has zero boundary only if \(c_1 + c_2 = 0\),
\(-c_1 + c_3 = 0\), and \(c_1 + c_4 = 0\), so it is a multiple of
\(-\sigma_1 + \sigma_2 - \sigma_3 + \sigma_4\). This combination does map to zero under \(\partial_2\), as the
remaining rows confirm, and geometrically it is the oriented surface of the tetrahedron, a closed 2-cycle. Thus
\(\dim \ker(\partial_2) = 1\) and \(\operatorname{rank}(\partial_2) = 4 - 1 = 3\). Therefore
\[
\beta_1 = \dim Z_1 - \dim B_1 = 3 - 3 = 0.
\]
Every 1-cycle is the boundary of some 2-chain. The triangular faces fill in all loops.
\(\beta_2\). We need \(\dim Z_2 = \dim \ker(\partial_2) = f_2 - \operatorname{rank}(\partial_2) = 4 - 3 = 1\).
The kernel is spanned by the single vector \(-\sigma_1 + \sigma_2 - \sigma_3 + \sigma_4\), which is the oriented shell of
the tetrahedron identified above. Since there is no 3-simplex, \(B_2 = \operatorname{im}(\partial_3) = \{0\}\). Therefore
\[
\beta_2 = \dim Z_2 - \dim B_2 = 1 - 0 = 1.
\]
Summary. \((\beta_0, \beta_1, \beta_2) = (1, 0, 1)\). The hollow tetrahedron is connected
(\(\beta_0 = 1\)), has no 1-dimensional holes (\(\beta_1 = 0\)), and encloses one 2-dimensional cavity (\(\beta_2 = 1\)).
Topologically, this is a sphere \(S^2\).
Check. \(\chi = f_0 - f_1 + f_2 = 4 - 6 + 4 = 2\) and \(\beta_0 - \beta_1 + \beta_2 = 1 - 0 + 1 = 2\).
Case 2: The Solid Tetrahedron (\(\Delta^3\)). Now we add the 3-simplex \(\tau = [1, 2, 3, 4]\) to the
complex. The f-vector becomes \(\boldsymbol{f} = (4, 6, 4, 1)\). The chain groups and boundary operators in dimensions up to
2 are unchanged, so \(\beta_0 = 1\) and \(\beta_1 = 0\) as before. What is new is \(C_3 = \mathbb{R}^1\), and the boundary of
the 3-simplex is
\[
\begin{align*}
\partial_3 [1,2,3,4]
&= [2,3,4] - [1,3,4] + [1,2,4] - [1,2,3] \\\\
&= \sigma_4 - \sigma_3 + \sigma_2 - \sigma_1.
\end{align*}
\]
This is exactly the generator of \(\ker(\partial_2)\) that we found above. Therefore \(B_2 = \operatorname{im}(\partial_3)\)
is spanned by this same vector, which means \(B_2 = Z_2\). The quotient collapses:
\[
H_2 = Z_2 / B_2 = Z_2 / Z_2 = \{0\}, \quad \beta_2 = 0.
\]
The 3-simplex "fills in" the cavity. The cycle that was the closed surface is now the boundary of the solid interior. Since
\(\partial_3\) is nonzero on the one-dimensional space \(C_3\), we have \(Z_3 = \ker(\partial_3) = \{0\}\) and
\(\beta_3 = 0\). The Betti numbers become \((\beta_0, \beta_1, \beta_2, \beta_3) = (1, 0, 0, 0)\), the same as those of a
single point. This is what we expect of a contractible space (one that can be continuously deformed to a point), such as
the solid tetrahedron.
The Topological Meaning of Filling
The hollow-vs-solid comparison reveals the mechanism of homology in its purest form. The 2-cycle (the closed surface) is
the same object in both cases, and it lives in \(Z_2\) regardless. What changes is whether that cycle is the boundary of
something. Adding the 3-simplex creates a 3-chain whose boundary is precisely this cycle. The cycle is thereby promoted
from a non-trivial homology class to a trivial one, and in the quotient \(Z_2 / B_2\) it becomes zero. This is the
algebraic counterpart of a topological fact: a sphere encloses a void, but a filled ball does not.
Higher-Dimensional Example: The Torus
A minimal triangulation of the torus uses \(\boldsymbol{f} = (f_0, f_1, f_2) = (7, 21, 14)\). The boundary matrices are too
large for hand computation (\([\partial_2]\) is \(21 \times 14\)), but the rank calculations yield
\[
(\beta_0, \beta_1, \beta_2) = (1, 2, 1).
\]
The torus is connected (\(\beta_0 = 1\)), has two independent 1-dimensional loops (\(\beta_1 = 2\)), and encloses
one cavity (\(\beta_2 = 1\)). One loop goes "around the ring" and the other goes "through the hole". We can verify
the Euler-Poincaré relation:
\[
\chi = 7 - 21 + 14 = 0 = 1 - 2 + 1 = \beta_0 - \beta_1 + \beta_2.
\]
This also matches
Euler's formula for orientable surfaces,
which gives \(\chi = 2 - 2g = 0\) for the torus of genus \(g = 1\).
The Euler-Poincaré Theorem
In Planar Graphs & Euler's Formula, we proved that \(V - E + F = 2\) for
any connected planar graph. We then generalized the left-hand side to the
Euler characteristic
\(\chi(K) = \sum (-1)^k f_k\), and noted that it is a topological invariant. That invariance rests on the topological
invariance of homology, which we state without proof. What we can now prove is the identity that ties \(\chi\) to homology.
The key insight is that the Euler characteristic, which is defined by counting simplices, is controlled by the
ranks of the boundary operators, and therefore by homology.
Theorem: The Euler-Poincaré Formula
Let \(K\) be a finite simplicial complex of dimension \(d\), with
f-vector \((f_0, f_1, \ldots, f_d)\) and Betti numbers
\(\beta_0, \beta_1, \ldots, \beta_d\). Then
\[
\chi(K) = \sum_{k=0}^{d} (-1)^k f_k = \sum_{k=0}^{d} (-1)^k \beta_k.
\]
Before the proof, let us set up the notation. For each \(k\), write
\(r_k = \operatorname{rank}(\partial_k)\) for the rank of the boundary
operator \(\partial_k : C_k \to C_{k-1}\). The image of \(\partial_k\)
lands in \(C_{k-1}\), so \(r_k = \dim B_{k-1}\) (the dimension of the
\((k-1)\)-th boundary group). By convention,
\(r_0 = 0\) (since \(\partial_0 = 0\)) and \(r_{d+1} = 0\) (since
\(C_{d+1} = \{0\}\)).
Proof:
By the rank-nullity theorem,
applied to \(\partial_k : C_k \to C_{k-1}\):
\[
f_k = \dim C_k = \dim(\ker \partial_k) + \dim(\operatorname{im} \partial_k)
= \dim Z_k + r_k.
\]
Since \(r_k = \dim(\operatorname{im} \partial_k) = \dim B_{k-1}\), we can rewrite this as
\[
f_k = \dim Z_k + \dim B_{k-1}.
\]
Now form the alternating sum and substitute this expression for \(f_k\):
\[
\begin{align*}
\sum_{k=0}^{d} (-1)^k f_k
&= \sum_{k=0}^{d} (-1)^k \bigl(\dim Z_k + \dim B_{k-1}\bigr) \\\\
&= \sum_{k=0}^{d} (-1)^k \dim Z_k + \sum_{k=0}^{d} (-1)^k \dim B_{k-1}.
\end{align*}
\]
In the second sum, substitute \(j = k - 1\) (so \(k = j + 1\) and the sign \((-1)^k = (-1)^{j+1} = -(-1)^j\)):
\[
\begin{align*}
\sum_{k=0}^{d} (-1)^k \dim B_{k-1}
&= (-1)^0 \dim B_{-1} + \sum_{j=0}^{d-1} (-1)^{j+1} \dim B_j \\\\
&= 0 - \sum_{j=0}^{d-1} (-1)^j \dim B_j,
\end{align*}
\]
where \(\dim B_{-1} = 0\) by convention. Since \(B_d = \operatorname{im}(\partial_{d+1}) = \{0\}\), the upper limit can
be extended to \(d\). Combining:
\[
\begin{align*}
\sum_{k=0}^{d} (-1)^k f_k
&= \sum_{k=0}^{d} (-1)^k \dim Z_k - \sum_{k=0}^{d} (-1)^k \dim B_k \\\\
&= \sum_{k=0}^{d} (-1)^k (\dim Z_k - \dim B_k).
\end{align*}
\]
But \(\dim Z_k - \dim B_k = \dim(Z_k / B_k) = \dim H_k = \beta_k\), so
\[
\sum_{k=0}^{d} (-1)^k f_k = \sum_{k=0}^{d} (-1)^k \beta_k.
\]
The mechanism of this proof is a telescoping structure. Since \(\dim Z_k = \beta_k + \dim B_k\), the identity
\(f_k = \dim Z_k + \dim B_{k-1}\) becomes \(f_k = \beta_k + \dim B_k + \dim B_{k-1}\). Each boundary dimension \(\dim B_k\)
therefore enters the alternating sum twice with opposite signs, once through \(f_k\) and once through \(f_{k+1}\). These
contributions cancel, leaving only the Betti numbers. The Euler-Poincaré identity is also the bridge by which the
invariance of the Betti numbers passes to the Euler characteristic.
From Euler to Poincaré: The Meeting of Geometry and Algebra
In 1752, Euler observed that \(V - E + F = 2\) for every convex polyhedron, a statement about the geometry of
three-dimensional objects. For over a century, this remained a fact about counting. In the 1890s, Poincaré
revolutionized the subject by introducing homology. His work revealed that Euler's combinatorial formula is governed
by the ranks of linear maps.
The theorem we have just proved makes this precise. The alternating sum of simplex counts equals the alternating sum of
Betti numbers, and the Betti numbers are determined by the kernels and images of the boundary operators, which are
objects from linear algebra. What Euler discovered by
inspecting polyhedra, Poincaré explained by computing ranks of matrices.
Let us verify the theorem against our earlier examples:
Verification:
Hollow tetrahedron. \(\chi = 4 - 6 + 4 = 2\) and \(\beta_0 - \beta_1 + \beta_2 = 1 - 0 + 1 = 2\).
Solid tetrahedron. \(\chi = 4 - 6 + 4 - 1 = 1\) and
\(\beta_0 - \beta_1 + \beta_2 - \beta_3 = 1 - 0 + 0 - 0 = 1\).
Torus. \(\chi = 7 - 21 + 14 = 0\) and \(\beta_0 - \beta_1 + \beta_2 = 1 - 2 + 1 = 0\).
Connected graph. \(\chi = V - E\) and \(\beta_0 - \beta_1 = 1 - (E - V + 1) = V - E\).
In particular, Euler's formula \(V - E + F = 2\) for the sphere follows from the Euler-Poincaré theorem. Since
homology is a topological invariant, every triangulation of \(S^2\) has the Betti numbers \((1, 0, 1)\) that we computed for
the hollow tetrahedron, so
\[
V - E + F = \beta_0 - \beta_1 + \beta_2 = 1 - 0 + 1 = 2.
\]
Computation and Applications
Over \(\mathbb{R}\), computing homology reduces to linear algebra. Given
the boundary matrices \([\partial_k]\), the Betti numbers are determined
entirely by their ranks:
Derivation:
By rank-nullity,
\(\dim Z_k = \dim \ker(\partial_k) = f_k - \operatorname{rank}(\partial_k)\).
By definition,
\(\dim B_k = \dim \operatorname{im}(\partial_{k+1}) = \operatorname{rank}(\partial_{k+1})\).
Since \(\beta_k = \dim Z_k - \dim B_k\), we obtain the formula.
This formula reduces the topological question "how many \(k\)-dimensional holes does \(K\) have?" to the rank computation of
two sparse, integer-valued matrices. The boundary matrices are sparse (each column has at most \(k + 1\) nonzero entries), so
the rank computation is efficient, and simplicial homology is immediately implementable.
Persistent Homology and Topological Data Analysis
The Vietoris-Rips and Čech complexes construct a simplicial
complex from point-cloud data. Given a set of points and a distance threshold \(\varepsilon\), we form a simplicial complex
whose simplices are determined by the proximity of the points. But a single threshold \(\varepsilon\) is arbitrary.
Persistent homology resolves this by tracking how the homology changes as \(\varepsilon\) increases from
\(0\) to \(\infty\).
As \(\varepsilon\) grows, more edges, triangles, and higher simplices appear, and the complexes form a
filtration: a nested
sequence of subcomplexes
\[
\emptyset = K_0 \subseteq K_1 \subseteq K_2 \subseteq \cdots \subseteq K_m = K.
\]
Each homology class in \(H_k(K_i)\) is either "born" (a new cycle appears that is not a boundary) or "dies" (an existing
cycle becomes a boundary as a higher-dimensional simplex fills it in). The lifespan of each class, given by its
birth and death thresholds, is recorded in a persistence diagram (or
equivalently, a barcode): a collection of intervals \([b_i, d_i)\) in the \(\varepsilon\)-axis.
Long bars in the barcode correspond to robust topological features, namely genuine holes that persist across a wide range of
scales. Short bars are typically noise. This distinction between signal and noise is the foundational principle of
Topological Data Analysis (TDA). The shape of data is revealed not by a single snapshot, but by the
persistence of its homological features across the filtration. The algebraic machinery is exactly what we built on this page.
Cycle groups, boundary groups, and their quotients are simply applied to a one-parameter family of complexes.
The Discrete Hodge Theorem
Recall the Hodge Laplacian
\[
\boldsymbol{L}_k = \partial_{k+1}\partial_{k+1}^\top + \partial_k^\top \partial_k,
\]
which operates on \(k\)-chains by measuring their "roughness" via both upper and lower adjacencies.
A \(k\)-chain \(h\) in the kernel of \(\boldsymbol{L}_k\) must satisfy both
\(\partial_k h = 0\) (it is a cycle) and \(\partial_{k+1}^\top h = 0\) (it is orthogonal to all
boundaries from above). Such chains are called harmonic.
Theorem: Discrete Hodge Theorem
The space of harmonic \(k\)-chains is isomorphic to the \(k\)-th
homology group:
\[
\ker(\boldsymbol{L}_k) \cong H_k(K; \mathbb{R}).
\]
In particular, \(\dim \ker(\boldsymbol{L}_k) = \beta_k\).
Sketch:
Using the inner product on \(C_k\) for which the oriented simplex basis is orthonormal (under this convention,
\(\partial_k^\top\) is exactly the adjoint of \(\partial_k\)), the operator \(\boldsymbol{L}_k\) is symmetric positive
semi-definite. Each summand \(\partial_{k+1}\partial_{k+1}^\top\) and \(\partial_k^\top \partial_k\) has the form
\(MM^\top\), and \(\langle \boldsymbol{L}_k h, h \rangle = \|\partial_{k+1}^\top h\|^2 + \|\partial_k h\|^2\). Hence
\(\boldsymbol{L}_k h = 0\) if and only if both terms vanish, that is, \(h \in Z_k = \ker(\partial_k)\) and
\(h \perp B_k = \operatorname{im}(\partial_{k+1})\). The second condition holds because \(\partial_{k+1}^\top h = 0\)
means that \(h\) is orthogonal to every element of \(\operatorname{im}(\partial_{k+1})\).
Each cycle \(z \in Z_k\) decomposes uniquely as \(z = h + b\) with \(h\) harmonic and \(b \in B_k\) (orthogonal
projection onto \(B_k\)), so the map \([z] \mapsto h\) gives a vector-space isomorphism
\(H_k = Z_k / B_k \cong \ker(\boldsymbol{L}_k)\). The map is well-defined because cycles in the same class differ by an
element of \(B_k\), which the projection removes. It is injective because \(h = 0\) forces \(z \in B_k\), and surjective
because each harmonic chain is a cycle whose own harmonic part is itself.
The Hodge theorem gives each homology class a canonical representative, namely the unique harmonic chain in its equivalence
class, and connects homology to spectral theory. The Betti number \(\beta_k\) is the multiplicity of the eigenvalue \(0\) in
the spectrum of \(\boldsymbol{L}_k\). This connection is the foundation of the Hodge decomposition, which
splits every \(k\)-chain into a gradient component, a curl component, and a harmonic component. The decomposition is the
higher-dimensional analogue of the
orthogonal decomposition of edge flows
from graph theory.
Connection to Simplicial Neural Networks
Classical Graph Neural Networks propagate signals on vertices using the graph Laplacian \(\boldsymbol{L}_0\).
Simplicial Neural Networks (SNNs) generalize this to higher-dimensional signals. A 1-chain (such as
traffic flow on a road network) is processed via \(\boldsymbol{L}_1\), and a 2-chain (such as flux through a surface) via
\(\boldsymbol{L}_2\). The gradient, curl, and harmonic components of the Hodge decomposition are invariant subspaces of
\(\boldsymbol{L}_k\), so a filter built from \(\boldsymbol{L}_k\) acts on each of them separately, and the homology
groups \(H_k\) determine the dimension of the harmonic component that no amount of message passing can dissipate. The
Betti numbers are thus architectural constraints, since they count the independent signals that are topologically
protected from diffusion.