A map that cannot be undone
In 1931 Heinz Hopf wrote down a map and proved that it cannot be deformed to a constant map. This was a surprise. Homology sees nothing: , so every map induces zero on . Yet Hopf's map is essential, and the reason is geometric: the preimages of any two points of are two circles in that are linked, like two rings of a chain.
Homotopy theory studies spaces and maps up to continuous deformation. Its basic invariants, the homotopy groups , are defined just like the fundamental group, with -spheres in place of loops. They are easy to define and fiendishly hard to compute — not even the homotopy groups of spheres are known in general:
(Toda, 1962.) This lesson develops the tools that produce such tables: fibrations and their long exact sequences, the Hopf fibration, and the theorems of Hurewicz, Whitehead and Freudenthal that connect homotopy to homology and stabilise it. It assumes the fundamental group and covering spaces and algebraic topology (homology and CW complexes).
Room to move
An element of is a map from the cube to sending the whole boundary to the base point — an -dimensional "balloon" pinned at — up to deformation. Two such maps are added by placing their cubes side by side along the first coordinate and squashing. For this is concatenation of loops, which is not commutative in general.
For there is room to move. Shrink into the bottom-left corner and into the top-right corner (the rest of the cube goes to ), slide them past each other, and expand again: becomes .
The second idea is that homotopy groups behave well for fibrations — maps that look, up to homotopy, like projections of a product, though they may be globally twisted. A fibration with fibre gives a long exact sequence linking , and . Covering spaces are fibrations with discrete fibres; the Hopf map is a fibration with fibre , and its exact sequence computes .
Definitions
Spaces have base points, maps preserve them, and homotopies fix them; denotes based homotopy classes of based maps.
Definition— homotopy groups
For , is the set of homotopy classes of maps , homotopies being through such maps. Equivalently, since , . For it is a group under
with identity the constant map and inverse . is the set of path components and is the fundamental group. A based map induces homomorphisms .
Definition— n-connected; weak homotopy equivalence
is -connected if for (so -connected means path connected and -connected means simply connected). A map is a weak homotopy equivalence if it induces bijections for all and all base points.
Definition— fibration
A map has the homotopy lifting property for a space if for every homotopy and every map with there is a homotopy with and . It is a (Hurewicz) fibration if this holds for all spaces , and a Serre fibration if it holds for all discs (equivalently, all CW complexes). The fibre over is , and we write .
Definition— fibre bundle
A fibre bundle with fibre is a map such that every point of has a neighbourhood with a homeomorphism over . Every fibre bundle is a Serre fibration (Hatcher, Proposition 4.48), and a fibre bundle over a paracompact base is a Hurewicz fibration (Hurewicz, 1955).
Definition— suspension and loop space
The reduced suspension is with collapsed to a point; . The loop space is the space of based loops in (compact-open topology). They are adjoint: , and in particular .
Definition— Eilenberg–MacLane space
For a group and (with abelian if ), an Eilenberg–MacLane space is a connected CW complex with and for .
Examples
Example— Easy cases
- If is contractible, for all .
- : a map into a product is a pair of maps, and likewise for homotopies.
- for , detected by the degree (proved below via Hurewicz). The identity map generates.
- for (Theorem 5).
Example— Spheres are not determined by dimension
Higher homotopy groups do not vanish above the dimension: (Theorem 7), and Serre showed in the early 1950s that is non-zero for infinitely many when . So a -dimensional CW complex can have non-zero homotopy groups in infinitely many degrees, whereas its homology vanishes above degree .
Example— Eilenberg–MacLane spaces you know
- : its universal cover is contractible, so for (Corollary 4).
- for a closed orientable surface of genus , whose universal cover is the plane.
- , covered by the contractible sphere .
- , from the fibration and the long exact sequence.
Homotopy groups and fibrations
Theorem— Theorem 1 (higher homotopy groups are abelian)
For , is a group, and for it is abelian.
Proof
The group axioms are checked exactly as for , using reparametrisations in the first coordinate. For define a second operation by concatenating in the second coordinate; write for the first. Both have the constant map as identity. They satisfy the interchange law
on the nose: both sides are the map on that is , , , on the four quarters , , , , suitably rescaled. Now the Eckmann–Hilton argument, which uses nothing but the two unit laws and the interchange law (writing for the common unit ):
(In general one first shows that the two units agree, by the same trick: .) So the two operations coincide on and are commutative.
∎
For there is only one coordinate, the argument has nothing to work with, and indeed of the figure eight is a non-abelian free group.
Theorem— Theorem 2 (covering spaces are fibrations)
A covering map has the homotopy lifting property for all spaces, with unique lifts.
This is the homotopy lifting theorem for covering spaces from the fundamental group lesson (Hatcher, Proposition 1.30): lift along each slice using unique path lifting, and check continuity locally using evenly covered neighbourhoods.
Theorem— Theorem 3 (long exact sequence of a fibration)
Let be a Serre fibration, , and . There is a long exact sequence
where the last three terms are only pointed sets and exactness there means that preimages of the base point are images.
Proof
The boundary map. Represent by with , and view as a homotopy of maps . Lift it, starting from the constant map on and remaining on ; such relative lifts exist for Serre fibrations, because is homeomorphic to . The lift maps the top face into and its boundary to , and is its class in . Well-definedness follows by lifting homotopies one dimension higher.
Exactness at . First , since is constant. Conversely, let and suppose is null-homotopic through a homotopy with , and . Lift to with and on . Then maps into with boundary at , and is a homotopy from to through maps of . So .
Exactness at the other two places is proved by the same lifting technique; equivalently, is an isomorphism and the sequence is the long exact sequence of the pair (Hatcher, Theorem 4.41).
∎
Theorem— Corollary 4 (covering spaces)
If is a covering map, then is an isomorphism for . In particular , for , and for .
Proof
The fibre is discrete, so for , and the exact sequence (for ) gives the isomorphism. Apply it to , (contractible covers) and .
∎
Theorem— Theorem 5 (spheres are highly connected)
for .
Proof
By the cellular approximation theorem (Hatcher, Theorem 4.8), every map between CW complexes is homotopic to a cellular one, i.e. one sending the -skeleton into the -skeleton; the homotopy can be taken relative to a subcomplex on which the map is already cellular, such as the base point. Give and the cell structures and . A cellular map sends into the -skeleton of , which for is the single point . So every based map is based-homotopic to a constant.
∎
The Hopf fibration and π₃(S²)
Regard and . The Hopf map is
Theorem— Theorem 6 (the Hopf fibration)
maps onto ; its fibres are exactly the circles ; and is a fibre bundle with fibre . Under stereographic projection it is the map , so is the quotient map .
Proof
Into : .
Constant on circles: when .
Fibres are exactly circles: suppose for two points of . The second coordinates and give and ; the first gives . Put . Then
and symmetrically (using ) . Finally .
Stereographic form: projecting from , a point goes to ; here , so . Onto, and locally trivial: over , i.e. where , the map , , is a homeomorphism with inverse in the stereographic coordinate ; this also shows that every is hit. Over use instead.
∎
Theorem— Theorem 7 (Hopf, 1931)
, and for . In particular , generated by the class of .
Proof
The long exact sequence of the fibration contains
For both ends vanish by Corollary 4, so is an isomorphism — this is the algebraic lemma bijective_of_exact formalised below. For the sequence reads , with outer terms zero by Theorem 5, so . Finally is generated by (Corollary 9 below), and .
∎
The Hopf invariant gives a direct geometric reason. For a smooth map , the preimages of two regular values are disjoint closed curves (possibly with several components), and their linking number does not depend on the choices and is a homotopy invariant; is an isomorphism with (Bott and Tu, §17). The experiment below computes the linking numbers of Hopf fibres numerically. The same construction with quaternions and octonions gives Hopf fibrations and , and Adams proved (1960) that maps of Hopf invariant one exist only for . This gives a homotopy-theoretic proof that finite-dimensional real division algebras exist only in dimensions (first proved by Kervaire and by Bott and Milnor in 1958; for normed division algebras the result goes back to Hurwitz, 1898).
Hurewicz, Whitehead, Freudenthal and Eilenberg–MacLane
These are the structural theorems of the subject. We state them precisely and show how they are used; their proofs occupy Chapter 4 of Hatcher.
Theorem— Theorem 8 (Whitehead, 1949)
A weak homotopy equivalence between connected CW complexes is a homotopy equivalence. More generally, if is a map of CW complexes inducing isomorphisms on all , there is with and .
The CW hypothesis matters. The Warsaw circle (the closed topologist's sine curve, closed up by an arc) has all homotopy groups trivial, so the map to a point is a weak homotopy equivalence; but it is not contractible (its Čech cohomology detects the "circle").
Theorem— Theorem 9 (Hurewicz, 1935)
Let be -connected with . Then for , and the Hurewicz map , , is an isomorphism. For and path-connected , .
Theorem— Corollary 10
(a) for , generated by the identity; a map is classified up to homotopy by its degree. (b) Homology Whitehead theorem: a map between simply connected CW complexes that induces isomorphisms on all homology groups is a homotopy equivalence.
Proof
(a) is -connected by Theorem 5, so by Theorem 9 (; for use ). The Hurewicz map sends to times the generator. (b) Sketch: make cellular and replace by the mapping cylinder so that is an inclusion of a subcomplex; then . The relative Hurewicz theorem for the simply connected pair (Hatcher, Theorem 4.32) shows inductively that for all , so is a weak equivalence by the long exact sequence of the pair, and Theorem 8 applies.
∎
Simple connectivity cannot be dropped in (b): if is Poincaré's homology sphere, a degree-one map (collapse the complement of a small ball) induces isomorphisms on all homology groups, but has order , so it is not a homotopy equivalence.
Theorem— Theorem 11 (Freudenthal suspension theorem, 1937)
If is an -connected CW complex, the suspension map is an isomorphism for and surjective for . In particular is an isomorphism for .
So each column of the table in the motivation stabilises: the stable homotopy groups of spheres begin . For example, is onto (the case with ), and , generated by the suspension of the Hopf map, usually called . The stable groups are the subject of stable homotopy theory.
Theorem— Theorem 12 (Eilenberg–MacLane spaces)
For every and group (abelian if ), a exists and is unique up to homotopy equivalence. For CW complexes and abelian , there is a natural bijection , sending to for a fundamental class .
Construction: start with a wedge of -spheres, one for each generator of , attach -cells to impose the relations (this gives by Hurewicz and cellular approximation), then attach cells of dimension to kill all higher homotopy groups. Uniqueness comes from Whitehead's theorem, and representability is Hatcher, Theorem 4.57. Thus cohomology is a homotopy-theoretic object: the cup product, for instance, is induced by maps . Dually, every connected CW complex is assembled from Eilenberg–MacLane spaces in a Postnikov tower, glued by cohomology classes (-invariants).
Eckmann–Hilton and the Hopf map in Lean
The Eckmann–Hilton argument of Theorem 1 is proved independently, for any set with two unital operations satisfying the interchange law; the calc blocks are the displayed equations of the proof.
/-- **Eckmann–Hilton.** If a set carries two binary operations `m₁`, `m₂` with units `e₁`, `e₂`
that satisfy the interchange law `(a ·₂ b) ·₁ (c ·₂ d) = (a ·₁ c) ·₂ (b ·₁ d)`, then the units
agree, the operations agree, and the operation is commutative. For `πₙ` with `n ≥ 2`,
concatenation of cubes in two different coordinate directions gives two such operations. -/
theorem eckmann_hilton {M : Type*} (m₁ m₂ : M → M → M) (e₁ e₂ : M)
(h₁l : ∀ a, m₁ e₁ a = a) (h₁r : ∀ a, m₁ a e₁ = a)
(h₂l : ∀ a, m₂ e₂ a = a) (h₂r : ∀ a, m₂ a e₂ = a)
(interchange : ∀ a b c d, m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d)) :
e₁ = e₂ ∧ (∀ a b, m₁ a b = m₂ a b) ∧ (∀ a b, m₁ a b = m₁ b a) := by
-- the units agree
have he : e₁ = e₂ :=
calc e₁ = m₁ e₁ e₁ := (h₁l e₁).symm
_ = m₁ (m₂ e₂ e₁) (m₂ e₁ e₂) := by rw [h₂l, h₂r]
_ = m₂ (m₁ e₂ e₁) (m₁ e₁ e₂) := interchange _ _ _ _
_ = m₂ e₂ e₂ := by rw [h₁r, h₁l]
_ = e₂ := h₂l e₂
-- the operations agree
have hm : ∀ a b, m₁ a b = m₂ a b := fun a b =>
calc m₁ a b = m₁ (m₂ a e₂) (m₂ e₂ b) := by rw [h₂r, h₂l]
_ = m₂ (m₁ a e₂) (m₁ e₂ b) := interchange _ _ _ _
_ = m₂ a b := by rw [← he, h₁r, h₁l]
refine ⟨he, hm, fun a b => ?_⟩
-- and the operation is commutative
calc m₁ a b = m₁ (m₂ e₂ a) (m₂ b e₂) := by rw [h₂l, h₂r]
_ = m₂ (m₁ e₂ b) (m₁ a e₂) := interchange _ _ _ _
_ = m₂ b a := by rw [← he, h₁l, h₁r]
_ = m₁ b a := (hm b a).symmMathlib defines with cubes exactly as in the lesson (HomotopyGroup.Pi n X x, notation π_ n X x), and proves commutativity for by the same Eckmann–Hilton argument (EckmannHilton.commGroup), applied to concatenation in two different cube directions. It also identifies the cube version of with the fundamental group, and loops of loops with higher loops:
/-- **Higher homotopy groups are abelian:** `πₙ₊₂(X, x)` is commutative. This uses Mathlib's
instance `HomotopyGroup.commGroup`, which is built with `EckmannHilton.commGroup` from the
interchange law for concatenation in two different cube directions. -/
theorem pi_comm (n : ℕ) (X : Type*) [TopologicalSpace X] (x : X)
(a b : π_ (n + 2) X x) : a * b = b * a :=
mul_comm a b/-- `π₁(X, x)`, defined with cubes, is isomorphic as a group to the fundamental group of loops
up to homotopy. This applies Mathlib's `HomotopyGroup.pi1MulEquivFundamentalGroup`. -/
theorem pi_one (X : Type*) [TopologicalSpace X] (x : X) :
Nonempty (π_ 1 X x ≃* FundamentalGroup X x) :=
⟨HomotopyGroup.pi1MulEquivFundamentalGroup⟩/-- **Loops of loops are higher loops:** the space of `M`-cubes in the space of `N`-cubes of `X`
is homeomorphic to the space of `(M ⊕ N)`-cubes of `X`. Taking `M` with one element this is the
statement `Ω(Ωⁿ X) ≅ Ωⁿ⁺¹ X` behind `πₖ(ΩX) ≅ πₖ₊₁(X)`. This applies Mathlib's
`GenLoop.genLoopGenLoopEquiv`. -/
theorem loops_of_loops (M N : Type*) (X : Type*) [TopologicalSpace X] (x : X) :
Nonempty (Ω^ M (Ω^ N X x) GenLoop.const ≃ₜ Ω^ (M ⊕ N) X x) :=
⟨GenLoop.genLoopGenLoopEquiv x⟩The Hopf map and the first three claims of Theorem 6 are formalised independently. The proof that fibres are exactly circles uses the same as the human proof; each displayed identity becomes a linear_combination of the hypotheses.
/-- The **Hopf map** `ℂ² → ℂ × ℝ ≅ ℝ³`, `(z, w) ↦ (2 z w̄, |z|² - |w|²)`. Restricted to the unit
sphere `S³ ⊂ ℂ²` it is the Hopf fibration `S³ → S²`. -/
noncomputable def hopf (p : ℂ × ℂ) : ℂ × ℝ :=
(2 * p.1 * conj p.2, Complex.normSq p.1 - Complex.normSq p.2)/-- The Hopf map sends `S³` to `S²`: if `|z|² + |w|² = 1` then
`|2 z w̄|² + (|z|² - |w|²)² = 4|z|²|w|² + (|z|² - |w|²)² = (|z|² + |w|²)² = 1`. -/
theorem hopf_mem_sphere (z w : ℂ) (h : Complex.normSq z + Complex.normSq w = 1) :
Complex.normSq (hopf (z, w)).1 + (hopf (z, w)).2 ^ 2 = 1 := by
simp only [hopf, Complex.normSq_mul, Complex.normSq_conj]
have h2 : Complex.normSq 2 = 4 := by norm_num [Complex.normSq_apply]
rw [h2]
linear_combination (Complex.normSq z + Complex.normSq w + 1) * h/-- The Hopf map is constant on circles: multiplying `(z, w)` by a unit complex number `λ`
does not change `hopf (z, w)`, because `λ λ̄ = |λ|² = 1`. -/
theorem hopf_circle_invariant (l z w : ℂ) (hl : Complex.normSq l = 1) :
hopf (l * z, l * w) = hopf (z, w) := by
have hc : l * conj l = 1 := by rw [Complex.mul_conj, hl, Complex.ofReal_one]
unfold hopf
ext
· -- first component: `2 (λz) conj(λw) = 2 z w̄ · λλ̄`
simp only [map_mul]
linear_combination (2 * z * conj w) * hc
· -- second component: `|λz|² - |λw|² = |λ|² (|z|² - |w|²)`
simp only [Complex.normSq_mul, hl, one_mul]/-- **The fibres of the Hopf map are exactly circles.** If two points `(z, w)` and `(z', w')` of
`S³` have the same image, then `(z', w') = λ · (z, w)` for a unit complex number `λ`; one can
take the Hermitian inner product `λ = z' z̄ + w' w̄`. Together with `hopf_circle_invariant`, the
fibre over each point of `S²` is a great circle of `S³`. -/
theorem hopf_fibre (z w z' w' : ℂ) (hs : Complex.normSq z + Complex.normSq w = 1)
(hs' : Complex.normSq z' + Complex.normSq w' = 1) (heq : hopf (z, w) = hopf (z', w')) :
∃ l : ℂ, Complex.normSq l = 1 ∧ z' = l * z ∧ w' = l * w := by
simp only [hopf, Prod.mk.injEq] at heq
obtain ⟨h1, h2⟩ := heq
-- the moduli agree
have hz : Complex.normSq z = Complex.normSq z' := by linarith
have hw : Complex.normSq w = Complex.normSq w' := by linarith
-- the same facts as identities of complex numbers
have e1 : z * conj w = z' * conj w' := by linear_combination h1 / 2
have e1c : conj z * w = conj z' * w' := by
have := congrArg conj e1
simpa [map_mul, mul_comm] using this
have mz : z * conj z = (Complex.normSq z : ℂ) := Complex.mul_conj z
have mw : w * conj w = (Complex.normSq w : ℂ) := Complex.mul_conj w
have mz' : z' * conj z' = (Complex.normSq z' : ℂ) := Complex.mul_conj z'
have mw' : w' * conj w' = (Complex.normSq w' : ℂ) := Complex.mul_conj w'
have cz : (Complex.normSq z : ℂ) = Complex.normSq z' := by rw [hz]
have cw : (Complex.normSq w : ℂ) = Complex.normSq w' := by rw [hw]
have cs : (Complex.normSq z : ℂ) + Complex.normSq w = 1 := by
rw [← Complex.ofReal_add, hs, Complex.ofReal_one]
-- the circle parameter is the Hermitian inner product of the two points
set l := z' * conj z + w' * conj w with hl
have hz' : z' = l * z := by
rw [hl]
linear_combination (-z') * mz + (-w') * e1 + (-z') * mw' + z' * cw + (-z') * cs
have hw' : w' = l * w := by
rw [hl]
linear_combination (-z') * e1c + (-w') * mz' + (-w') * mw + w' * cz + (-w') * cs
refine ⟨l, ?_, hz', hw'⟩
-- `1 = |z'|² + |w'|² = |λ|² (|z|² + |w|²) = |λ|²`
have k1 : Complex.normSq z' = Complex.normSq l * Complex.normSq z := by
rw [← Complex.normSq_mul, ← hz']
have k2 : Complex.normSq w' = Complex.normSq l * Complex.normSq w := by
rw [← Complex.normSq_mul, ← hw']
linear_combination (-Complex.normSq l) * hs - k1 - k2 + hs'The algebraic step in the proof of Theorem 7 — an exact sequence of groups whose outer terms are trivial has a bijective middle map — is proved for arbitrary groups:
/-- **An exact sequence flanked by trivial groups.** If `A → B → C → D` is exact at `B` and at
`C` (kernel = image) and `A`, `D` are trivial, then `g : B → C` is bijective. In the long exact
sequence of the Hopf fibration, `π₃(S¹) → π₃(S³) → π₃(S²) → π₂(S¹)` with `πₖ(S¹) = 0` for
`k ≥ 2`, this gives `π₃(S²) ≅ π₃(S³) ≅ ℤ`. -/
theorem bijective_of_exact {A B C D : Type*} [Group A] [Group B] [Group C] [Group D]
[Subsingleton A] [Subsingleton D] (f : A →* B) (g : B →* C) (k : C →* D)
(exactB : ∀ b, g b = 1 ↔ ∃ a, f a = b) (exactC : ∀ c, k c = 1 ↔ ∃ b, g b = c) :
Function.Bijective g := by
constructor
· -- injective: the kernel of `g` is the image of the trivial group `A`
intro b₁ b₂ h
have hker : g (b₁⁻¹ * b₂) = 1 := by rw [map_mul, map_inv, h, inv_mul_cancel]
obtain ⟨a, ha⟩ := (exactB _).1 hker
have ha1 : a = 1 := Subsingleton.elim a 1
rw [ha1, map_one] at ha
-- `1 = b₁⁻¹ * b₂`, so `b₁ = b₂`
exact inv_mul_eq_one.mp ha.symm
· -- surjective: everything is in the kernel of the map to the trivial group `D`
intro c
exact (exactC c).1 (Subsingleton.elim _ _)What is and is not formalised. Formalised independently: the Eckmann–Hilton argument, the Hopf map, that it maps to , is constant on circles and has exactly circles as fibres, and the exact-sequence lemma. From Mathlib: , its group structure and commutativity, and . Not formalised (and, as far as we know, not yet in Mathlib): surjectivity and local triviality of the Hopf map, the long exact sequence of a fibration, , cellular approximation, and the theorems of Whitehead, Hurewicz and Freudenthal. So Theorem 7 is formalised only in its algebraic and geometric ingredients. (Several of these results have been formalised synthetically in homotopy type theory — see the logic viewpoint below.)
Linked fibres, numerically
The experiment samples five fibres of , checks that is constant on them to rounding error, projects them stereographically into and evaluates Gauss's linking integral
for every pair, with a control pair of unlinked circles.
"""The Hopf fibration numerically: fibres are circles, and any two of them link.
The Hopf map h(z, w) = (2 z conj(w), |z|^2 - |w|^2) sends the unit sphere S^3
in C^2 to the unit sphere S^2. The fibre over a point p is the circle
{(lz, lw) : |l| = 1}. We sample fibres, check that h is constant on them, map
them into R^3 by stereographic projection, and evaluate Gauss's linking
integral for pairs of fibres. The answer is 1 every time: the Hopf invariant of
h, which is why h generates pi_3(S^2) = Z. Numerical evidence only.
"""
import math
import numpy as np
def hopf(z, w):
"""The Hopf map, returning a point (x, y, t) of R^3."""
v = 2 * z * np.conj(w)
return np.stack([v.real, v.imag, abs(z) ** 2 - abs(w) ** 2], axis=-1)
def fibre(p, n=400):
"""n points (z, w) on the fibre over the unit vector p = (a, b, c)."""
a, b, c = p
if c >= 0:
z0 = math.sqrt((1 + c) / 2)
w0 = complex(a, -b) / (2 * z0)
else:
w0 = math.sqrt((1 - c) / 2)
z0 = complex(a, b) / (2 * w0)
lam = np.exp(2j * np.pi * np.arange(n) / n)
return lam * z0, lam * w0
def stereographic(z, w):
"""Project S^3 minus the point (0, i) to R^3."""
return np.stack([z.real, z.imag, w.real], axis=-1) / (1 - w.imag)[:, None]
def spectral_derivative(c):
"""Derivative d/dtheta of a closed curve sampled at n equally spaced angles."""
n = len(c)
k = np.fft.fftfreq(n, d=1.0 / n)
k[n // 2] = 0 if n % 2 == 0 else k[n // 2]
return np.real(np.fft.ifft(1j * k[:, None] * np.fft.fft(c, axis=0), axis=0))
def linking_number(c1, c2):
"""Gauss linking integral of two closed curves sampled uniformly in angle.
Uses the periodic trapezoidal rule with spectrally exact tangent vectors,
which converges faster than any power of 1/n for smooth curves.
"""
t1, t2 = spectral_derivative(c1), spectral_derivative(c2)
r = c1[:, None, :] - c2[None, :, :]
cross = np.cross(t1[:, None, :], t2[None, :, :])
integrand = np.einsum("ijk,ijk->ij", r, cross)
integrand /= np.linalg.norm(r, axis=-1) ** 3
h = 2 * math.pi / len(c1) * 2 * math.pi / len(c2)
return integrand.sum() * h / (4 * math.pi)
def round_circle(center, n=400, vertical=False):
"""A unit circle around center, horizontal or in a vertical (x, z) plane."""
t = 2 * np.pi * np.arange(n) / n
if vertical:
pts = np.stack([np.cos(t), np.zeros(n), np.sin(t)], axis=-1)
else:
pts = np.stack([np.cos(t), np.sin(t), np.zeros(n)], axis=-1)
return pts + np.asarray(center, dtype=float)
def unit(v):
"""Normalise a vector to a point of S^2."""
v = np.asarray(v, dtype=float)
return v / np.linalg.norm(v)
POINTS = {
"north pole": unit([0, 0, 1]),
"equator, x": unit([1, 0, 0]),
"equator, y": unit([0, 1, 0]),
"(1, 1, 1)": unit([1, 1, 1]),
"(-2, 1, -1)": unit([-2, 1, -1]),
}
def main():
print("Hopf map h : S^3 -> S^2, h(z, w) = (2 z conj(w), |z|^2 - |w|^2)")
print()
curves = {}
worst = 0.0
for name, p in POINTS.items():
z, w = fibre(p)
worst = max(worst, float(np.abs(hopf(z, w) - p).max()))
curves[name] = stereographic(z, w)
print(f"max |h(x) - p| over 400 points on each of 5 fibres: {worst:.1e}")
print()
print("Gauss linking numbers of the projected fibres (400 points each):")
names = list(POINTS)
for i in range(len(names)):
for j in range(i + 1, len(names)):
lk = linking_number(curves[names[i]], curves[names[j]])
print(f" {names[i]:<12} with {names[j]:<12} Lk = {lk:.10f}")
flat = round_circle([0, 0, 0])
apart = linking_number(flat, round_circle([3, 0, 0], vertical=True))
print(f" control: two unlinked round circles Lk = {abs(apart):.10f}")
print()
print("Every pair of fibres links once. The linking number of two fibres")
print("is the Hopf invariant H(h) = 1; a map S^3 -> S^2 homotopic to a")
print("constant would have H = 0, so h is not null-homotopic.")
print()
print("Epistemic status: numerical evidence. The trapezoidal rule for")
print("smooth closed curves converges very fast and the values agree with")
print("the integer 1 to many digits, but floating-point quadrature proves")
print("nothing; the lesson proves that h generates pi_3(S^2) = Z.")
if __name__ == "__main__":
main()Every pair links exactly once, as the Hopf invariant predicts. Because the curves are smooth and periodic, the trapezoidal rule with spectrally computed tangents is accurate to many digits — but this is numerical evidence about five fibres, not a proof; the proof that generates is Theorem 7.
Explore: homotopy versus homology in the twice-punctured plane
The plane with two holes is homotopy equivalent to the figure eight, so its fundamental group is free on two loops , around the holes, while records only the winding numbers. Choose Draw your own and draw the commutator loop : around the left hole, around the right hole, back around the left hole the other way, then around the right hole the other way.
Winding around a hole
The commutator loop winds 0 times around each hole, yet cannot be shrunk to a point.
Drag a hole to move it. Press Play to send the point around the loop, or use the slider. The small square marks the start.
Winding number around p₁−1
(1/2πi)∮ dz/(z − p₁) ≈ −1.000 + 0.000i
Winding number around p₂1
(1/2πi)∮ dz/(z − p₂) ≈ 1.000 + 0.000i
Turns swept so far by each dashed arrow:
p₁: 0.00p₂: 0.00
The winding number is found by adding up the small changes in direction of the arrow from the hole to the moving point, and dividing the total by 360°. Counter-clockwise counts as positive.
With two holes, the winding numbers around each hole are still invariants, but they no longer tell the whole story. The fundamental group is now the free group on two generators: a loop that goes around p₁, then p₂, then p₁ backwards, then p₂ backwards winds 0 times around each hole, yet it cannot be shrunk to a point.
A link to complex analysis: think of the plane as the complex numbers and of a hole as a point a. Then (1/2πi)∮ dz/(z − a) equals the winding number around a. The values above are computed numerically along the loop.
Both winding numbers of the commutator are , so it is zero in — this is the Hurewicz theorem in degree one, — yet it is not null-homotopic, because in the free group. Homotopy remembers order; homology forgets it.
Exercises
1. Homotopy theory
Warm-upHumanFor which is ? (Select all that apply.)
2. Homotopy theory
CoreHumanWhich list gives of ?
3. Homotopy theory
CoreHumanThe quaternionic Hopf fibration has null-homotopic fibre inclusion (since ), and this splits its long exact sequence: . Given and , what is the order of the torsion subgroup of ?
4. Homotopy theory
CoreHumanThe Eckmann–Hilton argument proves that is abelian for . Why does it not apply to ?
5. Homotopy theory
CoreHumanWhich example shows that the CW hypothesis in Whitehead's theorem cannot be dropped?
6. Homotopy theory
StretchHumanLet be Poincaré's homology sphere and a degree-one map. Which statement is correct?
7. Homotopy theory
CoreFormalLet S3 z w abbreviate Complex.normSq z + Complex.normSq w = 1. Which Lean statement says that the fibre of the Hopf map through a point of is exactly the circle through it?
8. Homotopy theory
CoreComputationalWrite hopf(z, w) returning the triple (x, y, t) of real numbers with and . The tests check that points of go to , that the map is constant on circles , and two special values.
Common misconceptions
Misconception
"Higher homotopy groups of spheres vanish above the dimension, as homology does." They do not: , and by Serre's work is non-zero for infinitely many when . Homology vanishes above the dimension of a CW complex because it is computed from cells; homotopy groups are not.
Misconception
"A map inducing isomorphisms on all homology groups is a homotopy equivalence." Only with extra hypotheses: for CW complexes that are simply connected (Corollary 10(b)). The degree-one map from Poincaré's homology sphere to is a homology isomorphism but not a homotopy equivalence. Even isomorphisms on all homotopy groups need the CW hypothesis (Theorem 8; the Warsaw circle).
Misconception
"Abstractly isomorphic homotopy groups mean homotopy equivalent spaces." Whitehead's theorem needs a map inducing the isomorphisms. and have isomorphic homotopy groups in every degree (both have and universal cover ) but are not homotopy equivalent: one is orientable and the other is not, so their top homology groups differ.
Misconception
"A fibration is a product, or at least locally a product." The Hopf fibration is not a product — , since — and a fibration need not be locally trivial at all; only its homotopy lifting property matters. What is true is that all fibres over a path-connected base are homotopy equivalent.
Viewpoints
Topology— The homotopy category and its invariants
Homotopy theory replaces the category of spaces by the homotopy category, where homotopic maps are identified and weak equivalences are inverted; Whitehead's theorem says this loses nothing for CW complexes. The fundamental question is to compute , and the tools are exact sequences (of pairs, of fibrations, of cofibrations ), obstruction theory (extending a map cell by cell, with obstructions in ), and spectral sequences. A beautiful example: Pontryagin's theorem identifies with framed -dimensional submanifolds of up to framed cobordism — the preimage of a regular value — and the Hopf map corresponds to a circle with a framing that twists once.
Geometry— Clifford circles and Lie groups
The fibres of the Hopf map are great circles of , any two of which are Clifford parallel (at constant distance) and linked; the preimage of a circle of latitude is a flat torus. The unit quaternions form the Lie group , and is the quotient . More generally, for every compact simple Lie group , and , and Bott periodicity (1959) gives and for the infinite unitary and orthogonal groups — the source of the - and -fold periodicities of K-theory and of Clifford algebras.
Algebra— Rationally, spheres are simple
Serre's finiteness theorem (1953): is finite except for , and, when is even, , where it is plus a finite group. So rationally the homotopy groups of spheres are almost trivial, and rational homotopy theory (Quillen, 1969; Sullivan, 1977) shows that the rational homotopy type of a simply connected space is captured completely by algebra: a commutative differential graded algebra or a differential graded Lie algebra. The torsion is where the difficulty lives, prime by prime, organised by the Adams spectral sequence and chromatic homotopy theory.
Logic— Homotopy type theory
In homotopy type theory, types are spaces, identity proofs are paths, and higher inductive types define spheres directly. Results such as (Licata and Shulman, 2013), the Freudenthal suspension theorem, the long exact sequence of a fibration and the Hopf fibration have synthetic proofs valid in any model, including -toposes. Guillaume Brunerie (2016) proved in this setting that for an explicitly defined integer , and then that ; computing by running the proof as a program became a famous challenge, met with a simplified definition by Axel Ljungström and Anders Mörtberg in Cubical Agda (2023).
Physics— Monopoles, solitons and instantons
The Hopf fibration is the bundle of Dirac's magnetic monopole of unit charge (1931, the same year as Hopf's paper): the electron's wavefunction is a section of the associated line bundle over a sphere surrounding the monopole, and the charge quantisation is the integer classifying the bundle (see vector bundles). Homotopy groups classify topological defects and solitons: field configurations on with values in that are constant at infinity are maps , and their Hopf invariant is a conserved topological charge (Faddeev–Skyrme "hopfions"); Yang–Mills instantons on are labelled by . These are physical heuristics backed by theorems in each mathematical model, not derivations of physics.
Category theory— Spaces are ∞-groupoids
A space determines its fundamental -groupoid: points, paths, homotopies between paths, and so on. Grothendieck's homotopy hypothesis — made precise by Quillen's equivalence between topological spaces and Kan complexes — says that homotopy types are -groupoids. Quillen's model categories (1967) axiomatised the passage to the homotopy category, and ∞-categories now provide a framework in which homotopy theory is done systematically, from algebraic geometry to the stable homotopy category.
History and global context
- Higher homotopy groups. Eduard Čech introduced higher homotopy groups at the 1932 International Congress in Zürich, but because they were abelian they were dismissed as unlikely to say more than homology. Witold Hurewicz rediscovered them in 1935–36 and proved the theorem connecting them to homology.
- Hopf. Heinz Hopf's 1931 paper constructed and the linking invariant, the first sign that homotopy groups of spheres do not vanish above the dimension. Hans Freudenthal proved the suspension theorem in 1937, introducing the stable range.
- Framed manifolds. Lev Pontryagin in the Soviet Union related to framed manifolds and computed the first two stable stems (1950), and Vladimir Rokhlin's work on the third stable stem in the early 1950s led to his theorem that the signature of a smooth spin -manifold is divisible by .
- The 1940s and 1950s. J. H. C. Whitehead's combinatorial homotopy (1949) introduced CW complexes and his theorem. Samuel Eilenberg and Saunders Mac Lane developed the spaces and their cohomology. Jean-Pierre Serre's thesis (1951) brought spectral sequences of fibrations and loop spaces into the subject, giving finiteness and many computations. Hiroshi Toda's Composition Methods in Homotopy Groups of Spheres (1962) computed for . J. Frank Adams built his spectral sequence (1958) and settled the Hopf invariant one problem (1960).
- Recent work. Michael Hill, Michael Hopkins and Douglas Ravenel solved the Kervaire invariant one problem in all dimensions except (2016), and Weinan Lin, Guozhen Wang and Zhouli Xu announced a resolution of dimension in 2024. Daniel Isaksen, Guozhen Wang and Zhouli Xu, using motivic methods and machine computation, determined the stable stems through dimension about (2023). The full computation of remains open, and is not expected to have a closed form.
Further reading
- Allen Hatcher, Algebraic Topology (2002), Chapter 4 — homotopy groups, CW approximation, Whitehead, Hurewicz, fibrations, Eilenberg–MacLane spaces and Postnikov towers.
- J. P. May, A Concise Course in Algebraic Topology (1999) — a fast, categorical account of fibrations, cofibrations and the main theorems.
- George W. Whitehead, Elements of Homotopy Theory (1978) — the classical comprehensive treatment.
- Raoul Bott and Loring W. Tu, Differential Forms in Algebraic Topology (1982), §17–18 — the Hopf invariant via differential forms and the Serre spectral sequence.
- Martin Arkowitz, Introduction to Homotopy Theory (2011) — duality between fibrations and cofibrations, at a gentle pace.
- Hiroshi Toda, Composition Methods in Homotopy Groups of Spheres (1962), and Douglas C. Ravenel, Complex Cobordism and Stable Homotopy Groups of Spheres (1986) — for the computations.
- The Univalent Foundations Program, Homotopy Type Theory: Univalent Foundations of Mathematics (2013), Chapter 8 — synthetic homotopy theory.
Reading path: Hatcher §4.1–4.3 with this lesson, then May; then stable homotopy theory or ∞-categories.