Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Theorem 1.8: Fundamental Theorem of Algebra

Proved
Hatcher.fundamental_theorem_of_algebra

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

algebraic-topologycovering-spacesfundamental-grouphatcher

Theorem 1.8. Every nonconstant polynomial with coefficients in C\mathbb{C}C has a root in C\mathbb{C}C:

f∈C[z],deg⁡f≥1 ⟹ ∃ z∈C: f(z)=0.f\in\mathbb{C}[z],\quad \deg f\ge 1\ \Longrightarrow\ \exists\,z\in\mathbb{C}:\ f(z)=0 .f∈C[z],degf≥1 ⟹ ∃z∈C: f(z)=0.

Hatcher derives this from Theorem 1.7: if fff had no roots, the normalised loops s↦f(re2πis)/∣f(re2πis)∣s\mapsto f(re^{2\pi i s})/|f(re^{2\pi i s})|s↦f(re2πis)/∣f(re2πis)∣ would give a homotopy in S1S^1S1 from a constant loop to a loop homotopic to ωn\omega_nωn​ with n=deg⁡fn=\deg fn=degf, forcing n=0n=0n=0.

Formalization Note "Nonconstant" is 0<deg⁡f0<\deg f0<degf in Mathlib's Polynomial.degree, which excludes the zero polynomial (degree ⊥\bot⊥) and nonzero constants (degree 000). 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.

Preamble
import Definitions.Def_Hatcher_Circle
import Mathlib

open unitInterval Hatcher
Formal statement
namespace Hatcher
theorem fundamental_theorem_of_algebra (f : Polynomial ℂ) (hf : 0 < f.degree) :
    ∃ z : ℂ, f.IsRoot z := by sorry
end Hatcher
Source
A. Hatcher, Algebraic Topology, Cambridge University Press 2002, https://pi.math.cornell.edu/~hatcher/AT/AT.pdf, Section 1.1, p. 31, Theorem 1.8
Read-back

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

Declaration Hatcher.fundamental_theorem_of_algebra.

Let fff be a polynomial with complex coefficients, f∈C[X]f \in \mathbb{C}[X]f∈C[X] (Mathlib's Polynomial ℂ, i.e. a finitely supported function from exponents n∈Nn \in \mathbb{N}n∈N to coefficients in C\mathbb{C}C). The single hypothesis is

0<deg⁡f,0 < \deg f,0<degf,

where deg⁡f\deg fdegf is Mathlib's Polynomial.degree: it takes values in N∪{⊥}\mathbb{N} \cup \{\bot\}N∪{⊥} (the naturals with an adjoined bottom element ⊥\bot⊥ that is strictly smaller than every natural number), and is defined as the maximum exponent in the support of fff, with deg⁡0=⊥\deg 0 = \botdeg0=⊥. The inequality 0<deg⁡f0 < \deg f0<degf is the strict order of N∪{⊥}\mathbb{N} \cup \{\bot\}N∪{⊥}, with 000 denoting the natural number 000 embedded there. Consequently the hypothesis excludes exactly the polynomials whose degree is ⊥\bot⊥ or 000: the zero polynomial (degree ⊥\bot⊥) and the nonzero constant polynomials (degree 000). Every polynomial that is left has some monomial XnX^nXn with n≥1n \ge 1n≥1 appearing with nonzero coefficient; the hypothesis is satisfiable (e.g. by f=Xf = Xf=X), so the statement is not vacuous.

The conclusion is

∃ z∈C,f(z)=0,\exists\, z \in \mathbb{C},\quad f(z) = 0,∃z∈C,f(z)=0,

where Polynomial.IsRoot f z unfolds by definition to Polynomial.eval z f = 0, i.e. the evaluation of fff at zzz — the sum ∑nanzn\sum_n a_n z^n∑n​an​zn over the coefficients ana_nan​ of fff, computed in C\mathbb{C}C with the identity ring homomorphism — equals 0∈C0 \in \mathbb{C}0∈C. The existential is plain existence (∃\exists∃), not unique existence: nothing is asserted about how many roots there are, about multiplicities, about fff splitting into linear factors, or about any relation between the number of roots and deg⁡f\deg fdegf.

There are no other binders, implicit arguments, or typeclass assumptions beyond those built into C\mathbb{C}C 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.

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

  • Endorsed by korbonits · Sep 5, 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, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me