← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes
thinking (9622 chars)
`riemannZetaZeros := riemannZeta ⁻¹' {0}` — all zeros including the junk-value point 1 (ζ(1) = 0 in Mathlib's convention? riemannZeta 1 = 0? Hmm — Mathlib's riemannZeta at 1 is defined as 0 (junk at the pole)? Actually Mathlib defines riemannZeta via the Hurwitz even completion... riemannZeta 1 might be a junk value. Since our disc avoids 1 (|t| ≥ 10, |s−(2+it)| ≤ 5/2 ⟹ |s − 1| ≥ ... im(s) ≥ 7.5 ≠ 0 ⟹ s ≠ 1 ✓), the collection over the disc won't include 1. But wait — if riemannZeta 1 = 0 by junk, then 1 ∈ riemannZetaZeros — irrelevant for us ✓.
OK. Now I have all the pieces. Let me design the ii′-5c file. This is a big build. Let me structure it as a new file `LiDisc.lean`:
**§1. The collection and the R-gap.**
```lean
noncomputable def discCenter (t : ℝ) : ℂ := 2 + t * Complex.I
/-- zeros of ζ in the closed disc of radius 5/2 about 2+it. -/
noncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ :=
(isCompact_closedBall _ _).inter_riemannZetaZeros_finite.toFinset -- hmm need the set form
```
Wait — the finiteness gives (closedBall ∩ riemannZetaZeros).Finite; .toFinset gives the Finset of ℂ's. Let me define:
```lean
noncomputable def zeroDisc (t : ℝ) : Set ℂ := Metric.closedBall (discCenter t) (5/2) ∩ riemannZetaZeros
theorem zeroDisc_finite (t : ℝ) : (zeroDisc t).Finite :=
(isCompact_closedBall _ _).inter_riemannZetaZeros_finite
noncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ := (zeroDisc_finite t).toFinset
```
**§2. The R-gap selection.** The distance-value set D := zeroDiscFinset.image (fun ρ => ‖ρ − discCenter t‖). Choose R ∈ [24/10, 5/2] avoiding D: via exists_avoiding_midpoint (ii′-4): needs card D ≤ some k. card D ≤ card zeroDiscFinset ≤ Nat.card of zeros in the im-window... The count of zeros in B(s₀, 5/2): they're nontrivial zeros with im ∈ [t−5/2, t+5/2] hmm — actually the disc includes re ≥ 1 points where there are NO ζ zeros — but the COUNT bound via the nontrivial-zero window: zeros in the disc ⊆ {IsNontrivialZero ∧ im ∈ [t−5/2, t+5/2]}... wait — is every ζ-zero in the disc nontrivial? re range of the disc: (2−5/2, 2+5/2) = (−1/2, 9/2): trivial zeros −2n: −2 < −1/2 ✓ excluded; re ≥ 1: no zeros (re > 1 Euler; re = 1: nonzero — needs PNT-level input: riemannZeta(1+it) ≠ 0 for t ≠ 0 — hmm is that available? For the COUNT bound I need to know the disc zeros are within the strip to apply ZeroCountProp... Actually — no: I can bound the count differently: the count of zeros in the disc ≤ Nat.card of {ζ-zeros in the disc} — bound via... hmm, ZeroCountProp is about nontrivial zeros in a unit im-window. The disc's zeros: are they all nontrivial? A zero ρ in the disc: ζ(ρ) = 0; ρ.re ∈ (−1/2, 9/2): if ρ.re ≤ 0: ζ zeros with re ≤ 0 are the trivial −2n (need: no OTHER zeros with re ≤ 0 — that's "no zeros on/off the negative axis except −2n" — the trivial-zero EXCLUSIVITY: ζ(s) = 0 ∧ −1/2 < re ≤ 0 ⟹ ... hmm — that needs the FE (ζ(s) = 0, re s ≤ 0 ⟹ s ∈ {−2n}): via Λ: Λ(s) = ΓR(s)ζ(s): for re s < 0: ζ(s) = Λ(s)/ΓR(s) with Λ(s) = Λ(1−s) = ΓR(1−s)ζ(1−s) ≠ 0 (re(1−s) > 1: ζ(1−s) ≠ 0 Euler; ΓR(1−s) ≠ 0 ✓) — so ζ(s) = 0 ⟺ ΓR(s) pole... ΓR(s) = 0 ⟺ s ∈ {−2n} (Gammaℝ_eq_zero_iff) and at those points Λ(−2n) ≠ 0 so ζ = Λ/ΓR = 0 ✓. So: ζ(s) = 0 ∧ re s < 0 ⟹ s ∈ {−2n}?? WAIT — ζ(s) = Λ(s)/ΓR(s): if ΓR(s) is finite-nonzero and Λ(s) ≠ 0: ζ ≠ 0. If ΓR(s) = 0 (s = −2n): ζ = Λ/ΓR — 0/0-ish — the completed form — ζ(−2n) = 0 (trivial zeros ✓). So ζ(s) = 0 ∧ re s < 0 ⟹ s = −2n: PROOF via: ζ(s) = 0 ⟹ Λ(s) = ΓR(s)·ζ(s) = 0·0?? — ΓR(−2n) = 0 (junk) so Λ(s) = ΓR·ζ only valid off ΓR-poles... `completedRiemannZeta_eq_Gammaℝ_mul (hs : s ≠ 0) (hG : Gammaℝ s ≠ 0)` — for s with ΓR s ≠ 0 and s ≠ 0: Λ = ΓR·ζ: ζ(s) = 0 ⟹ Λ(s) = 0 ⟹ IsNontrivialZero (via completedRiemannZeta_eq_zero_iff — Zeta23: Λ s = 0 ↔ IsNontrivialZero s — for s ∉ {0,1}?) — hmm — the Zeta23 lemma: `completedRiemannZeta_eq_zero_iff : completedRiemannZeta s = 0 ↔ IsNontrivialZero s` — presumably for all s (with IsNontrivialZero's def riemannZeta ρ = 0 ∧ 0 < re < 1). If ζ(s) = 0 with re s < 0, s ∉ {−2n}: then ΓR(s) ≠ 0, so Λ(s) = ΓR(s)·ζ(s) = 0 ⟹ IsNontrivialZero(s) ⟹ 0 < re s — contradiction with re s < 0. So ζ-zero with re ≤ 0 ⟹ s ∈ {−2n} ∪ {0} — clean. And re ≥ 1: re > 1: Euler nonzero (riemannZeta_ne_zero_of_one_lt_re ✓); re = 1 (and re ≤ 9/2): ζ(1+it) ≠ 0 for t ≠ 0 — the PNT-input: is it in Mathlib? `riemannZeta_ne_zero_of_re_eq_one`?? Hmm — Mathlib has the zero-free region?? I believe Mathlib DOES have `riemannZeta_ne_zero_of_one_le_re`? Hmm — actually I'm not sure the re=1 nonvanishing is in Mathlib (it's the PNT input). Zeta23 is a PNT repo — it has PNT-level zero-freeness for sure (the whole point). Let me grep for the re = 1 nonvanishing in Zeta23.
Hmm — hold on. Do I actually NEED to classify the disc zeros as nontrivial? For the COUNT bound: I need card(zeroDiscFinset) ≤ something like C log|t|. If some disc zeros are at re = 1 (PNT-forbidden but formally not excluded in my Lean context without the input)... The zero-free region at re = 1 IS available in Zeta23 (PNT is proved there). Let me just grep.
Also the trivial zeros: −2n — in the disc? re(−2n) ≤ −2 < −1/2 = disc's left edge ✓ none. And 0: ζ(0) = −1/2 ≠ 0 ✓. 1: pole. So the disc's zeros = nontrivial zeros with im within [t−5/2, t+5/2] (given re=1 nonvanishing). Count ≤ ZeroCountProp-style over 6 unit windows... The perimeter ZeroCountProp (ii′-4): ∀ t ≥ 2, card of zeros in [t, t+1] ≤ C0hat(t+1). For the disc count: im ∈ [t−5/2, t+5/2]: cover by 6 windows [t−5/2+k, ...]: each ≤ C0hat: total ≤ 6·C0hat(t+3)-ish. For t ≤ −10 use conjugation. So card ≤ 6·C0hat(|t|+3)-ish. OK.
But WAIT — the perimeter ZeroCountProp counts DISTINCT zeros (Nat.card of the subtype) — and the multiplicity: the R-sum and the g-product need mult-weights (zeroMult). The mult-weighted count: Σ mₖ over the collection. mₖ = analyticOrderNatAt ζ ρₖ. For the mult-weighted count from the DISTINCT count: need mult ≤ something per zero... OR make the perimeter hypothesis mult-weighted. D-056's C₀(t) = F(t+1)−F(t)+S_b(t+1)+S_b(t) — Trudgian's N(T) counts WITH multiplicity. So the honest perimeter form is mult-weighted. DECISION: add a second perimeter Prop `ZeroCountMultProp` (mult-weighted window count) — declared in LiDisc (or LiContour). For the LOOSE bound, actually the Jensen mult-count suffices — but for 5f (the tight analysis) I'll need the mult-weighted Trudgian count. Add it now as the perimeter declaration (it's the same Trudgian input, just packaged with multiplicities).
Hmm — wait, but actually for the loose bound, do I even need a count at all? The pieces: (a) R-gap selection needs card(finite) ≤ k for SOME k — the count from ZeroCountProp (distinct, via the window cover) or just finiteness + any explicit bound — actually the midpoint pigeonhole needs card ≤ k for a REAL k — any explicit bound: use the distinct-count 6·C0hat. (b) log|g| on the outer circle: ∏|s−ρₖ|^{−mₖ} ≤ (1/δ)^{Σmₖ}: Σmₖ = mult-weighted count ≤ ... — hmm. For the loose bound, the Jensen count (ZerosBound) gives Σ mₖ ≤ 24 log|t| + 3 directly (mult-weighted, no perimeter needed!). OK so for 5c-loose: use Jensen for the mult count. For 5f-tight: the mult-weighted Trudgian (add the Prop then). Fine.
(c) The center lower bound: |ζ(2+it)| ≥ 1/ζ(2) via LSeries μ.
Let me now write §1–§2 of LiDisc.lean (collection + gap + count), then §3 (g + analytic + nonvanishing), §4 (bounds + BC + the R-bound assembly). This is a lot — start with §1–§2 and compile.
Actually — wait, one more consideration on the ORDER of work. The loose 5c bound is the growth input for the identity (5e). But do I even need the FULL disc machinery for the loose bound? The growth argument needs |ζ′/ζ(s)| ≤ C(log R)² on gap circles. Alternative cheaper loose bound: could I get |ζ′/ζ| ≤ poly-log more directly? Hmm — on a vertical line re = 2: |ζ′/ζ(2+it)| ≤ −ζ′/ζ(2) (constant!). The R-bound form (ζ′/ζ minus near-sum) is what's needed at general s. The disc is the honest way. OK proceed as planned.
Let me also reconsider: is there a shortcut where the growth argument for the identity uses the disc bound ONLY at re ≥ 1/2 and the FE-reflection for re < 1/2 — yes that's the plan (5c right, 5d left). ✓.
Let me write LiDisc.lean §1–§2 now:
```lean
/-
NguyenRH1/LiDisc.lean — tier ii′ sub-stage ii′-5c (D-067 §3/§6):
the LOOSE Davenport-disc R-bound (growth input for the partial-fraction
identity, ii′-5e). ...
-/
import Mathlib
import NguyenRH1.LiRBound -- brings LiContour, LiSides, LiSkeleton, LiSwaps, Zeta23.RvM.CountByIntegral
import Zeta23.FromPNTPlus.StrongPNTPrefix
open Zeta23 Complex Filter Topology MeasureTheory
open scoped Nat
noncomputable section
namespace NguyenRH1
/-! ## 1. The zero collection in the disc -/
/-- The disc center s₀ = 2 + it. -/
def discCenter (t : ℝ) : ℂ := 2 + t * Complex.I
/-- The zeros of ζ in the closed disc of radius 5/2 about 2+it. -/
noncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ :=
((isCompact_closedBall (discCenter t) (5/2)).inter_riemannZetaZeros_finite).toFinset
theorem mem_zeroDiscFinset {t : ℝ} {ρ : ℂ} :
ρ ∈ zeroDiscFinset t ↔ ρ ∈ Metric.closedBall (discCenter t) (5/2) ∧ riemannZeta ρ = 0 :=
Set.Finite.mem_toFinset _ -- hmm the exact form
```
The membership: Set.Finite.mem_toFinset (hs) : a ∈ hs.toFinset ↔ a ∈ s ✓ with s = closedBall ∩ riemannZetaZeros: membership = ∈ closedBall ∧ riemannZeta ρ = 0 (via mem_riemannZetaZeros ✓).
Count bound: card zeroDiscFinset ≤ 6·C0hat(|t|+3)? For that: zeros in the disc are nontrivial (need the re=1 nonvanishing!) — check Zeta23 for re=1 nonvanishing... let me grep for riemannZeta_ne_zero of re-eq-one or the zero-free content.
Checking the re = 1 nonvanishing (needed to classify disc zeros as nontrivial for the count).
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean && grep -rn \"ne_zero_of_one_le_re\\|ne_zero_of_re_eq\\|re_eq_one\\|zeroFree\\|zero_free\" Zeta23/FromPNTPlus/*.lean Zeta23/Statement/*.lean --include=*.lean | grep -i \"theorem\\|lemma\\|def \" | head -8; cd .lake/packages/mathlib && grep -rn \"riemannZeta_ne_zero\" Mathlib/NumberTheory/ -r --include=*.lean | grep -v \"one_lt_re\" | head -5",
"description": "Search for re=1 nonvanishing in Zeta23 and Mathlib"
}
raw content_json (database row)
[{"type":"thinking","thinking":"`riemannZetaZeros := riemannZeta ⁻¹' {0}` — all zeros including the junk-value point 1 (ζ(1) = 0 in Mathlib's convention? riemannZeta 1 = 0? Hmm — Mathlib's riemannZeta at 1 is defined as 0 (junk at the pole)? Actually Mathlib defines riemannZeta via the Hurwitz even completion... riemannZeta 1 might be a junk value. Since our disc avoids 1 (|t| ≥ 10, |s−(2+it)| ≤ 5/2 ⟹ |s − 1| ≥ ... im(s) ≥ 7.5 ≠ 0 ⟹ s ≠ 1 ✓), the collection over the disc won't include 1. But wait — if riemannZeta 1 = 0 by junk, then 1 ∈ riemannZetaZeros — irrelevant for us ✓.\n\nOK. Now I have all the pieces. Let me design the ii′-5c file. This is a big build. Let me structure it as a new file `LiDisc.lean`:\n\n**§1. The collection and the R-gap.**\n```lean\nnoncomputable def discCenter (t : ℝ) : ℂ := 2 + t * Complex.I\n\n/-- zeros of ζ in the closed disc of radius 5/2 about 2+it. -/\nnoncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ :=\n (isCompact_closedBall _ _).inter_riemannZetaZeros_finite.toFinset -- hmm need the set form\n```\nWait — the finiteness gives (closedBall ∩ riemannZetaZeros).Finite; .toFinset gives the Finset of ℂ's. Let me define:\n```lean\nnoncomputable def zeroDisc (t : ℝ) : Set ℂ := Metric.closedBall (discCenter t) (5/2) ∩ riemannZetaZeros\ntheorem zeroDisc_finite (t : ℝ) : (zeroDisc t).Finite :=\n (isCompact_closedBall _ _).inter_riemannZetaZeros_finite\nnoncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ := (zeroDisc_finite t).toFinset\n```\n\n**§2. The R-gap selection.** The distance-value set D := zeroDiscFinset.image (fun ρ => ‖ρ − discCenter t‖). Choose R ∈ [24/10, 5/2] avoiding D: via exists_avoiding_midpoint (ii′-4): needs card D ≤ some k. card D ≤ card zeroDiscFinset ≤ Nat.card of zeros in the im-window... The count of zeros in B(s₀, 5/2): they're nontrivial zeros with im ∈ [t−5/2, t+5/2] hmm — actually the disc includes re ≥ 1 points where there are NO ζ zeros — but the COUNT bound via the nontrivial-zero window: zeros in the disc ⊆ {IsNontrivialZero ∧ im ∈ [t−5/2, t+5/2]}... wait — is every ζ-zero in the disc nontrivial? re range of the disc: (2−5/2, 2+5/2) = (−1/2, 9/2): trivial zeros −2n: −2 < −1/2 ✓ excluded; re ≥ 1: no zeros (re > 1 Euler; re = 1: nonzero — needs PNT-level input: riemannZeta(1+it) ≠ 0 for t ≠ 0 — hmm is that available? For the COUNT bound I need to know the disc zeros are within the strip to apply ZeroCountProp... Actually — no: I can bound the count differently: the count of zeros in the disc ≤ Nat.card of {ζ-zeros in the disc} — bound via... hmm, ZeroCountProp is about nontrivial zeros in a unit im-window. The disc's zeros: are they all nontrivial? A zero ρ in the disc: ζ(ρ) = 0; ρ.re ∈ (−1/2, 9/2): if ρ.re ≤ 0: ζ zeros with re ≤ 0 are the trivial −2n (need: no OTHER zeros with re ≤ 0 — that's \"no zeros on/off the negative axis except −2n\" — the trivial-zero EXCLUSIVITY: ζ(s) = 0 ∧ −1/2 < re ≤ 0 ⟹ ... hmm — that needs the FE (ζ(s) = 0, re s ≤ 0 ⟹ s ∈ {−2n}): via Λ: Λ(s) = ΓR(s)ζ(s): for re s < 0: ζ(s) = Λ(s)/ΓR(s) with Λ(s) = Λ(1−s) = ΓR(1−s)ζ(1−s) ≠ 0 (re(1−s) > 1: ζ(1−s) ≠ 0 Euler; ΓR(1−s) ≠ 0 ✓) — so ζ(s) = 0 ⟺ ΓR(s) pole... ΓR(s) = 0 ⟺ s ∈ {−2n} (Gammaℝ_eq_zero_iff) and at those points Λ(−2n) ≠ 0 so ζ = Λ/ΓR = 0 ✓. So: ζ(s) = 0 ∧ re s < 0 ⟹ s ∈ {−2n}?? WAIT — ζ(s) = Λ(s)/ΓR(s): if ΓR(s) is finite-nonzero and Λ(s) ≠ 0: ζ ≠ 0. If ΓR(s) = 0 (s = −2n): ζ = Λ/ΓR — 0/0-ish — the completed form — ζ(−2n) = 0 (trivial zeros ✓). So ζ(s) = 0 ∧ re s < 0 ⟹ s = −2n: PROOF via: ζ(s) = 0 ⟹ Λ(s) = ΓR(s)·ζ(s) = 0·0?? — ΓR(−2n) = 0 (junk) so Λ(s) = ΓR·ζ only valid off ΓR-poles... `completedRiemannZeta_eq_Gammaℝ_mul (hs : s ≠ 0) (hG : Gammaℝ s ≠ 0)` — for s with ΓR s ≠ 0 and s ≠ 0: Λ = ΓR·ζ: ζ(s) = 0 ⟹ Λ(s) = 0 ⟹ IsNontrivialZero (via completedRiemannZeta_eq_zero_iff — Zeta23: Λ s = 0 ↔ IsNontrivialZero s — for s ∉ {0,1}?) — hmm — the Zeta23 lemma: `completedRiemannZeta_eq_zero_iff : completedRiemannZeta s = 0 ↔ IsNontrivialZero s` — presumably for all s (with IsNontrivialZero's def riemannZeta ρ = 0 ∧ 0 < re < 1). If ζ(s) = 0 with re s < 0, s ∉ {−2n}: then ΓR(s) ≠ 0, so Λ(s) = ΓR(s)·ζ(s) = 0 ⟹ IsNontrivialZero(s) ⟹ 0 < re s — contradiction with re s < 0. So ζ-zero with re ≤ 0 ⟹ s ∈ {−2n} ∪ {0} — clean. And re ≥ 1: re > 1: Euler nonzero (riemannZeta_ne_zero_of_one_lt_re ✓); re = 1 (and re ≤ 9/2): ζ(1+it) ≠ 0 for t ≠ 0 — the PNT-input: is it in Mathlib? `riemannZeta_ne_zero_of_re_eq_one`?? Hmm — Mathlib has the zero-free region?? I believe Mathlib DOES have `riemannZeta_ne_zero_of_one_le_re`? Hmm — actually I'm not sure the re=1 nonvanishing is in Mathlib (it's the PNT input). Zeta23 is a PNT repo — it has PNT-level zero-freeness for sure (the whole point). Let me grep for the re = 1 nonvanishing in Zeta23.\n\nHmm — hold on. Do I actually NEED to classify the disc zeros as nontrivial? For the COUNT bound: I need card(zeroDiscFinset) ≤ something like C log|t|. If some disc zeros are at re = 1 (PNT-forbidden but formally not excluded in my Lean context without the input)... The zero-free region at re = 1 IS available in Zeta23 (PNT is proved there). Let me just grep.\n\nAlso the trivial zeros: −2n — in the disc? re(−2n) ≤ −2 < −1/2 = disc's left edge ✓ none. And 0: ζ(0) = −1/2 ≠ 0 ✓. 1: pole. So the disc's zeros = nontrivial zeros with im within [t−5/2, t+5/2] (given re=1 nonvanishing). Count ≤ ZeroCountProp-style over 6 unit windows... The perimeter ZeroCountProp (ii′-4): ∀ t ≥ 2, card of zeros in [t, t+1] ≤ C0hat(t+1). For the disc count: im ∈ [t−5/2, t+5/2]: cover by 6 windows [t−5/2+k, ...]: each ≤ C0hat: total ≤ 6·C0hat(t+3)-ish. For t ≤ −10 use conjugation. So card ≤ 6·C0hat(|t|+3)-ish. OK.\n\nBut WAIT — the perimeter ZeroCountProp counts DISTINCT zeros (Nat.card of the subtype) — and the multiplicity: the R-sum and the g-product need mult-weights (zeroMult). The mult-weighted count: Σ mₖ over the collection. mₖ = analyticOrderNatAt ζ ρₖ. For the mult-weighted count from the DISTINCT count: need mult ≤ something per zero... OR make the perimeter hypothesis mult-weighted. D-056's C₀(t) = F(t+1)−F(t)+S_b(t+1)+S_b(t) — Trudgian's N(T) counts WITH multiplicity. So the honest perimeter form is mult-weighted. DECISION: add a second perimeter Prop `ZeroCountMultProp` (mult-weighted window count) — declared in LiDisc (or LiContour). For the LOOSE bound, actually the Jensen mult-count suffices — but for 5f (the tight analysis) I'll need the mult-weighted Trudgian count. Add it now as the perimeter declaration (it's the same Trudgian input, just packaged with multiplicities).\n\nHmm — wait, but actually for the loose bound, do I even need a count at all? The pieces: (a) R-gap selection needs card(finite) ≤ k for SOME k — the count from ZeroCountProp (distinct, via the window cover) or just finiteness + any explicit bound — actually the midpoint pigeonhole needs card ≤ k for a REAL k — any explicit bound: use the distinct-count 6·C0hat. (b) log|g| on the outer circle: ∏|s−ρₖ|^{−mₖ} ≤ (1/δ)^{Σmₖ}: Σmₖ = mult-weighted count ≤ ... — hmm. For the loose bound, the Jensen count (ZerosBound) gives Σ mₖ ≤ 24 log|t| + 3 directly (mult-weighted, no perimeter needed!). OK so for 5c-loose: use Jensen for the mult count. For 5f-tight: the mult-weighted Trudgian (add the Prop then). Fine.\n\n(c) The center lower bound: |ζ(2+it)| ≥ 1/ζ(2) via LSeries μ.\n\nLet me now write §1–§2 of LiDisc.lean (collection + gap + count), then §3 (g + analytic + nonvanishing), §4 (bounds + BC + the R-bound assembly). This is a lot — start with §1–§2 and compile.\n\nActually — wait, one more consideration on the ORDER of work. The loose 5c bound is the growth input for the identity (5e). But do I even need the FULL disc machinery for the loose bound? The growth argument needs |ζ′/ζ(s)| ≤ C(log R)² on gap circles. Alternative cheaper loose bound: could I get |ζ′/ζ| ≤ poly-log more directly? Hmm — on a vertical line re = 2: |ζ′/ζ(2+it)| ≤ −ζ′/ζ(2) (constant!). The R-bound form (ζ′/ζ minus near-sum) is what's needed at general s. The disc is the honest way. OK proceed as planned.\n\nLet me also reconsider: is there a shortcut where the growth argument for the identity uses the disc bound ONLY at re ≥ 1/2 and the FE-reflection for re < 1/2 — yes that's the plan (5c right, 5d left). ✓.\n\nLet me write LiDisc.lean §1–§2 now:\n\n```lean\n/-\nNguyenRH1/LiDisc.lean — tier ii′ sub-stage ii′-5c (D-067 §3/§6):\nthe LOOSE Davenport-disc R-bound (growth input for the partial-fraction\nidentity, ii′-5e). ...\n-/\nimport Mathlib\nimport NguyenRH1.LiRBound -- brings LiContour, LiSides, LiSkeleton, LiSwaps, Zeta23.RvM.CountByIntegral\nimport Zeta23.FromPNTPlus.StrongPNTPrefix\n\nopen Zeta23 Complex Filter Topology MeasureTheory\nopen scoped Nat\n\nnoncomputable section\n\nnamespace NguyenRH1\n\n/-! ## 1. The zero collection in the disc -/\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. -/\nnoncomputable def zeroDiscFinset (t : ℝ) : Finset ℂ :=\n ((isCompact_closedBall (discCenter t) (5/2)).inter_riemannZetaZeros_finite).toFinset\n\ntheorem mem_zeroDiscFinset {t : ℝ} {ρ : ℂ} :\n ρ ∈ zeroDiscFinset t ↔ ρ ∈ Metric.closedBall (discCenter t) (5/2) ∧ riemannZeta ρ = 0 :=\n Set.Finite.mem_toFinset _ -- hmm the exact form\n```\n\nThe membership: Set.Finite.mem_toFinset (hs) : a ∈ hs.toFinset ↔ a ∈ s ✓ with s = closedBall ∩ riemannZetaZeros: membership = ∈ closedBall ∧ riemannZeta ρ = 0 (via mem_riemannZetaZeros ✓).\n\nCount bound: card zeroDiscFinset ≤ 6·C0hat(|t|+3)? For that: zeros in the disc are nontrivial (need the re=1 nonvanishing!) — check Zeta23 for re=1 nonvanishing... let me grep for riemannZeta_ne_zero of re-eq-one or the zero-free content.","signature":""},{"type":"text","text":"Checking the re = 1 nonvanishing (needed to classify disc zeros as nontrivial for the count)."},{"type":"tool_use","id":"Bash_338","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && grep -rn \"ne_zero_of_one_le_re\\|ne_zero_of_re_eq\\|re_eq_one\\|zeroFree\\|zero_free\" Zeta23/FromPNTPlus/*.lean Zeta23/Statement/*.lean --include=*.lean | grep -i \"theorem\\|lemma\\|def \" | head -8; cd .lake/packages/mathlib && grep -rn \"riemannZeta_ne_zero\" Mathlib/NumberTheory/ -r --include=*.lean | grep -v \"one_lt_re\" | head -5","description":"Search for re=1 nonvanishing in Zeta23 and Mathlib"},"extra_content":null}]