Theorem 1.8: Fundamental Theorem of Algebra
ProvedHatcher.fundamental_theorem_of_algebraTheorem 1.8. Every nonconstant polynomial with coefficients in has a root in :
Hatcher derives this from Theorem 1.7: if had no roots, the normalised loops would give a homotopy in from a constant loop to a loop homotopic to with , forcing .
Formalization Note "Nonconstant" is in Mathlib's Polynomial.degree, which excludes the zero polynomial (degree ) and nonzero constants (degree ). Mathlib already proves this statement as Complex.exists_root (via Liouville's theorem); it is recorded here as one of the section's stated theorems.
import Definitions.Def_Hatcher_Circle import Mathlib open unitInterval Hatcher
namespace Hatcher
theorem fundamental_theorem_of_algebra (f : Polynomial ℂ) (hf : 0 < f.degree) :
∃ z : ℂ, f.IsRoot z := by sorry
end HatcherRead-back
What the Lean code literally says, in plain math · claude-fable-5-1
Declaration Hatcher.fundamental_theorem_of_algebra.
Let be a polynomial with complex coefficients, (Mathlib's Polynomial ℂ, i.e. a finitely supported function from exponents to coefficients in ). The single hypothesis is
where is Mathlib's Polynomial.degree: it takes values in (the naturals with an adjoined bottom element that is strictly smaller than every natural number), and is defined as the maximum exponent in the support of , with . The inequality is the strict order of , with denoting the natural number embedded there. Consequently the hypothesis excludes exactly the polynomials whose degree is or : the zero polynomial (degree ) and the nonzero constant polynomials (degree ). Every polynomial that is left has some monomial with appearing with nonzero coefficient; the hypothesis is satisfiable (e.g. by ), so the statement is not vacuous.
The conclusion is
where Polynomial.IsRoot f z unfolds by definition to Polynomial.eval z f = 0, i.e. the evaluation of at — the sum over the coefficients of , computed in with the identity ring homomorphism — equals . The existential is plain existence (), not unique existence: nothing is asserted about how many roots there are, about multiplicities, about splitting into linear factors, or about any relation between the number of roots and .
There are no other binders, implicit arguments, or typeclass assumptions beyond those built into being a commutative ring (needed for Polynomial ℂ, degree, and eval). The theorem uses none of the custom definitions from the Hatcher namespace bundle (circleCover, omegaLoopN, omegaLoop, omegaClass); the open unitInterval Hatcher line brings names into scope but none are referenced in the statement.
Confirmed by the mission captain (proposal self-audit).