Formal Verification — Lean 4
The machine-checked proof chain behind the finite-height
Li theorem (package research/lean/NguyenRH1/, built against
Mathlib + the vendored zeta-23-lean). Toolchain: leanprover/lean4:v4.33.0-rc2.
Axiom policy — the transparency guarantee
Every proved declaration in the chain depends on exactly the three
standard axioms: propext, Classical.choice,
Quot.sound — the same axioms any Mathlib proof uses.
Zero sorryAx (no skipped proofs) anywhere in the proved
chain; the 5 sorries below are confined to the two
skeleton files (Suzuki / valley — future tiers, not used by the closed
theorem). The audit transcripts at the bottom of this page are the raw
#print axioms output verifying this, per declaration.
The closed theorem — LiClosed.lean (verbatim)
/-
LiClosed.lean — tier ii′-7: THE CLOSED finite-height Li theorem (R-004
endpoint, D-062 §4). `lambda_pos_finite_height_closed`: λ_n > 0 for all
1 ≤ n ≤ N₁ = (3×10¹²−1)² ≈ 9×10²⁴ from the SEVEN declared hypotheses:
the two computational certificates (Platt–Trudgian `RHUpTo`; the finite
Li verification `LiVerifiedUpTo` — E-011/E-015 to 3000 + Johansson 2015
§ 4.2 to 10⁵) and the five analytic perimeter Props (Trudgian N(T)/S(T):
`ZeroCountProp` unit-window, `ZeroCountProp2` two-unit,
`ZeroCountGlobalProp` global; the Platt-class zero-location certificate
`NoLowZeros`; the M₀ interval certificate `MZeroProp`) — the session-012
named analytic hypothesis `SfBoundProp` is now PROVED (tier ii′-6,
LiSideBounds).
-/
import Mathlib
import NguyenRH1.LiBasePoints
import NguyenRH1.LiSideBounds
open Zeta23 Complex Filter Topology
namespace NguyenRH1
/-- **THE CLOSED FINITE-HEIGHT LI THEOREM** (R-004, ii′-7 endpoint):
λ_n > 0 for ALL 1 ≤ n ≤ N₁ = (3×10¹²−1)² ≈ 9×10²⁴, from the SEVEN
declared hypotheses (two computational certificates + five analytic
perimeter Props). The session-012 named analytic hypothesis
`SfBoundProp` is discharged by ii′-6's `sfBoundProp`. -/
theorem lambda_pos_finite_height_closed
(hRH : RHUpTo (3 * 10 ^ 12)) (hfinite : LiVerifiedUpTo (10 ^ 5))
(hZC : ZeroCountProp) (hZC2 : ZeroCountProp2) (hZCG : ZeroCountGlobalProp)
(hNLZ : NoLowZeros) (hMZ : MZeroProp) :
∀ n : ℕ, 1 ≤ n → (n : ℝ) ≤ (3 * 10 ^ 12 - 1 : ℝ) ^ 2 →
0 < (liCoeff n).re :=
lambda_pos_finite_height_verified hRH hfinite
(sfBoundProp hRH hZC hZC2 hZCG hNLZ hMZ)
end NguyenRH1
The declared perimeter — 7 hypotheses
The theorem is conditional on these seven statements (two published computational certificates + five analytic perimeter Props from the declared literature). Each is shown verbatim from source; click to expand.
RHUpTo
— Platt–Trudgian computational certificate: RH verified to height T₀ = 3×10¹².
(LiSkeleton.lean, line 354)
def RHUpTo (T₀ : ℝ) : Prop := ∀ ρ : ℂ, IsNontrivialZero ρ → |ρ.im| ≤ T₀ → ρ.re = 1 / 2
LiVerifiedUpTo
— Finite Li-coefficient verification (our tables to n = 3000 + Johansson 2015 § 4.2 to 10⁵).
(LiSkeleton.lean, line 361)
def LiVerifiedUpTo (N : ℕ) : Prop := ∀ n : ℕ, 1 ≤ n → n ≤ N → 0 < (liCoeff n).re
ZeroCountProp
— Trudgian N(T)/S(T): unit-window zero count, multiplicity-weighted.
(LiContour.lean, line 86)
def ZeroCountProp : Prop :=
∀ t : ℝ, 2 ≤ t →
(((zeroWindow_finite t).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤ C0hat (t + 1)
ZeroCountProp2
— Trudgian two-unit window specialization.
(LiContour.lean, line 115)
def ZeroCountProp2 : Prop :=
∀ t : ℝ, 10 ≤ t →
(((zeroAbsWindow_finite t).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤
0.6 * Real.log (t + 2) + 0.886 * Real.log (Real.log (t + 2)) + 2.7
ZeroCountGlobalProp
— Trudgian global N(T) bound.
(LiContour.lean, line 153)
def ZeroCountGlobalProp : Prop :=
∀ T : ℝ, 2 ≤ T →
(((zeroGlobalWindow_finite T).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤ FAlt T
NoLowZeros
— Platt-class zero-location certificate: no zeros with |γ| < 14.
(LiContour.lean, line 130)
def NoLowZeros : Prop := ∀ ρ : ℂ, IsNontrivialZero ρ → 14 ≤ |ρ.im|
MZeroProp
— M₀ interval certificate (the low-|t| gap bound).
(LiContour.lean, line 163)
def MZeroProp : Prop :=
∀ t : ℝ, |t| ≤ 10 →
‖logDeriv riemannZeta ((-5 / 2 : ℂ) + (t : ℝ) * Complex.I)‖ ≤ 1.3352
Source files
| File | Lines | Declarations | Sorries | Updated |
|---|---|---|---|---|
| LiArchimedean.lean | 252 | 6 | 0 | 08-22-2026 |
| LiAssembly.lean | 476 | 16 | 0 | 08-25-2026 |
| LiBasePoints.lean | 717 | 26 | 0 | 08-26-2026 |
| LiCircleBound.lean | 3929 | 65 | 0 | 08-24-2026 |
| LiClosed.lean | 37 | 1 | 0 | 08-26-2026 |
| LiContour.lean | 807 | 33 | 0 | 08-25-2026 |
| LiCrux.lean | 438 | 8 | 0 | 08-25-2026 |
| LiDigamma.lean | 1036 | 51 | 0 | 08-22-2026 |
| LiDigammaLeft.lean | 1043 | 15 | 0 | 08-23-2026 |
| LiDisc.lean | 1362 | 57 | 0 | 08-22-2026 |
| LiDogLeg.lean | 1423 | 44 | 0 | 08-26-2026 |
| LiFEntire.lean | 1129 | 30 | 0 | 08-23-2026 |
| LiGapCircles.lean | 206 | 2 | 0 | 08-24-2026 |
| LiMoments.lean | 1014 | 50 | 0 | 08-25-2026 |
| LiPrincipal.lean | 314 | 15 | 0 | 08-21-2026 |
| LiRBound.lean | 755 | 28 | 0 | 08-22-2026 |
| LiReflect.lean | 993 | 26 | 0 | 08-23-2026 |
| LiResidue.lean | 264 | 16 | 0 | 08-21-2026 |
| LiSeries.lean | 604 | 22 | 0 | 08-23-2026 |
| LiSideBounds.lean | 1731 | 27 | 0 | 08-26-2026 |
| LiSides.lean | 522 | 25 | 0 | 08-22-2026 |
| LiSkeleton.lean | 2828 | 115 | 0 | 08-26-2026 |
| LiSqueeze.lean | 342 | 5 | 0 | 08-24-2026 |
| LiSwaps.lean | 414 | 15 | 0 | 08-22-2026 |
| LiTightR.lean | 4480 | 152 | 0 | 08-24-2026 |
| LiTrivialZeros.lean | 347 | 9 | 0 | 08-23-2026 |
| LiZetaCoeff.lean | 267 | 9 | 0 | 08-22-2026 |
| SuzukiSkeleton.lean | 72 | 5 | 1 (skeleton) | 08-20-2026 |
| ValleySkeleton.lean | 104 | 6 | 4 (skeleton) | 08-20-2026 |
Axiom audits (#print axioms transcripts)
The session-013 audit predates the tier-ii′ closure:
its 5 sorryAx lines are the intended skeleton statements
(1 Suzuki + 4 valley — future tiers, not used by the closed theorem).
Every later audit is fully clean.
| Audit | Declarations | Status | Updated |
|---|---|---|---|
| audit-session013-axioms.txt | 139 | 5 sorryAx — intended skeletons | 08-20-2026 |
| audit-session024-axioms.txt | 32 | 3 standard axioms only | 08-22-2026 |
| audit-session025-axioms.txt | 26 | 3 standard axioms only | 08-23-2026 |
| audit-session026-axioms.txt | 8 | 3 standard axioms only | 08-23-2026 |
| audit-session027-axioms.txt | 2 | 3 standard axioms only | 08-23-2026 |
| audit-session027b-axioms.txt | 11 | 3 standard axioms only | 08-23-2026 |
| audit-session027c-axioms.txt | 15 | 3 standard axioms only | 08-23-2026 |
| audit-session028-axioms.txt | 22 | 3 standard axioms only | 08-23-2026 |
| audit-session029-axioms.txt | 30 | 3 standard axioms only | 08-23-2026 |
| audit-session032-axioms.txt | 19 | 3 standard axioms only | 08-24-2026 |
| audit-session033-axioms.txt | 14 | 3 standard axioms only | 08-24-2026 |
| audit-session034-axioms.txt | 5 | 3 standard axioms only | 08-24-2026 |
| audit-session035-axioms.txt | 5 | 3 standard axioms only | 08-24-2026 |
| audit-session036-axioms.txt | 22 | 3 standard axioms only | 08-24-2026 |
| audit-session036b-axioms.txt | 11 | 3 standard axioms only | 08-24-2026 |
| audit-session037-axioms.txt | 1 | 3 standard axioms only | 08-24-2026 |
| audit-session038-axioms.txt | 23 | 3 standard axioms only | 08-25-2026 |
| audit-session038b-axioms.txt | 8 | 3 standard axioms only | 08-25-2026 |
| audit-session038c-axioms.txt | 8 | 3 standard axioms only | 08-25-2026 |
| audit-session038d-axioms.txt | 12 | 3 standard axioms only | 08-25-2026 |
| audit-session040-axioms.txt | 41 | 3 standard axioms only | 08-26-2026 |
| audit-session041-axioms.txt | 29 | 3 standard axioms only | 08-26-2026 |