The fundamental group is the first algebraic invariant a student of topology meets, and is the first computation of it that carries real content. Allen Hatcher's Algebraic Topology (Cambridge University Press, 2002; freely available at pi.math.cornell.edu/~hatcher/AT/AT.pdf) is the standard text on the subject. Its Chapter 1 opens with exactly this computation (Theorem 1.7, p. 29) and immediately draws three classical consequences from it: the Fundamental Theorem of Algebra (Theorem 1.8), the Brouwer fixed point theorem for the disk (Theorem 1.9), and the Borsuk–Ulam theorem for the sphere (Theorem 1.10).
This mission is the opening entry in a series that formalizes Hatcher's book capstone by capstone. It covers the subsection "The Fundamental Group of the Circle" of Section 1.1 (pp. 29–33): the covering-space lifting properties that drive the proof, the theorem itself, and its three applications. Later entries in the series (van Kampen's theorem, the classification of covering spaces, simplicial and singular homology) will build on the declarations introduced here, which all live in the shared Lean namespace Hatcher.
A path in a topological space is a continuous map , where . A homotopy of paths is a family , , such that the endpoints and are independent of and the associated map , , is continuous. A loop at a basepoint is a path with . The set of homotopy classes of loops at is the fundamental group ; its product is , where traverses and then , each at double speed (Hatcher, Proposition 1.3).
The circle is realised as the unit circle of , so the point is and the basepoint is . Hatcher's map
is Hatcher.circleCover. The loops
based at are Hatcher.omegaLoopN n, and is Hatcher.omegaLoop; its class is Hatcher.omegaClass.
A covering space of is a space together with a map such that every has an open neighbourhood for which is a disjoint union of open sets each mapped homeomorphically onto by (Hatcher's condition , p. 29; such a is evenly covered). A lift of a map is a map with .
is an infinite cyclic group generated by . In the form stated in Lean:
Surjectivity of says generates; uniqueness of says the group is infinite cyclic rather than finite.
The result itself. The computation assigns to every loop in the circle an integer, its winding number, and shows that this integer is the only homotopy invariant of the loop. It is the seed of degree theory, and in Hatcher's text it is the starting point for every later computation of fundamental groups (products, van Kampen, covering spaces). The three applications are the standard demonstration that a single algebraic invariant can settle purely geometric or algebraic existence questions.
Formalizing it. Mathlib (revision 0df444a) already contains the covering-space infrastructure: IsCoveringMap, path lifting (IsCoveringMap.liftPath, eq_liftPath_iff'), homotopy lifting (IsCoveringMap.liftHomotopy, eq_liftHomotopy_iff'), monodromy, and the fact that Circle.exp is a covering map (Circle.isCoveringMap_exp). It also has FundamentalGroup X x as the endomorphism group of the fundamental groupoid. It does not contain the computation , nor the two-dimensional Brouwer and Borsuk–Ulam theorems. The Fundamental Theorem of Algebra is in Mathlib as Complex.exists_root (proved by Liouville's theorem rather than by Hatcher's argument); it is kept as a milestone because it is one of the section's stated theorems, and a solver may close it directly from Mathlib. Milestones 2–4 are also within reach of the existing lifting API, but they are the lemmas Hatcher states and uses, and a faithful record of them in the mission's own namespace is what later entries in the series will import.
The obvious first idea for the goal is to define the winding number of a loop through the complex argument. That fails because is discontinuous on ; the integer has to be produced by lifting the loop through and reading off the endpoint of the lift, which is only well defined because of the uniqueness in the path lifting property. The second difficulty is uniqueness of : this needs lifting of homotopies (milestone 4), not just of paths, together with the observation that a lifted homotopy of paths has constant endpoints.
Connecting the concrete loops to Mathlib's abstract is its own obstacle. FundamentalGroup Circle 1 multiplies by composing morphisms of the fundamental groupoid, so identifying with the class of the explicit loop (milestone 6) requires reparametrization arguments for concatenated paths, for negative as well as positive.
For Theorem 1.9 the difficulty is the construction and continuity of the retraction from a fixed-point-free map, and then the non-existence of a retraction, which uses that . For Theorem 1.10 Hatcher's proof lifts a loop through and shows the lift changes by an odd integer over half a turn; making that parity argument rigorous in Lean is the substance of the milestone.
Circle (the unit circle in ) with basepoint 1; is Metric.closedBall (0 : EuclideanSpace ℝ (Fin 2)) 1; is Metric.sphere (0 : EuclideanSpace ℝ (Fin 3)) 1, with the antipodal point.IsCoveringMap p. This agrees with Hatcher's condition ; neither requires to be surjective.C(I, X) or Mathlib Paths; for homotopies of paths, the square is written I × I with Hatcher's coordinate order : the first coordinate is the path parameter, the second the homotopy parameter. In the general homotopy lifting property the domain is Y × I with an arbitrary topological space, as in Hatcher.FundamentalGroup Circle 1, and is FundamentalGroup.fromPath ⟦omegaLoop⟧. Because the goal quantifies over integer powers of a single element, the order of multiplication in FundamentalGroup is immaterial to its truth.FundamentalGroup Circle 1 ≃* Multiplicative ℤ sending to is an immediate corollary and a welcome contribution.0 < f.degree, which excludes both the zero polynomial and nonzero constants.Contributions welcome: proofs of the milestones from Mathlib's lifting API, a degree homomorphism packaged for reuse, and any lemma about concatenation and reparametrization of loops in Circle that later chapters of the series can import.
Mathlib/Topology/Homotopy/Lifting.lean (path and homotopy lifting for covering maps). https://github.com/leanprover-community/mathlib4/blob/0df444a360eaa60ab8c11dca51a86af692955474/Mathlib/Topology/Homotopy/Lifting.leanMathlib/AlgebraicTopology/FundamentalGroupoid/FundamentalGroup.lean (the fundamental group). https://github.com/leanprover-community/mathlib4/blob/0df444a360eaa60ab8c11dca51a86af692955474/Mathlib/AlgebraicTopology/FundamentalGroupoid/FundamentalGroup.leannamespace Hatcher
theorem fundamentalGroup_circle (g : FundamentalGroup Circle 1) :
∃! n : ℤ, omegaClass ^ n = g := by sorry
end HatcherLet be the unit circle with basepoint and let , , be the loop that goes once around the circle. Theorem 1.7. is an infinite cyclic group generated by the homotopy class of . Stated element-wise:
Existence of says that generates ; uniqueness of says that the powers of are pairwise distinct, so the group is infinite cyclic, .
This is the first computation of a nontrivial fundamental group in Hatcher's book. It underlies the Fundamental Theorem of Algebra (Theorem 1.8), the Brouwer fixed point theorem for the disk (Theorem 1.9) and the Borsuk–Ulam theorem for the sphere (Theorem 1.10), and every later computation of fundamental groups via products, van Kampen's theorem and covering spaces.
Formalization Note is Circle, the unit circle in , with ; is Mathlib's FundamentalGroup Circle 1; is Hatcher.omegaClass, the class of the explicit loop . The statement pins the generator to Hatcher's loop rather than asserting an abstract isomorphism with ; the isomorphism is an immediate corollary.
No open leaves. Every sub-goal is proved or awaiting decomposition.