D-061 — Phase 5.1/5.2: zeta-23-lean full build + live axiom audit + NguyenRH1 skeleton package
Date: 2026-08-19 | Session: 010 | Tasks: 5.1 (first pass), 5.2 Status: complete (skeleton stage; proofs are sorry by design).
1. Toolchain (this machine, first time)
- Installed elan 4.2.3 (user-approved); toolchain leanprover/lean4:v4.33.0-rc2 auto-installed from the repo pin.
lake exe cache getin zeta-23-lean: Mathlib cache for the pinned rev (51e6992) fetched — 8681 files, ~7 GB. [Completes the D-007 deferred-rebuild prerequisite.]
2. zeta-23-lean build (D-007's deferred rebuild — DONE)
lake build: Build completed successfully (9010 jobs), only linter/deprecation warnings, no sorry warnings in Zeta23/.lake build Solution(8877 jobs), Solution.Multiplicity, Solution.XiPrime, Challenge: all build; sorry warnings ONLY in the trusted comparator challenge files, as AUDIT.md records.
3. Task 5.2 axiom audit — verified LIVE (not just static)
All four comparator PrintAxioms scripts run against the fresh build;
every printed line is exactly [propext, Classical.choice, Quot.sound]
— matching AUDIT.md verbatim:
- PrintAxioms.lean: 15 statements (two_thirds_on_critical_line … dirichlet_montgomery_taylor_distinct).
- PrintAxioms/Multiplicity.lean: 12 statements.
- PrintAxioms/XiPrime.lean: xiPrime quartic-window statements.
- PrintAxioms/PairCeiling.lean: lawN256_rows, ceiling_stability, ceiling_signed (Zeta23.PairCeiling). No sorryAx, no project axioms. NGUYEN.md §5.2's permitted-axiom condition holds for the entire inherited library.
4. NguyenRH1 skeleton package (task 5.1, first pass)
Location: research/lean/NguyenRH1/ (tracked; the vendored zeta-23-lean checkout is UNTOUCHED — path requires reuse it and its Mathlib build; nothing downloaded or compiled twice). Toolchain pinned identical (v4.33.0-rc2).
Design rules (honesty):
- NO
axiom/opaquedeclarations anywhere (would violate §5.2). - Unformalized objects enter as parameters with hypotheses (Zeta23's own literature-hypothesis style, cf. hEF/hRvM in Zeta23.Final).
- Statements that cannot be made non-vacuous yet are DEFERRED, not stubbed (the (1.12)⟺spec(D)⊂ℝ reduction is deliberately unstated; reason documented in SuzukiSkeleton.lean §3).
- All proofs
sorry;#print axiomsshows sorryAx = the skeleton marker.
Inventory (9 statements, all compiling)
LiSkeleton.lean (R-004 / draft §3.1):
-
liCoeff (tsum over Zeta23.IsNontrivialZero with zeroMult; summability noted as content), RHUpTo, LiVerifiedUpTo, lambda_pos_finite_height (T₀ = 3×10¹², N₁ = (T₀−1)²), lagariasA1/lagariasC1/SInfty, sInfty_lower_bound (n ≥ 20), C0hat (0.433/0.886/2.9 honest form, D-056), Hhat, IIMaj (D-057 §3), marginTilde (explicit constants A = 10.5, B₀ = 48, M₀ = 1.3352), marginTilde_convex (parameterized by smooth N-majorant F with the ψ-block sign hypothesis — the D-057 11-block mechanism), chain_rule_sqrt_shift (D-057 Step 2). SuzukiSkeleton.lean (R-003 / draft §3.2):
-
xiFun (from Mathlib completedRiemannZeta), Ffactor (z²ξ/ξ′), suzukiW (deficiency vectors as parameters), sineSkeleton, R003_exact_factorization. ValleySkeleton.lean (T-3 / draft §3.3, conditional on Mathlib's RiemannHypothesis):
-
WeilFormData, IsKernelDiagonal (nonnegativity only — the variational identity is the documented infrastructure gap), valley_plateau_upper (K ≤ 2a), valley_floor_upper (K(γ,γ) ≤ 1/m_γ), valley_floor_lower_isolated (1 − 1/(2a) − C(1+log γ)/a²), valley_profile (sinc² envelope, sinc(0) = 1 let-bound).
Build + audit results
lake build: Build completed successfully (8706 jobs) — exactly the 9 designed sorry warnings, no errors. (Two compile iterations:end-ordering namespace-vs-section; Unicode subscript ₊/₋ invalid in identifiers → vplus/vminus; csin → Complex.sin.)lake env lean PrintAxioms.lean: all 9 declarations show[propext, Classical.choice, Quot.sound, sorryAx]— nothing else. Task 5.2 completion criterion for NguyenRH1: sorryAx disappears as proofs land; no other axiom may ever appear.
5. What remains for 5.1 (future sessions)
Ordered per draft Appendix B: (i) sInfty_lower_bound + marginTilde_convex (elementary; positivity/interval tactics + the 11-block table); (ii) the traced contour bound inside lambda_pos_finite_height (needs explicit N(T)/S(T)/ζ′/ζ bounds); (iii) valley proofs (need model-space/RKHS infrastructure); (iv) Suzuki factorization proof + the (1.12) statement itself. The finite-height theorem's computational hypotheses (RHUpTo, LiVerifiedUpTo) stay as trusted inputs by design.
UPDATE 2026-08-19 (session 011): tier (i) COMPLETE. chain_rule_sqrt_shift, sInfty_lower_bound, marginTilde_convex all PROVED with PrintAxioms = [propext, Classical.choice, Quot.sound] only (no sorryAx). ~1100 new lines across 10 commits: full support library — bern_term_*, sInf_series_summable, harmonic_lower/upper, oddHarm_eq, sInf_partial_lower (for sInfty); chain-rule package (chain_rule_sqrt_shift_on/sqrt, deriv2_of_hasDerivAt_nhds), psiOf block table (8 blocks with formulas+signs, block_range_bounds), IIMaj as psiTilde with iim_u2_antitone/iimaj_bracket_bound/IIMaj_deriv2_lt, marginTilde_eq_expanded identity, marginExpanded ContDiffOn/ContinuousOn regularity, deriv2 combinators (for marginTilde). Details: research/journal/session-011.md. Remaining: tiers (ii), (iii), (iv). DIVERGENCE FROM D-057 (documented in D-057 §6 and draft.tex Formal verification): the Lean convexity proof uses an 8-block ψ-table plus a separate analytic IIMaj″ bound, not D-057's 11-row table — the F/S_b expansion rows vanish because the Lean theorem is parameterized over F, and B̃₄ is non-concave (bounded directly, ≤ 1.316 < 2, superseding E-029's grid-measured 0.189).
UPDATE 2026-08-20 (session 012): tier (ii) STEP 1 COMPLETE.
Per session-012-notes.txt (assembly-first split), lambda_pos_finite_height
is now PROVED modulo its named hypotheses — PrintAxioms = 3 standard
axioms, no sorryAx anywhere in LiSkeleton.lean. The remaining obligation
is isolated as the single named analytic hypothesis SfBoundProp
(∀ n ∈ [10⁵, N₁], |Sf n| ≤ Bn FAlt n); the other hypotheses are the
computational perimeter (RHUpTo, LiVerifiedUpTo) and two elementary
margin evaluations (hbase/hbase2 — discharge plan validated in D-062 §5,
execution = tier (ii) step 2). New machinery: FAlt (blockwise ψ-clean
Trudgian-shape majorant), Bn, Sf, marginTilde_eq_sub, ψ-blocks #1/#3/#4
with signs, contDiffOn_FAlt, FAlt_psi_neg, pos_of_convex_of_base (MVT)
and pos_of_convex_of_two_points (secant; used). Refactor: margin
regularity weakened to ContDiffOn (Ioi 1) (FAlt has log-singularities at
0 and 1), chain_rule_sqrt_shift_on generalized to c ≤ 1, unused hmaj
dropped from marginTilde_convex. Triage + perimeter decision (Trudgian
2014 N(T)/S(T) inside the trusted perimeter, declared): D-062.
6. Housekeeping notes
- elan toolchains live at ~/.elan; lean/lake on PATH only after
export PATH="$HOME/.elan/bin:$PATH"in each fresh shell. - Detached
cmd /c "lake … && lake env lean …"chains produced empty logs and silent death once; run builds detached only as SINGLE commands, and run short PrintAxioms steps in the foreground. - NguyenRH1's lake run auto-fetched Mathlib's tooling deps (Cli, batteries, Qq, aesop, proofwidgets, importGraph, LeanSearchClient, plausible) into its own .lake/packages; mathlib itself is shared by path with zeta-23-lean.