← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes
thinking (7900 chars)
`riemannZeta_ne_zero_of_one_le_re (hs : 1 ≤ s.re) : riemannZeta s ≠ 0` — Mathlib HAS the re ≥ 1 nonvanishing (including re = 1, PNT-level, via the Dirichlet-character machinery). So the disc zeros with re ≥ 1 are excluded ✓.
So zeros of ζ in the disc B(2+it, 5/2) (re ∈ (−1/2, 9/2)):
- re ≥ 1: none (riemannZeta_ne_zero_of_one_le_re).
- re ≤ 0: only trivial −2n — none in the disc (re > −1/2 > −2).
- 0 < re < 1: nontrivial zeros — the window count applies.
So every disc zero is a nontrivial zero ✓. Let me now write the count bound: the disc's zeros are nontrivial with im ∈ [t − 5/2, t + 5/2]. Via the perimeter ZeroCountProp (ii′-4): windows of the form [u, u+1]: cover [t−5/2, t+5/2] with 6 unit windows... For the perimeter form at negative t — hmm the ZeroCountProp is for t ≥ 2. For t ≤ −10: conjugation. Let me handle by stating the count bound with |t|:
Actually — for the LOOSE bound, let me simplify: I don't need a tight count; I need card(zeroDiscFinset) ≤ C·log|t| — could even use a cruder cover. Let me define the count via the perimeter and handle both signs:
count zeros in disc ≤ count nontrivial zeros with im ∈ [t−5/2, t+5/2]:
- t ≥ 10: cover [t−5/2, t+5/2] by windows [t−5/2, t−3/2], ..., 5 full unit windows + halves — 6 windows [t−5/2+j, t−3/2+j] for j = 0..4 plus... let me just use 6 windows: [t − 5/2 + j, t − 3/2 + j] for j = 0..5 — endpoints: j=5: [t+3/2, t+5/2] ✓ total 6 windows covering [t−5/2, t+5/2] ✓. Each window [u, u+1] with u = t−5/2+j ≥ 10−2.5 = 7.5 ≥ 2 ✓ ZeroCountProp applies: count ≤ C0hat(u+1) ≤ C0hat(t+7/2) (C0hat monotone in its arg? C0hat increasing for large args — yes: 0.433 log(t+2) + 0.886 log log(t+2) + 2.9 increasing for t ≥ 2 ✓ — need a monotonicity lemma — or just bound each C0hat(u+1) ≤ C0hat(t+7/2) via monotonicity of log — fine).
- t ≤ −10: conjugation: zeros at im ∈ [t−5/2, t+5/2] are conjugates of zeros at im ∈ [−t−5/2, −t+5/2]: the count is the same (conjugation is a bijection on nontrivial zeros — need: ρ nontrivial zero ⟹ conj ρ nontrivial zero: `riemannZeta (conj ρ) = conj (riemannZeta ρ)` = 0 ✓ and re/im: conj preserves re, negates im ✓; IsNontrivialZero conj-invariance). Mathlib: `riemannZeta_conj`? D-066 noted "riemannZeta_conj (to be located in Mathlib or proved from the definition)". Grep at build. There might be `Complex.riemannZeta_conj : riemannZeta (conj s) = conj (riemannZeta s)`? Since ζ has real coefficients — provable via the Hurwitz series or the completed form. If not in Mathlib, prove via... hmm. Zeta23 ZetaConj.lean exists! (FromPNTPlus/ZetaConj.lean) ✓ probably has exactly this.
OK — this is a big file. Let me now write it in earnest, section by section with compiles. Given the scale, let me be pragmatic about what goes in 5c vs deferred: the critical deliverable for the growth input is:
**THE LOOSE R-BOUND**: for s with re s ∈ [1/2, 7/2], |im s| ≥ 10, ζ s ≠ 0:
‖logDeriv ζ s − Σ_{ρ ∈ nearFinset t} (zeroMult ρ : ℂ)/(s − ρ)‖ ≤ C·(log|t|)²
Hmm — actually wait. Let me reconsider the STATEMENT for downstream. The growth argument (5e) needs, on the gap circle |s| = R: |F(s)| ≤ o(R) — where F = ζ′/ζ + 1/s + 1/(s−1) − ½logπ + ½ψ(s/2) − Σ_ρ m(1/(s−ρ)+1/ρ). The ζ′/ζ piece on the circle: |ζ′/ζ(s)| — hmm — actually the circle bound uses: ζ′/ζ(s) = [ζ′/ζ(s) − Σ_near m/(s−ρ)] + Σ_near m/(s−ρ): the first ≤ C(log R)² (the loose disc bound) and the near-sum on the circle ≤ count·(1/gap) ≤ C₀(R)·3C₀(R) ~ (log R)² ✓. So the loose disc R-bound IS what's needed. ✓.
Let me now write the file. §1: collection + count; §2: R-gap selection; §3: g analytic/nonvanishing; §4: the bounds + BC + the loose R-bound. I'll write §1–§2 first and compile.
For §2's R-gap: the distance-value Finset:
```lean
noncomputable def distFinset (t : ℝ) : Finset ℝ := (zeroDiscFinset t).image (fun ρ => ‖ρ − discCenter t‖)
```
Hmm — but actually, for the gap I should bound card distFinset ≤ card zeroDiscFinset ≤ 6·C0hat(...)-ish. Then exists_avoiding_midpoint (a := 12/5) (S := distFinset t) (hcard : card ≤ k) gives R ∈ [12/5, 17/5]?? wait — the midpoint lemma gives T ∈ [a, a+1]: with a = 12/5 = 2.4: R ∈ [2.4, 3.4] — I want R ∈ [2.4, 2.5] — use a = 12/5 and the window [a, a+1] = [2.4, 3.4] — exceeds 2.5! The midpoint lemma's window is unit-length. Use a = 3/2: R ∈ [1.5, 2.5] — R could be < √5 ≈ 2.236 — the collection (|γ−t|<1 zeros) needs R > their distance √5... hmm — the R must EXCEED all collected zero distances for them to be INSIDE. The gap-avoidance only ensures R ∉ D exactly-ish (|R − d| ≥ 1/(2(k+1))). For zeros with d < R they're inside ✓; d > R: outside the disc — NOT collected — but then g would vanish there if ζ has a zero there... wait no — g = ζ/∏(s−ρₖ) over the COLLECTED zeros; if a zero ρ' has d' > R — it's outside the outer disc — doesn't affect g's nonvanishing ON the closed ball. But g's nonvanishing ON closedBall(s₀, R) needs all zeros WITHIN the closed ball collected. The collected set should be exactly {zeros in closedBall(s₀, R)} — which depends on R itself (self-referential!). Fix: choose R FIRST via the gap on the 5/2-disc's distances, then collect within R: the gap: no zero has distance in (R−δ, R+δ) — zeros with d ≤ R − δ are inside (collected); d ≥ R + δ outside; none in the gap ✓. So: D := distances of zeros in the 5/2-disc; R ∈ [2.4, 2.5]... hmm the midpoint lemma's [a, a+1] window — I want R ∈ [2.4, 2.5] — a half-window — adapt: apply the lemma with a = 2.4 gives R ∈ [2.4, 3.4] — too big. Alternatively generalize exists_avoiding_midpoint to arbitrary window length? Hmm — the lemma as stated: [a, a+1] with clearance 1/(2(k+1)). For a general window [a, a+ℓ]: candidates a + (2j+1)ℓ/(2(k+1)): clearance ℓ/(2(k+1)): the same proof with w = ℓ/(2(k+1)). Should I generalize the ii′-4 lemma to (a, ℓ)? That'd mean editing LiContour.lean — freeze protocol says existing PROOFS untouched; ADDING a generalized lemma is fine (new declaration). But cleaner: add a corollary in LiDisc: scale: apply exists_avoiding_midpoint at a' = a/ℓ with S' = S/ℓ... meh. Simplest: add a small generalization lemma in LiDisc.lean (a fresh proof or via scaling from the unit one).
Actually — cleanest: reuse exists_avoiding_midpoint directly with a = 2 (so R ∈ [2, 3])?? The disc bound for |ζ| was proved on B(2+it, 5/2) — so R ≤ 5/2 needed. R ∈ [2, 3] could exceed 2.5 ✗. Use a = 3/2 + ... hmm: I want R ∈ [r_c + margin, 5/2] with r_c = √5 ≈ 2.236: window [2.3, 2.5] too small for the unit-window lemma. Generalize: write a tiny scaling wrapper:
```lean
theorem exists_avoiding_midpoint' {k : ℕ} {a : ℝ} (S : Finset ℝ) (hcard : S.card ≤ k)
(ℓ : ℝ) (hℓ : 0 < ℓ) :
∃ T : ℝ, a ≤ T ∧ T ≤ a + ℓ ∧ ∀ x ∈ S, ℓ / (2 * (k + 1)) ≤ |x - T| := by
-- scale: S/ℓ, apply the unit version at a/ℓ, multiply back
obtain ⟨T', hT'1, hT'2, hT'3⟩ := exists_avoiding_midpoint (a / ℓ) (S.image (· / ℓ)) (by ...card_image_le.trans hcard)
refine ⟨T' * ℓ, by nlinarith [hT'1, hℓ], by nlinarith [hT'2, hℓ], fun x hx => ?_⟩
have := hT'3 (x / ℓ) (Finset.mem_image.mpr ⟨x, hx, by ring⟩)
-- |x/ℓ − T'| ≥ 1/(2(k+1)) ⟹ |x − T'ℓ| ≥ ℓ/(2(k+1))
rw [show x / ℓ - T' = (x - T' * ℓ) / ℓ by ring, abs_div, abs_of_pos hℓ] at this
rw [div_le_iff₀ hℓ] at this? hmm — |x/ℓ − T'| = |x − T'ℓ|/ℓ ≥ 1/(2(k+1)) ⟹ |x−T'ℓ| ≥ ℓ/(2(k+1)) ✓
...
```
Fine. Actually — even simpler: prove the ℓ-version directly by copying the midpoint proof with w := ℓ/(2(k+1)) — the LiContour proof is right there; a 40-line clone with ℓ threaded. OR the scaling wrapper (~15 lines). Wrapper it is.
Hmm wait — actually even simpler: can I just use a = 2.4, ℓ = 0.1·... — no. The wrapper. OK.
Let me now write §1–§2 of LiDisc.lean. Actually, let me reconsider the overall size: this build has many moving parts. To keep the session manageable, let me stage it:
- 5c-i: collection + count + R-gap selection (§1–§2).
- 5c-ii: g analytic + nonvanishing (§3).
- 5c-iii: the bounds + BC + loose R-bound (§4).
Write §1–§2 now.
All inputs confirmed (re ≥ 1 nonvanishing is in Mathlib). Starting LiDisc.lean — §1 (collection + count) and §2 (R-gap via a scaled pigeonhole).
tool: Write ok
input
{
"file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDisc.lean",
"content": "/-\nNguyenRH1/LiDisc.lean \u2014 tier ii\u2032 sub-stage ii\u2032-5c (D-067 \u00a73 + \u00a76 revision):\nthe LOOSE Davenport-disc R-bound on \u03c3 \u2208 [1/2, 7/2], |t| \u2265 10 \u2014 the\nGROWTH INPUT for the partial-fraction identity (ii\u2032-5e). Its constants\nare deliberately loose (D-067 \u00a76: no disc-only constant can reach the\nbaked A = 10.5, B\u2080 = 48; tightness comes from the identity stage).\n\nStructure (all on the disc B(2+it, R), R \u2208 [2.4, 2.5] chosen in a gap of\nthe zero-distance values):\n* \u00a71 the zero collection + count (perimeter ZeroCountProp, ii\u2032-4);\n* \u00a72 the R-gap selection (scaled midpoint pigeonhole from ii\u2032-4);\n* \u00a73 g := \u03b6/\u220f(s\u2212\u03c1\u2096)^{m\u2096} analytic + nonvanishing on the closed disc;\n* \u00a74 the bounds: |g| on the outer circle (ii\u2032-5b's |\u03b6|-bound +\n clearance), the center lower bound (1/\u03b6 = \u03a3 \u03bc(n)n^{\u2212s}), then\n LogOfAnalyticFunction + BorelCaratheodoryDeriv (StrongPNTPrefix)\n giving \u2016(log g)\u2032\u2016 \u226a (log|t|)\u00b2, hence the loose R-bound.\n\nArchive references: D-067, D-064 \u00a74 R3, journal-022.\n-/\nimport Mathlib\nimport Zeta23.FromPNTPlus.StrongPNTPrefix\nimport NguyenRH1.LiRBound\n\nopen Zeta23 Complex Filter Topology MeasureTheory\nopen scoped Nat\n\nnoncomputable section\n\nnamespace NguyenRH1\n\n/-! ## 1. The zero collection and its count -/\n\n/-- The disc center s\u2080 = 2 + it. -/\ndef discCenter (t : \u211d) : \u2102 := 2 + t * Complex.I\n\n/-- The zeros of \u03b6 in the closed disc of radius 5/2 about 2+it, as a\nfinset (finiteness from Mathlib's discrete-zero-set machinery). -/\nnoncomputable def zeroDiscFinset (t : \u211d) : Finset \u2102 :=\n ((isCompact_closedBall (discCenter t) (5 / 2)).inter_riemannZetaZeros_finite).toFinset\n\ntheorem mem_zeroDiscFinset {t : \u211d} {\u03c1 : \u2102} :\n \u03c1 \u2208 zeroDiscFinset t \u2194\n \u03c1 \u2208 Metric.closedBall (discCenter t) (5 / 2) \u2227 riemannZeta \u03c1 = 0 := by\n unfold zeroDiscFinset\n rw [Set.Finite.mem_toFinset]\n constructor\n \u00b7 intro h\n exact \u27e8h.1, h.2\u27e9\n \u00b7 intro h\n exact \u27e8h.1, mem_riemannZetaZeros.mpr h.2\u27e9\n\n/-- Every zero of \u03b6 in the disc is a nontrivial zero (re \u2265 1 excluded by\n`riemannZeta_ne_zero_of_one_le_re`; re \u2264 0 excluded by the FE since the\ndisc avoids {\u22122n} and 0). -/\ntheorem zeroDisc_isNontrivial {t : \u211d} {\u03c1 : \u2102} (h\u03c1 : \u03c1 \u2208 zeroDiscFinset t) :\n IsNontrivialZero \u03c1 := by\n have h2 := (mem_zeroDiscFinset.mp h\u03c1).2\n have hball := (mem_zeroDiscFinset.mp h\u03c1).1\n -- \u03c1 \u2208 closedBall (2+it) (5/2) \u27f9 re \u03c1 \u2208 [\u22121/2, 9/2]\n have hre : -1 / 2 \u2264 \u03c1.re \u2227 \u03c1.re \u2264 9 / 2 := by\n rw [Metric.mem_closedBall, Complex.dist_eq] at hball\n have h1 : |(\u03c1 - discCenter t).re| \u2264 5 / 2 := (abs_re_le_norm _).trans hball\n have h2re : (\u03c1 - discCenter t).re = \u03c1.re - 2 := by\n simp [discCenter, sub_re, mul_re, ofReal_re, ofReal_im, I_re, I_im]\n rw [h2re] at h1\n have := abs_le.mp h1\n constructor <;> linarith [this.1, this.2]\n -- re \u03c1 \u2265 1 excluded\n have hnot1 : \u03c1.re < 1 := by\n by_contra h\n push Not at h\n exact riemannZeta_ne_zero_of_one_le_re h h2\n -- re \u03c1 \u2264 0 excluded (would force \u03c1 \u2208 {\u22122n} \u222a {0}, all outside the disc)\n have hpos : 0 < \u03c1.re := by\n by_contra h\n push Not at h\n -- \u03b6(\u03c1) = 0 with re \u03c1 \u2264 0: then completedRiemannZeta \u03c1 = 0 or \u0393R-pole\n by_cases hG : Complex.Gamma\u211d \u03c1 = 0\n \u00b7 -- \u0393R(\u03c1) = 0 \u27f9 \u03c1 = \u22122n, but re \u03c1 > \u22121/2 > \u22122\n rw [Complex.Gamma\u211d_eq_zero_iff] at hG\n obtain \u27e8n, hn\u27e9 := hG\n rw [hn] at hre\n have : (-(2 * (n : \u2102))).re \u2264 -2 * (n : \u211d) := by\n simp [neg_re, mul_re]\n have hn1 : 1 \u2264 n := by\n by_contra hn0\n push Not at hn0\n interval_cases n\n \u00b7 simp at hn\n rw [hn] at h2\n -- \u03c1 = 0: \u03b6(0) = \u22121/2 \u2260 0\n have := riemannZeta_zero\n rw [hn] at h2\n norm_num at h2 hthis\n rw [hthis] at h2\n norm_num at h2\n have : (n : \u211d) \u2265 1 := by exact_mod_cast hn1\n have : (-(2 * (n : \u2102))).re = -2 * (n : \u211d) := by\n simp [neg_re, mul_re]\n linarith [hre.1, this.le, ...]\n \u00b7 -- \u0393R(\u03c1) \u2260 0: then \u039b(\u03c1) = \u0393R(\u03c1)\u00b7\u03b6(\u03c1) = 0 \u27f9 nontrivial \u27f9 re > 0\n have h\u039b : completedRiemannZeta \u03c1 = 0 := by\n rw [RvM.completedRiemannZeta_eq_Gamma\u211d_mul _ hG]\n \u00b7 simp [h2]\n \u00b7 intro h0\n rw [h0] at hre\n simp at hre\n linarith [hre.1]\n have := RvM.completedRiemannZeta_eq_zero_iff.mp h\u039b\n exact this.2.1\n exact \u27e8h2, hpos, hnot1\u27e9\n\nend NguyenRH1\n\nend\n"
}
result 2026-08-22 19:45:06Z → 2026-08-22 19:45:06Z
{
"type": "create",
"filePath": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDisc.lean",
"content": "/-\nNguyenRH1/LiDisc.lean \u2014 tier ii\u2032 sub-stage ii\u2032-5c (D-067 \u00a73 + \u00a76 revision):\nthe LOOSE Davenport-disc R-bound on \u03c3 \u2208 [1/2, 7/2], |t| \u2265 10 \u2014 the\nGROWTH INPUT for the partial-fraction identity (ii\u2032-5e). Its constants\nare deliberately loose (D-067 \u00a76: no disc-only constant can reach the\nbaked A = 10.5, B\u2080 = 48; tightness comes from the identity stage).\n\nStructure (all on the disc B(2+it, R), R \u2208 [2.4, 2.5] chosen in a gap of\nthe zero-distance values):\n* \u00a71 the zero collection + count (perimeter ZeroCountProp, ii\u2032-4);\n* \u00a72 the R-gap selection (scaled midpoint pigeonhole from ii\u2032-4);\n* \u00a73 g := \u03b6/\u220f(s\u2212\u03c1\u2096)^{m\u2096} analytic + nonvanishing on the closed disc;\n* \u00a74 the bounds: |g| on the outer circle (ii\u2032-5b's |\u03b6|-bound +\n clearance), the center lower bound (1/\u03b6 = \u03a3 \u03bc(n)n^{\u2212s}), then\n LogOfAnalyticFunction + BorelCaratheodoryDeriv (StrongPNTPrefix)\n giving \u2016(log g)\u2032\u2016 \u226a (log|t|)\u00b2, hence the loose R-bound.\n\nArchive references: D-067, D-064 \u00a74 R3, journal-022.\n-/\nimport Mathlib\nimport Zeta23.FromPNTPlus.StrongPNTPrefix\nimport NguyenRH1.LiRBound\n\nopen Zeta23 Complex Filter Topology MeasureTheory\nopen scoped Nat\n\nnoncomputable section\n\nnamespace NguyenRH1\n\n/-! ## 1. The zero collection and its count -/\n\n/-- The disc center s\u2080 = 2 + it. -/\ndef discCenter (t : \u211d) : \u2102 := 2 + t * Complex.I\n\n/-- The zeros of \u03b6 in the closed disc of radius 5/2 about 2+it, as a\nfinset (finiteness from Mathlib's discrete-zero-set machinery). -/\nnoncomputable def zeroDiscFinset (t : \u211d) : Finset \u2102 :=\n ((isCompact_closedBall (discCenter t) (5 / 2)).inter_riemannZetaZeros_finite).toFinset\n\ntheorem mem_zeroDiscFinset {t : \u211d} {\u03c1 : \u2102} :\n \u03c1 \u2208 zeroDiscFinset t \u2194\n \u03c1 \u2208 Metric.closedBall (discCenter t) (5 / 2) \u2227 riemannZeta \u03c1 = 0 := by\n unfold zeroDiscFinset\n rw [Set.Finite.mem_toFinset]\n constructor\n \u00b7 intro h\n exact \u27e8h.1, h.2\u27e9\n \u00b7 intro h\n exact \u27e8h.1, mem_riemannZetaZeros.mpr h.2\u27e9\n\n/-- Every zero of \u03b6 in the disc is a nontrivial zero (re \u2265 1 excluded by\n`riemannZeta_ne_zero_of_one_le_re`; re \u2264 0 excluded by the FE since the\ndisc avoids {\u22122n} and 0). -/\ntheorem zeroDisc_isNontrivial {t : \u211d} {\u03c1 : \u2102} (h\u03c1 : \u03c1 \u2208 zeroDiscFinset t) :\n IsNontrivialZero \u03c1 := by\n have h2 := (mem_zeroDiscFinset.mp h\u03c1).2\n have hball := (mem_zeroDiscFinset.mp h\u03c1).1\n -- \u03c1 \u2208 closedBall (2+it) (5/2) \u27f9 re \u03c1 \u2208 [\u22121/2, 9/2]\n have hre : -1 / 2 \u2264 \u03c1.re \u2227 \u03c1.re \u2264 9 / 2 := by\n rw [Metric.mem_closedBall, Complex.dist_eq] at hball\n have h1 : |(\u03c1 - discCenter t).re| \u2264 5 / 2 := (abs_re_le_norm _).trans hball\n have h2re : (\u03c1 - discCenter t).re = \u03c1.re - 2 := by\n simp [discCenter, sub_re, mul_re, ofReal_re, ofReal_im, I_re, I_im]\n rw [h2re] at h1\n have := abs_le.mp h1\n constructor <;> linarith [this.1, this.2]\n -- re \u03c1 \u2265 1 excluded\n have hnot1 : \u03c1.re < 1 := by\n by_contra h\n push Not at h\n exact riemannZeta_ne_zero_of_one_le_re h h2\n -- re \u03c1 \u2264 0 excluded (would force \u03c1 \u2208 {\u22122n} \u222a {0}, all outside the disc)\n have hpos : 0 < \u03c1.re := by\n by_contra h\n push Not at h\n -- \u03b6(\u03c1) = 0 with re \u03c1 \u2264 0: then completedRiemannZeta \u03c1 = 0 or \u0393R-pole\n by_cases hG : Complex.Gamma\u211d \u03c1 = 0\n \u00b7 -- \u0393R(\u03c1) = 0 \u27f9 \u03c1 = \u22122n, but re \u03c1 > \u22121/2 > \u22122\n rw [Complex.Gamma\u211d_eq_zero_iff] at hG\n obtain \u27e8n, hn\u27e9 := hG\n rw [hn] at hre\n have : (-(2 * (n : \u2102))).re \u2264 -2 * (n : \u211d) := by\n simp [neg_re, mul_re]\n have hn1 : 1 \u2264 n := by\n by_contra hn0\n push Not at hn0\n interval_cases n\n \u00b7 simp at hn\n rw [hn] at h2\n -- \u03c1 = 0: \u03b6(0) = \u22121/2 \u2260 0\n have := riemannZeta_zero\n rw [hn] at h2\n norm_num at h2 hthis\n rw [hthis] at h2\n norm_num at h2\n have : (n : \u211d) \u2265 1 := by exact_mod_cast hn1\n have : (-(2 * (n : \u2102))).re = -2 * (n : \u211d) := by\n simp [neg_re, mul_re]\n linarith [hre.1, this.le, ...]\n \u00b7 -- \u0393R(\u03c1) \u2260 0: then \u039b(\u03c1) = \u0393R(\u03c1)\u00b7\u03b6(\u03c1) = 0 \u27f9 nontrivial \u27f9 re > 0\n have h\u039b : completedRiemannZeta \u03c1 = 0 := by\n rw [RvM.completedRiemannZeta_eq_Gamma\u211d_mul _ hG]\n \u00b7 simp [h2]\n \u00b7 intro h0\n rw [h0] at hre\n simp at hre\n linarith [hre.1]\n have := RvM.completedRiemannZeta_eq_zero_iff.mp h\u039b\n exact this.2.1\n exact \u27e8h2, hpos, hnot1\u27e9\n\nend NguyenRH1\n\nend\n",
"structuredPatch": [],
"originalFile": null
}
raw content_json (database row)
[{"type":"thinking","thinking":"`riemannZeta_ne_zero_of_one_le_re (hs : 1 ≤ s.re) : riemannZeta s ≠ 0` — Mathlib HAS the re ≥ 1 nonvanishing (including re = 1, PNT-level, via the Dirichlet-character machinery). So the disc zeros with re ≥ 1 are excluded ✓.\n\nSo zeros of ζ in the disc B(2+it, 5/2) (re ∈ (−1/2, 9/2)):\n- re ≥ 1: none (riemannZeta_ne_zero_of_one_le_re).\n- re ≤ 0: only trivial −2n — none in the disc (re > −1/2 > −2).\n- 0 < re < 1: nontrivial zeros — the window count applies.\n\nSo every disc zero is a nontrivial zero ✓. Let me now write the count bound: the disc's zeros are nontrivial with im ∈ [t − 5/2, t + 5/2]. Via the perimeter ZeroCountProp (ii′-4): windows of the form [u, u+1]: cover [t−5/2, t+5/2] with 6 unit windows... For the perimeter form at negative t — hmm the ZeroCountProp is for t ≥ 2. For t ≤ −10: conjugation. Let me handle by stating the count bound with |t|:\n\nActually — for the LOOSE bound, let me simplify: I don't need a tight count; I need card(zeroDiscFinset) ≤ C·log|t| — could even use a cruder cover. Let me define the count via the perimeter and handle both signs:\n\ncount zeros in disc ≤ count nontrivial zeros with im ∈ [t−5/2, t+5/2]:\n- t ≥ 10: cover [t−5/2, t+5/2] by windows [t−5/2, t−3/2], ..., 5 full unit windows + halves — 6 windows [t−5/2+j, t−3/2+j] for j = 0..4 plus... let me just use 6 windows: [t − 5/2 + j, t − 3/2 + j] for j = 0..5 — endpoints: j=5: [t+3/2, t+5/2] ✓ total 6 windows covering [t−5/2, t+5/2] ✓. Each window [u, u+1] with u = t−5/2+j ≥ 10−2.5 = 7.5 ≥ 2 ✓ ZeroCountProp applies: count ≤ C0hat(u+1) ≤ C0hat(t+7/2) (C0hat monotone in its arg? C0hat increasing for large args — yes: 0.433 log(t+2) + 0.886 log log(t+2) + 2.9 increasing for t ≥ 2 ✓ — need a monotonicity lemma — or just bound each C0hat(u+1) ≤ C0hat(t+7/2) via monotonicity of log — fine).\n- t ≤ −10: conjugation: zeros at im ∈ [t−5/2, t+5/2] are conjugates of zeros at im ∈ [−t−5/2, −t+5/2]: the count is the same (conjugation is a bijection on nontrivial zeros — need: ρ nontrivial zero ⟹ conj ρ nontrivial zero: `riemannZeta (conj ρ) = conj (riemannZeta ρ)` = 0 ✓ and re/im: conj preserves re, negates im ✓; IsNontrivialZero conj-invariance). Mathlib: `riemannZeta_conj`? D-066 noted \"riemannZeta_conj (to be located in Mathlib or proved from the definition)\". Grep at build. There might be `Complex.riemannZeta_conj : riemannZeta (conj s) = conj (riemannZeta s)`? Since ζ has real coefficients — provable via the Hurwitz series or the completed form. If not in Mathlib, prove via... hmm. Zeta23 ZetaConj.lean exists! (FromPNTPlus/ZetaConj.lean) ✓ probably has exactly this.\n\nOK — this is a big file. Let me now write it in earnest, section by section with compiles. Given the scale, let me be pragmatic about what goes in 5c vs deferred: the critical deliverable for the growth input is:\n\n**THE LOOSE R-BOUND**: for s with re s ∈ [1/2, 7/2], |im s| ≥ 10, ζ s ≠ 0:\n‖logDeriv ζ s − Σ_{ρ ∈ nearFinset t} (zeroMult ρ : ℂ)/(s − ρ)‖ ≤ C·(log|t|)²\n\nHmm — actually wait. Let me reconsider the STATEMENT for downstream. The growth argument (5e) needs, on the gap circle |s| = R: |F(s)| ≤ o(R) — where F = ζ′/ζ + 1/s + 1/(s−1) − ½logπ + ½ψ(s/2) − Σ_ρ m(1/(s−ρ)+1/ρ). The ζ′/ζ piece on the circle: |ζ′/ζ(s)| — hmm — actually the circle bound uses: ζ′/ζ(s) = [ζ′/ζ(s) − Σ_near m/(s−ρ)] + Σ_near m/(s−ρ): the first ≤ C(log R)² (the loose disc bound) and the near-sum on the circle ≤ count·(1/gap) ≤ C₀(R)·3C₀(R) ~ (log R)² ✓. So the loose disc R-bound IS what's needed. ✓.\n\nLet me now write the file. §1: collection + count; §2: R-gap selection; §3: g analytic/nonvanishing; §4: the bounds + BC + the loose R-bound. I'll write §1–§2 first and compile.\n\nFor §2's R-gap: the distance-value Finset:\n```lean\nnoncomputable def distFinset (t : ℝ) : Finset ℝ := (zeroDiscFinset t).image (fun ρ => ‖ρ − discCenter t‖)\n```\nHmm — but actually, for the gap I should bound card distFinset ≤ card zeroDiscFinset ≤ 6·C0hat(...)-ish. Then exists_avoiding_midpoint (a := 12/5) (S := distFinset t) (hcard : card ≤ k) gives R ∈ [12/5, 17/5]?? wait — the midpoint lemma gives T ∈ [a, a+1]: with a = 12/5 = 2.4: R ∈ [2.4, 3.4] — I want R ∈ [2.4, 2.5] — use a = 12/5 and the window [a, a+1] = [2.4, 3.4] — exceeds 2.5! The midpoint lemma's window is unit-length. Use a = 3/2: R ∈ [1.5, 2.5] — R could be < √5 ≈ 2.236 — the collection (|γ−t|<1 zeros) needs R > their distance √5... hmm — the R must EXCEED all collected zero distances for them to be INSIDE. The gap-avoidance only ensures R ∉ D exactly-ish (|R − d| ≥ 1/(2(k+1))). For zeros with d < R they're inside ✓; d > R: outside the disc — NOT collected — but then g would vanish there if ζ has a zero there... wait no — g = ζ/∏(s−ρₖ) over the COLLECTED zeros; if a zero ρ' has d' > R — it's outside the outer disc — doesn't affect g's nonvanishing ON the closed ball. But g's nonvanishing ON closedBall(s₀, R) needs all zeros WITHIN the closed ball collected. The collected set should be exactly {zeros in closedBall(s₀, R)} — which depends on R itself (self-referential!). Fix: choose R FIRST via the gap on the 5/2-disc's distances, then collect within R: the gap: no zero has distance in (R−δ, R+δ) — zeros with d ≤ R − δ are inside (collected); d ≥ R + δ outside; none in the gap ✓. So: D := distances of zeros in the 5/2-disc; R ∈ [2.4, 2.5]... hmm the midpoint lemma's [a, a+1] window — I want R ∈ [2.4, 2.5] — a half-window — adapt: apply the lemma with a = 2.4 gives R ∈ [2.4, 3.4] — too big. Alternatively generalize exists_avoiding_midpoint to arbitrary window length? Hmm — the lemma as stated: [a, a+1] with clearance 1/(2(k+1)). For a general window [a, a+ℓ]: candidates a + (2j+1)ℓ/(2(k+1)): clearance ℓ/(2(k+1)): the same proof with w = ℓ/(2(k+1)). Should I generalize the ii′-4 lemma to (a, ℓ)? That'd mean editing LiContour.lean — freeze protocol says existing PROOFS untouched; ADDING a generalized lemma is fine (new declaration). But cleaner: add a corollary in LiDisc: scale: apply exists_avoiding_midpoint at a' = a/ℓ with S' = S/ℓ... meh. Simplest: add a small generalization lemma in LiDisc.lean (a fresh proof or via scaling from the unit one).\n\nActually — cleanest: reuse exists_avoiding_midpoint directly with a = 2 (so R ∈ [2, 3])?? The disc bound for |ζ| was proved on B(2+it, 5/2) — so R ≤ 5/2 needed. R ∈ [2, 3] could exceed 2.5 ✗. Use a = 3/2 + ... hmm: I want R ∈ [r_c + margin, 5/2] with r_c = √5 ≈ 2.236: window [2.3, 2.5] too small for the unit-window lemma. Generalize: write a tiny scaling wrapper:\n\n```lean\ntheorem exists_avoiding_midpoint' {k : ℕ} {a : ℝ} (S : Finset ℝ) (hcard : S.card ≤ k)\n (ℓ : ℝ) (hℓ : 0 < ℓ) :\n ∃ T : ℝ, a ≤ T ∧ T ≤ a + ℓ ∧ ∀ x ∈ S, ℓ / (2 * (k + 1)) ≤ |x - T| := by\n -- scale: S/ℓ, apply the unit version at a/ℓ, multiply back\n obtain ⟨T', hT'1, hT'2, hT'3⟩ := exists_avoiding_midpoint (a / ℓ) (S.image (· / ℓ)) (by ...card_image_le.trans hcard)\n refine ⟨T' * ℓ, by nlinarith [hT'1, hℓ], by nlinarith [hT'2, hℓ], fun x hx => ?_⟩\n have := hT'3 (x / ℓ) (Finset.mem_image.mpr ⟨x, hx, by ring⟩)\n -- |x/ℓ − T'| ≥ 1/(2(k+1)) ⟹ |x − T'ℓ| ≥ ℓ/(2(k+1))\n rw [show x / ℓ - T' = (x - T' * ℓ) / ℓ by ring, abs_div, abs_of_pos hℓ] at this\n rw [div_le_iff₀ hℓ] at this? hmm — |x/ℓ − T'| = |x − T'ℓ|/ℓ ≥ 1/(2(k+1)) ⟹ |x−T'ℓ| ≥ ℓ/(2(k+1)) ✓\n ...\n```\nFine. Actually — even simpler: prove the ℓ-version directly by copying the midpoint proof with w := ℓ/(2(k+1)) — the LiContour proof is right there; a 40-line clone with ℓ threaded. OR the scaling wrapper (~15 lines). Wrapper it is.\n\nHmm wait — actually even simpler: can I just use a = 2.4, ℓ = 0.1·... — no. The wrapper. OK.\n\nLet me now write §1–§2 of LiDisc.lean. Actually, let me reconsider the overall size: this build has many moving parts. To keep the session manageable, let me stage it:\n- 5c-i: collection + count + R-gap selection (§1–§2).\n- 5c-ii: g analytic + nonvanishing (§3).\n- 5c-iii: the bounds + BC + loose R-bound (§4).\n\nWrite §1–§2 now.","signature":""},{"type":"text","text":"All inputs confirmed (re ≥ 1 nonvanishing is in Mathlib). Starting LiDisc.lean — §1 (collection + count) and §2 (R-gap via a scaled pigeonhole)."},{"type":"tool_use","id":"Write_340","name":"Write","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDisc.lean","content":"/-\nNguyenRH1/LiDisc.lean — tier ii′ sub-stage ii′-5c (D-067 §3 + §6 revision):\nthe LOOSE Davenport-disc R-bound on σ ∈ [1/2, 7/2], |t| ≥ 10 — the\nGROWTH INPUT for the partial-fraction identity (ii′-5e). Its constants\nare deliberately loose (D-067 §6: no disc-only constant can reach the\nbaked A = 10.5, B₀ = 48; tightness comes from the identity stage).\n\nStructure (all on the disc B(2+it, R), R ∈ [2.4, 2.5] chosen in a gap of\nthe zero-distance values):\n* §1 the zero collection + count (perimeter ZeroCountProp, ii′-4);\n* §2 the R-gap selection (scaled midpoint pigeonhole from ii′-4);\n* §3 g := ζ/∏(s−ρₖ)^{mₖ} analytic + nonvanishing on the closed disc;\n* §4 the bounds: |g| on the outer circle (ii′-5b's |ζ|-bound +\n clearance), the center lower bound (1/ζ = Σ μ(n)n^{−s}), then\n LogOfAnalyticFunction + BorelCaratheodoryDeriv (StrongPNTPrefix)\n giving ‖(log g)′‖ ≪ (log|t|)², hence the loose R-bound.\n\nArchive references: D-067, D-064 §4 R3, journal-022.\n-/\nimport Mathlib\nimport Zeta23.FromPNTPlus.StrongPNTPrefix\nimport NguyenRH1.LiRBound\n\nopen Zeta23 Complex Filter Topology MeasureTheory\nopen scoped Nat\n\nnoncomputable section\n\nnamespace NguyenRH1\n\n/-! ## 1. The zero collection and its count -/\n\n/-- The disc center s₀ = 2 + it. -/\ndef discCenter (t : ℝ) : ℂ := 2 + t * Complex.I\n\n/-- The zeros of ζ in the closed disc of radius 5/2 about 2+it, as a\nfinset (finiteness from Mathlib's discrete-zero-set machinery). -/\nnoncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ :=\n ((isCompact_closedBall (discCenter t) (5 / 2)).inter_riemannZetaZeros_finite).toFinset\n\ntheorem mem_zeroDiscFinset {t : ℝ} {ρ : ℂ} :\n ρ ∈ zeroDiscFinset t ↔\n ρ ∈ Metric.closedBall (discCenter t) (5 / 2) ∧ riemannZeta ρ = 0 := by\n unfold zeroDiscFinset\n rw [Set.Finite.mem_toFinset]\n constructor\n · intro h\n exact ⟨h.1, h.2⟩\n · intro h\n exact ⟨h.1, mem_riemannZetaZeros.mpr h.2⟩\n\n/-- Every zero of ζ in the disc is a nontrivial zero (re ≥ 1 excluded by\n`riemannZeta_ne_zero_of_one_le_re`; re ≤ 0 excluded by the FE since the\ndisc avoids {−2n} and 0). -/\ntheorem zeroDisc_isNontrivial {t : ℝ} {ρ : ℂ} (hρ : ρ ∈ zeroDiscFinset t) :\n IsNontrivialZero ρ := by\n have h2 := (mem_zeroDiscFinset.mp hρ).2\n have hball := (mem_zeroDiscFinset.mp hρ).1\n -- ρ ∈ closedBall (2+it) (5/2) ⟹ re ρ ∈ [−1/2, 9/2]\n have hre : -1 / 2 ≤ ρ.re ∧ ρ.re ≤ 9 / 2 := by\n rw [Metric.mem_closedBall, Complex.dist_eq] at hball\n have h1 : |(ρ - discCenter t).re| ≤ 5 / 2 := (abs_re_le_norm _).trans hball\n have h2re : (ρ - discCenter t).re = ρ.re - 2 := by\n simp [discCenter, sub_re, mul_re, ofReal_re, ofReal_im, I_re, I_im]\n rw [h2re] at h1\n have := abs_le.mp h1\n constructor <;> linarith [this.1, this.2]\n -- re ρ ≥ 1 excluded\n have hnot1 : ρ.re < 1 := by\n by_contra h\n push Not at h\n exact riemannZeta_ne_zero_of_one_le_re h h2\n -- re ρ ≤ 0 excluded (would force ρ ∈ {−2n} ∪ {0}, all outside the disc)\n have hpos : 0 < ρ.re := by\n by_contra h\n push Not at h\n -- ζ(ρ) = 0 with re ρ ≤ 0: then completedRiemannZeta ρ = 0 or ΓR-pole\n by_cases hG : Complex.Gammaℝ ρ = 0\n · -- ΓR(ρ) = 0 ⟹ ρ = −2n, but re ρ > −1/2 > −2\n rw [Complex.Gammaℝ_eq_zero_iff] at hG\n obtain ⟨n, hn⟩ := hG\n rw [hn] at hre\n have : (-(2 * (n : ℂ))).re ≤ -2 * (n : ℝ) := by\n simp [neg_re, mul_re]\n have hn1 : 1 ≤ n := by\n by_contra hn0\n push Not at hn0\n interval_cases n\n · simp at hn\n rw [hn] at h2\n -- ρ = 0: ζ(0) = −1/2 ≠ 0\n have := riemannZeta_zero\n rw [hn] at h2\n norm_num at h2 hthis\n rw [hthis] at h2\n norm_num at h2\n have : (n : ℝ) ≥ 1 := by exact_mod_cast hn1\n have : (-(2 * (n : ℂ))).re = -2 * (n : ℝ) := by\n simp [neg_re, mul_re]\n linarith [hre.1, this.le, ...]\n · -- ΓR(ρ) ≠ 0: then Λ(ρ) = ΓR(ρ)·ζ(ρ) = 0 ⟹ nontrivial ⟹ re > 0\n have hΛ : completedRiemannZeta ρ = 0 := by\n rw [RvM.completedRiemannZeta_eq_Gammaℝ_mul _ hG]\n · simp [h2]\n · intro h0\n rw [h0] at hre\n simp at hre\n linarith [hre.1]\n have := RvM.completedRiemannZeta_eq_zero_iff.mp hΛ\n exact this.2.1\n exact ⟨h2, hpos, hnot1⟩\n\nend NguyenRH1\n\nend\n"},"extra_content":null}]