Formalization of the Riemann Hypothesis in the Lean Theorem Prover

Supported by DIMACS and the NSF Grant DMS-1802119
Get the Code Read the Paper

Introduction to Formalization

Originally, when proof assistants and theorem provers were being invented, they were intended to be used to verify the correctness of computer programs, but it soon became clear that the technology at the core of these systems could be used to verify human proofs of mathematical theorems. Despite the fact that historically, mathematicians have been resistant to using these technologies, the growing popularity of experimental mathematics and the use of proof assistants gives credence to the idea that one day mathematicians and computers can live symbiotically for the advancement of science and mathematics as a whole.

More text ...

More text ...

The Riemann Hypothesis

The problem of classifying the non-trivial zeroes of the Riemann Zeta Function has remained unsolved for more than 160 years. It has far reaching consequences for number theory, but more than that, the search for a solution has fostered the development of new techniques and theories, as many important problems of mathematics do. In the spirit of what the Riemann Hypothesis (RH) gave to mathematics and what proof assistants and algorithmic reasoning will give to mathematics in the future, we have formalized RH inside of the Lean Theorem Prover.

AbsoluteValue -> CauchySequence -> ℝ & ℂ -> Dirichlet η -> Riemann Hypothesis

Implementation Docs

What follows is the user-interface to the RH implementation, including the relevant definitions, lemmas, theorems, ... etc. which can be used to write statements and proofs about RH and its related concepts. The library tries to use mathlib to the least extent possible, but still requires some definitions from the tactic, algebra, and analysis libraries. See the source implementation for more details.

Absolute Value
file: src/absolute_value.lean

Dirichlet Eta
file: src/dirichlet_eta.lean
dirichlet_eta.partial_sum.is_cauchy (s : ℂ) (σpos : 0 < σ)
    : is_cauchy complex_abs (dirichlet_eta.partial_sum s)
    := 

Riemann Hypothesis
file: src/riemann_hypothesis.lean
riemann_hypothesis (s σpos)
    := dirichlet_eta s σpos = 0 → s.re = 1 / 2