Every loop in at is homotopic to for a unique
ProvedHatcher.loop_homotopic_omegaLoopNLet , , be the standard loops in the unit circle based at . Then every loop based at is homotopic (through loops based at , i.e. by a homotopy of paths with fixed endpoints) to for exactly one integer :
Hatcher notes that Theorem 1.7 "is therefore equivalent to the statement that every loop in based at is homotopic to for a unique ", and this is the form in which he proves it, using the lifting properties (a) and (b) for the covering . The integer is the winding number of .
Formalization Note Loops are Mathlib Paths from to in Circle, and is Path.Homotopic, a homotopy relative to the endpoints , which is Hatcher's notion of homotopy of paths.
import Definitions.Def_Hatcher_Circle import Mathlib open unitInterval Hatcher
namespace Hatcher
theorem loop_homotopic_omegaLoopN (f : Path (1 : Circle) 1) :
∃! n : ℤ, f.Homotopic (omegaLoopN n) := by sorry
end HatcherRead-back
What the Lean code literally says, in plain math · claude-fable-5-1
Declaration Hatcher.loop_homotopic_omegaLoopN.
Throughout, denotes the type Circle from Mathlib: the set of complex numbers with , i.e. , carrying the subspace topology (and metric) inherited from and the multiplicative group structure of ; its identity element is the complex number . Mathlib's Circle.exp is the continuous map , (complex exponential of ). The custom definition circleCover from the bundle is
denotes unitInterval, the closed real interval viewed as a subspace of .
A path from to in (Path (1 : Circle) 1) is a continuous function together with the two equations and . For each integer , the custom definition omegaLoopN n is the path from to in whose underlying function is
where is cast from to and is used as a real number; the endpoint equations are and . In particular is the constant path at , and for negative the exponent has negative imaginary part (so , etc.).
For two paths from to in , " is homotopic to " (Path.Homotopic, i.e. Nonempty (Path.Homotopy p₀ p₁)) means: there exists a continuous map
such that
- for every ;
- for every ;
- for every and every , — i.e. and for all (the homotopy fixes both endpoints at , relative to ).
This is Mathlib's ContinuousMap.HomotopyRel of the underlying continuous maps relative to the set ; no further condition (e.g. on the intermediate paths beyond fixed endpoints) is imposed.
The statement. For every path from to in (that is, every continuous with and ), there exists exactly one integer such that is homotopic to in the above sense. Spelled out, "exactly one" (∃!) unfolds literally as
where abbreviates "there is an endpoint-fixing homotopy from to as described above". The only hypothesis is that is a path from to in ; there are no other explicit variables, implicit arguments, or typeclass assumptions in the statement (the topological structure on and is the fixed Mathlib one). The quantifier over ranges over all of , including (the constant loop) and negative values. The declaration lives in the namespace Hatcher; in the given file its proof is left as sorry (not supplied).
Confirmed by the mission captain (proposal self-audit).