Current task: —

← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes

#1287 assistant 2026-08-22 19:36:46.291 UTC · 438→5134 tok open ⤢
thinking (13143 chars)
Now start ii′-5c (revised): the loose disc R-bound on σ ∈ [1/2, 7/2], |t| ≥ 10. This is the g/log-g/BC machinery. Let me plan the Lean content: **Target (loose form):** for s = σ+it, σ ∈ [1/2, 7/2], |t| ≥ 10, ζ(s) ≠ 0: ‖logDeriv ζ s − Σ_{ρ ∈ nearZeros t} (zeroMult ρ : ℂ)/(s − ρ)‖ ≤ C·log|t| + C′ with some explicit (large) constants. Components: 1. **The zero collection**: the finite set of zeros of ζ in the closed ball B(2+it, 2.3) hmm — the collection radius: zeros with |γ−t| < 1 have |ρ−s₀| ≤ √5 ≈ 2.236 < 2.3 ✓. Finset: {ρ ∈ closedBall s₀ 2.3 | riemannZeta ρ = 0} — finite via... `IsCompact.inter_riemannZetaZeros_finite` (used in ii′-1a — check its exact statement) or via Zeta23 zero finiteness on rectangles. The zeros in a closed ball — the set {ρ | ζ ρ = 0 ∧ ρ ∈ closedBall s₀ 2.3}: finite — via Zeta23's zerosIn_finite on the im-window [t−2.3, t+2.3] ∩ re-strip? zerosIn is for NONTRIVIAL zeros (0 < re < 1). The disc B(2+it, 2.3) spans re ∈ (−0.3, 4.3) — includes re ≥ 1 and re ≤ 0 regions where ζ has no zeros?? re ∈ [1, 4.3]: ζ ≠ 0 there (re > 1 Euler ✓; re = 1: PNT nonvanishing — hmm — is ζ(1+it) ≠ 0 available? For |t| ≥ 10... the zeros ON re = 1 — PNT says none. Is that in scope? For the COLLECTION I could just take ALL zeros of ζ in the disc regardless of classification — with their orders (analyticOrderNatAt). The finiteness: zeros of ζ in a compact set not containing the pole 1 — `IsCompact.inter_riemannZetaZeros_finite` — let me check its exact statement. From ii′-1a usage: "finite ball via IsCompact.inter_riemannZetaZeros_finite" — presumably: (hs : IsCompact s) → (s ∩ {z | riemannZeta z = 0}).Finite? or {ρ | riemannZeta ρ = 0} ∩ s finite. For our disc (compact, avoids 1 since |t| ≥ 10): finite ✓. 2. **g := ζ/∏(s−ρₖ)^{mₖ}**: analytic + nonvanishing on B(s₀, 2.3)... actually need analytic on closedBall(s₀, R = 5/2) and nonvanishing on closedBall(s₀, R)... wait — the collection is within 2.3; g's zeros removed are only the collected ones; g nonvanishing on the closed disc of radius 5/2 requires: ζ's zeros in B(s₀, 5/2) are ALL in the collection (they are: collection = all zeros in B(s₀, 2.3)... wait — what about zeros with |ρ−s₀| ∈ (2.3, 2.5]? NOT collected — then g(there) = ζ/∏ has ζ = 0 with nonzero denominator ⟹ g = 0 — BAD (log g undefined there!). Hmm — so the collection must include ALL zeros in the BIGGER disc B(s₀, R) = B(s₀, 5/2)!! Let me recheck: LogOfAnalyticFunction needs B nonvanishing on closedBall(0, R). So the collection = all zeros in closedBall(s₀, 5/2) hmm — but then the "extras" in the final R-sum run over zeros with |γ−t| ∈ [1, ~2.7]: extras each |s−ρ| ≥ |t−γ| ≥ 1 ✓ still bounded by count. And the clearance on the outer circle |s−s₀| = 5/2: |s−ρₖ| ≥ 5/2 − |ρₖ−s₀| ≥ ... collected zeros have |ρₖ−s₀| ≤ 5/2 — could be ON the circle! |s−ρₖ| ≥ 0 possible — clearance ZERO. Hmm. Fix: collect zeros in B(s₀, r_c) with r_c < R and the annulus (r_c, R] zero-free... but zeros could be anywhere in the annulus — can't guarantee zero-free without a gap argument: the zeros with |ρ−s₀| ∈ (r_c, R]: their ordinates γ ∈ [t−R, t+R]... the DISTANCE |ρ−s₀| ∈ annulus means γ ∈ annulus-ish (|γ−t| ∈ (r_c−1, R]) — there ARE zeros there in general. So the outer circle |s−s₀| = R might pass near/through zeros! The standard fix (Davenport): choose R within a GAP: the circle |s−s₀| = R must keep distance ≥ δ from all zeros: ||ρ−s₀| − R| ≥ δ for all ρ. The zeros' distances |ρ−s₀| ∈ (0, R_max]-ish — finitely many (compact) — so the distances form a finite set; pick R ∈ [2.4, 2.5] avoiding the finite set of distances by ≥ 1/(4·count)-ish — a mini-pigeonhole on the distance values! The count of zeros in B(s₀, 2.5) ≤ count in the im-window [t−2.5, t+2.5] ≤ 3·C0hat(t+3)-ish (perimeter) — finite ✓ so the distance values {dₖ} are ≤ N ≤ 3C₀… — pick R ∈ [2.4, 2.5] with |R − dₖ| ≥ 1/(3N) for all k (pigeonhole on [2.4, 2.5]: N values, gap ≥ 1/(3N)...). Then |s−ρₖ| ≥ ||s−s₀| − |ρₖ−s₀|| = |R − dₖ| ≥ 1/(3N) on the circle ✓. Hmm — this adds a gap-selection step for R (like ii′-4's L3 but for distances). Fine — reuse the midpoint-pigeonhole idea: actually simplest: reuse `exists_avoiding_midpoint`?? That gives a point avoiding a finite SET of reals — but here the set is the distance values {‖ρ−s₀‖ : ρ ∈ collected} — a Finset ℝ of card ≤ N — with the window [2.4, 2.5] — exists_avoiding_midpoint (a := 2.4) (S := distances) (card ≤ N): gives R ∈ [2.4, 2.5] with |R − d| ≥ 1/(2(N+1)) ∀ d ∈ S ✓. But N := the count bound — need the card bound of the zeros in B(s₀, 2.5): ≤ 3·C0hat(t+4)-ish (the im-window [t−2.5, t+2.5] ⊆ [t−3, t+3] = 3 unit windows [t−3,t−2],[t−2,t−1],[t−1,t]... hmm the ZeroCountProp windows [u, u+1]: cover [t−3, t+3] with 6 windows [t−3..t+2] hmm — but ZeroCountProp requires the window start ≥ 2: t−3 ≥ 2 ⟸ t ≥ 5 hmm t ≥ 10 hmm — but t could be negative! |t| ≥ 10 includes t ≤ −10: windows [t−3, t−2] with t = −10: start −13 < 2 — ZeroCountProp stated for t ≥ 2 only!! For negative t: conjugate symmetry (zeros at −t are conjugates of zeros at t): the count in [t, t+1] for t ≤ −10 equals count in [−t−1, −t] (conjugation): −t ≥ 10 ≥ 2 ✓. So for the negative case apply the perimeter bound at −t−1 ✓. Fine — handle by cases / state the Prop for |t| large with both signs. Simplest: state ZeroCountProp for t ≥ 2 and derive the t ≤ −2 case via conjugation (zeroMult conj-invariance — the seam mult_reflect or riemannZeta_conj — D-066 noted `riemannZeta_conj` to be located/proved). Hmm — or state ZeroCountProp for ALL t with |t| ≥ 2... the cleanest: add a derived lemma `zeroCountProp_neg` later. Defer. 3. **g analytic + nonvanishing**: g = ζ/∏ₖ(s−ρₖ)^{mₖ} — the quotient analyticity at each ρₖ: ζ(s) = (s−ρₖ)^{mₖ}·h(s) with h analytic nonvanishing at ρₖ (the analyticOrderNatAt normal form — `analyticOrderNatAt` gives the factorization: there's `AnalyticAt... ` the normal form: f = (z−z₀)^n • g with g(z₀) ≠ 0 — from `AnalyticAt.exists_eventuallyEq_pow_smul_nonzero`? hmm — the lemma used in the analyticOrderAt_eq_natCast proof: `hf.exists_eventuallyEq_pow_smul_nonzero_iff`... There's `AnalyticAt.analyticOrderAt_eq_natCast` (used in 4c) — the factorization existence: `AnalyticAt.exists_...`. For the quotient-of-product version: g = ζ/∏ — write g(s) = H(s)/... hmm. Actually the cleanest: define g via the quotient and prove analytic+nonvanishing at each ρₖ by the order argument: ζ(s)/∏(s−ρₖ)^{mₖ} — near ρₖ: ζ = (s−ρₖ)^{mₖ}·h, h(ρₖ) ≠ 0: the quotient = h·∏_{j≠k}(s−ρⱼ)^{−mⱼ} — analytic at ρₖ ✓ nonvanishing ✓. The formalization: induction on the finset with the per-point factorization — there might be a Mathlib lemma `AnalyticAt.div_pow_of_...`? or use the MeromorphicAt.order machinery: g is meromorphic with order(g, ρₖ) = order(ζ, ρₖ) − mₖ = 0 ⟹ analytic nonvanishing. Mathlib's `MeromorphicAt.order` + `MeromorphicAt.order_div` + `MeromorphicAt.order_pow`... and "order = 0 ⟹ analytic & nonzero": `MeromorphicAt.order_eq_zero_iff`? This is the cleanest API path IF the lemmas exist. Zeta23's ZeroFactorization (StrongPNTPrefix:214) — let me read it — it might do exactly the product-extraction. 4. **The bounds**: - Outer circle |s−s₀| = R: |g(s)| = |ζ(s)|/∏|s−ρₖ|^{mₖ} ≤ (3/4)|t|²·∏(1/δ)^{mₖ} with δ = 1/(2(N+1))-ish... wait — the clearance is on the CIRCLE: |s−ρₖ| ≥ |R − dₖ| ≥ 1/(2(N+1)). So |g| ≤ (3/4)|t|²·(2(N+1))^M where M = Σmₖ ≤ N (mult-weighted count ≤ ... hmm — M ≤ ? — the mult-weighted count over the collection — perimeter ZeroCountProp is DISTINCT count (Nat.card). Mult-weighted: M = Σ mₖ ≥ N = #distinct. For the bound |g| ≤ (3/4)|t|²·(2(N+1))^M — with M ≤ Jensen-ish or ≤ C·N?? — hmm. mₖ ≤ ? a priori: mult at a zero ≤ count-in-small-disc via Jensen — mₖ ≤ C log|t| each: M ≤ N·C log|t|?? then (2(N+1))^M = exp(M·log(2N+2)) = exp(C′(log t)²) — log|g| ≤ 2 log|t| + C′(log t)² — the (log t)² makes M ≈ (log t)² — then BC ×100: A ≈ 100·(log t)²/log t = 100 log t — the R-bound becomes |R| ≤ C(log t)² — GOOD ENOUGH for the growth argument (still o(R) ✓). But wait — for the loose growth input, even (log t)² is fine! The loose bound just needs to be o(R)/polynomial. Hmm — but hold on: actually let me reconsider — do I even need g nonvanishing on the whole closed ball? YES for LogOfAnalyticFunction. Hmm — wait, actually there's a subtlety about M (Σ mₖ). For the loose bound I can afford the Jensen mult count. But actually simpler: mₖ ≤ M_total where... let me just bound M ≤ C·log|t| via ZerosBound (Jensen: mult-weighted count in B(s₀, 2.3) ≤ log(sup|ζ|/|ζ(s₀)|)/log(R/r_c) = [2 log|t| + log(3/4) + log ζ(2)]/log(2.5/2.3) ≈ (2 log|t| + 0.18)/0.083 ≈ 24 log|t| + 3). So M ≤ 24 log|t| + 3 — mult-weighted, from Jensen directly ✓ no perimeter needed for THIS. Then |g| ≤ (3/4)|t|²·(2(N+1))^M with N ≤ M ≤ 24 log|t|+3: log|g| ≤ 2log|t| + log(3/4) + M·log(2N+2) ≤ 2log|t| + (24 log|t|+3)·log(48 log|t| + 8) ≤ C(log|t|)² ✓ — polynomial-ish, o(R) ✓ FINE for the growth input. Hmm wait — but N here is the number of DISTINCT zeros (for the R-gap selection). N ≤ M ≤ 24 log|t| + 3 ✓. So clearance δ = 1/(2(N+1)) ≥ 1/(48 log|t| + 8): log(1/δ) ≤ log(48 log|t| + 8) = O(log log|t|) ✓ so log|g| ≤ 2log|t| + M·O(loglog|t|) ≤ 2log|t| + C log|t| loglog|t| — fine. 5. **Center lower bound**: |g(s₀)| = |ζ(s₀)|/∏|s₀−ρₖ|^{mₖ} ≥ (1/ζ(2))/(2.3)^M: −log|g(s₀)| ≤ log ζ(2) + M log 2.3 ≤ C log|t| ✓. The |ζ(2+it)| ≥ 1/ζ(2): from 1/ζ(s) = Σ μ(n)n^{−s}: |1/ζ(s)| ≤ Σ |μ(n)|n^{−2} ≤ ζ(2) ⟹ |ζ(s)| ≥ 1/ζ(2). Mathlib: 1/ζ = Σμn^{−s}: `riemannZeta_inv_eq...`? — need the LSeries-of-μ fact: `ArithmeticFunction.LSeries_moebius`? Hmm — is there `LSeries μ s = 1/ζ s` for re > 1 in Mathlib? There's `LSeries_vonMangoldt_eq_deriv_riemannZeta_div` (D-066 ✓) — for μ: `ArithmeticFunction.moebius` LSeries: `LSeries_moebius_eq`? Let me check at build. Alternative for the center lower bound avoiding the μ-series: |ζ(2+it)| ≥ ζ(2)/... hmm — actually there's a slicker classical: |ζ(σ+it)| ≥ ζ(2σ)/ζ(σ) for σ > 1 (via the Euler product log: log|ζ(s)| = Σ_p Re log(1−p^{−s})⁻¹ = −Σ Re log(1−p^{−s})... |ζ(σ+it)| = ∏|1−p^{−s}|⁻¹ ≥ ∏(1+p^{−σ})⁻¹·... = ζ(2σ)/ζ(σ)): |1−p^{−s}| ≤ 1+p^{−σ} ⟹ |ζ| = ∏|1−p^{−s}|⁻¹ ≥ ∏(1+p^{−σ})⁻¹ = ζ(2σ)/ζ(σ) ✓. The Euler product in Mathlib: `riemannZeta_eulerProduct`? — there's `Complex.riemannZeta_eulerProduct`? not sure. The μ-series route might be more available: grep at build. 6. **logDeriv quotient**: deriv J_g = g′/g = ζ′/ζ − Σ mₖ/(s−ρₖ): g = ζ/∏: logDeriv g = logDeriv ζ − logDeriv ∏(s−ρₖ)^{mₖ} = ζ′/ζ − Σ mₖ/(s−ρₖ): logDeriv_div (needs g₂ z ≠ 0 + differentiability), logDeriv_prod, logDeriv of (s−ρ)^m = m/(s−ρ) (logDeriv_pow + logDeriv_sub + logDeriv_id): `logDeriv_pow (f) (n) : logDeriv (f^n) = n·logDeriv f`? hmm — logDeriv_pow: logDeriv (f^n) x = n * (logDeriv f x)? there might be a fin issue at f x = 0 — at our points (g nonvanishing region) fine. 7. **The final R-sum split**: R(s) = ζ′/ζ(s) − Σ_{|γ−t|<1} mₖ/(s−ρₖ) = (log g)′(s) + Σ_{collected, |γ−t| ≥ 1} mₖ/(s−ρₖ). The extras: |s−ρₖ| ≥ |Im| = |t−γₖ| ≥ 1 ⟹ each ≤ mₖ·1: Σ extras ≤ Σ mₖ = M ≤ 24 log|t| + 3 ✓. So the loose bound: |R(s)| ≤ 100·M_bound + M where M_bound = sup Re J_g ≤ [2 log|t| + log(3/4) + M log(2N+2)] + [log ζ(2) + M log 2.3] ≤ C(log|t|)²... let me just carry A′ := something explicit like 1000·(log|t|)² — whatever comes out. For the growth input any explicit polynomial-in-log bound works. Hmm — WAIT. Actually — hold on. For the GROWTH argument (step iii of the identity), I need |F| = o(R) on the gap circles — and the |ζ′/ζ| piece on the circles comes from the loose R-bound. But the loose R-bound I'm building is for σ ∈ [1/2, 7/2] only — the circle's left part σ ∈ [−R, 1/2] needs the FE-reflected loose bound (5d). So 5c + 5d both feed the identity. The 5c deliverable: the loose bound on [1/2, 7/2]. Fine. BUT — hmm, actually, do I really need the g-machinery for the LOOSE bound? For the growth input I need |ζ′/ζ(s)| ≤ poly-log on the gap circles. The R-bound form (ζ′/ζ − near-sum) is what the disc gives. Alternatively the growth argument could use the disc bound differently... no — the R-bound form is exactly what's needed to control ζ′/ζ on the circle (subtract the near-sum which is separately bounded). OK the plan stands. One more decision: the exact statement form of the loose R-bound for downstream use. For the growth argument, what's needed is: on the gap circle |s| = R: |ζ′/ζ(s) − Σ_{|γ−Im s|<1} m/(s−ρ)| ≤ C(log R)². So the 5c theorem should be stated for general s (not just real-part windows): s with re s ∈ [1/2, 7/2], |im s| ≥ 10, ζ s ≠ 0: ‖logDeriv ζ s − Σ_{|γ−t|<1} mult/(s−ρ)‖ ≤ C·(log|t|)²-ish. The near-zero sum over the multiset... in Lean: Σ over a Finset with (zeroMult ρ : ℂ)/(s−ρ) terms. The Finset: the zeros in the window — `zeroWindow`-style from ii′-4 (zeroWindow a = {IsNontrivialZero ∧ a ≤ im ≤ a+1}) — the near set |γ−t| < 1 = union of two windows... For the R-sum the collection is {ρ : IsNontrivialZero ρ ∧ |ρ.im − t| < 1} — finite via zerosIn_finite-subset (zeroWindow_finite pattern ✓ ii′-4). OK. There's a LOT here. Let me start with the collection + g's definition + analyticity/nonvanishing. First read ZeroFactorization to see if it does the product-extraction.
Route revision committed. Now starting **ii′-5c (revised)**: the loose disc bound as the growth lemma. First, reading Zeta23's `ZeroFactorization` — the likely tool for building g analytic + nonvanishing.
tool: Bash
input
{
  "command": "cd D:/Python/Quantum/zeta-23-lean && sed -n '214,262p' Zeta23/FromPNTPlus/StrongPNTPrefix.lean",
  "description": "Read ZeroFactorization statement"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Now start ii′-5c (revised): the loose disc R-bound on σ ∈ [1/2, 7/2], |t| ≥ 10. This is the g/log-g/BC machinery. Let me plan the Lean content:\n\n**Target (loose form):** for s = σ+it, σ ∈ [1/2, 7/2], |t| ≥ 10, ζ(s) ≠ 0:\n  ‖logDeriv ζ s − Σ_{ρ ∈ nearZeros t} (zeroMult ρ : ℂ)/(s − ρ)‖ ≤ C·log|t| + C′\nwith some explicit (large) constants.\n\nComponents:\n1. **The zero collection**: the finite set of zeros of ζ in the closed ball B(2+it, 2.3) hmm — the collection radius: zeros with |γ−t| < 1 have |ρ−s₀| ≤ √5 ≈ 2.236 < 2.3 ✓. Finset: {ρ ∈ closedBall s₀ 2.3 | riemannZeta ρ = 0} — finite via... `IsCompact.inter_riemannZetaZeros_finite` (used in ii′-1a — check its exact statement) or via Zeta23 zero finiteness on rectangles. The zeros in a closed ball — the set {ρ | ζ ρ = 0 ∧ ρ ∈ closedBall s₀ 2.3}: finite — via Zeta23's zerosIn_finite on the im-window [t−2.3, t+2.3] ∩ re-strip? zerosIn is for NONTRIVIAL zeros (0 < re < 1). The disc B(2+it, 2.3) spans re ∈ (−0.3, 4.3) — includes re ≥ 1 and re ≤ 0 regions where ζ has no zeros?? re ∈ [1, 4.3]: ζ ≠ 0 there (re > 1 Euler ✓; re = 1: PNT nonvanishing — hmm — is ζ(1+it) ≠ 0 available? For |t| ≥ 10... the zeros ON re = 1 — PNT says none. Is that in scope? For the COLLECTION I could just take ALL zeros of ζ in the disc regardless of classification — with their orders (analyticOrderNatAt). The finiteness: zeros of ζ in a compact set not containing the pole 1 — `IsCompact.inter_riemannZetaZeros_finite` — let me check its exact statement. From ii′-1a usage: \"finite ball via IsCompact.inter_riemannZetaZeros_finite\" — presumably: (hs : IsCompact s) → (s ∩ {z | riemannZeta z = 0}).Finite? or {ρ | riemannZeta ρ = 0} ∩ s finite. For our disc (compact, avoids 1 since |t| ≥ 10): finite ✓.\n\n2. **g := ζ/∏(s−ρₖ)^{mₖ}**: analytic + nonvanishing on B(s₀, 2.3)... actually need analytic on closedBall(s₀, R = 5/2) and nonvanishing on closedBall(s₀, R)... wait — the collection is within 2.3; g's zeros removed are only the collected ones; g nonvanishing on the closed disc of radius 5/2 requires: ζ's zeros in B(s₀, 5/2) are ALL in the collection (they are: collection = all zeros in B(s₀, 2.3)... wait — what about zeros with |ρ−s₀| ∈ (2.3, 2.5]? NOT collected — then g(there) = ζ/∏ has ζ = 0 with nonzero denominator ⟹ g = 0 — BAD (log g undefined there!). Hmm — so the collection must include ALL zeros in the BIGGER disc B(s₀, R) = B(s₀, 5/2)!! Let me recheck: LogOfAnalyticFunction needs B nonvanishing on closedBall(0, R). So the collection = all zeros in closedBall(s₀, 5/2) hmm — but then the \"extras\" in the final R-sum run over zeros with |γ−t| ∈ [1, ~2.7]: extras each |s−ρ| ≥ |t−γ| ≥ 1 ✓ still bounded by count. And the clearance on the outer circle |s−s₀| = 5/2: |s−ρₖ| ≥ 5/2 − |ρₖ−s₀| ≥ ... collected zeros have |ρₖ−s₀| ≤ 5/2 — could be ON the circle! |s−ρₖ| ≥ 0 possible — clearance ZERO. Hmm. Fix: collect zeros in B(s₀, r_c) with r_c < R and the annulus (r_c, R] zero-free... but zeros could be anywhere in the annulus — can't guarantee zero-free without a gap argument: the zeros with |ρ−s₀| ∈ (r_c, R]: their ordinates γ ∈ [t−R, t+R]... the DISTANCE |ρ−s₀| ∈ annulus means γ ∈ annulus-ish (|γ−t| ∈ (r_c−1, R]) — there ARE zeros there in general. So the outer circle |s−s₀| = R might pass near/through zeros!\n\nThe standard fix (Davenport): choose R within a GAP: the circle |s−s₀| = R must keep distance ≥ δ from all zeros: ||ρ−s₀| − R| ≥ δ for all ρ. The zeros' distances |ρ−s₀| ∈ (0, R_max]-ish — finitely many (compact) — so the distances form a finite set; pick R ∈ [2.4, 2.5] avoiding the finite set of distances by ≥ 1/(4·count)-ish — a mini-pigeonhole on the distance values! The count of zeros in B(s₀, 2.5) ≤ count in the im-window [t−2.5, t+2.5] ≤ 3·C0hat(t+3)-ish (perimeter) — finite ✓ so the distance values {dₖ} are ≤ N ≤ 3C₀… — pick R ∈ [2.4, 2.5] with |R − dₖ| ≥ 1/(3N) for all k (pigeonhole on [2.4, 2.5]: N values, gap ≥ 1/(3N)...). Then |s−ρₖ| ≥ ||s−s₀| − |ρₖ−s₀|| = |R − dₖ| ≥ 1/(3N) on the circle ✓.\n\nHmm — this adds a gap-selection step for R (like ii′-4's L3 but for distances). Fine — reuse the midpoint-pigeonhole idea: actually simplest: reuse `exists_avoiding_midpoint`?? That gives a point avoiding a finite SET of reals — but here the set is the distance values {‖ρ−s₀‖ : ρ ∈ collected} — a Finset ℝ of card ≤ N — with the window [2.4, 2.5] — exists_avoiding_midpoint (a := 2.4) (S := distances) (card ≤ N): gives R ∈ [2.4, 2.5] with |R − d| ≥ 1/(2(N+1)) ∀ d ∈ S ✓. But N := the count bound — need the card bound of the zeros in B(s₀, 2.5): ≤ 3·C0hat(t+4)-ish (the im-window [t−2.5, t+2.5] ⊆ [t−3, t+3] = 3 unit windows [t−3,t−2],[t−2,t−1],[t−1,t]... hmm the ZeroCountProp windows [u, u+1]: cover [t−3, t+3] with 6 windows [t−3..t+2] hmm — but ZeroCountProp requires the window start ≥ 2: t−3 ≥ 2 ⟸ t ≥ 5 hmm t ≥ 10 hmm — but t could be negative! |t| ≥ 10 includes t ≤ −10: windows [t−3, t−2] with t = −10: start −13 < 2 — ZeroCountProp stated for t ≥ 2 only!! For negative t: conjugate symmetry (zeros at −t are conjugates of zeros at t): the count in [t, t+1] for t ≤ −10 equals count in [−t−1, −t] (conjugation): −t ≥ 10 ≥ 2 ✓. So for the negative case apply the perimeter bound at −t−1 ✓. Fine — handle by cases / state the Prop for |t| large with both signs. Simplest: state ZeroCountProp for t ≥ 2 and derive the t ≤ −2 case via conjugation (zeroMult conj-invariance — the seam mult_reflect or riemannZeta_conj — D-066 noted `riemannZeta_conj` to be located/proved). Hmm — or state ZeroCountProp for ALL t with |t| ≥ 2... the cleanest: add a derived lemma `zeroCountProp_neg` later. Defer.\n\n3. **g analytic + nonvanishing**: g = ζ/∏ₖ(s−ρₖ)^{mₖ} — the quotient analyticity at each ρₖ: ζ(s) = (s−ρₖ)^{mₖ}·h(s) with h analytic nonvanishing at ρₖ (the analyticOrderNatAt normal form — `analyticOrderNatAt` gives the factorization: there's `AnalyticAt... ` the normal form: f = (z−z₀)^n • g with g(z₀) ≠ 0 — from `AnalyticAt.exists_eventuallyEq_pow_smul_nonzero`? hmm — the lemma used in the analyticOrderAt_eq_natCast proof: `hf.exists_eventuallyEq_pow_smul_nonzero_iff`... There's `AnalyticAt.analyticOrderAt_eq_natCast` (used in 4c) — the factorization existence: `AnalyticAt.exists_...`. For the quotient-of-product version: g = ζ/∏ — write g(s) = H(s)/... hmm. Actually the cleanest: define g via the quotient and prove analytic+nonvanishing at each ρₖ by the order argument: ζ(s)/∏(s−ρₖ)^{mₖ} — near ρₖ: ζ = (s−ρₖ)^{mₖ}·h, h(ρₖ) ≠ 0: the quotient = h·∏_{j≠k}(s−ρⱼ)^{−mⱼ} — analytic at ρₖ ✓ nonvanishing ✓. The formalization: induction on the finset with the per-point factorization — there might be a Mathlib lemma `AnalyticAt.div_pow_of_...`? or use the MeromorphicAt.order machinery: g is meromorphic with order(g, ρₖ) = order(ζ, ρₖ) − mₖ = 0 ⟹ analytic nonvanishing. Mathlib's `MeromorphicAt.order` + `MeromorphicAt.order_div` + `MeromorphicAt.order_pow`... and \"order = 0 ⟹ analytic & nonzero\": `MeromorphicAt.order_eq_zero_iff`? This is the cleanest API path IF the lemmas exist. Zeta23's ZeroFactorization (StrongPNTPrefix:214) — let me read it — it might do exactly the product-extraction.\n\n4. **The bounds**:\n   - Outer circle |s−s₀| = R: |g(s)| = |ζ(s)|/∏|s−ρₖ|^{mₖ} ≤ (3/4)|t|²·∏(1/δ)^{mₖ} with δ = 1/(2(N+1))-ish... wait — the clearance is on the CIRCLE: |s−ρₖ| ≥ |R − dₖ| ≥ 1/(2(N+1)). So |g| ≤ (3/4)|t|²·(2(N+1))^M where M = Σmₖ ≤ N (mult-weighted count ≤ ... hmm — M ≤ ? — the mult-weighted count over the collection — perimeter ZeroCountProp is DISTINCT count (Nat.card). Mult-weighted: M = Σ mₖ ≥ N = #distinct. For the bound |g| ≤ (3/4)|t|²·(2(N+1))^M — with M ≤ Jensen-ish or ≤ C·N?? — hmm. mₖ ≤ ? a priori: mult at a zero ≤ count-in-small-disc via Jensen — mₖ ≤ C log|t| each: M ≤ N·C log|t|?? then (2(N+1))^M = exp(M·log(2N+2)) = exp(C′(log t)²) — log|g| ≤ 2 log|t| + C′(log t)² — the (log t)² makes M ≈ (log t)² — then BC ×100: A ≈ 100·(log t)²/log t = 100 log t — the R-bound becomes |R| ≤ C(log t)² — GOOD ENOUGH for the growth argument (still o(R) ✓). But wait — for the loose growth input, even (log t)² is fine! The loose bound just needs to be o(R)/polynomial. Hmm — but hold on: actually let me reconsider — do I even need g nonvanishing on the whole closed ball? YES for LogOfAnalyticFunction.\n\n   Hmm — wait, actually there's a subtlety about M (Σ mₖ). For the loose bound I can afford the Jensen mult count. But actually simpler: mₖ ≤ M_total where... let me just bound M ≤ C·log|t| via ZerosBound (Jensen: mult-weighted count in B(s₀, 2.3) ≤ log(sup|ζ|/|ζ(s₀)|)/log(R/r_c) = [2 log|t| + log(3/4) + log ζ(2)]/log(2.5/2.3) ≈ (2 log|t| + 0.18)/0.083 ≈ 24 log|t| + 3). So M ≤ 24 log|t| + 3 — mult-weighted, from Jensen directly ✓ no perimeter needed for THIS. Then |g| ≤ (3/4)|t|²·(2(N+1))^M with N ≤ M ≤ 24 log|t|+3: log|g| ≤ 2log|t| + log(3/4) + M·log(2N+2) ≤ 2log|t| + (24 log|t|+3)·log(48 log|t| + 8) ≤ C(log|t|)² ✓ — polynomial-ish, o(R) ✓ FINE for the growth input.\n   \n   Hmm wait — but N here is the number of DISTINCT zeros (for the R-gap selection). N ≤ M ≤ 24 log|t| + 3 ✓. So clearance δ = 1/(2(N+1)) ≥ 1/(48 log|t| + 8): log(1/δ) ≤ log(48 log|t| + 8) = O(log log|t|) ✓ so log|g| ≤ 2log|t| + M·O(loglog|t|) ≤ 2log|t| + C log|t| loglog|t| — fine.\n\n5. **Center lower bound**: |g(s₀)| = |ζ(s₀)|/∏|s₀−ρₖ|^{mₖ} ≥ (1/ζ(2))/(2.3)^M: −log|g(s₀)| ≤ log ζ(2) + M log 2.3 ≤ C log|t| ✓. The |ζ(2+it)| ≥ 1/ζ(2): from 1/ζ(s) = Σ μ(n)n^{−s}: |1/ζ(s)| ≤ Σ |μ(n)|n^{−2} ≤ ζ(2) ⟹ |ζ(s)| ≥ 1/ζ(2). Mathlib: 1/ζ = Σμn^{−s}: `riemannZeta_inv_eq...`? — need the LSeries-of-μ fact: `ArithmeticFunction.LSeries_moebius`? Hmm — is there `LSeries μ s = 1/ζ s` for re > 1 in Mathlib? There's `LSeries_vonMangoldt_eq_deriv_riemannZeta_div` (D-066 ✓) — for μ: `ArithmeticFunction.moebius` LSeries: `LSeries_moebius_eq`? Let me check at build. Alternative for the center lower bound avoiding the μ-series: |ζ(2+it)| ≥ ζ(2)/... hmm — actually there's a slicker classical: |ζ(σ+it)| ≥ ζ(2σ)/ζ(σ) for σ > 1 (via the Euler product log: log|ζ(s)| = Σ_p Re log(1−p^{−s})⁻¹ = −Σ Re log(1−p^{−s})... |ζ(σ+it)| = ∏|1−p^{−s}|⁻¹ ≥ ∏(1+p^{−σ})⁻¹·... = ζ(2σ)/ζ(σ)): |1−p^{−s}| ≤ 1+p^{−σ} ⟹ |ζ| = ∏|1−p^{−s}|⁻¹ ≥ ∏(1+p^{−σ})⁻¹ = ζ(2σ)/ζ(σ) ✓. The Euler product in Mathlib: `riemannZeta_eulerProduct`? — there's `Complex.riemannZeta_eulerProduct`? not sure. The μ-series route might be more available: grep at build.\n\n6. **logDeriv quotient**: deriv J_g = g′/g = ζ′/ζ − Σ mₖ/(s−ρₖ): g = ζ/∏: logDeriv g = logDeriv ζ − logDeriv ∏(s−ρₖ)^{mₖ} = ζ′/ζ − Σ mₖ/(s−ρₖ): logDeriv_div (needs g₂ z ≠ 0 + differentiability), logDeriv_prod, logDeriv of (s−ρ)^m = m/(s−ρ) (logDeriv_pow + logDeriv_sub + logDeriv_id): `logDeriv_pow (f) (n) : logDeriv (f^n) = n·logDeriv f`? hmm — logDeriv_pow: logDeriv (f^n) x = n * (logDeriv f x)? there might be a fin issue at f x = 0 — at our points (g nonvanishing region) fine.\n\n7. **The final R-sum split**: R(s) = ζ′/ζ(s) − Σ_{|γ−t|<1} mₖ/(s−ρₖ) = (log g)′(s) + Σ_{collected, |γ−t| ≥ 1} mₖ/(s−ρₖ). The extras: |s−ρₖ| ≥ |Im| = |t−γₖ| ≥ 1 ⟹ each ≤ mₖ·1: Σ extras ≤ Σ mₖ = M ≤ 24 log|t| + 3 ✓.\n\nSo the loose bound: |R(s)| ≤ 100·M_bound + M where M_bound = sup Re J_g ≤ [2 log|t| + log(3/4) + M log(2N+2)] + [log ζ(2) + M log 2.3] ≤ C(log|t|)²... let me just carry A′ := something explicit like 1000·(log|t|)² — whatever comes out. For the growth input any explicit polynomial-in-log bound works.\n\nHmm — WAIT. Actually — hold on. For the GROWTH argument (step iii of the identity), I need |F| = o(R) on the gap circles — and the |ζ′/ζ| piece on the circles comes from the loose R-bound. But the loose R-bound I'm building is for σ ∈ [1/2, 7/2] only — the circle's left part σ ∈ [−R, 1/2] needs the FE-reflected loose bound (5d). So 5c + 5d both feed the identity. The 5c deliverable: the loose bound on [1/2, 7/2]. Fine.\n\nBUT — hmm, actually, do I really need the g-machinery for the LOOSE bound? For the growth input I need |ζ′/ζ(s)| ≤ poly-log on the gap circles. The R-bound form (ζ′/ζ − near-sum) is what the disc gives. Alternatively the growth argument could use the disc bound differently... no — the R-bound form is exactly what's needed to control ζ′/ζ on the circle (subtract the near-sum which is separately bounded). OK the plan stands.\n\nOne more decision: the exact statement form of the loose R-bound for downstream use. For the growth argument, what's needed is: on the gap circle |s| = R: |ζ′/ζ(s) − Σ_{|γ−Im s|<1} m/(s−ρ)| ≤ C(log R)². So the 5c theorem should be stated for general s (not just real-part windows): s with re s ∈ [1/2, 7/2], |im s| ≥ 10, ζ s ≠ 0: ‖logDeriv ζ s − Σ_{|γ−t|<1} mult/(s−ρ)‖ ≤ C·(log|t|)²-ish. The near-zero sum over the multiset... in Lean: Σ over a Finset with (zeroMult ρ : ℂ)/(s−ρ) terms. The Finset: the zeros in the window — `zeroWindow`-style from ii′-4 (zeroWindow a = {IsNontrivialZero ∧ a ≤ im ≤ a+1}) — the near set |γ−t| < 1 = union of two windows... For the R-sum the collection is {ρ : IsNontrivialZero ρ ∧ |ρ.im − t| < 1} — finite via zerosIn_finite-subset (zeroWindow_finite pattern ✓ ii′-4).\n\nOK. There's a LOT here. Let me start with the collection + g's definition + analyticity/nonvanishing. First read ZeroFactorization to see if it does the product-extraction.","signature":""},{"type":"text","text":"Route revision committed. Now starting **ii′-5c (revised)**: the loose disc bound as the growth lemma. First, reading Zeta23's `ZeroFactorization` — the likely tool for building g analytic + nonvanishing."},{"type":"tool_use","id":"Bash_332","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && sed -n '214,262p' Zeta23/FromPNTPlus/StrongPNTPrefix.lean","description":"Read ZeroFactorization statement"},"extra_content":null}]