Prove2Me
Navigate
DiscoverFormalpediaBlogsUsersMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Theorem 1.20 (isomorphism form): ∗απ1(Aα)/N≅π1(X)\ast_\alpha\pi_1(A_\alpha)/N\cong\pi_1(X)∗α​π1​(Aα​)/N≅π1​(X) induced by Φ\PhiΦ

Proved
Hatcher.vanKampen_mulEquiv

by korbonits · Sep 8, 2026 · Mathlib 0df444a (Lean v4.33.1)

algebraic-topologyfundamental-grouphatchervan-kampen

Throughout, XXX is a topological space with basepoint x0x_0x0​, and (Aα)α∈ι(A_\alpha)_{\alpha\in\iota}(Aα​)α∈ι​ is a family of subsets of XXX, each containing x0x_0x0​, with the subspace topology. The standing hypotheses of Lemma 1.15 are: each AαA_\alphaAα​ is open and path-connected, X=⋃αAαX=\bigcup_\alpha A_\alphaX=⋃α​Aα​, and each intersection Aα∩AβA_\alpha\cap A_\betaAα​∩Aβ​ is path-connected.

Assume in addition that each triple intersection Aα∩Aβ∩AγA_\alpha\cap A_\beta\cap A_\gammaAα​∩Aβ​∩Aγ​ is path-connected. Then Φ\PhiΦ induces an isomorphism

∗απ1(Aα,x0) / N → ≅  π1(X,x0),[w]↦Φ(w),\ast_\alpha\pi_1(A_\alpha,x_0)\,/\,N\ \xrightarrow{\ \cong\ }\ \pi_1(X,x_0),\qquad [w]\mapsto\Phi(w),∗α​π1​(Aα​,x0​)/N  ≅ ​ π1​(X,x0​),[w]↦Φ(w),

where NNN is the normal subgroup generated by the elements iαβ(ω) iβα(ω)−1i_{\alpha\beta}(\omega)\,i_{\beta\alpha}(\omega)^{-1}iαβ​(ω)iβα​(ω)−1.

This is the final clause of Hatcher's Theorem 1.20, "hence Φ\PhiΦ induces an isomorphism π1(X)≈∗απ1(Aα)/N\pi_1(X)\approx\ast_\alpha\pi_1(A_\alpha)/Nπ1​(X)≈∗α​π1​(Aα​)/N", and the form in which the theorem is applied to wedge sums, graphs and cell complexes.

Formalization Note The statement asserts the existence of a group isomorphism from the quotient group to π1(X,x0)\pi_1(X,x_0)π1​(X,x0​) that sends the class of every word www to Φ(w)\Phi(w)Φ(w); this compatibility determines the isomorphism uniquely. The quotient uses the Normal instance provided with Hatcher.vanKampenNormal.

Preamble
import Definitions.Def_Hatcher_VanKampen
import Mathlib

open Hatcher
Formal statement
namespace Hatcher
theorem vanKampen_mulEquiv {X : Type*} [TopologicalSpace X] {ι : Type*}
    (A : ι → Set X) (x₀ : X) (hx₀ : ∀ α, x₀ ∈ A α)
    (hopen : ∀ α, IsOpen (A α)) (hpc : ∀ α, IsPathConnected (A α))
    (hcover : (⋃ α, A α) = Set.univ) (hinter : ∀ α β, IsPathConnected (A α ∩ A β))
    (htriple : ∀ α β γ, IsPathConnected (A α ∩ A β ∩ A γ)) :
    ∃ e : FreeProd A x₀ hx₀ ⧸ vanKampenNormal A x₀ hx₀ ≃* FundamentalGroup X x₀,
      ∀ g : FreeProd A x₀ hx₀, e (QuotientGroup.mk g) = vanKampenHom A x₀ hx₀ g := by sorry
end Hatcher
Source
A. Hatcher, Algebraic Topology, Cambridge University Press 2002, https://pi.math.cornell.edu/~hatcher/AT/AT.pdf, Section 1.2, p. 43, Theorem 1.20, final clause ('hence Φ induces an isomorphism π₁(X) ≈ ∗_α π₁(A_α)/N')
Read-back

