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)\) — 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.
A note on notation before we proceed. 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) from Incidence Structure.
The two are related — \(\boldsymbol{B}\) represents \(\partial_1\) (up to sign), so \(B_0 = \operatorname{im}(\partial_1) = \operatorname{im}(\boldsymbol{B})\) — but
the italic \(B_k\) and the boldface \(\boldsymbol{B}\) are different objects.
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:
\[
\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.
\]
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), these definitions recover the objects from
Cycle/Cut Spaces.
The cycle group \(Z_1 = \ker(\partial_1)\) is the cycle space — 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\}\): no 1-cycle in a graph is a boundary of anything. The situation
changes dramatically when the complex has higher-dimensional simplices — and measuring that change is exactly what homology does.
The inclusion \(B_k \subseteq Z_k\) is the 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. The converse — 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\): the vector space whose elements are
equivalence classes \([z] = \{z + b \mid b \in B_k\}\), with the natural operations \([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 — that is, whenever
one can be continuously deformed into the other by "filling in" a \((k+1)\)-dimensional region. 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\)
— they are homologous, written \(z \sim z'\) — if and only
if their difference is a boundary: \(z - z' \in B_k\). 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 Betti numbers give a complete topological fingerprint (over
\(\mathbb{R}\)):
- \(\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, every vertex
is equivalent. 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\), and
\(\operatorname{rank}(\partial_1) = f_0 - c\) (a standard fact about the incidence matrix) where \(c\) is the number of
connected components (each component contributes one dimension to the kernel
of \(\partial_1^\top\), or equivalently, removes one rank from \(\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).
\]
We proved that \(\dim Z_1 = |E| - |V| + c\).
Thus \(\beta_1 = |E| - |V| + c\) — the number of independent cycles in the graph. For a connected graph,
\(\beta_1 = |E| - |V| + 1\): every edge beyond a spanning tree creates exactly one independent loop.
This is the "prototype" of homology. In a graph, every 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. Each column
computes \(\partial_1(\partial_2(\sigma_j))\) — the boundary of the boundary of a triangle. For instance, the first
column is
\[
[\partial_1] \cdot (1, -1, 0, 1, 0, 0)^\top
= (-1 + 1, 1 - 1, -1 + 1, 0) = (0, 0, 0, 0).
\]
Every column vanishes:
\([\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 one linear dependence: the alternating
combination \(-\sigma_1 + \sigma_2 - \sigma_3 + \sigma_4\) maps to
zero under \(\partial_2\), because this combination is the oriented
surface of the tetrahedron — a closed 2-cycle. Thus
\(\operatorname{rank}(\partial_2) = 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\) — the oriented shell of
the tetrahedron, the same closed 2-cycle 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 only change occurs
at dimension 2: the boundary of the 3-simplex is
\[
\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.
\]
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\}, \qquad \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. The Betti numbers
become \((\beta_0, \beta_1, \beta_2, \beta_3) = (1, 0, 0, 0)\) — the
signature of a contractible space (one that can be continuously
deformed to a point).
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 — it lives in \(Z_2\) regardless. What changes is whether that
cycle is the boundary of something. Adding the 3-simplex creates a
\((k+1)\)-chain whose boundary is precisely this cycle, promoting it
from a non-trivial homology class to a trivial one: 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\)) — one going "around the ring" and
one going "through the hole" — and encloses one cavity (\(\beta_2 = 1\)).
We can verify the Euler-Poincaré relation:
\[
\chi = 7 - 21 + 14 = 0 = 1 - 2 + 1 = \beta_0 - \beta_1 + \beta_2.
\]
This also matches the genus formula \(\chi = 2 - 2g\) for an orientable
surface 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 — but deferred the proof. We are now equipped to
give that proof. The key insight is that the Euler characteristic, which is defined in terms of
counting simplices, is secretly controlled by the rank 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, \dots, f_d)\) and Betti numbers
\(\beta_0, \beta_1, \dots, \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}. \tag{$\star$}
\]
Now form the alternating sum. Substituting \((\star)\):
\[
\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}.
\]
In the second sum, substitute \(j = k - 1\) (so \(k = j + 1\) and the
sign \((-1)^k = (-1)^{j+1} = -(-1)^j\)):
\[
\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,
\]
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:
\[
\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).
\]
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 the following telescoping structure: each
boundary dimension \(\dim B_k\) enters the alternating sum once with a positive
sign and once with a negative sign — once as part of \(f_{k+1} = \dim Z_{k+1}
+ \dim B_k\), and once after the index-shift identity rewrites \(\dim B_{k-1}\)-type
contributions in terms of \(\dim B_k\). These opposing signs cancel, leaving
only the Betti numbers. This telescoping is the algebraic engine behind the
topological invariance of 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
groups, revealing 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 — 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 is the
Euler-Poincaré theorem applied to any triangulation of \(S^2\):
\[
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 a topological question — "how many \(k\)-dimensional holes does \(K\) have?" —
to the rank computation of two sparse, integer-valued matrices. For a complex with \(N\)
simplices, the boundary matrices are sparse (each column has at most \(k + 1\) nonzero entries), so the rank
computation is efficient. This makes simplicial homology immediately implementable — a point we will return to
in applications below.
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 pairwise proximity. But a single threshold \(\varepsilon\)
is arbitrary. Persistent homology resolves this by tracking how the Betti numbers change as
\(\varepsilon\) increases from \(0\) to \(\infty\).
As \(\varepsilon\) grows, more edges, triangles, and higher simplices appear, creating a filtration: a nested
sequence of complexes
\[
\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 — 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 — 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 — 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\) iff both terms
vanish — equivalently, \(h \in Z_k = \ker(\partial_k)\) and
\(h \perp B_k = \operatorname{im}(\partial_{k+1})\) (since
\(\partial_{k+1}^\top h = 0\) means \(h\) annihilates all images of
\(\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)\).
This gives each homology class a canonical representative — 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 higher-dimensional analogue of
the orthogonal decomposition of edge flows from graph theory.
The full development of this theory, including the discrete Hodge star and discrete exterior calculus, lies ahead in
Discrete Differential Geometry.
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 Hodge decomposition guarantees that the gradient, curl, and harmonic components of the signal are handled
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: they tell us how many independent signals
are topologically protected from diffusion.