Intro to Homology

Chain Groups and the Chain Complex Cycles, Boundaries, and Homology The Euler-Poincaré Theorem Computation and Applications

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 in Simplicial Complexes. 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\) proved in Simplicial Complexes: 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 space \(Z_k / B_k\). This quotient collapses two cycles to the same equivalence 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}\)):

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\) 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). \] In Cycle/Cut Spaces, 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

In Simplicial Complexes, we 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 is "killed." 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. In Simplicial Complexes, we 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)\): \[ \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. \qquad \square \]

The beauty of this proof lies in its mechanism: the boundary dimensions \(\dim B_k\) appear twice in the alternating sum — once with sign \((-1)^k\) from the rank-nullity decomposition at level \(k+1\), and once with sign \((-1)^{k+1}\) from the decomposition at level \(k\). These opposing signs cancel perfectly, 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:

The Betti Number Formula

For a simplicial complex \(K\) with f-vector \((f_0, f_1, \dots, f_d)\) and boundary matrices \([\partial_k] \in \mathbb{R}^{f_{k-1} \times f_k}\), the Betti numbers are \[ \beta_k = f_k - \operatorname{rank}(\partial_k) - \operatorname{rank}(\partial_{k+1}). \]

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 is a remarkable reduction: the topological question "how many \(k\)-dimensional holes does \(K\) have?" is answered by computing the ranks 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

In Simplicial Complexes, we constructed the Vietoris-Rips and Čech complexes 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

In Simplicial Complexes, we introduced 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\).

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.