← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes
thinking (14973 chars)
Now I have D-056 in full. This is the proof to formalize:
**Theorem R.** For s = σ+it, σ ∈ [−5/2, 3], |t| ≥ 10:
R(s) := ζ′/ζ(s) − Σ_{|γ−t|<1} 1/(s−ρ)
|R(s)| ≤ A log(|t|+2) + B₀, A = 10.5, B₀ = 48.
The reference-point proof uses **partial fractions for ξ′/ξ**: ξ′/ξ(s) = B + Σ_ρ (1/(s−ρ) + 1/ρ) — this is the Hadamard product for ξ! That's the analytic heart: the partial-fraction expansion of ξ′/ξ.
D-064 says: "D-056's proof uses partial fractions, but the same bound is provable by the Davenport-Ch.-15 local route, for which the machinery EXISTS: Mathlib `Complex.borelCaratheodory`, `MeromorphicOn.circleAverage_log_norm` (Jensen), and FromPNTPlus `StrongPNTPrefix` (`BorelCaratheodoryDeriv`, `LogOfAnalyticFunction`, Blaschke factors, `ZerosBound`). Sketch: on a disc around s₀ = 2+it of radius ~9/2, log ζ bounded via Borel–Carathéodory from |ζ| bounds (ZetaBounds' `ZetaUpperBnd` + functional-equation polynomial bound in the strip — the FE polynomial bound to be built from Mathlib `riemannZeta_one_sub` + Stirling bounds for Γ); zero extraction by Blaschke/Jensen with the perimeter C₀ count; Cauchy estimate for the derivative; digamma terms via Mathlib `Complex.digamma` (Lemma D already proved pen-and-paper in D-056 §1 — formalize the Binet bound or re-derive via the local route). Fallback if (β1) is built anyway: reuse the Hadamard partial fractions."
So there are two routes:
- **Route (a): formalize D-056's reference-point proof directly** — needs the ξ partial-fraction expansion ξ′/ξ(s) = B + Σ_ρ(1/(s−ρ)+1/ρ), which is Hadamard-product territory — D-066 noted Mathlib has NO Weierstrass/Hadamard machinery ("β1 (Hadamard) ruled out (Mathlib has no Weierstrass product/order theory; extract_zeros_poles is finite-only)"). BUT WAIT — Zeta23 is a full PNT+ repo; the partial fractions for ξ′/ξ might exist in Zeta23 or in Mathlib via another path? Hmm. Actually — for the DIFFERENCE R(s), do we need the full Hadamard expansion? D-056's R(s) formula comes from differencing the partial fractions at s and s₀. The existence of the expansion with absolute convergence of Σ 1/(ρ(s−ρ))...
Hmm wait — actually there's a subtlety: the absolute convergence of the difference series. The difference series Σ_ρ (s₀−s)/((s−ρ)(s₀−ρ)) converges absolutely given Σ 1/|ρ|² < ∞ (zero_sum_inv_sq in Zeta23 ✓). But the raw partial fraction ξ′/ξ(s) = B + Σ(1/(s−ρ)+1/ρ) — the pairing of 1/(s−ρ) + 1/ρ terms — needs Hadamard for ξ (order 1 entire function).
- **Route (b): Davenport local route (D-064's recommendation)** — on a disc around s₀ = 2+it:
- |ζ| upper bound on a larger disc (polynomial in t: FE + Stirling for the left half; ZetaUpperBnd in the right)
- log|ζ| ≤ A log t on the big disc
- Borel–Carathéodory ⟹ |log ζ| (real part control → full control) on smaller disc
- Blaschke/Jensen: extract the zeros within radius 1 of t: log ζ − Σ log(s−ρ) + ... harmonic-ish
- Then ζ′/ζ = (log ζ)′ and Cauchy estimates/derivatives of the Blaschke terms give ζ′/ζ − Σ 1/(s−ρ) = bounded by A log t + B.
Actually the classic Davenport Ch. 15 argument: for f = ζ, on disc |s − (2+it)| ≤ 3 (or so), define g(s) = ζ(s)/Π_{|ρ−s₀|<r}(s−ρ) — zero-free on the disc ⟹ log g analytic; Re log g = log|g| ≤ A log t; Borel–Carathéodory ⟹ |log g| ≤ A' log t on smaller disc; Cauchy estimate ⟹ |(log g)′| ≤ A'' log t on even smaller disc; and (log g)′ = ζ′/ζ − Σ 1/(s−ρ). The lower bound |g| denominator control: |s−ρ| ≥ 1 for the zeros outside radius... The count of zeros ≤ C₀ log t from perimeter.
So route (b) needs:
1. **|ζ| polynomial upper bound in the strip** −3 ≤ σ ≤ 4 (or a bit wider), |t| ≥ 10: |ζ(s)| ≤ c·t^A. D-064 says: "ZetaBounds' `ZetaUpperBnd` + FE polynomial bound via riemannZeta_one_sub + Stirling for Γ". Where's ZetaUpperBnd — Zeta23? Let me check. The FE bound: ζ(s) = χ(s)ζ(1−s) with χ(s) = π^{s−1/2}Γ((1−s)/2)/Γ(s/2)·... — |χ(s)| ~ (t/2π)^{1/2−σ} — needs Stirling bounds for |Γ(a+ib)| — Mathlib: does it have Stirling for complex Gamma?? `Complex.Gamma` Stirling... Mathlib has Stirling's formula for real Gamma (BohrMollerup → Stirling for factorials; Real.Gamma stirling?). Complex Stirling — probably NOT in Mathlib. This could be a big build: |Γ(σ+it)| ≤ C e^{−π|t|/2} |t|^{σ−1/2}·... on vertical strips. Hmm. That's real work: the complex Stirling bound (via Binet's formula which D-056 §1 already navigates...).
Hold on — but wait. Do we need the FULL polynomial bound on σ down to −3? The R-bound is needed on σ ∈ [−5/2, 3] (D-036 §1) hmm — actually the assembly's LEFT side is σ₀ = −5/2, and the R-bound is used on the horizontals spanning σ ∈ [−5/2, 2√n]. For σ large positive, |ζ′/ζ| is directly bounded by the Dirichlet series. The disc for route (b) around s₀ = 2+it with radius 9/2 reaches down to Re = −2.5. The |ζ| bound needed on a disc of radius ~9/2+ around 2+it — which dips to Re ≈ −2.5− — so need |ζ(s)| ≤ poly(t) for σ ∈ [−3-ish, 5/2+9/2]. For σ ≥ 1/2, say: direct bounds (ZetaUpperBnd or trivial from LSeries for σ ≥ 3/2; for 1/2 ≤ σ ≤ 3/2... the critical strip bound — |ζ(σ+it)| ≤ C t^{(1−σ)/2}·log t? Hmm — the classic: |ζ(s)| ≤ A t^{(1−σ)/2} log t for 0 ≤ σ ≤ 1? That's from the approximate functional equation (not in Mathlib!) or from |ζ(s)| ≤ t^{(1−σ)/2}... Actually simpler unconditional elementary bound: |ζ(s)| ≤ C·t^{1−σ}·... no.
What does Zeta23 have? Zeta23 is built on "FromPNTPlus" — a PNT repo with zero-free region machinery — it MUST have polynomial bounds for ζ in the strip (needed for PNT error terms). Let me check Zeta23's ZetaBounds. D-064 mentions "ZetaBounds' `ZetaUpperBnd`" — so there's a module with ZetaUpperBnd. Let me grep.
Also for σ ≤ 1/2 down to −3: FE reflection: |ζ(s)| = |χ(s)||ζ(1−s)| with |χ(s)| ~ t^{1/2−σ} — the Γ ratio |Γ((1−s)/2)/Γ(s/2)| — Stirling. Hmm — OR the asymmetric FE: ζ(s) = ...
Actually — wait. Maybe Zeta23/FromPNTPlus already HAS the full polynomial bound including the FE-reflected side (PNT needs bounds on Re s ≤ 0? Not usually... PNT works in 0 < σ < 1 + zero-free region...).
This is the scoping question #1. Let me inventory what exists before designing.
Also the Blaschke/Jensen machinery: Zeta23 StrongPNTPrefix — has ZerosBound, BorelCaratheodoryDeriv, LogOfAnalyticFunction per D-064. Those sound EXACTLY like the pieces for the Davenport argument:
- `LogOfAnalyticFunction` — log of a zero-free analytic function
- `BorelCaratheodoryDeriv` — the Borel–Carathéodory bound for the DERIVATIVE: |f′| on smaller disc from Re f ≤ bound — that's exactly the (log g)′ bound!
- `ZerosBound` — count of zeros in a disc via Jensen.
- Blaschke factors.
So route (b) in Lean:
1. On disc D₀ = B(s₀, R) (R ~ 9/2+), s₀ = 2+it: |ζ(s)| ≤ C·t^A (polynomial bound — the missing piece to scope).
2. Zeros ρ₁..ρ_m of ζ in B(s₀, r), r = ... covering |γ−t| < 1 zeros: m ≤ C₀-count (perimeter — actually the count here is the LOCAL count C₀(t)·something — perimeter ZeroCountProp from ii′-4! or the Trudgian FAlt form).
3. g(s) := ζ(s)·∏(s−ρₖ)⁻¹ — wait the standard: g(s) = ζ(s)/∏(s−ρₖ) — zero-free analytic on B(s₀, r); on the outer circle |s−s₀| = R: |s−ρₖ| ≥ R − r... |g| ≤ |ζ|/∏|s−ρₖ| ≤ C t^A/(R−r)^m — hmm sign issues; the usual trick uses Re log g = log|g| ≤ A log t + m·log(1/(R−r)) + log C — bounded by A' log t. Since m ≤ C₀(t) ~ log t... m·log stuff ~ log t·log... hmm — actually the standard choice keeps m·log(R/(R−r)) ≤ m·const ≤ C' log t ✓ fine.
4. log g analytic on B(s₀, r) (zero-free simply-connected ⟹ branch of log: `LogOfAnalyticFunction`), Re(log g) = log|g| ≤ A' log t.
5. Also lower bound at the CENTER: |g(s₀)| = |ζ(s₀)|/∏|s₀−ρₖ| ≥ (|ζ(2+it)| lower bound — ζ bounded below on σ = 2 via the Euler product: |ζ(2+it)| ≥ ζ(2σ...)| ≥ ∏(1−p^{−2})... = 1/ζ(2)·... — elementary) / (diam)^m — so log|g(s₀)| ≥ −C''·log t — used by Borel–Carathéodory to bound |log g| (not just Re) on the smaller disc: |f(s)| ≤ (2r/(R−r))·sup Re f + ((R+r)/(R−r))|f(0)|-type.
6. Then (log g)′ = ζ′/ζ − Σ 1/(s−ρₖ) and Cauchy/BorelCaratheodoryDeriv: |(log g)′(s)| ≤ (const/(r−r'))·sup|log g| ≤ A log t·const for s on B(s₀, r'), with σ range: s = σ+it with σ ∈ [−5/2, 3]... hmm — s₀ = 2+it, r' must cover σ ∈ [−5/2, 3]: |s−s₀| = |σ−2| ≤ 4.5. So r' = 4.5 and the zero-collection radius r = 4.5+1 = 5.5? and R = r + 1 = 6.5? The classic: zeros with |γ−t| < 1 are within |ρ−s₀| ≤ √((1/2)²... hmm ρ = β+iγ with 0 < β < 1: |ρ − s₀|² = (2−β)² + (t−γ)² ≤ 4 + 1 = 5: |ρ−s₀| ≤ √5 ≈ 2.24. So collecting zeros in B(s₀, 3) covers |γ−t| < 1. Points s with σ ∈ [−5/2, 3], |t|: |s − s₀| = |σ − 2| ≤ 4.5. So inner disc radius 4.5 (where the bound holds), zero-collection at radius 3 < 4.5, outer disc radius R = 6 (say) for the max bound. |ζ| polynomial bound needed on B(s₀, 6): Re down to −4. Hmm — D-064 said radius ~9/2 — similar ballpark; Re down to −2.5−: depends on exact radii.
So the |ζ| polynomial bound is needed for σ down to about −4. That NEEDS the FE + complex Stirling (for σ < −1/2, direct Dirichlet-type bounds fail; only the FE gives polynomiality).
Scoping questions to resolve by grepping Zeta23 + Mathlib:
Q1. ZetaUpperBnd — what exactly does Zeta23 have? (form, range)
Q2. Complex Stirling for Γ in Mathlib? (likely no) — or in Zeta23?
Q3. StrongPNTPrefix contents: BorelCaratheodoryDeriv, LogOfAnalyticFunction, ZerosBound exact statements.
Q4. Mathlib Complex.borelCaratheodory statement.
Q5. riemannZeta_one_sub (the FE in ζ form) in Mathlib ✓ exists (D-064 said so).
The FE-polynomial bound: |ζ(s)| for σ ∈ [−4, −1/2]: ζ(s) = 2^s π^{s−1} sin(πs/2) Γ(1−s) ζ(1−s) (Mathlib's riemannZeta_one_sub form: ζ(s) = χ(s)·ζ(1−s)?). |Γ(1−s)| for 1−s in Re ∈ [3/2, 5]: Stirling: |Γ(x+iy)| ~ √(2π)|y|^{x−1/2}e^{−π|y|/2} — on that range y = −t large... |Γ(1−s)| ~ ... combined with |sin(πs/2)| ~ e^{π|t|/2}/2 — the exponentials cancel and |χ(s)| ~ (|t|/2π)^{1/2−σ}. The Stirling bound needed: |Γ(a+ib)| ≤ C|b|^{a−1/2}e^{−π|b|/2} for a in compact, |b| ≥ 1 — "complex Stirling upper bound". Mathlib: I don't think it has it. Zeta23/FromPNTPlus: PNT repos sometimes have it (for zero-free region via Hadamard... they need Γ bounds for ξ?). Let me grep.
If no Stirling anywhere: build it? That's a mini-project itself (Binet's formula for log Γ — D-056 §1 already used Binet for digamma! Binet's second formula gives log Γ bounds too...). OR avoid the FE entirely??
Alternative avoiding FE/Stirling: is there a MORE elementary polynomial bound for |ζ(s)| on σ ∈ [−4, ...]? Hmm — the functional equation is really the only way below σ < 0. BUT — maybe we can AVOID the left region entirely: the R-bound theorem only needs σ ∈ [−5/2, 3]. What if the disc never dips below σ = −5/2−ε?... no — the disc around 2+it with radius 4.5+ necessarily reaches −2.5−. To bound |ζ| on a disc reaching σ = −4 we need the FE side.
Hmm wait — actually, alternative: center the disc differently or use a smaller zero-collection? The s-range σ ∈ [−5/2, 3] forces covering radius 4.5 from s₀ = 2+it. No way around: the disc method needs |ζ| control on a disc crossing into the left half-plane to σ ≈ −4.
Alternatively — the OPPOSITE reference point: center at s₀ = −2+it?? Then σ ∈ [−5/2, 3] is |σ−(−2)| ≤ 5 hmm worse.
OK so: the FE polynomial bound |ζ(s)| ≤ C(1+|t|)^A for σ ≥ −4 (say) is REQUIRED. Two sub-pieces:
(a) σ ∈ [−4, 2] from FE: |ζ(s)| = |χ(s)||ζ(1−s)| ≤ |χ(s)|·(ζ-bound at re ≥ 3/2: |ζ(1−s)| ≤ ζ(3/2) by triangle on the Dirichlet series ✓ easy). |χ(s)| = |2^s π^{s−1} sin(πs/2) Γ(1−s)|: |2^s| = 2^σ, |π^{s−1}| = π^{σ−1}, |sin(πs/2)| ≤ e^{π|t|/2} (elementary: sin z = (e^{iz}−e^{−iz})/2i ⟹ |sin| ≤ e^{|Im|}... precisely ≤ cosh...), |Γ(1−s)|: need the Stirling upper bound |Γ(1−s)| ≤ C|t|^{1/2−σ}e^{−π|t|/2} for re(1−s) ∈ [−1, 5]... wait re(1−s) = 1−σ ∈ [−1, 5] when σ ∈ [−4, 2]. Stirling on Re w ∈ [−1, 5], |Im w| ≥ 10: |Γ(w)| ≤ C|Im w|^{Re w − 1/2}e^{−π|Im w|/2}. Mathilb HAS `Complex.Gamma` Stirling?? Almost surely not.
Hmm hmm. What about the real-line Stirling + Phragmén–Lindelöf? |Γ(a+ib)| for complex args — there's the approach via Γ(w)Γ(1−w) = π/sin(πw) (reflection! in Mathlib? `Complex.Gamma_one_sub_mul`? maybe) combined with real Stirling on Re > 0... For w with re w ≥ 1/2: |Γ(w)| via the Binet formula (log Γ Binet — Mathlib?? `Complex.logGamma`? Mathlib has BohrMollerup (real), and complex log-Gamma? Hmm — Mathlib HAS `Complex.logGamma`? I don't recall a complex logGamma in Mathlib... Actually I'm not sure. There's `Real.logGamma`? BohrMollerup gives Real.Gamma stuff. Complex: Mathlib has Stirling's formula: `Real.stirling`? `tendsto_stirling`? For complex — zilch I believe.
Zeta23's FromPNTPlus — PNT needs the Hadamard product for ξ and Γ bounds... Let me grep Zeta23 for Stirling/Gamma bounds.
This is the critical scoping question. Let me also scope the digamma Lemma D (D-056 §1): ψ(w) = log w − 1/(2w) + r(w), |r(w)| ≤ 1.2/|w|² — via Binet's second formula. Mathlib: `Complex.digamma` exists (used in ii′-3a) but Binet's formula — Mathlib has `Complex.digamma` as logDeriv Gamma; Binet NOT in Mathlib. We built the digamma partial-fraction series in ii′-3a (LiDigamma.lean)! The remainder bound via Binet would be a new build (~1 session by itself?). Hmm — wait: does the R-bound need Lemma D? D-056's piece 6 uses ψ-difference bound. D-036 §1's version also had the digamma term. The R-bound is about ζ′/ζ; the relation to ξ′/ξ brings in ψ(s/2)/2. YES Lemma D is needed (the ψ(s/2) term enters ξ′/ξ = ... + ½ψ(s/2)).
Hmm OK — this is getting BIG. Let me carefully scope what exists. The total inventory to check in Zeta23/FromPNTPlus/Mathlib:
1. ZetaUpperBnd (Zeta23 ZetaBounds) — form/range.
2. Stirling/Γ bounds: any.
3. StrongPNTPrefix: BorelCaratheodoryDeriv, LogOfAnalyticFunction, ZerosBound, Blaschke.
4. Mathlib Complex.borelCaratheodory form.
5. Digamma bounds available? (We have the series from ii′-3a; a |r(w)| ≤ C/|w|² bound might be derivable from the partial-fraction series + comparison — hmm, actually: ψ(w) = −γ − 1/w + Σ_{m≥1}(1/m − 1/(w+m)) — the tail Σ_{m≥1} 1/(m(w+m)) vs log... The bound |ψ(w) − log w + 1/(2w)| ≤ 1.2/|w|² from the series directly? ψ(w) − log w: the series minus log — the Euler-Maclaurin comparison Σ_{m≥1}(1/m − 1/(w+m)) − log w... doable but fiddly. Binet integral might actually be cleaner: r(W) = −2∫₀^∞ t/((t²+W²)(e^{2πt}−1))dt — needs the Binet formula for ψ, which is NOT in Mathlib either (I think). Building Binet = its own sub-project. Hmm — ALTERNATIVELY use our ii′-3a series + integral comparison. Let me think later; scope first.)
Given the size, the sub-stage plan for ii′-5 might be:
- ii′-5a: inventory + design doc (D-067) — decide exact statement shapes, radii, and which pieces exist vs build.
- ii′-5b: |ζ| polynomial strip bound (FE side: Stirling build or found; right side: Dirichlet/trivial).
- ii′-5c: Lemma D (digamma remainder).
- ii′-5d: the Davenport disc argument proper (Blaschke/Borel–Carathéodory/Cauchy) → the R-bound statement.
- ii′-5e: fold to the A = 10.5, B₀ = 48 form + audits.
Let me start with the inventory (ii′-5a). Grep Zeta23 for the key names.
This is the long pole — needs careful scoping before any Lean. D-056's proof uses ξ partial fractions (Hadamard — ruled out in D-066), so D-064 prescribed the **Davenport local route**: disc around s₀ = 2+it, |ζ| polynomial bound → Blaschke/Jensen zero extraction → Borel–Carathéodory → derivative bound. Let me inventory what actually exists in Zeta23/Mathlib.
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean && ls Zeta23/FromPNTPlus/ && grep -rn \"ZetaUpperBnd\\|theorem.*UpperBnd\" Zeta23/ --include=*.lean -r | head -8",
"description": "List FromPNTPlus modules and find ZetaUpperBnd"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Now I have D-056 in full. This is the proof to formalize:\n\n**Theorem R.** For s = σ+it, σ ∈ [−5/2, 3], |t| ≥ 10:\n R(s) := ζ′/ζ(s) − Σ_{|γ−t|<1} 1/(s−ρ)\n |R(s)| ≤ A log(|t|+2) + B₀, A = 10.5, B₀ = 48.\n\nThe reference-point proof uses **partial fractions for ξ′/ξ**: ξ′/ξ(s) = B + Σ_ρ (1/(s−ρ) + 1/ρ) — this is the Hadamard product for ξ! That's the analytic heart: the partial-fraction expansion of ξ′/ξ.\n\nD-064 says: \"D-056's proof uses partial fractions, but the same bound is provable by the Davenport-Ch.-15 local route, for which the machinery EXISTS: Mathlib `Complex.borelCaratheodory`, `MeromorphicOn.circleAverage_log_norm` (Jensen), and FromPNTPlus `StrongPNTPrefix` (`BorelCaratheodoryDeriv`, `LogOfAnalyticFunction`, Blaschke factors, `ZerosBound`). Sketch: on a disc around s₀ = 2+it of radius ~9/2, log ζ bounded via Borel–Carathéodory from |ζ| bounds (ZetaBounds' `ZetaUpperBnd` + functional-equation polynomial bound in the strip — the FE polynomial bound to be built from Mathlib `riemannZeta_one_sub` + Stirling bounds for Γ); zero extraction by Blaschke/Jensen with the perimeter C₀ count; Cauchy estimate for the derivative; digamma terms via Mathlib `Complex.digamma` (Lemma D already proved pen-and-paper in D-056 §1 — formalize the Binet bound or re-derive via the local route). Fallback if (β1) is built anyway: reuse the Hadamard partial fractions.\"\n\nSo there are two routes:\n- **Route (a): formalize D-056's reference-point proof directly** — needs the ξ partial-fraction expansion ξ′/ξ(s) = B + Σ_ρ(1/(s−ρ)+1/ρ), which is Hadamard-product territory — D-066 noted Mathlib has NO Weierstrass/Hadamard machinery (\"β1 (Hadamard) ruled out (Mathlib has no Weierstrass product/order theory; extract_zeros_poles is finite-only)\"). BUT WAIT — Zeta23 is a full PNT+ repo; the partial fractions for ξ′/ξ might exist in Zeta23 or in Mathlib via another path? Hmm. Actually — for the DIFFERENCE R(s), do we need the full Hadamard expansion? D-056's R(s) formula comes from differencing the partial fractions at s and s₀. The existence of the expansion with absolute convergence of Σ 1/(ρ(s−ρ))... \n\nHmm wait — actually there's a subtlety: the absolute convergence of the difference series. The difference series Σ_ρ (s₀−s)/((s−ρ)(s₀−ρ)) converges absolutely given Σ 1/|ρ|² < ∞ (zero_sum_inv_sq in Zeta23 ✓). But the raw partial fraction ξ′/ξ(s) = B + Σ(1/(s−ρ)+1/ρ) — the pairing of 1/(s−ρ) + 1/ρ terms — needs Hadamard for ξ (order 1 entire function). \n\n- **Route (b): Davenport local route (D-064's recommendation)** — on a disc around s₀ = 2+it: \n - |ζ| upper bound on a larger disc (polynomial in t: FE + Stirling for the left half; ZetaUpperBnd in the right)\n - log|ζ| ≤ A log t on the big disc\n - Borel–Carathéodory ⟹ |log ζ| (real part control → full control) on smaller disc\n - Blaschke/Jensen: extract the zeros within radius 1 of t: log ζ − Σ log(s−ρ) + ... harmonic-ish\n - Then ζ′/ζ = (log ζ)′ and Cauchy estimates/derivatives of the Blaschke terms give ζ′/ζ − Σ 1/(s−ρ) = bounded by A log t + B.\n \n Actually the classic Davenport Ch. 15 argument: for f = ζ, on disc |s − (2+it)| ≤ 3 (or so), define g(s) = ζ(s)/Π_{|ρ−s₀|<r}(s−ρ) — zero-free on the disc ⟹ log g analytic; Re log g = log|g| ≤ A log t; Borel–Carathéodory ⟹ |log g| ≤ A' log t on smaller disc; Cauchy estimate ⟹ |(log g)′| ≤ A'' log t on even smaller disc; and (log g)′ = ζ′/ζ − Σ 1/(s−ρ). The lower bound |g| denominator control: |s−ρ| ≥ 1 for the zeros outside radius... The count of zeros ≤ C₀ log t from perimeter.\n\nSo route (b) needs:\n1. **|ζ| polynomial upper bound in the strip** −3 ≤ σ ≤ 4 (or a bit wider), |t| ≥ 10: |ζ(s)| ≤ c·t^A. D-064 says: \"ZetaBounds' `ZetaUpperBnd` + FE polynomial bound via riemannZeta_one_sub + Stirling for Γ\". Where's ZetaUpperBnd — Zeta23? Let me check. The FE bound: ζ(s) = χ(s)ζ(1−s) with χ(s) = π^{s−1/2}Γ((1−s)/2)/Γ(s/2)·... — |χ(s)| ~ (t/2π)^{1/2−σ} — needs Stirling bounds for |Γ(a+ib)| — Mathlib: does it have Stirling for complex Gamma?? `Complex.Gamma` Stirling... Mathlib has Stirling's formula for real Gamma (BohrMollerup → Stirling for factorials; Real.Gamma stirling?). Complex Stirling — probably NOT in Mathlib. This could be a big build: |Γ(σ+it)| ≤ C e^{−π|t|/2} |t|^{σ−1/2}·... on vertical strips. Hmm. That's real work: the complex Stirling bound (via Binet's formula which D-056 §1 already navigates...).\n\nHold on — but wait. Do we need the FULL polynomial bound on σ down to −3? The R-bound is needed on σ ∈ [−5/2, 3] (D-036 §1) hmm — actually the assembly's LEFT side is σ₀ = −5/2, and the R-bound is used on the horizontals spanning σ ∈ [−5/2, 2√n]. For σ large positive, |ζ′/ζ| is directly bounded by the Dirichlet series. The disc for route (b) around s₀ = 2+it with radius 9/2 reaches down to Re = −2.5. The |ζ| bound needed on a disc of radius ~9/2+ around 2+it — which dips to Re ≈ −2.5− — so need |ζ(s)| ≤ poly(t) for σ ∈ [−3-ish, 5/2+9/2]. For σ ≥ 1/2, say: direct bounds (ZetaUpperBnd or trivial from LSeries for σ ≥ 3/2; for 1/2 ≤ σ ≤ 3/2... the critical strip bound — |ζ(σ+it)| ≤ C t^{(1−σ)/2}·log t? Hmm — the classic: |ζ(s)| ≤ A t^{(1−σ)/2} log t for 0 ≤ σ ≤ 1? That's from the approximate functional equation (not in Mathlib!) or from |ζ(s)| ≤ t^{(1−σ)/2}... Actually simpler unconditional elementary bound: |ζ(s)| ≤ C·t^{1−σ}·... no.\n\nWhat does Zeta23 have? Zeta23 is built on \"FromPNTPlus\" — a PNT repo with zero-free region machinery — it MUST have polynomial bounds for ζ in the strip (needed for PNT error terms). Let me check Zeta23's ZetaBounds. D-064 mentions \"ZetaBounds' `ZetaUpperBnd`\" — so there's a module with ZetaUpperBnd. Let me grep.\n\nAlso for σ ≤ 1/2 down to −3: FE reflection: |ζ(s)| = |χ(s)||ζ(1−s)| with |χ(s)| ~ t^{1/2−σ} — the Γ ratio |Γ((1−s)/2)/Γ(s/2)| — Stirling. Hmm — OR the asymmetric FE: ζ(s) = ... \n\nActually — wait. Maybe Zeta23/FromPNTPlus already HAS the full polynomial bound including the FE-reflected side (PNT needs bounds on Re s ≤ 0? Not usually... PNT works in 0 < σ < 1 + zero-free region...).\n\nThis is the scoping question #1. Let me inventory what exists before designing.\n\nAlso the Blaschke/Jensen machinery: Zeta23 StrongPNTPrefix — has ZerosBound, BorelCaratheodoryDeriv, LogOfAnalyticFunction per D-064. Those sound EXACTLY like the pieces for the Davenport argument:\n- `LogOfAnalyticFunction` — log of a zero-free analytic function\n- `BorelCaratheodoryDeriv` — the Borel–Carathéodory bound for the DERIVATIVE: |f′| on smaller disc from Re f ≤ bound — that's exactly the (log g)′ bound!\n- `ZerosBound` — count of zeros in a disc via Jensen.\n- Blaschke factors.\n\nSo route (b) in Lean:\n1. On disc D₀ = B(s₀, R) (R ~ 9/2+), s₀ = 2+it: |ζ(s)| ≤ C·t^A (polynomial bound — the missing piece to scope).\n2. Zeros ρ₁..ρ_m of ζ in B(s₀, r), r = ... covering |γ−t| < 1 zeros: m ≤ C₀-count (perimeter — actually the count here is the LOCAL count C₀(t)·something — perimeter ZeroCountProp from ii′-4! or the Trudgian FAlt form).\n3. g(s) := ζ(s)·∏(s−ρₖ)⁻¹ — wait the standard: g(s) = ζ(s)/∏(s−ρₖ) — zero-free analytic on B(s₀, r); on the outer circle |s−s₀| = R: |s−ρₖ| ≥ R − r... |g| ≤ |ζ|/∏|s−ρₖ| ≤ C t^A/(R−r)^m — hmm sign issues; the usual trick uses Re log g = log|g| ≤ A log t + m·log(1/(R−r)) + log C — bounded by A' log t. Since m ≤ C₀(t) ~ log t... m·log stuff ~ log t·log... hmm — actually the standard choice keeps m·log(R/(R−r)) ≤ m·const ≤ C' log t ✓ fine.\n4. log g analytic on B(s₀, r) (zero-free simply-connected ⟹ branch of log: `LogOfAnalyticFunction`), Re(log g) = log|g| ≤ A' log t.\n5. Also lower bound at the CENTER: |g(s₀)| = |ζ(s₀)|/∏|s₀−ρₖ| ≥ (|ζ(2+it)| lower bound — ζ bounded below on σ = 2 via the Euler product: |ζ(2+it)| ≥ ζ(2σ...)| ≥ ∏(1−p^{−2})... = 1/ζ(2)·... — elementary) / (diam)^m — so log|g(s₀)| ≥ −C''·log t — used by Borel–Carathéodory to bound |log g| (not just Re) on the smaller disc: |f(s)| ≤ (2r/(R−r))·sup Re f + ((R+r)/(R−r))|f(0)|-type.\n6. Then (log g)′ = ζ′/ζ − Σ 1/(s−ρₖ) and Cauchy/BorelCaratheodoryDeriv: |(log g)′(s)| ≤ (const/(r−r'))·sup|log g| ≤ A log t·const for s on B(s₀, r'), with σ range: s = σ+it with σ ∈ [−5/2, 3]... hmm — s₀ = 2+it, r' must cover σ ∈ [−5/2, 3]: |s−s₀| = |σ−2| ≤ 4.5. So r' = 4.5 and the zero-collection radius r = 4.5+1 = 5.5? and R = r + 1 = 6.5? The classic: zeros with |γ−t| < 1 are within |ρ−s₀| ≤ √((1/2)²... hmm ρ = β+iγ with 0 < β < 1: |ρ − s₀|² = (2−β)² + (t−γ)² ≤ 4 + 1 = 5: |ρ−s₀| ≤ √5 ≈ 2.24. So collecting zeros in B(s₀, 3) covers |γ−t| < 1. Points s with σ ∈ [−5/2, 3], |t|: |s − s₀| = |σ − 2| ≤ 4.5. So inner disc radius 4.5 (where the bound holds), zero-collection at radius 3 < 4.5, outer disc radius R = 6 (say) for the max bound. |ζ| polynomial bound needed on B(s₀, 6): Re down to −4. Hmm — D-064 said radius ~9/2 — similar ballpark; Re down to −2.5−: depends on exact radii.\n\nSo the |ζ| polynomial bound is needed for σ down to about −4. That NEEDS the FE + complex Stirling (for σ < −1/2, direct Dirichlet-type bounds fail; only the FE gives polynomiality).\n\nScoping questions to resolve by grepping Zeta23 + Mathlib:\nQ1. ZetaUpperBnd — what exactly does Zeta23 have? (form, range)\nQ2. Complex Stirling for Γ in Mathlib? (likely no) — or in Zeta23?\nQ3. StrongPNTPrefix contents: BorelCaratheodoryDeriv, LogOfAnalyticFunction, ZerosBound exact statements.\nQ4. Mathlib Complex.borelCaratheodory statement.\nQ5. riemannZeta_one_sub (the FE in ζ form) in Mathlib ✓ exists (D-064 said so).\n\nThe FE-polynomial bound: |ζ(s)| for σ ∈ [−4, −1/2]: ζ(s) = 2^s π^{s−1} sin(πs/2) Γ(1−s) ζ(1−s) (Mathlib's riemannZeta_one_sub form: ζ(s) = χ(s)·ζ(1−s)?). |Γ(1−s)| for 1−s in Re ∈ [3/2, 5]: Stirling: |Γ(x+iy)| ~ √(2π)|y|^{x−1/2}e^{−π|y|/2} — on that range y = −t large... |Γ(1−s)| ~ ... combined with |sin(πs/2)| ~ e^{π|t|/2}/2 — the exponentials cancel and |χ(s)| ~ (|t|/2π)^{1/2−σ}. The Stirling bound needed: |Γ(a+ib)| ≤ C|b|^{a−1/2}e^{−π|b|/2} for a in compact, |b| ≥ 1 — \"complex Stirling upper bound\". Mathlib: I don't think it has it. Zeta23/FromPNTPlus: PNT repos sometimes have it (for zero-free region via Hadamard... they need Γ bounds for ξ?). Let me grep.\n\nIf no Stirling anywhere: build it? That's a mini-project itself (Binet's formula for log Γ — D-056 §1 already used Binet for digamma! Binet's second formula gives log Γ bounds too...). OR avoid the FE entirely?? \n\nAlternative avoiding FE/Stirling: is there a MORE elementary polynomial bound for |ζ(s)| on σ ∈ [−4, ...]? Hmm — the functional equation is really the only way below σ < 0. BUT — maybe we can AVOID the left region entirely: the R-bound theorem only needs σ ∈ [−5/2, 3]. What if the disc never dips below σ = −5/2−ε?... no — the disc around 2+it with radius 4.5+ necessarily reaches −2.5−. To bound |ζ| on a disc reaching σ = −4 we need the FE side.\n\nHmm wait — actually, alternative: center the disc differently or use a smaller zero-collection? The s-range σ ∈ [−5/2, 3] forces covering radius 4.5 from s₀ = 2+it. No way around: the disc method needs |ζ| control on a disc crossing into the left half-plane to σ ≈ −4.\n\nAlternatively — the OPPOSITE reference point: center at s₀ = −2+it?? Then σ ∈ [−5/2, 3] is |σ−(−2)| ≤ 5 hmm worse.\n\nOK so: the FE polynomial bound |ζ(s)| ≤ C(1+|t|)^A for σ ≥ −4 (say) is REQUIRED. Two sub-pieces:\n(a) σ ∈ [−4, 2] from FE: |ζ(s)| = |χ(s)||ζ(1−s)| ≤ |χ(s)|·(ζ-bound at re ≥ 3/2: |ζ(1−s)| ≤ ζ(3/2) by triangle on the Dirichlet series ✓ easy). |χ(s)| = |2^s π^{s−1} sin(πs/2) Γ(1−s)|: |2^s| = 2^σ, |π^{s−1}| = π^{σ−1}, |sin(πs/2)| ≤ e^{π|t|/2} (elementary: sin z = (e^{iz}−e^{−iz})/2i ⟹ |sin| ≤ e^{|Im|}... precisely ≤ cosh...), |Γ(1−s)|: need the Stirling upper bound |Γ(1−s)| ≤ C|t|^{1/2−σ}e^{−π|t|/2} for re(1−s) ∈ [−1, 5]... wait re(1−s) = 1−σ ∈ [−1, 5] when σ ∈ [−4, 2]. Stirling on Re w ∈ [−1, 5], |Im w| ≥ 10: |Γ(w)| ≤ C|Im w|^{Re w − 1/2}e^{−π|Im w|/2}. Mathilb HAS `Complex.Gamma` Stirling?? Almost surely not. \n\nHmm hmm. What about the real-line Stirling + Phragmén–Lindelöf? |Γ(a+ib)| for complex args — there's the approach via Γ(w)Γ(1−w) = π/sin(πw) (reflection! in Mathlib? `Complex.Gamma_one_sub_mul`? maybe) combined with real Stirling on Re > 0... For w with re w ≥ 1/2: |Γ(w)| via the Binet formula (log Γ Binet — Mathlib?? `Complex.logGamma`? Mathlib has BohrMollerup (real), and complex log-Gamma? Hmm — Mathlib HAS `Complex.logGamma`? I don't recall a complex logGamma in Mathlib... Actually I'm not sure. There's `Real.logGamma`? BohrMollerup gives Real.Gamma stuff. Complex: Mathlib has Stirling's formula: `Real.stirling`? `tendsto_stirling`? For complex — zilch I believe.\n\nZeta23's FromPNTPlus — PNT needs the Hadamard product for ξ and Γ bounds... Let me grep Zeta23 for Stirling/Gamma bounds.\n\nThis is the critical scoping question. Let me also scope the digamma Lemma D (D-056 §1): ψ(w) = log w − 1/(2w) + r(w), |r(w)| ≤ 1.2/|w|² — via Binet's second formula. Mathlib: `Complex.digamma` exists (used in ii′-3a) but Binet's formula — Mathlib has `Complex.digamma` as logDeriv Gamma; Binet NOT in Mathlib. We built the digamma partial-fraction series in ii′-3a (LiDigamma.lean)! The remainder bound via Binet would be a new build (~1 session by itself?). Hmm — wait: does the R-bound need Lemma D? D-056's piece 6 uses ψ-difference bound. D-036 §1's version also had the digamma term. The R-bound is about ζ′/ζ; the relation to ξ′/ξ brings in ψ(s/2)/2. YES Lemma D is needed (the ψ(s/2) term enters ξ′/ξ = ... + ½ψ(s/2)).\n\nHmm OK — this is getting BIG. Let me carefully scope what exists. The total inventory to check in Zeta23/FromPNTPlus/Mathlib:\n1. ZetaUpperBnd (Zeta23 ZetaBounds) — form/range.\n2. Stirling/Γ bounds: any.\n3. StrongPNTPrefix: BorelCaratheodoryDeriv, LogOfAnalyticFunction, ZerosBound, Blaschke.\n4. Mathlib Complex.borelCaratheodory form.\n5. Digamma bounds available? (We have the series from ii′-3a; a |r(w)| ≤ C/|w|² bound might be derivable from the partial-fraction series + comparison — hmm, actually: ψ(w) = −γ − 1/w + Σ_{m≥1}(1/m − 1/(w+m)) — the tail Σ_{m≥1} 1/(m(w+m)) vs log... The bound |ψ(w) − log w + 1/(2w)| ≤ 1.2/|w|² from the series directly? ψ(w) − log w: the series minus log — the Euler-Maclaurin comparison Σ_{m≥1}(1/m − 1/(w+m)) − log w... doable but fiddly. Binet integral might actually be cleaner: r(W) = −2∫₀^∞ t/((t²+W²)(e^{2πt}−1))dt — needs the Binet formula for ψ, which is NOT in Mathlib either (I think). Building Binet = its own sub-project. Hmm — ALTERNATIVELY use our ii′-3a series + integral comparison. Let me think later; scope first.)\n\nGiven the size, the sub-stage plan for ii′-5 might be:\n- ii′-5a: inventory + design doc (D-067) — decide exact statement shapes, radii, and which pieces exist vs build.\n- ii′-5b: |ζ| polynomial strip bound (FE side: Stirling build or found; right side: Dirichlet/trivial).\n- ii′-5c: Lemma D (digamma remainder).\n- ii′-5d: the Davenport disc argument proper (Blaschke/Borel–Carathéodory/Cauchy) → the R-bound statement.\n- ii′-5e: fold to the A = 10.5, B₀ = 48 form + audits.\n\nLet me start with the inventory (ii′-5a). Grep Zeta23 for the key names.","signature":""},{"type":"text","text":"This is the long pole — needs careful scoping before any Lean. D-056's proof uses ξ partial fractions (Hadamard — ruled out in D-066), so D-064 prescribed the **Davenport local route**: disc around s₀ = 2+it, |ζ| polynomial bound → Blaschke/Jensen zero extraction → Borel–Carathéodory → derivative bound. Let me inventory what actually exists in Zeta23/Mathlib."},{"type":"tool_use","id":"Bash_155","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && ls Zeta23/FromPNTPlus/ && grep -rn \"ZetaUpperBnd\\|theorem.*UpperBnd\" Zeta23/ --include=*.lean -r | head -8","description":"List FromPNTPlus modules and find ZetaUpperBnd"},"extra_content":null}]