What the Lean code literally says, in plain math · claude-fable-5-1

Read-back: Hatcher.vanKampen_mulEquiv

Data and hypotheses

The statement is universally quantified over the following (all of them are arguments of the theorem; the first two are implicit, the rest explicit):

  • a type XXX equipped with a topology (no separation, compactness, or other axioms are assumed);
  • an arbitrary index type ι\iotaι (no finiteness, countability, nonemptiness, or decidable-equality assumption);
  • a family of subsets Aα⊆XA_\alpha \subseteq XAα​⊆X, one for each α∈ι\alpha \in \iotaα∈ι;
  • a point x0∈Xx_0 \in Xx0​∈X;
  • a proof hx0h_{x_0}hx0​​ that x0∈Aαx_0 \in A_\alphax0​∈Aα​ for every α∈ι\alpha \in \iotaα∈ι;
  • hopenh_{\mathrm{open}}hopen​: every AαA_\alphaAα​ is open in XXX;
  • hpch_{\mathrm{pc}}hpc​: every AαA_\alphaAα​ is path-connected in the following sense (Mathlib's IsPathConnected for a subset F⊆XF \subseteq XF⊆X): there exists a point x∈Fx \in Fx∈F such that for every y∈Fy \in Fy∈F there is a continuous path γ:[0,1]→X\gamma : [0,1] \to Xγ:[0,1]→X with γ(0)=x\gamma(0) = xγ(0)=x, γ(1)=y\gamma(1) = yγ(1)=y, and γ(t)∈F\gamma(t) \in Fγ(t)∈F for all ttt. In particular this forces F≠∅F \neq \varnothingF=∅;
  • hcoverh_{\mathrm{cover}}hcover​: the set equality ⋃α∈ιAα=X\bigcup_{\alpha \in \iota} A_\alpha = X⋃α∈ι​Aα​=X (every point of XXX lies in some AαA_\alphaAα​);
  • hinterh_{\mathrm{inter}}hinter​: for all pairs α,β∈ι\alpha, \beta \in \iotaα,β∈ι (including α=β\alpha = \betaα=β), the set Aα∩AβA_\alpha \cap A_\betaAα​∩Aβ​ is path-connected in the above sense;
  • htripleh_{\mathrm{triple}}htriple​: for all triples α,β,γ∈ι\alpha, \beta, \gamma \in \iotaα,β,γ∈ι (including repeated indices), the set (Aα∩Aβ)∩Aγ(A_\alpha \cap A_\beta) \cap A_\gamma(Aα​∩Aβ​)∩Aγ​ is path-connected in the above sense.

Edge cases the quantifiers silently include: if ι\iotaι is empty, then hx0,hopen,hpc,hinter,htripleh_{x_0}, h_{\mathrm{open}}, h_{\mathrm{pc}}, h_{\mathrm{inter}}, h_{\mathrm{triple}}hx0​​,hopen​,hpc​,hinter​,htriple​ are all vacuously true, but hcoverh_{\mathrm{cover}}hcover​ asserts ∅=X\varnothing = X∅=X, which is impossible because x0∈Xx_0 \in Xx0​∈X; so with ι=∅\iota = \varnothingι=∅ the hypotheses are contradictory and the theorem says nothing. Since x0x_0x0​ lies in every AαA_\alphaAα​, all the sets AαA_\alphaAα​, Aα∩AβA_\alpha \cap A_\betaAα​∩Aβ​, (Aα∩Aβ)∩Aγ(A_\alpha\cap A_\beta)\cap A_\gamma(Aα​∩Aβ​)∩Aγ​ are automatically nonempty. The hypotheses hpch_{\mathrm{pc}}hpc​ and hinterh_{\mathrm{inter}}hinter​ are special cases of htripleh_{\mathrm{triple}}htriple​ with repeated indices (the sets coincide), so they carry no extra content beyond htripleh_{\mathrm{triple}}htriple​.

The objects appearing in the conclusion

Fundamental group. For a topological space YYY and a point y∈Yy \in Yy∈Y, π1(Y,y)\pi_1(Y, y)π1​(Y,y) denotes Mathlib's FundamentalGroup Y y: the group of endomorphisms of the object yyy in the fundamental groupoid of YYY. Concretely its elements are equivalence classes of continuous paths γ:[0,1]→Y\gamma : [0,1] \to Yγ:[0,1]→Y with γ(0)=γ(1)=y\gamma(0)=\gamma(1)=yγ(0)=γ(1)=y, where two such loops are identified when there is a homotopy between them that fixes the endpoints {0,1}\{0,1\}{0,1} throughout. The identity is the class of the constant loop, inversion is path reversal, and the product is defined by

p⋅q  =  (class of)  q followed by p,p \cdot q \;=\; \text{(class of)}\; q \text{ followed by } p ,p⋅q=(class of)q followed by p,

i.e. Mathlib's p * q = q.trans p: the right-hand factor is traversed first.

Basepoints in subspaces. For α∈ι\alpha \in \iotaα∈ι, the subset AαA_\alphaAα​ is regarded as a topological space with the subspace topology, and x0x_0x0​ is regarded as a point of it (this is basept, which is just the pair (x0,hx0(α))(x_0, h_{x_0}(\alpha))(x0​,hx0​​(α))). Likewise x0x_0x0​ is regarded as a point of the subspace Aα∩AβA_\alpha \cap A_\betaAα​∩Aβ​ (this is basept₂). Below, π1(Aα,x0)\pi_1(A_\alpha, x_0)π1​(Aα​,x0​) and π1(Aα∩Aβ,x0)\pi_1(A_\alpha\cap A_\beta, x_0)π1​(Aα​∩Aβ​,x0​) refer to fundamental groups of these subspaces at these basepoints.

Induced homomorphisms. Mathlib's FundamentalGroup.mapOfEq f h, for a continuous map f:Y→Zf : Y \to Zf:Y→Z and a proof h:f(y)=zh : f(y) = zh:f(y)=z, is the group homomorphism π1(Y,y)→π1(Z,z)\pi_1(Y,y) \to \pi_1(Z,z)π1​(Y,y)→π1​(Z,z) sending the class of a loop γ\gammaγ to the class of f∘γf \circ \gammaf∘γ (then transported along the equality hhh of basepoints; here every such equality holds by definition, so the transport is trivial). Three instances are used:

  • ια:π1(Aα,x0)→π1(X,x0)\iota_\alpha : \pi_1(A_\alpha, x_0) \to \pi_1(X, x_0)ια​:π1​(Aα​,x0​)→π1​(X,x0​) (inclHom), induced by the inclusion map Aα↪XA_\alpha \hookrightarrow XAα​↪X (the underlying map is the subtype projection, which is continuous);
  • iαβ:π1(Aα∩Aβ,x0)→π1(Aα,x0)i_{\alpha\beta} : \pi_1(A_\alpha \cap A_\beta, x_0) \to \pi_1(A_\alpha, x_0)iαβ​:π1​(Aα​∩Aβ​,x0​)→π1​(Aα​,x0​) (interHomLeft), induced by the inclusion Aα∩Aβ↪AαA_\alpha\cap A_\beta \hookrightarrow A_\alphaAα​∩Aβ​↪Aα​;
  • jαβ:π1(Aα∩Aβ,x0)→π1(Aβ,x0)j_{\alpha\beta} : \pi_1(A_\alpha \cap A_\beta, x_0) \to \pi_1(A_\beta, x_0)jαβ​:π1​(Aα​∩Aβ​,x0​)→π1​(Aβ​,x0​) (interHomRight), induced by the inclusion Aα∩Aβ↪AβA_\alpha\cap A_\beta \hookrightarrow A_\betaAα​∩Aβ​↪Aβ​.

In each case a loop in the smaller space is sent to the same loop viewed in the larger space. When α=β\alpha = \betaα=β, the maps iααi_{\alpha\alpha}iαα​ and jααj_{\alpha\alpha}jαα​ have the same underlying continuous map and hence coincide.

The free product. F:=*⁡α∈ιπ1(Aα,x0)\mathcal F := \operatorname{\ast}_{\alpha\in\iota} \pi_1(A_\alpha, x_0)F:=*α∈ι​π1​(Aα​,x0​) (FreeProd) is Mathlib's Monoid.CoprodI of the family α↦π1(Aα,x0)\alpha \mapsto \pi_1(A_\alpha, x_0)α↦π1​(Aα​,x0​): the quotient of the free monoid on the alphabet of pairs (α,g)(\alpha, g)(α,g) with α∈ι\alpha\in\iotaα∈ι, g∈π1(Aα,x0)g \in \pi_1(A_\alpha,x_0)g∈π1​(Aα​,x0​), by the smallest monoid congruence such that the one-letter word (α,1)(\alpha, 1)(α,1) equals the empty word and the two-letter word (α,g)(α,g′)(\alpha, g)(\alpha, g')(α,g)(α,g′) equals the one-letter word (α,gg′)(\alpha, g g')(α,gg′). Because each factor is a group, F\mathcal FF is a group. For each α\alphaα there is a homomorphism ofα:π1(Aα,x0)→F\mathrm{of}_\alpha : \pi_1(A_\alpha, x_0) \to \mathcal Fofα​:π1​(Aα​,x0​)→F (Monoid.CoprodI.of) sending ggg to the class of the one-letter word (α,g)(\alpha, g)(α,g). Given a family of homomorphisms φα:π1(Aα,x0)→H\varphi_\alpha : \pi_1(A_\alpha, x_0) \to Hφα​:π1​(Aα​,x0​)→H into a monoid HHH, Monoid.CoprodI.lift φ\varphiφ is the unique homomorphism F→H\mathcal F \to HF→H with (lift φ)(ofα g)=φα(g)(\mathrm{lift}\,\varphi)(\mathrm{of}_\alpha\, g) = \varphi_\alpha(g)(liftφ)(ofα​g)=φα​(g); on the class of a word (α1,g1)⋯(αn,gn)(\alpha_1,g_1)\cdots(\alpha_n,g_n)(α1​,g1​)⋯(αn​,gn​) it gives φα1(g1)⋯φαn(gn)\varphi_{\alpha_1}(g_1)\cdots\varphi_{\alpha_n}(g_n)φα1​​(g1​)⋯φαn​​(gn​). If ι\iotaι were empty F\mathcal FF would be the trivial group (but see the edge-case remark above).

The map Φ\PhiΦ. Φ:F→π1(X,x0)\Phi : \mathcal F \to \pi_1(X, x_0)Φ:F→π1​(X,x0​) (vanKampenHom) is lift\mathrm{lift}lift of the family (ια)α(\iota_\alpha)_\alpha(ια​)α​; so Φ(ofα g)=ια(g)\Phi(\mathrm{of}_\alpha\, g) = \iota_\alpha(g)Φ(ofα​g)=ια​(g) for every α\alphaα and g∈π1(Aα,x0)g \in \pi_1(A_\alpha,x_0)g∈π1​(Aα​,x0​), and Φ\PhiΦ of a word is the product in π1(X,x0)\pi_1(X,x_0)π1​(X,x0​) (with the multiplication convention above) of the images of its letters.

The relators and the normal subgroup. The set R⊆FR \subseteq \mathcal FR⊆F (vanKampenRelators) is

R  =  { ofα(iαβ(ω))⋅ofβ(jαβ(ω))−1  :  α,β∈ι, ω∈π1(Aα∩Aβ,x0) },R \;=\; \bigl\{\, \mathrm{of}_\alpha\bigl(i_{\alpha\beta}(\omega)\bigr)\cdot \mathrm{of}_\beta\bigl(j_{\alpha\beta}(\omega)\bigr)^{-1} \;:\; \alpha,\beta\in\iota,\ \omega \in \pi_1(A_\alpha\cap A_\beta, x_0) \,\bigr\},R={ofα​(iαβ​(ω))⋅ofβ​(jαβ​(ω))−1:α,β∈ι, ω∈π1​(Aα​∩Aβ​,x0​)},

where the pairs (α,β)(\alpha,\beta)(α,β) range over all ordered pairs, including α=β\alpha=\betaα=β (for which the element is the identity, since iαα=jααi_{\alpha\alpha} = j_{\alpha\alpha}iαα​=jαα​). The subgroup N≤FN \le \mathcal FN≤F (vanKampenNormal) is Mathlib's Subgroup.normalClosure of RRR: the subgroup generated by the set of all conjugates c r c−1c\, r\, c^{-1}crc−1 with r∈Rr \in Rr∈R, c∈Fc \in \mathcal Fc∈F. It is the smallest normal subgroup of F\mathcal FF containing RRR. The accompanying instance records that NNN is normal, meaning: for every n∈Nn \in Nn∈N and every c∈Fc \in \mathcal Fc∈F, c n c−1∈Nc\,n\,c^{-1} \in Ncnc−1∈N.

The quotient group. F/N\mathcal F / NF/N is Mathlib's quotient of the group F\mathcal FF by the subgroup NNN: the set of left cosets, i.e. the quotient of F\mathcal FF by the relation g∼g′  ⟺  g−1g′∈Ng \sim g' \iff g^{-1}g' \in Ng∼g′⟺g−1g′∈N, endowed with the group structure induced from F\mathcal FF (well defined because NNN is normal). The canonical projection g↦[g]g \mapsto [g]g↦[g] (QuotientGroup.mk) is a surjective group homomorphism F→F/N\mathcal F \to \mathcal F/NF→F/N.

Group isomorphism. G≃∗HG \simeq^{*} HG≃∗H (MulEquiv) means a bijection e:G→He : G \to He:G→H satisfying e(ab)=e(a) e(b)e(ab) = e(a)\,e(b)e(ab)=e(a)e(b) for all a,ba,ba,b (its inverse is then automatically multiplicative). Applying eee to an element means applying the underlying function.

The conclusion

Under all the hypotheses above, the theorem asserts:

∃ e:F/N  ≃∗  π1(X,x0)such that∀ g∈F,  e([g])=Φ(g).\exists\, e : \mathcal F / N \;\simeq^{*}\; \pi_1(X, x_0) \quad\text{such that}\quad \forall\, g \in \mathcal F,\ \ e\bigl([g]\bigr) = \Phi(g).∃e:F/N≃∗π1​(X,x0​)such that∀g∈F,  e([g])=Φ(g).

That is: there exists (plain existence, not unique existence) a group isomorphism eee from the quotient (*⁡απ1(Aα,x0))/N\bigl(\operatorname{\ast}_{\alpha} \pi_1(A_\alpha,x_0)\bigr)/N(*α​π1​(Aα​,x0​))/N onto π1(X,x0)\pi_1(X,x_0)π1​(X,x0​) such that, for every element ggg of the free product (not merely for generators), the value of eee on the coset of ggg equals Φ(g)\Phi(g)Φ(g); in other words, e∘(projection)=Φe \circ (\text{projection}) = \Phie∘(projection)=Φ as maps F→π1(X,x0)\mathcal F \to \pi_1(X,x_0)F→π1​(X,x0​). Because the projection is surjective, the displayed condition is the same as requiring that Φ\PhiΦ be surjective onto π1(X,x0)\pi_1(X,x_0)π1​(X,x0​) with kernel exactly NNN (no more and no less), and that eee be the map induced by Φ\PhiΦ on cosets. The statement does not itself provide eee, Φ\PhiΦ's surjectivity, or a description of ker⁡Φ\ker\PhikerΦ beyond what is implied by this existence claim.

Human review
  • Endorsed by Shuze Chen · Sep 8, 2026

  • Endorsed by korbonits · Sep 8, 2026

    Confirmed by the mission captain (proposal self-audit).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactJoin Slack© 2026 Prove2Me