Module 2: Homology Groups and Algorithm for Their Computation¶
This lecture introduces the fundamental concept of homology groups, one of the key tools in topological data analysis. We begin by exploring simplicial approximations of maps between simplicial complexes, which serve as the foundation for understanding homology and its applications in analyzing topological features of data.
1. Simplicial Complexes and Simplicial Approximation¶
1.1. Basic Definitions¶
Definition (Simplex): A k-dimensional simplex (or k-simplex) in $\mathbb{R}^n$ is the convex hull of $k+1$ affinely independent points $v_0, v_1, \ldots, v_k$ in $\mathbb{R}^n$. We denote this simplex as $[v_0, v_1, \ldots, v_k]$.
Geometrically:
- A 0-simplex is a point
- A 1-simplex is a line segment
- A 2-simplex is a triangle
- A 3-simplex is a tetrahedron
Definition (Face): Given a simplex $\sigma = [v_0, v_1, \ldots, v_k]$, any simplex formed by a subset of its vertices is called a face of $\sigma$.
Every point in a simplex can be uniquely represented as a convex combination of its vertices using barycentric coordinates.
Definition (Barycentric Coordinates): Let $\sigma = [v_0, v_1, \ldots, v_k]$ be a $k$-simplex in $\mathbb{R}^n$. Any point $x \in \sigma$ can be uniquely written as:
$$x = \sum_{i=0}^{k} t_i v_i$$
where $t_i \geq 0$ for all $i$ and $\sum_{i=0}^{k} t_i = 1$. The numbers $t_0, t_1, \ldots, t_k$ are called the barycentric coordinates of $x$ with respect to $\sigma$.
Properties of Barycentric Coordinates:
Uniqueness: Each point in a simplex has a unique set of barycentric coordinates.
Geometric Interpretation:
- If $t_i = 1$ and all other coordinates are 0, then $x = v_i$ (i.e., $x$ is at vertex $v_i$).
- If $t_i > 0$ for all $i$, then $x$ is in the interior of $\sigma$.
- If some $t_i = 0$, then $x$ is in a proper face of $\sigma$.
Relationship to Geometric Position:
- $t_i$ represents the relative distance of $x$ from the face opposite to vertex $v_i$.
- The barycenter of $\sigma$ has coordinates $t_i = \frac{1}{k+1}$ for all $i$.
Linear Maps: Barycentric coordinates behave well under linear maps. If $f: \mathbb{R}^n \to \mathbb{R}^m$ is a linear map, then: $$f(x) = f\left(\sum_{i=0}^{k} t_i v_i\right) = \sum_{i=0}^{k} t_i f(v_i)$$
1.2. Simplicial complexes¶
Definition (Simplicial Complex): A finite simplicial complex $K$ in $\mathbb{R}^n$ is a finite collection of simplices in $\mathbb{R}^n$ such that:
- If $\sigma \in K$ and $\tau$ is a face of $\sigma$, then $\tau \in K$.
- If $\sigma, \tau \in K$, then $\sigma \cap \tau$ is either empty or a common face of both $\sigma$ and $\tau$.
Definition (Polyhedron): The polyhedron $|K|$ of a finite simplicial complex $K$ is the union of all simplices in $K$, i.e., $|K| = \cup_{\sigma \in K} \sigma$, with the subspace topology inherited from $\mathbb{R}^n$.
Example 1: A triangle $[v_0, v_1, v_2]$ along with all its faces forms a simplicial complex. The complex consists of:
- One 2-simplex: $[v_0, v_1, v_2]$ (the triangle)
- Three 1-simplices: $[v_0, v_1]$, $[v_1, v_2]$, $[v_0, v_2]$ (the edges)
- Three 0-simplices: $[v_0]$, $[v_1]$, $[v_2]$ (the vertices)
Example 2: A tetrahedron $[v_0, v_1, v_2, v_3]$ along with all its faces forms a simplicial complex with:
- One 3-simplex: $[v_0, v_1, v_2, v_3]$
- Four 2-simplices (triangular faces)
- Six 1-simplices (edges)
- Four 0-simplices (vertices)
k-Skeleton: The k-skeleton of a simplicial complex $K$, denoted by $K^{(k)}$, is the subcomplex consisting of all simplices of dimension $\leq k$.
Star: The star of a simplex $\sigma$ in $K$, denoted by $\text{st}_K(\sigma)$, is the set of all simplices in $K$ that contain $\sigma$ as a face.
Link: The link of a simplex $\sigma$ in $K$, denoted by $\text{lk}_K(\sigma)$, is the set of all simplices $\tau$ in $K$ such that $\tau$ and $\sigma$ are faces of a simplex in $K$, and $\tau \cap \sigma = \emptyset$.
1.3. Simplicial Maps¶
Definition (Simplicial Map): Let $K$ and $L$ be simplicial complexes. A simplicial map $f: K \to L$ is a function from the vertices of $K$ to the vertices of $L$ such that if $\{v_0, v_1, \ldots, v_k\}$ is a simplex in $K$, then $\{f(v_0), f(v_1), \ldots, f(v_k)\}$ is a simplex in $L$ (or possibly a lower-dimensional simplex if some of the images coincide).
A simplicial map $f: K \to L$ naturally induces a continuous map $|f|: |K| \to |L|$ between the corresponding polyhedra. This map is defined by linear extension on each simplex:
$$|f|\left(\sum_{i=0}^k t_i v_i\right) = \sum_{i=0}^k t_i f(v_i)$$
where $\sum_{i=0}^k t_i = 1$ and $t_i \geq 0$ for all $i$.
In other words, a simplicial map is completely determined by its values on the vertices of $K$, and these values must preserve the simplicial structure.
Example: Consider two simplicial complexes:
$K$: A triangle $[v_0, v_1, v_2]$ with all its faces
$L$: A line segment $[w_0, w_1]$ with all its faces
Define a map $f: |K| \to |L|$ by specifying its values on the vertices:
- $f(v_0) = w_0$
- $f(v_1) = w_1$
- $f(v_2) = w_0$
Then $f$ is a simplicial map. It maps:
- The triangle $[v_0, v_1, v_2]$ to the degenerate simplex $[w_0, w_1, w_0] = [w_0, w_1]$
- The edge $[v_0, v_1]$ to $[w_0, w_1]$
- The edge $[v_1, v_2]$ to $[w_1, w_0]$
- The edge $[v_0, v_2]$ to the degenerate simplex $[w_0, w_0] = [w_0]$
This map "collapses" the triangle onto the line segment.
1.4. Simplicial Approximation¶
Definition (Simplicial Approximation): Let $f: |K| \to |L|$ be a continuous map between polyhedra. A simplicial approximation of $f$ is a simplicial map $g: K \to L$ such that for each point $x \in |K|$, the point $|g|(x)$ belongs to the same simplex of $L$ as $f(x)$.
More precisely, if $x$ is in a point in $|K|$ and $f(x)$ lies in the interior of a simplex $\sigma$ of $L$, then $|g|(x)$ lies in $\sigma$ (possibly on its boundary).
Example: Consider the following example:
- $K$: A line segment $[v_0, v_1]$
- $L$: A circle divided into a simplicial complex with vertices $w_0, w_1, w_2, w_3$ forming a square
Let $f: |K| \to |L|$ be a continuous map that wraps the line segment around the circle once, specifically:
- $f(v_0) = w_0$
- $f$ maps the segment $[v_0, v_1]$ continuously around the circle, passing through $w_1$, $w_2$, $w_3$ and back to $w_0$
This continuous map is not a simplicial map because it doesn't map vertices to vertices in a way that preserves the simplicial structure.
We can construct a simplicial approximation $g$ by:
- Subdividing $K$ into a finer complex $K'$ with vertices $v_0, v_{1/4}, v_{1/2}, v_{3/4}, v_1$
- Defining $g$ on these vertices:
- $g(v_0) = w_0$
- $g(v_{1/4}) = w_1$
- $g(v_{1/2}) = w_2$
- $g(v_{3/4}) = w_3$
- $g(v_1) = w_0$
Now $g$ is a simplicial map that approximates $f$, in the sense that for each point $x \in |K'|$, $|g|(x)$ lies in the same simplex of $L$ as $f(x)$ or in an adjacent simplex.
1.5. Homotopy between a Map and its Simplicial Approximation¶
Exercise: Show that if $g: K \to L$ is a simplicial approximation of a continuous map $f: |K| \to |L|$, then $|g|$ is homotopic to $f$.
Solution:
We need to construct a continuous map $H: |K| \times [0,1] \to |L|$ such that $H(x,0) = f(x)$ and $H(x,1) = |g|(x)$ for all $x \in |K|$.
By the definition of simplicial approximation, for each point $x \in |K|$, the points $f(x)$ and $|g|(x)$ belong to the same simplex $\sigma$ of $L$.
Since each simplex $\sigma$ is convex, we can define a straight-line homotopy between $f$ and $|g|$ as follows:
$$H(x, t) = (1-t) \cdot f(x) + t \cdot |g|(x) \ \ \text{ for all } \ x \in |K| \ \text{ and }\ t \in [0,1].$$
Let's verify that this is indeed a valid homotopy:
- $H$ is continuous because it's a convex combination of continuous functions.
- $H(x,0) = (1-0) \cdot f(x) + 0 \cdot |g|(x) = f(x)$
- $H(x,1) = (1-1) \cdot f(x) + 1 \cdot |g|(x) = |g|(x)$
- For any fixed $x \in |K|$ and any $t \in [0,1]$, $H(x,t)$ is a convex combination of $f(x)$ and $|g|(x)$, which both lie in the same simplex $\sigma$ of $L$. Since $\sigma$ is convex, $H(x,t)$ also lies in $\sigma$.
Therefore, $f$ and $|g|$ are homotopic via the straight-line homotopy $H$.
1.6. Existence of Simplicial Approximation¶
Theorem (Simplicial Approximation Theorem): Let $K$ and $L$ be simplicial complexes and $f: |K| \to |L|$ a continuous map. Then there exists a sufficiently fine subdivision $K'$ of $K$ (so $|K'| = |K|$) and a simplicial map $g: K' \to L$ such that $g$ is a simplicial approximation of $f$.
This theorem essentially tells us that any continuous map between polyhedra can be approximated by a simplicial map after suitable subdivision of the domain complex.
Key Idea of the Proof:
- For each vertex $v$ of $K'$, we define $g(v)$ to be a vertex of the minimal simplex of $L$ that contains $f(v)$.
- The subdivision must be fine enough so that the star of each vertex in $K'$ is mapped by $f$ into the star of some vertex in $L$.
- This is achieved by using barycentric subdivisions of $K$.
The concept of barycentric subdivision is crucial for this theorem:
Definition (Barycentric Subdivision): The barycentric subdivision $\text{Sd}(K)$ of a simplicial complex $K$ consists of:
- The vertices $b_\sigma$ (the barycenter) for each simplex $\sigma$ in $K$
- Simplices $[b_{\sigma_0}, b_{\sigma_1}, \ldots, b_{\sigma_k}]$ for each chain of inclusions $\sigma_0 \subset \sigma_1 \subset \ldots \subset \sigma_k$ of simplices in $K$.
The barycentric subdivision $\text{Sd}(K)$ has the same polyhedron as $K$, i.e., $|\text{Sd}(K)| = |K|$.
In other words:
- The barycentric subdivision $\text{sd}(K)$ of a simplicial complex $K$ is obtained by dividing each simplex into smaller simplices using the barycenters (average of vertices) of the original simplices.
- Repeated barycentric subdivision makes the diameter of each simplex arbitrarily small, which is crucial for the existence of simplicial approximations.
1.7 Exercise: Paths in Simplicial Complexes¶
Exercise: Using the simplicial approximation theorem, show that any path in a simplicial complex $K$ is homotopic to a path with image in the 1-skeleton $K^{(1)}$ of the complex.
Solution:
Let $\gamma: [0,1] \to |K|$ be a path in the polyhedron $|K|$ of a simplicial complex $K$.
Consider the unit interval $[0,1]$ as a simplicial complex $I$ with vertices $\{0,1\}$ and a single 1-simplex $\{0,1\}$. Then $\gamma$ can be viewed as a continuous map $\gamma: |I| \to |K|$.
By the simplicial approximation theorem, there exists some integer $r$ such that $\gamma$ has a simplicial approximation $f: \text{Sd}^r(I) \to K$.
Let's analyze what $\text{Sd}^r(I)$ looks like. The first barycentric subdivision $\text{Sd}(I)$ adds a vertex at $1/2$ and replaces the 1-simplex $\{0,1\}$ with two 1-simplices $\{0,1/2\}$ and $\{1/2,1\}$. In general, $\text{Sd}^r(I)$ is a simplicial complex consisting of $2^r$ 1-simplices and $2^r + 1$ vertices at the points $j/2^r$ for $j = 0, 1, \ldots, 2^r$.
The simplicial approximation $f: \text{Sd}^r(I) \to K$ maps vertices of $\text{Sd}^r(I)$ to vertices of $K$, and 1-simplices of $\text{Sd}^r(I)$ to 1-simplices of $K$. This means that the induced map $|f|: |\text{Sd}^r(I)| \to |K|$ has its image contained in the 1-skeleton $K^{(1)}$ of $K$.
Since $|\text{Sd}^r(I)| = |I| = [0,1]$, we have a map $|f|: [0,1] \to |K^{(1)}|$ that is a path in the 1-skeleton of $K$.
By the result from the previous exercise, since $f$ is a simplicial approximation of $\gamma$, the path $|f|$ is homotopic to the original path $\gamma$.
Therefore, any path in a simplicial complex $K$ is homotopic to a path with image in the 1-skeleton $K^{(1)}$ of the complex.
This result is important for computing fundamental groups of simplicial complexes, as it allows us to represent loops as sequences of edges in the 1-skeleton, which is much more computationally tractable.
2. Simplicial Homology¶
2.1 Definition of Simplicial Homology¶
Simplicial homology is a method for calculating the homology groups of a simplicial complex. Let's begin with the basic definitions.
Oriented Simplices¶
An oriented $n$-simplex is an $n$-simplex with an ordering of its vertices, denoted by $[v_0, v_1, \ldots, v_n]$. Two orderings are considered equivalent if they differ by an even permutation of the vertices. Orderings that differ by an odd permutation are considered to have opposite orientation.
Chain Groups¶
For a simplicial complex $K$, the $n$-chain group $C_n(K)$ is the free abelian group generated by the oriented $n$-simplices in $K$. An element of $C_n(K)$ is called an $n$-chain and can be written as a formal sum:
$$c = \sum_i a_i \sigma_i$$
where $a_i \in \mathbb{Z}$ and $\sigma_i$ are oriented $n$-simplices in $K$.
Boundary Operator¶
The boundary operator $\partial_n: C_n(K) \to C_{n-1}(K)$ is defined on an oriented simplex $[v_0, v_1, \ldots, v_n]$ as:
$$\partial_n([v_0, v_1, \ldots, v_n]) = \sum_{i=0}^n (-1)^i [v_0, \ldots, \hat{v_i}, \ldots, v_n]$$
where $\hat{v_i}$ means that $v_i$ is omitted. The boundary operator is then extended linearly to all of $C_n(K)$.
Chain Complex¶
The boundary operators connect the chain groups into a chain complex:
$$\ldots \xrightarrow{\partial_{n+1}} C_n(K) \xrightarrow{\partial_n} C_{n-1}(K) \xrightarrow{\partial_{n-1}} \ldots \xrightarrow{\partial_2} C_1(K) \xrightarrow{\partial_1} C_0(K) \xrightarrow{\partial_0} 0$$
Cycles and Boundaries¶
- The $n$-cycles of $K$ are the elements of $\ker(\partial_n)$, denoted by $Z_n(K)$.
- The $n$-boundaries of $K$ are the elements of $\text{im}(\partial_{n+1})$, denoted by $B_n(K)$.
Homology Groups¶
The $n$-th homology group of $K$ is defined as:
$$H_n(K) = Z_n(K) / B_n(K) = \ker(\partial_n) / \text{im}(\partial_{n+1})$$
To ensure that the above definition is correct, we need to know that $\text{im}(\partial_{n+1}) \subset \ker(\partial_n)$, which is equivalent to $\partial_{n} \circ \partial_{n+1} = 0$.
2.2 Proof: Composition of Boundary Operators Equals Zero¶
We want to prove that $\partial_{n-1} \circ \partial_n = 0$ for all $n \geq 1$.
Theorem: For any $n \geq 1$, $\partial_{n-1} \circ \partial_n = 0$.
Proof:
Let $[v_0, v_1, \ldots, v_n]$ be an oriented $n$-simplex. We will compute $\partial_{n-1} \circ \partial_n$ applied to this simplex.
First, we compute $\partial_n([v_0, v_1, \ldots, v_n])$:
$$\partial_n([v_0, v_1, \ldots, v_n]) = \sum_{i=0}^n (-1)^i [v_0, \ldots, \hat{v_i}, \ldots, v_n]$$
Now, we apply $\partial_{n-1}$ to this result:
$$\begin{align*} \partial_{n-1} \circ \partial_n([v_0, v_1, \ldots, v_n]) &= \partial_{n-1}\left(\sum_{i=0}^n (-1)^i [v_0, \ldots, \hat{v_i}, \ldots, v_n]\right) \\ &= \sum_{i=0}^n (-1)^i \partial_{n-1}([v_0, \ldots, \hat{v_i}, \ldots, v_n]) \\ \end{align*}$$
For each $(n-1)$-simplex $[v_0, \ldots, \hat{v_i}, \ldots, v_n]$, we have:
$$\partial_{n-1}([v_0, \ldots, \hat{v_i}, \ldots, v_n]) = \sum_{j=0}^{i-1} (-1)^j [v_0, \ldots, \hat{v_j}, \ldots, \hat{v_i}, \ldots, v_n] + \sum_{j=i+1}^n (-1)^{j-1} [v_0, \ldots, \hat{v_i}, \ldots, \hat{v_j}, \ldots, v_n]$$
Substituting back:
$$\begin{align*} \partial_{n-1} \circ \partial_n([v_0, v_1, \ldots, v_n]) &= \sum_{i=0}^n \left(\sum_{j=0}^{i-1} (-1)^j [v_0, \ldots, \hat{v_j}, \ldots, \hat{v_i}, \ldots, v_n] + \sum_{j=i+1}^n (-1)^{j-1} [v_0, \ldots, \hat{v_i}, \ldots, \hat{v_j}, \ldots, v_n]\right) \end{align*}.$$
Now, consider a fixed $(n-2)$-simplex $[v_0, \ldots, \hat{v_j}, \ldots, \hat{v_k}, \ldots, v_n]$ with $j < k$. This simplex appears twice in the double sum:
- Once when $i = j$ and we remove $v_k$ in the second boundary operation
- Once when $i = k$ and we remove $v_j$ in the second boundary operation
In the first case, the coefficient is $(-1)^j \cdot (-1)^{k-1} = (-1)^{j+k-1}$. In the second case, the coefficient is $(-1)^k \cdot (-1)^j = (-1)^{j+k}$.
These coefficients differ by a factor of $-1$, so they cancel out in the sum.
Since this is true for every $(n-2)$-simplex in the expansion, the entire sum equals zero. Therefore:
$$\partial_{n-1} \circ \partial_n = 0$$
This completes the proof. $\Box$
Special cases:¶
- $H_0(K) = C_0(K)/\operatorname{im}\partial_1$ since $\partial_0$ is a zero map, and so $\ker \partial_0 = C_0(K)$ which is in fact isomorphic to $\mathbb{Z}^v$, where $v$ is the number of vertices of $K$.
- $H_{\dim K}(K) = \ker \partial_{\dim K}$ since $H_{\dim K+1}(K) = 0$ and so $\partial_{\dim K+1} = 0$.
2.3 Example: Homology of a Point¶
Let's compute the homology groups of a single point. Consider a simplicial complex $K$ consisting of a single vertex $v_0$. The chain complex is:
$$0 \to C_0(K) \to 0$$
where $C_0(K) \cong \mathbb{Z}$ is generated by the 0-simplex $[v_0]$. Since there are no simplices of dimension 1 or higher, $C_n(K) = 0$ for all $n \geq 1$.
The boundary operator $\partial_0: C_0(K) \to 0$ is the zero map.
Now, let's compute the homology groups:
- $H_0(K) = \ker(\partial_0) / \text{im}(\partial_1) = C_0(K) / 0 \cong \mathbb{Z}$
- $H_n(K) = 0$ for all $n \geq 1$ (since $C_n(K) = 0$)
So, the homology of a point is:
- $H_0(K) \cong \mathbb{Z}$
- $H_n(K) \cong 0$ for all $n \geq 1$
This makes intuitive sense: a point has one connected component ($H_0 \cong \mathbb{Z}$) and no holes of higher dimensions.
Exercise.¶
Compute the homology of a circle $S^1$ triangulated as the boundary of the triangle $\partial \Delta^2$.
3. Smith Normal Form and Algorithm for Computing Homology¶
The Smith Normal Form (SNF) provides a systematic method for computing homology groups of a simplicial complex using matrix algebra.
3.1 Smith Normal Form¶
Definition: For an integer matrix $A$, the Smith Normal Form is a $\textbf{diagonal}$ matrix $D$ such that:
$$A = UDV$$
where $U$ and $V$ are unimodular matrices (integer matrices with determinant $\pm 1$).
The matrix $D$ has the form: $$D = \text{diag}(d_1, d_2, \ldots, d_r, 0, \ldots, 0)$$
where $d_i | d_{i+1}$ for $1 \leq i < r$ (each $d_i$ divides $d_{i+1}$), and $r$ is the rank of $A$. The non-zero diagonal entries $d_1, d_2, \ldots, d_r$ are called the invariant factors.
3.2 Computing Homology using SNF¶
Let $K$ be a finite simplicial complex. To compute the $n$-th homology group $H_n(K)$:
- Construct the boundary matrices $\partial_{n+1}: C_{n+1}(K) \to C_n(K)$ and $\partial_n: C_n(K) \to C_{n-1}(K)$ as matrices with respect to the standard bases of oriented simplices.
- Compute the Smith Normal Form of these matrices:
- Let $D_{n+1}$ be the SNF of $\partial_{n+1}$
- Let $D_n$ be the SNF of $\partial_n$
- The rank of $\text{im}(\partial_{n+1})$ equals the number of non-zero diagonal entries in $D_{n+1}$.
- The rank of $\ker(\partial_n)$ equals $\dim(C_n(K)) - \text{rank}(D_n)$.
- The $n$-th Betti number $\beta_n = \text{rank}(\ker(\partial_n)) - \text{rank}(\text{im}(\partial_{n+1}))$.
- The torsion coefficients of $H_n(K)$ are given by the non-zero diagonal entries $d_i$ of $D_{n+1}$ such that $d_i > 1$.
Structure of Homology Groups¶
Using the Smith Normal Form, we can express the $n$-th homology group as:
$$H_n(K) \cong \mathbb{Z}^{\beta_n} \oplus \mathbb{Z}_{/t_1} \oplus \mathbb{Z}_{/t_2} \oplus \cdots \oplus \mathbb{Z}_{/t_k}$$
where $\beta_n$ is the $n$-th Betti number and $t_1, t_2, \ldots, t_k$ are the torsion coefficients.
3.3 Example: Homology of a Circle as the Boundary of a 2-Simplex¶
Let's compute the homology of a circle $S^1$, represented as the boundary of a 2-simplex.
We will model $S^1$ as the boundary of a triangle with vertices $\{v_0, v_1, v_2\}$. The simplicial complex $K$ consists of:
- 0-simplices: $\{[v_0], [v_1], [v_2]\}$
- 1-simplices: $\{[v_0, v_1], [v_1, v_2], [v_2, v_0]\}$
Note that we're not including the 2-simplex $[v_0, v_1, v_2]$ itself, just its boundary.
Computing the Chain Complex¶
The chain groups are:
- $C_0(K) = \mathbb{Z}\langle[v_0], [v_1], [v_2]\rangle \cong \mathbb{Z}^3$
- $C_1(K) = \mathbb{Z}\langle[v_0, v_1], [v_1, v_2], [v_2, v_0]\rangle \cong \mathbb{Z}^3$
- $C_n(K) = 0$ for $n \geq 2$
The boundary operators:
- $\partial_1: C_1(K) \to C_0(K)$ is given by:
- $\partial_1([v_0, v_1]) = [v_1] - [v_0]$
- $\partial_1([v_1, v_2]) = [v_2] - [v_1]$
- $\partial_1([v_2, v_0]) = [v_0] - [v_2]$
With respect to the standard bases, the boundary matrix $\partial_1$ is: $$\partial_1 = \begin{bmatrix} -1 & 0 & 1 \\ 1 & -1 & 0 \\ 0 & 1 & -1 \end{bmatrix}$$
Computing the Smith Normal Form¶
We need to find the Smith Normal Form of $\partial_1$. Through a sequence of row and column operations, we can transform $\partial_1$ into:
$$D_1 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}$$
Computing Homology Groups¶
From the Smith Normal Form, we can compute:
- $\text{rank}(\text{im}(\partial_1)) = 2$ (number of non-zero entries in $D_1$)
- $\text{rank}(\ker(\partial_1)) = \dim(C_1(K)) - \text{rank}(\partial_1) = 3 - 2 = 1$
- Since $C_2(K) = 0$, we have $\text{im}(\partial_2) = 0$
Now, we can compute the homology groups:
- $H_0(K) = \ker(\partial_0) / \text{im}(\partial_1) \cong \mathbb{Z}^3 / \text{im}(\partial_1) \cong \mathbb{Z}$ (This is because $\partial_0 = 0$, so $\ker(\partial_0) = C_0(K) \cong \mathbb{Z}^3$, and $\text{im}(\partial_1)$ has rank 2)
- $H_1(K) = \ker(\partial_1) / \text{im}(\partial_2) \cong \ker(\partial_1) / 0 \cong \mathbb{Z}$ (Since $\ker(\partial_1)$ has rank 1 and $\text{im}(\partial_2) = 0$)
- $H_n(K) = 0$ for $n \geq 2$ (since $C_n(K) = 0$ for $n \geq 2$)
Therefore, the homology of the circle is:
- $H_0(S^1) \cong \mathbb{Z}$ (one connected component)
- $H_1(S^1) \cong \mathbb{Z}$ (one 1-dimensional hole)
- $H_n(S^1) \cong 0$ for $n \geq 2$ (no higher-dimensional features)
Verification through Generators¶
We can verify our computation by finding explicit generators for the homology groups:
For $H_1(S^1)$, the generator is the 1-cycle $c = [v_0, v_1] + [v_1, v_2] + [v_2, v_0]$, which represents the entire circle. We can verify that $\partial_1(c) = 0$, confirming that $c$ is indeed a cycle.
4. Basic Properties¶
We establish two fundamental facts about the homology of simplicial complexes, particularly focusing on their behavior with respect to connected components.
4.1 Fact (Homology of Disjoint Union)¶
If a simplicial complex $K$ consists of multiple connected components, i.e., $K = \bigsqcup_{\alpha} K_{\alpha}$, then
$$H_n(K) = \bigoplus_{\alpha} H_n(K_{\alpha})$$
for all $n \geq 0$.
Proof:
Let $K = \bigsqcup_{\alpha} K_{\alpha}$ be a decomposition into connected components.
Step 1: Chain complex decomposition
The $n$-chains decompose as a direct sum: $$C_n(K) = \bigoplus_{\alpha} C_n(K_{\alpha})$$
This is because each $n$-simplex belongs to exactly one component $K_{\alpha}$, so any chain $c \in C_n(K)$ can be uniquely written as $c = \sum_{\alpha} c_{\alpha}$ where $c_{\alpha} \in C_n(K_{\alpha})$.
Step 2: Boundary operator decomposition
The boundary operator respects this decomposition: $$\partial_n\left(\bigoplus_{\alpha} c_{\alpha}\right) = \bigoplus_{\alpha} \partial_n(c_{\alpha})$$
This holds because if a simplex $\sigma$ belongs to component $K_{\alpha}$, then all its faces also belong to $K_{\alpha}$ (by definition of connected components in simplicial complexes).
Step 3: Chain complex as direct sum
We have a decomposition of chain complexes: $$C_\bullet(K) = \bigoplus_{\alpha} C_\bullet(K_{\alpha})$$
Step 4: Cycles decompose
The kernel of $\partial_n$ decomposes: $$Z_n(K) = \ker(\partial_n) = \bigoplus_{\alpha} \ker(\partial_n|_{C_n(K_{\alpha})}) = \bigoplus_{\alpha} Z_n(K_{\alpha})$$
Step 5: Boundaries decompose
Similarly, the image of $\partial_{n+1}$ decomposes: $$B_n(K) = \text{Im}(\partial_{n+1}) = \bigoplus_{\alpha} \text{Im}(\partial_{n+1}|_{C_{n+1}(K_{\alpha})}) = \bigoplus_{\alpha} B_n(K_{\alpha})$$
Step 6: Quotient distributes over direct sum
Since we have $Z_n(K) = \bigoplus_{\alpha} Z_n(K_{\alpha})$ and $B_n(K) = \bigoplus_{\alpha} B_n(K_{\alpha})$ with $B_n(K_{\alpha}) \subseteq Z_n(K_{\alpha})$ for each $\alpha$, we get:
$$H_n(K) = \frac{Z_n(K)}{B_n(K)} = \frac{\bigoplus_{\alpha} Z_n(K_{\alpha})}{\bigoplus_{\alpha} B_n(K_{\alpha})} = \bigoplus_{\alpha} \frac{Z_n(K_{\alpha})}{B_n(K_{\alpha})} = \bigoplus_{\alpha} H_n(K_{\alpha})$$
The key step uses the fact that for abelian groups, $\left(\bigoplus_\alpha A_\alpha\right) / \left(\bigoplus_\alpha B_\alpha\right) \cong \bigoplus_\alpha (A_\alpha / B_\alpha)$ when $B_\alpha \subseteq A_\alpha$. $\Box$
4.2 Fact (Zeroth Homology and Connected Components)¶
If a simplicial complex $K$ is non-empty and connected, then $H_0(K) \cong \mathbb{Z}$.
More generally, if $K$ has $k$ connected components $K = \bigsqcup_{i=1}^{k} K_i$ where each $K_i$ is non-empty and path-connected, then
$$H_0(K) \cong \mathbb{Z}^k = \bigoplus_{i=1}^{k} \mathbb{Z}$$
Thus, the rank of $H_0(K)$ counts the number of connected components of $K$.
Proof:
Part 1: Path-connected case
Assume $K$ is non-empty and path-connected.
Step 1: Identify 0-cycles
Since $C_{-1}(K) = 0$, the boundary map $\partial_0: C_0(K) \to C_{-1}(K)$ is the zero map. Therefore: $$Z_0(K) = \ker(\partial_0) = C_0(K) = \bigoplus_{v \in K_0} \mathbb{Z} \cdot [v]$$
where $K_0$ denotes the set of vertices of $K$.
Step 2: Identify 0-boundaries
The 0-boundaries are: $$B_0(K) = \text{Im}(\partial_1: C_1(K) \to C_0(K))$$
For each 1-simplex (edge) $[v_0, v_1]$, we have: $$\partial_1([v_0, v_1]) = [v_1] - [v_0]$$
So $B_0(K)$ is generated by all differences $[v] - [w]$ where $[v, w]$ is an edge in $K$.
Step 3: Augmentation map
Define the augmentation map $\varepsilon: C_0(K) \to \mathbb{Z}$ by: $$\varepsilon\left(\sum_{v \in K_0} n_v [v]\right) = \sum_{v \in K_0} n_v$$
This map sums the coefficients of all vertices.
Step 4: $B_0(K) = \ker(\varepsilon)$
Observe that for any edge $[v_0, v_1]$: $$\varepsilon(\partial_1([v_0, v_1])) = \varepsilon([v_1] - [v_0]) = 1 - 1 = 0$$
So $B_0(K) \subseteq \ker(\varepsilon)$.
Conversely, suppose $c = \sum_{v} n_v [v] \in \ker(\varepsilon)$, so $\sum_v n_v = 0$. Since $K$ is path-connected, we can choose a base vertex $v_0 \in K_0$. For each vertex $v \in K_0$, there exists a path (sequence of edges) connecting $v_0$ to $v$.
Let $\gamma_v$ be the 1-chain representing a path from $v_0$ to $v$. Then $\partial_1(\gamma_v) = [v] - [v_0]$.
We can write: $$c = \sum_{v} n_v [v] = \sum_{v} n_v ([v] - [v_0]) + \left(\sum_v n_v\right) [v_0] = \sum_{v} n_v ([v] - [v_0]) = \sum_v n_v \partial_1(\gamma_v) = \partial_1\left(\sum_v n_v \gamma_v\right)$$
Thus $c \in B_0(K)$, showing $\ker(\varepsilon) \subseteq B_0(K)$.
Therefore $B_0(K) = \ker(\varepsilon)$.
Step 5: Apply First Isomorphism Theorem
The augmentation map $\varepsilon: C_0(K) \to \mathbb{Z}$ is surjective (since $K$ is non-empty, pick any vertex $v$ and $\varepsilon([v]) = 1$).
By the First Isomorphism Theorem: $$H_0(K) = \frac{Z_0(K)}{B_0(K)} = \frac{C_0(K)}{\ker(\varepsilon)} \cong \text{im}(\varepsilon) = \mathbb{Z}$$
Part 2: Multiple connected components
If $K = \bigsqcup_{i=1}^{k} K_i$ where each $K_i$ is non-empty and path-connected, then by Fact 4.1.1: $$H_0(K) = \bigoplus_{i=1}^{k} H_0(K_i) = \bigoplus_{i=1}^{k} \mathbb{Z} = \mathbb{Z}^k$$
where the second equality follows from Part 1 applied to each component $K_i$.
Interpretation: The rank of $H_0(K)$ (as a free abelian group) equals the number of path-connected components of $K$. $\Box$
5. Homology with Coefficients¶
Motivation¶
So far we have computed homology groups with integer coefficients. However, we can generalize this by taking coefficients in any abelian group G. This allows us to detect different topological features and sometimes simplifies computations.
5.1 Definition: Homology with Coefficients in G¶
Let K be a simplicial complex and G be an abelian group.
Chain groups with coefficients in G:
$$C_n(K; G) = \left\{ \sum_{\sigma \in K_n} g_\sigma \cdot \sigma \;\Big|\; g_\sigma \in G \right\}$$
In other words, we form chains by taking linear combinations of n-simplices with coefficients in G instead of integers.
Boundary operator:
The boundary operator $\partial_n: C_n(K; G) \to C_{n-1}(K; G)$ is defined in the same way as before:
$$\partial_n(g \cdot [v_0, \ldots, v_n]) = g \cdot \sum_{i=0}^n (-1)^i [v_0, \ldots, \hat{v}_i, \ldots, v_n]$$
where $g \in G$ and we extend by linearity.
Homology groups:
$$H_n(K; G) = \frac{\ker(\partial_n: C_n(K; G) \to C_{n-1}(K; G))}{\text{Im}(\partial_{n+1}: C_{n+1}(K; G) \to C_n(K; G))}$$
As before, we have:
- $Z_n(K; G) = \ker(\partial_n)$ = n-cycles with coefficients in G
- $B_n(K; G) = \text{Im}(\partial_{n+1})$ = n-boundaries with coefficients in G
Common Coefficient Groups¶
- $G = \mathbb{Z}$: integer homology (what we have used so far)
- $G = \mathbb{Z}/2\mathbb{Z}$: mod 2 homology (ignores orientation)
- $G = \mathbb{Z}/p\mathbb{Z}$: mod p homology for prime p
- $G = \mathbb{Q}$: rational homology (eliminates torsion)
- $G = \mathbb{R}$: real homology
5.2 Example: Homology of the Real Projective Plane $\mathbb{RP}^2$¶
The real projective plane $\mathbb{RP}^2$ can be represented as a so-called delta-complex with:
- 1 vertex v
- 3 edges: a, b, c (all loops at v)
- 2 triangles: U (upper), L (lower)
The boundary relations are:
- $\partial(U) = a + b - c$
- $\partial(L) = -a + b + c$
This represents the standard identification pattern for $\mathbb{RP}^2$ and can be used for the computation of simplicial homology in the same way as for a simplicial complex.
Using Smith Normal Form we can compute:
a) Integer Coefficients: $H_n(\mathbb{RP}^2; \mathbb{Z})$¶
$$\begin{align*} H_0(\mathbb{RP}^2; \mathbb{Z}) &= \mathbb{Z} \\ H_1(\mathbb{RP}^2; \mathbb{Z}) &= \mathbb{Z}/2\mathbb{Z} \\ H_2(\mathbb{RP}^2; \mathbb{Z}) &= 0 \end{align*}$$
Interpretation:
- $\mathbb{RP}^2$ is connected (hence $H_0 = \mathbb{Z}$)
- The torsion $\mathbb{Z}/2\mathbb{Z}$ in $H_1$ detects non-orientability
- No top-dimensional homology with integer coefficients (non-orientable)
b) Mod 2 Coefficients: $H_n(\mathbb{RP}^2; \mathbb{Z}/2\mathbb{Z})$¶
$$\begin{align*} H_0(\mathbb{RP}^2; \mathbb{Z}/2\mathbb{Z}) &= \mathbb{Z}/2\mathbb{Z} \\ H_1(\mathbb{RP}^2; \mathbb{Z}/2\mathbb{Z}) &= \mathbb{Z}/2\mathbb{Z} \\ H_2(\mathbb{RP}^2; \mathbb{Z}/2\mathbb{Z}) &= \mathbb{Z}/2\mathbb{Z} \end{align*}$$
Interpretation:
- With mod 2 coefficients, orientation is ignored
- A fundamental class appears in $H_2$ (the space has a mod 2 orientation)
- $H_1$ has dimension 1 over $\mathbb{Z}/2\mathbb{Z}$
c) Mod 3 Coefficients: $H_n(\mathbb{RP}^2; \mathbb{Z}/3\mathbb{Z})$¶
$$\begin{align*} H_0(\mathbb{RP}^2; \mathbb{Z}/3\mathbb{Z}) &= \mathbb{Z}/3\mathbb{Z} \\ H_1(\mathbb{RP}^2; \mathbb{Z}/3\mathbb{Z}) &= 0 \\ H_2(\mathbb{RP}^2; \mathbb{Z}/3\mathbb{Z}) &= 0 \end{align*}$$
Interpretation:
- The torsion $\mathbb{Z}/2\mathbb{Z}$ in integer homology becomes trivial mod 3
- Only $H_0$ survives (connectivity information)
- The non-orientability (order 2 phenomenon) is invisible to mod 3 homology
Comparison Table¶
| Degree | $H_n(\mathbb{RP}^2; \mathbb{Z})$ | $H_n(\mathbb{RP}^2; \mathbb{Z}/2\mathbb{Z})$ | $H_n(\mathbb{RP}^2; \mathbb{Z}/3\mathbb{Z})$ |
|---|---|---|---|
| $n=0$ | $\mathbb{Z}$ | $\mathbb{Z}/2\mathbb{Z}$ | $\mathbb{Z}/3\mathbb{Z}$ |
| $n=1$ | $\mathbb{Z}/2\mathbb{Z}$ | $\mathbb{Z}/2\mathbb{Z}$ | $0$ |
| $n=2$ | $0$ | $\mathbb{Z}/2\mathbb{Z}$ | $0$ |
Key observations:
Integer homology is most refined: It detects torsion that may vanish with other coefficients.
Mod 2 homology ignores orientation: Non-orientable surfaces get a fundamental class in $H_2$.
Mod p homology (p odd) loses information: The $\mathbb{Z}/2\mathbb{Z}$ torsion vanishes when we work mod 3.
Different coefficients reveal different features: Choice of G affects what topological properties we can detect.
5.3 Universal Coefficient Theorem for Homology¶
The Universal Coefficient Theorem tells us that homology with arbitrary coefficients can be computed algebraically from integer homology.
Theorem (Universal Coefficient Theorem - Simplified Statement)¶
Let K be a simplicial complex and G an abelian group. The homology groups $H_n(K; G)$ can be computed algebraically from the integer homology groups $H_n(K; \mathbb{Z})$.
More precisely, if we write the integer homology as:
$$H_n(K; \mathbb{Z}) = \mathbb{Z}^{\beta_n} \oplus T_n$$
where $\beta_n$ is the rank (number of free generators) and $T_n$ is the torsion subgroup, then:
$$H_n(K; G) \cong (G^{\beta_n} \oplus \text{torsion terms}) \oplus \text{(contribution from } H_{n-1}\text{)}$$
Practical consequences:
Free part: Each free $\mathbb{Z}$ summand in $H_n(K; \mathbb{Z})$ contributes one copy of G to $H_n(K; G)$
Torsion interaction: Torsion in $H_n(K; \mathbb{Z})$ and $H_{n-1}(K; \mathbb{Z})$ interacts with G
Special cases:
- If $H_n(K; \mathbb{Z})$ is free (no torsion), then $H_n(K; G) \cong H_n(K; \mathbb{Z}) \otimes G \cong G^{\beta_n}$
- If $G = \mathbb{Q}$ or $\mathbb{R}$, all torsion vanishes: $H_n(K; \mathbb{Q}) \cong \mathbb{Q}^{\beta_n}$
5.4 Application to $\mathbb{RP}^2$¶
We computed: $$\begin{align*} H_0(\mathbb{RP}^2; \mathbb{Z}) &= \mathbb{Z} = \mathbb{Z}^1 \oplus 0 \quad (\beta_0 = 1, \text{ no torsion}) \\ H_1(\mathbb{RP}^2; \mathbb{Z}) &= \mathbb{Z}/2\mathbb{Z} = 0 \oplus \mathbb{Z}/2\mathbb{Z} \quad (\beta_1 = 0, \text{ torsion } \mathbb{Z}/2\mathbb{Z}) \\ H_2(\mathbb{RP}^2; \mathbb{Z}) &= 0 \quad (\beta_2 = 0, \text{ no torsion}) \end{align*}$$
Using the Universal Coefficient Theorem:
For $G = \mathbb{Z}/2\mathbb{Z}$:
- $H_0$: One free generator gives $(\mathbb{Z}/2\mathbb{Z})^1 = \mathbb{Z}/2\mathbb{Z}$ ✓
- $H_1$: Torsion $\mathbb{Z}/2\mathbb{Z}$ interacts with $\mathbb{Z}/2\mathbb{Z}$, plus contribution from $H_0$, giving $(\mathbb{Z}/2\mathbb{Z})^2$ ✓
- $H_2$: Contribution from torsion in $H_1$ gives $\mathbb{Z}/2\mathbb{Z}$ ✓
For $G = \mathbb{Z}/3\mathbb{Z}$:
- $H_0$: $(\mathbb{Z}/3\mathbb{Z})^1 = \mathbb{Z}/3\mathbb{Z}$ ✓
- $H_1$: The $\mathbb{Z}/2\mathbb{Z}$ torsion vanishes when tensored with $\mathbb{Z}/3\mathbb{Z}$ (coprime orders), giving 0 ✓
- $H_2$: No contribution since $H_1$ torsion vanishes, giving 0 ✓
For $G = \mathbb{Q}$:
- $H_0(\mathbb{RP}^2; \mathbb{Q}) = \mathbb{Q}$
- $H_1(\mathbb{RP}^2; \mathbb{Q}) = 0$ (torsion vanishes over $\mathbb{Q}$)
- $H_2(\mathbb{RP}^2; \mathbb{Q}) = 0$
6. Induced Homomorphism¶
One of the most important features of homology is its functoriality: continuous maps between spaces induce homomorphisms between their homology groups. This section develops this theory.
6.1 Definition: Chain Map¶
Let $K$ and $L$ be simplicial complexes. A chain map is a sequence of homomorphisms
$$\varphi_n: C_n(K) \to C_n(L)$$
for each $n \geq 0$, such that the following diagram commutes for all $n$:
$$\begin{array}{ccc} C_{n+1}(K) & \xrightarrow{\varphi_{n+1}} & C_{n+1}(L) \\ \downarrow{\partial_{n+1}^K} & & \downarrow{\partial_{n+1}^L} \\ C_n(K) & \xrightarrow{\varphi_n} & C_n(L) \\ \downarrow{\partial_n^K} & & \downarrow{\partial_n^L} \\ C_{n-1}(K) & \xrightarrow{\varphi_{n-1}} & C_{n-1}(L) \end{array}$$
In other words: $\partial_n^L \circ \varphi_n = \varphi_{n-1} \circ \partial_n^K$ for all $n$.
From simplicial maps to chain maps:
If $f: K \to L$ is a simplicial map, it induces a chain map $f_\#: C_\bullet(K) \to C_\bullet(L)$ defined on simplices by:
$$f_\#([v_0, \ldots, v_n]) = \begin{cases} [f(v_0), \ldots, f(v_n)] & \text{if } f(v_0), \ldots, f(v_n) \text{ are distinct} \\ 0 & \text{if } f \text{ collapses the simplex} \end{cases}$$
and extending linearly to all chains.
6.2 Definition: Induced Homomorphism on Homology¶
Let $\varphi: C_\bullet(K) \to C_\bullet(L)$ be a chain map. Since $\varphi$ commutes with the boundary operator:
$\varphi$ maps cycles to cycles: if $z \in Z_n(K)$, then $\partial(\varphi(z)) = \varphi(\partial(z)) = \varphi(0) = 0$, so $\varphi(z) \in Z_n(L)$
$\varphi$ maps boundaries to boundaries: if $b \in B_n(K)$, say $b = \partial(c)$, then $\varphi(b) = \varphi(\partial(c)) = \partial(\varphi(c)) \in B_n(L)$
Therefore, $\varphi$ induces a well-defined homomorphism on homology:
$$\varphi_*: H_n(K) \to H_n(L)$$
defined by:
$$\varphi_*([z]) = [\varphi(z)]$$
where $[z]$ denotes the homology class of the cycle $z$.
6.3 Proposition: The Induced Homomorphism is Well-Defined¶
Claim: The map $\varphi_*: H_n(K) \to H_n(L)$ is well-defined, i.e., it does not depend on the choice of representative of the homology class.
Proof:
Suppose $z, z' \in Z_n(K)$ are cycles with $[z] = [z']$ in $H_n(K)$. This means $z - z' \in B_n(K)$, so there exists $c \in C_{n+1}(K)$ with $z - z' = \partial(c)$.
Then: $$\varphi(z) - \varphi(z') = \varphi(z - z') = \varphi(\partial(c)) = \partial(\varphi(c))$$
Therefore $\varphi(z) - \varphi(z') \in B_n(L)$, which means $[\varphi(z)] = [\varphi(z')]$ in $H_n(L)$.
Thus $\varphi_*$ is well-defined. $\Box$
6.4 Functorial Properties¶
Homology behaves functorially with respect to simplicial maps. This means it respects composition and identities.
Theorem (Functoriality of Homology)¶
Let $K$, $L$, and $M$ be simplicial complexes.
Identity: If $\text{id}: K \to K$ is the identity map, then $$(\text{id})_* = \text{id}: H_n(K) \to H_n(K)$$
Composition: If $f: K \to L$ and $g: L \to M$ are simplicial maps, then $$(g \circ f)_* = g_* \circ f_*: H_n(K) \to H_n(M)$$
Proof:
Part 1 (Identity):
The identity map $\text{id}: K \to K$ induces the identity chain map $(\text{id})_\#: C_n(K) \to C_n(K)$, which clearly maps cycles to themselves and thus induces the identity on homology.
Part 2 (Composition):
Let $z \in Z_n(K)$ be an $n$-cycle. Then: $$((g \circ f)_*)([z]) = [(g \circ f)_\#(z)] = [g_\#(f_\#(z))] = g_*([f_\#(z)]) = g_*(f_*([z])) = (g_* \circ f_*)([z])$$
Therefore $(g \circ f)_* = g_* \circ f_*$. $\Box$
Consequence: Homology is a functor from the category of simplicial complexes and simplicial maps to the category of abelian groups and homomorphisms.
6.5 Homotopy Invariance¶
One of the most powerful properties of homology is that it is invariant under homotopy.
Theorem (Homotopy Invariance)¶
Let $f, g: K \to L$ be simplicial maps. If $f$ and $g$ are homotopic (as continuous maps between geometric realizations), then they induce the same homomorphism on homology:
$$f_* = g_*: H_n(K) \to H_n(L)$$
for all $n \geq 0$.
Corollary (Homotopy Type Invariance)¶
If $f: K \to L$ is a homotopy equivalence (i.e., there exists $g: L \to K$ such that $g \circ f \simeq \text{id}_K$ and $f \circ g \simeq \text{id}_L$), then $f$ induces an isomorphism on homology:
$$f_*: H_n(K) \xrightarrow{\cong} H_n(L)$$
for all $n \geq 0$.
Proof:
By homotopy invariance and functoriality:
- $(g \circ f)_* = g_* \circ f_* = (\text{id}_K)_* = \text{id}_{H_n(K)}$
- $(f \circ g)_* = f_* \circ g_* = (\text{id}_L)_* = \text{id}_{H_n(L)}$
Therefore $f_*$ is an isomorphism with inverse $g_*$. $\Box$
Consequence: Homology groups are homotopy invariants — spaces with the same homotopy type have isomorphic homology groups. This is why homology is such a powerful tool in topology!
6.6 Application: homomorphism induced by a continuous map¶
Recall that if $f: |K| \to |L|$ is a continuous map between geometric realizations of $K$ and $L$, then, possibly after subdividing $K$ (and keeping $L$ fixed), there exists a simplicial map $g: K \to L$ such that $g$ is a simplicial approximation to $f$.
Consequence: Every continuous map between polyhedra can be approximated (up to homotopy) by a simplicial map. This allows us to study continuous maps using combinatorial methods.
Key fact: Any two simplicial approximations to the same continuous map are chain homotopic, and thus induce the same homomorphism on homology. This fact can be used to define the induced homomorphism on simplicial homology by any continuous map $-$ it is enough to take any of its simplicial approximations.
6.7 Example: Inclusion of $S^1$ into $S^2$¶
Consider the inclusion map $i: S^1 \hookrightarrow S^2$ that embeds the circle as an equator (or any other great circle) on the 2-sphere.
Triangulations¶
For $S^1$: Use the boundary of a triangle:
- 3 vertices: $v_0, v_1, v_2$
- 3 edges: $[v_0, v_1]$, $[v_1, v_2]$, $[v_2, v_0]$
Chain groups:
- $C_0(S^1) = \mathbb{Z}^3$ (generated by the 3 vertices)
- $C_1(S^1) = \mathbb{Z}^3$ (generated by the 3 edges)
- $C_n(S^1) = 0$ for $n \geq 2$
For $S^2$: Use two tetrahedra glued along a common triangular face (with the common triangle and interiors removed):
- tetrahedra: $[v_0,v_1,v_2,v_3]$ and $[v_0,v_1,v_2,v_4]$ glued along $[v_0,v_1,v_2]$
- The interior of the common triangle $[v_0, v_1, v_2]$ is removed (its boundary is where the equator $S^1$ sits)
- Upper hemisphere: triangular faces using $v_3$
- Lower hemisphere: triangular faces using $v_4$
Chain groups:
- $C_0(S^2) = \mathbb{Z}^5$ (5 vertices)
- $C_1(S^2) = \mathbb{Z}^9$ (9 edges)
- $C_2(S^2) = \mathbb{Z}^6$ (6 triangular faces)
- $C_n(S^2) = 0$ for $n \geq 3$
The Induced Homomorphism¶
The inclusion $i: S^1 \to S^2$ (embedding the circle as the equator) induces:
$$i_*: H_n(S^1) \to H_n(S^2)$$
Computing the induced maps:
For $n = 0$:
Both $S^1$ and $S^2$ are path-connected, so:
- $H_0(S^1) = \mathbb{Z}$
- $H_0(S^2) = \mathbb{Z}$
The map $i_*: \mathbb{Z} \to \mathbb{Z}$ is the identity (by the fact below).
For $n = 1$:
We know:
- $H_1(S^1) = \mathbb{Z}$ (generated by the fundamental 1-cycle going around the circle)
- $H_1(S^2) = 0$ (the 2-sphere has no 1-dimensional holes)
Therefore $i_*: \mathbb{Z} \to 0$ is the zero map.
Geometric interpretation: The generator of $H_1(S^1)$ (the circle itself) becomes a boundary in $S^2$ — it bounds both the upper and lower hemispheres. Thus it represents the zero class in $H_1(S^2)$.
For $n \geq 2$:
$H_n(S^1) = 0$ for $n \geq 2$, so $i_* = 0$ trivially.
Summary:
$$i_*: H_n(S^1) \to H_n(S^2) = \begin{cases} \text{id}: \mathbb{Z} \to \mathbb{Z} & n = 0 \\ 0: \mathbb{Z} \to 0 & n = 1 \\ 0: 0 \to 0 & n \geq 2 \end{cases}$$
6.8 Zeroth Homology and Path-Connectedness¶
Fact: If $X$ and $Y$ are path-connected, then every continuous map $f: X \to Y$ induces the identity map on $H_0$:¶
$$f_*: H_0(X) \xrightarrow{\cong} H_0(Y)$$ $$f_*(1) = 1$$
where we identify $H_0(X) \cong \mathbb{Z}$ and $H_0(Y) \cong \mathbb{Z}$ via the isomorphism that sends a path component to its generator.
Proof:
Since $X$ and $Y$ are path-connected:
- $H_0(X) \cong \mathbb{Z}$ (generated by any vertex)
- $H_0(Y) \cong \mathbb{Z}$ (generated by any vertex)
The map $f$ sends vertices of $X$ to vertices of $Y$. Since $Y$ is path-connected, any two vertices in $Y$ represent the same homology class in $H_0(Y)$.
Pick a vertex $v \in X$. The class $[v] \in H_0(X)$ is a generator. Then $f_*([v]) = [f(v)] \in H_0(Y)$, which is also a generator of $H_0(Y) \cong \mathbb{Z}$.
Since both groups are $\mathbb{Z}$ and generators map to generators, we have $f_* = \pm \text{id}$. Since $[v] \neq -[w]$ for any two vertices $v$ and $w$ (algebraic negation of one vertex cannot be obtained geometrically), we in fact obtain that $f_* = \text{id}$. $\Box$
Consequence: For path-connected spaces, $H_0$ is always $\mathbb{Z}$ and every map induces the identity. The interesting information is in the higher homology groups!
Programming tasks¶
Task 1: Barycentric Coordinates of a Point in a Simplex¶
Write a Python program that computes the barycentric coordinates of a given point $x$ located within a given $n$-dimensional simplex with vertices $v_0, v_1, \ldots, v_n$.
Input:¶
- The first line contains an integer $n$, the dimension of the simplex.
- The next $n+1$ lines contain $n+1$ coordinates each, representing the vertices $v_0, v_1, \ldots, v_n$ of the simplex. Each line contains the coordinates of one vertex, separated by spaces.
- The last line contains $n+1$ coordinates, representing the coordinates of the point $x$.
Output:¶
- The program should check whether the vertices form a valid $n$-dimensional simplex, and whether the point $x$ lies inside the simplex.
- If the point lies within the simplex, print the barycentric coordinates of the point $x$.
- If the point does not lie within the simplex, print a message indicating that the point is outside the simplex.
Notes:¶
- Barycentric coordinates $\lambda_0, \lambda_1, \ldots, \lambda_n$ satisfy: $x = \sum_{i=0}^n \lambda_i v_i$ where $\sum_{i=0}^n \lambda_i = 1$ and $\lambda_i \geq 0$ for all $i$.
- A point lies inside the simplex if and only if all barycentric coordinates are non-negative.
# Your solution for Task 1
Task 2: Barycentric Subdivision of a Simplicial Complex¶
Write a Python program that computes the barycentric subdivision of a given abstract simplicial complex.
Background:¶
The barycentric subdivision of a simplicial complex $K$ is a new simplicial complex $\text{Sd}(K)$ that is homeomorphic to $K$ but has a finer structure. For each simplex $\sigma$ in $K$, we add a new vertex (representing the barycenter of $\sigma$), and the simplices of $\text{Sd}(K)$ correspond to chains of simplices in $K$ ordered by inclusion.
Input:¶
- The first line contains an integer $n$, the number of vertices in the complex.
- The second line contains an integer $m$, the number of maximal simplices.
- The next $m$ lines each contain a simplex, represented as a space-separated list of vertex indices (vertices are numbered from 1 to $n$).
Output:¶
- Output the barycentric subdivision as a list of simplices.
- First, print the number of vertices in the subdivided complex.
- Then, print the number of simplices in the subdivided complex.
- Finally, print each simplex of the barycentric subdivision, one per line.
Notes:¶
- The input defines a simplicial complex by listing its maximal simplices. All faces of these simplices are implicitly included.
- Each simplex in the original complex becomes a vertex in the barycentric subdivision (you may represent it as a frozen set or tuple).
- Simplices in $\text{Sd}(K)$ correspond to chains $\sigma_0 \subset \sigma_1 \subset \cdots \subset \sigma_k$ in $K$.
# Your solution for Task 2
Task 3: Simplicial Homology via Smith Normal Form¶
Write a Python program that computes the simplicial homology groups of a given simplicial complex using the Smith Normal Form of boundary matrices, without using built-in homology functions.
Input:¶
- The first line contains either
Z(for integer coefficients) orZ/pwhere $p$ is a prime (for coefficients in $\mathbb{Z}/p\mathbb{Z}$). - The second line contains an integer $m$, the number of maximal simplices.
- The next $m$ lines each contain a simplex, represented as a space-separated list of vertex indices.
Output:¶
- For each dimension $k = 0, 1, 2, \ldots$ up to the dimension of the complex, print:
H_k =followed by the $k$-th homology group.- Represent the group in the form $\mathbb{Z}^r \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}$ where $r$ is the rank (free part) and $d_i$ are the torsion coefficients ordered according to $d_i | d_{i+1}$.
- If the group is trivial, print
H_k = 0.
Notes:¶
- You may use libraries like NumPy or SymPy for computing the Smith Normal Form.
- Construct the boundary matrices $\partial_k$ for each dimension and use their Smith Normal Forms to extract homology information.
- Remember to orient simplices consistently when building boundary matrices.
# Your solution for Task 3
Task 4: Explicit Cycle Representatives for Homology Generators¶
Write a Python program that computes the homology groups of a simplicial complex and finds explicit cycle representatives for each generator of the homology groups.
Background:¶
Beyond computing homology groups abstractly, it's often useful to have explicit simplicial chains that represent the generators. These are specific linear combinations of simplices that represent non-trivial homology classes — cycles that are not boundaries of higher-dimensional chains.
Input:¶
- The first line contains an integer $m$, the number of maximal simplices.
- The next $m$ lines each contain a simplex, represented as a space-separated list of vertex indices.
Output:¶
- For each dimension $k = 0, 1, 2, \ldots$ up to the dimension of the complex:
- Print
H_k(K) =followed by the $k$-th homology group in the form $\mathbb{Z}^r \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}$. - For each generator of $H_k(K)$, print on a new line the explicit cycle as a linear combination of $k$-simplices.
- Format:
c_1 * [v_1, v_2, ..., v_{k+1}] + c_2 * [u_1, u_2, ..., u_{k+1}] + ...where $c_i$ are coefficients.
- Print
Notes:¶
- You may use libraries like SageMath, gudhi, or similar computational topology libraries that provide homology computation with cycle representatives.
- Ensure that the cycles you output are indeed closed (i.e., $\partial(\text{cycle}) = 0$).
- The representatives should be linearly independent modulo boundaries.
# Your solution for Task 4
Task 5: Killing Homology by Adding Simplices¶
Write a Python program that modifies a given simplicial complex by adding new simplices to kill (make trivial) a specific homology group $H_n(K)$ while preserving all lower-dimensional homology groups $H_k(K)$ for $k < n$.
Background:¶
This process is related to constructing CW complexes with prescribed homology. By attaching $(n+1)$-cells (or equivalently, adding $(n+1)$-simplices), we can kill $n$-dimensional homology classes. Each generator of $H_n(K)$ is represented by an $n$-cycle; by adding an $(n+1)$-simplex whose boundary is that cycle, we make it a boundary and thus trivial in homology.
Input:¶
- The first line contains an integer $n$, the dimension of the homology group to kill.
- The second line contains an integer $m$, the number of maximal simplices in the original complex.
- The next $m$ lines each contain a simplex, represented as a space-separated list of vertex indices.
Output:¶
- Print the modified complex with added simplices.
- First, print all maximal simplices from the original complex in a single line.
- Then, in the next line print the newly added $(n+1)$-simplices.
- Finally, verify and in the last line print the homology groups of the new complex to confirm that $H_n = 0$ and $H_k$ is unchanged for $k < n$.
Notes:¶
- For each generator of $H_n(K)$, you need to find its cycle representative and try to attach $(n+1)$-simplices that will form a chain whose boundary is that cycle.
- You may need to introduce new vertices for the interior of these higher-dimensional simplices.
- The construction should not affect lower-dimensional homology groups.
# Your solution for Task 5
Task 6: Killing Homology by Removing Simplices¶
Write a Python program that modifies a given simplicial complex by removing certain simplices to kill (make trivial) a specific homology group $H_n(K)$ while preserving all homology groups $H_k(K)$ for $k < n-1$. The $(n-1)$-th homology group $H_{n-1}(K)$ may increase.
Background:¶
Instead of adding cells, we can sometimes kill homology by removing simplices, which corresponds to a form of "surgery" on the complex. This is subtler than adding simplices, as we must ensure that removing simplices doesn't inadvertently affect lower homology. When we remove $n$-simplices, their boundaries (which were not cycles before) may become cycles, potentially increasing $H_{n-1}$.
Input:¶
- The first line contains an integer $n$, the dimension of the homology group to kill.
- The second line contains an integer $m$, the number of maximal simplices in the original complex.
- The next $m$ lines each contain a simplex, represented as a space-separated list of vertex indices.
Output:¶
- Print the modified complex with removed simplices.
- List all maximal simplices that remain in the complex after removal.
- Print the homology groups before and after the modification.
- Verify that $H_n = 0$ in the new complex, $H_k$ is unchanged for $k < n-1$, and show any changes to $H_{n-1}$.
Notes:¶
- Removing $n$-simplices can kill $n$-cycles by eliminating the simplices they're composed of.
- This may create new $(n-1)$-cycles (increasing $H_{n-1}$) since the boundaries of removed $n$-simplices become new cycles.
- You need to carefully select which simplices to remove to achieve the desired homological effect.
- When removing simplices, ensure the resulting space is still a valid simplicial complex (closed under taking faces).
# Your solution for Task 6