Current task: —

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

#1228 assistant 2026-08-22 16:47:35.372 UTC · 3124→8549 tok open ⤢
thinking (20110 chars)
The StrongPNTPrefix machinery is complete and general (discs centered at 0, normalized). This is the full Davenport toolkit: - `BorelCaratheodoryDeriv`: ‖deriv f z‖ ≤ 16MR²/(R−r)³ from Re f ≤ M on ball(0,R), f(0) = 0, z ∈ closedBall(0,r). - `LogOfAnalyticFunction`: builds J_B analytic with (deriv J_B) z = B′/B on closedBall(0,r), J_B(0) = 0, from B nonvanishing on closedBall(0,R). - `ZerosBound`: zero-count via Jensen. - Blaschke machinery: BlaschkeB (f with zeros in disc removed via Blaschke factors), BlaschkeNonzero, DiskBound (‖BlaschkeB‖ ≤ B on closedBall r). But note: these are all centered at 0 with R < 1 normalization — we'd apply them to a rescaled/translated function f(w) = ζ(s₀ + R·w)-style. That's fine (standard). However — the geometric problem remains: to use these for ζ on a disc around s₀ = 2+it, we need |ζ| bounded on that disc; the disc must be big enough to cover the near zeros + the application region; covering σ down to −5/2 forces the disc to σ ≤ −1/2... Wait, actually — let me reconsider the reflection route (b′) more carefully now, because with the exact-cancellation observation, the plan gets MUCH simpler: **The R-bound for σ ∈ [−5/2, 1/2] follows from the R-bound for σ ∈ [1/2, 7/2] by FE reflection** — R(s) = (log χ₀)′(s) − R(1−s) — zero sums cancel exactly. The (log χ₀)′ term: log 2 + log π + (π/2)cot(πs/2) − ψ(1−s) — all bounded by C·log|t| via EXISTING Zeta23 digamma bounds + elementary cot bound. NO new |ζ| bound needed for this half! And for σ ∈ [1/2, 7/2]: the Davenport disc B(2+it, R) with R chosen: - application points: |s − s₀| ≤ 3/2 (σ ∈ [1/2, 7/2]) - near zeros |γ−t|<1: |ρ−s₀| ≤ √5 ≈ 2.236 — collection disc radius must be ≥ √5 → dips to σ ≤ 2−2.236 = −0.236 < 0!! STILL dips! Hmm. The collection radius √5 > 2 is the killer. Unless... the Blaschke machinery doesn't require the zeros to be inside the SMALLER disc? Let me re-read: DiskBound (‖BlaschkeB r R f‖ ≤ B on closedBall r) — zeros in SetOfZeros r... the Blaschke factors (R − zρ̄/R) for zeros in disc r... Standard Davenport: zeros in B(s₀, R/2)-ish, bound on circle R. The zeros at distance up to √5 from s₀ need R > √5. UNAVOIDABLE with a disc centered at 2+it. What if the center moves: center s₁ = 5/2 + it? Application σ ∈ [1/2, 7/2]: |s−s₁| ≤ 2. Zeros: |ρ−s₁| ≤ √((3/2)²+1) = √(13/4) ≈ 1.803. So R must exceed max(2, 1.803+δ) = 2+δ... dips to σ = 5/2 − R < 1/2 ✓✓ R = 2.2 dips to 0.3 > 0!! WAIT: R needs > max(application 2, collection 1.803) + margins: R = 9/4 = 2.25: dips to σ = 0.25 > 0 ✓✓✓!! And the |ζ| bound needed on B(5/2+it, 9/4): σ ∈ [0.25, 4.75]: σ > 0 region — the B₁-representation covers it: |ζ(s)| ≤ 1/|s−1| + 1/2 + |s|/(2σ) — for σ ≥ 1/4: ≤ 1/(|t|) + 1/2 + 2|s|·... wait 1/(2σ) ≤ 2: |ζ| ≤ 1 + 1/2 + 2|s| ≤ C(1+|t|) ✓✓ POLYNOMIAL — via the B₁ rep which EXISTS in Zeta23 (ZetaSum_aux1 family)!! Hold on, but the FE-reflection needs R(1−s) for re(1−s) ∈ [1/2, 7/2] — that's exactly the region the disc covers: application σ range for the RIGHT region is [1/2, 7/2] hmm — wait: right-region application is σ ∈ [1/2, 3] (the R-bound's range [−5/2, 3] split at 1/2); the reflection needs R(1−s) for s with σ ∈ [−5/2, 1/2]: re(1−s) ∈ [1/2, 7/2]. So the right R-bound must cover σ ∈ [1/2, 7/2]: |s − s₁| = |σ − 5/2| ≤ 1 ✓ within inner radius 1+... — even easier! Application: σ ∈ [1/2, 7/2] ⟹ |s−s₁| ≤ 1. Collection: zeros |γ−t|<1 ⟹ |ρ−s₁| ≤ √((3/2)²+1²) = √3.25 ≈ 1.803. Radii: inner r_a = 1 (+margin for derivative bound: z ∈ closedBall(s₁, r_a)), collection r_c = 1.803+, outer R: need R > r_c with clearance for the Blaschke denominator control... hmm what clearance do the StrongPNTPrefix lemmas need? DiskBound: ‖BlaschkeB r R f z‖ ≤ B for z ∈ closedBall(0, r) from ‖f‖ ≤ B on ‖z‖ ≤ R — the Blaschke factors (R − zρ̄/R) have |R − zρ̄/R| ≥ ... on |z| = R: = |z|·|z̄−ρ̄|/R = |z−ρ| hmm the factor (R − zρ̄/R) has |·| = |z−ρ| when |z| = R. BlaschkeB = f/∏(...): on the circle, |BlaschkeB| = |f|/∏|z−ρ|·... the construction handles it. The point: R > collection radius strictly. R = 9/4 = 2.25 > 1.803 ✓ clearance 0.447. And dips to σ = 0.25 ✓. Wait — one more check: the application region for the DISC version is |s−s₁| ≤ 1 (σ ∈ [1/2, 7/2] hmm — but ALSO the imaginary part: application points are σ+it exactly (same t) ✓. Hmm, but actually — do I even need the R-bound's σ-range down to −5/2 via reflection? Let me double check the reflection formula sign-factors etc. — that's for the design doc. The key geometric insight stands: **REVISED ROUTE (b′′):** 1. Right R-bound on σ ∈ [1/2, 7/2], |t| ≥ 10: Davenport disc at s₁ = 5/2+it, R = 9/4 (stays σ ≥ 1/4 > 0), |ζ| ≤ C(1+|t|) via B₁-rep (Zeta23 EXISTS), Blaschke+BC via StrongPNTPrefix (EXISTS), zero count via perimeter ZeroCountProp (ii′-4 ✓). 2. Left R-bound on σ ∈ [−5/2, 1/2], |t| ≥ 10: FE reflection R(s) = (log χ₀)′(s) − R(1−s) (zero sums cancel exactly); (log χ₀)′(s) = log(2π) + (π/2)cot(πs/2) − ψ(1−s): digamma bound from Zeta23 (norm_digamma_le / digamma_stirling — verify range: 1−s has re ∈ [1/2, 7/2] ✓ im ≤ −10 ✓) + cot elementary. 3. Fold constants to A = 10.5, B₀ = 48 form. Wait — issue: step 2's R(1−s) has |Im(1−s)| = |t| ≥ 10 ✓ and re(1−s) ∈ [1/2, 7/2] ✓ — matches step 1's range ✓✓. And what about |t| < 10? D-036 §1: "For |t| < 10 (short end-segments): direct flint evaluation (finite set)" — in the assembly (ii′-6) the short segments are handled by M₀-style direct bounds — the perimeter M₀ = 1.3352 (already declared per D-064 R5/perimeter). Actually the D-036/D-056 R-bound is stated for |t| ≥ 10 and the |t|<10 gap was closed by M₀ (E-023). So the Lean R-bound theorem: |t| ≥ 10 range only; M₀ stays perimeter. ✓ consistent with the session-012 perimeter decision. Now the exact Lean statement of the R-bound for the assembly (ii′-6): R(s) := logDeriv ζ s − Σ_{|γ−t|<1} 1/(s−ρ)... the sum over zeros with multiplicities? D-036: Σ_{|γ−t|<1} 1/(s−ρ) — over zeros with multiplicity (zeroMult). In Lean: sum over a Finset with zeroMult factors, mirroring rectInt'_Jlag's Sz. The exact form needed by ii′-6 will be pinned when building; the R-bound theorem should be stated with an explicit finset/mult form: RboundProp-like: for s = σ+it, σ ∈ [−5/2, 3], |t| ≥ 10, s not a zero/pole: ‖logDeriv riemannZeta s − Σ_{ρ ∈ zerosIn...} zeroMult ρ / (s − ρ)‖ ≤ A·log(|t|+2) + B₀. Hmm — the sum should be over the nontrivial zeros with |γ−t| < 1 counted with multiplicity zeroMult ρ (since logDeriv residue = order). Finset: (zerosIn_finite ...) — zerosIn T₁ T₂ has strict left: zerosIn (t−1) t — |γ−t|<1 ⟺ γ ∈ (t−1, t+1): zerosIn (t−1) (t+1)?? zerosIn T₁ T₂ = {ρ | IsNontrivialZero ρ ∧ T₁ < im ≤ T₂} — half-open. D-036's sum is |γ−t| < 1 — open both sides. Boundary-measure-zero: γ = t+1 exactly is excluded by zerosIn (t−1)(t+1)'s ≤... fiddly — I'll define the R-bound sum over the closed-window finset (zeroWindow-style from ii′-4) or match D-036's open window: define `nearZeros t := (zerosIn_finite ...).toFinset`-ish. Design decision for D-067/implementation. Also for step 1 the zero-count input: ZerosBound (Jensen) gives a count from the |ζ| bound itself — OR use the perimeter ZeroCountProp (cleaner: it's the honest Trudgian count, already declared in ii′-4). The count is needed to bound |Σ 1/(s−ρ)| pieces and the Blaschke product size. OK — this is now a well-scoped plan. Remaining checks before writing the design doc: (a) The B₁-representation for ζ in Zeta23: exact statement (ZetaSum_aux1? or a ready-made "ζ(s) = ... for σ > 0"?). (b) Zeta23 digamma bounds: `norm_digamma_le` (Y.lean used it — where is it?) and `StirlingVert.digamma_stirling` statements. (c) Mathlib `riemannZeta_one_sub` exact statement (the FE in ζ form). (d) The logDeriv-FE relation: from ζ(1−s) = χ(s)·ζ(s)... Mathlib's riemannZeta_one_sub form: `riemannZeta_one_sub (s : ℂ) (hs : ∀ n : ℕ, s ≠ -(2n))... : riemannZeta (1 − s) = 2 * (2π)^(−s) * ... `? Need its exact form for the logDeriv computation. Alternatively derive logDeriv relation from Λ-FE: Λ(1−s) = Λ(s) ⟹ −Λ′(1−s) = Λ′(s)·(−1)... wait deriv: d/ds Λ(1−s) = −Λ′(1−s); equals Λ′(s)·1... Λ(1−s) = Λ(s) ⟹ −Λ′(1−s) = Λ′(s) ⟹ Λ′/Λ(s) = −Λ′/Λ(1−s)·... −(−Λ′(1−s))/Λ(1−s)... logDeriv Λ (s) = −logDeriv Λ (1−s). And logDeriv Λ = logDeriv ΓR + logDeriv ζ (off poles/zeros) ⟹ ζ′/ζ(s) = logDerivΓR... Let me define via Λ: logDeriv ζ s = logDeriv Λ s − logDeriv Gammaℝ s; and logDeriv Λ s = −logDeriv Λ (1−s) (from the FE); and logDeriv Λ (1−s) = logDeriv Gammaℝ (1−s) + logDeriv ζ (1−s) hmm — needs care at zeros/poles but on the region (s ∈ [−5/2,1/2], |t| ≥ 10): 1−s has re ∈ [1/2, 7/2] — Λ(1−s) ≠ 0? Λ zeros = nontrivial zeros (off 0,1) — 1−s with re ≥ 1/2: could be a zero if re(1−s) = 1/2 exactly and im matches a zero ordinate... on the region with |t| ≥ 10: 1−s = 1/2+iτ with τ = −t ≤ −10 — could coincide with a zero 1/2+iγ with γ = −t! At such points R(s) has a pole anyway (the theorem is about s with ζ(s) ≠ 0 implicitly — the R-bound is stated for s NOT a zero; at zeros both sides blow). For the inequality statement, we need s not a zero of ζ (else ‖R‖ is ∞/junk). Hmm — handle: state for s with riemannZeta s ≠ 0. At such s, is Λ(1−s) ≠ 0? Λ(1−s) = 0 ⟺ 1−s nontrivial zero ⟺ ... if ζ(s) ≠ 0 could 1−s still be a zero? 1−s = ρ₀ zero ⟺ ρ₀ ∈ (0,1)-strip zero; then s = 1−ρ₀ and by FE symmetry s is also a zero?! ζ(s) = ζ(1−ρ₀) = χ(1−ρ₀)ζ(ρ₀)·... = 0 ✓ — so ζ(s) ≠ 0 ⟹ 1−s not a zero (for s in the strip; edge cases re s = ... s = 1−ρ₀ with ρ₀ nontrivial ⟹ s has re ∈ (0,1) and is a zero by FE ✓). Wait — need to be careful: is ζ(1−ρ₀) = 0 from ζ(ρ₀) = 0 via Mathlib's riemannZeta_one_sub? That's the FE in the asymmetric form ✓ (its validity range: off the Γ poles — ρ₀ ∈ (0,1) strip fine). Zeta23 has `completedRiemannZeta_eq_zero_iff : Λ s = 0 ↔ IsNontrivialZero s` ✓ (CountByIntegral.lean:65). So Λ(1−s) ≠ 0 ⟺ ¬IsNontrivialZero(1−s); and ¬IsNontrivialZero(s) given ζ(s)≠0... hmm — need: s with re ∈ [−5/2,1/2], ζ(s) ≠ 0 ⟹ Λ(1−s) ≠ 0. If Λ(1−s) = 0: 1−s nontrivial zero: 0 < re(1−s) < 1 ✓ (re s ∈ (0,1) here? re(1−s) = 1−σ ∈ [1/2, 7/2]: nontrivial needs < 1: σ > 0. For σ ≤ 0: re(1−s) ≥ 1: Λ(1−s) ≠ 0 automatically (zeros of Λ are nontrivial with re ∈ (0,1)) ✓. For σ ∈ (0, 1/2]: 1−s = ρ₀ possible nontrivial zero ⟹ s = 1−ρ₀: ζ(s) = ζ(1−ρ₀): via FE ζ(1−ρ₀) = χ₀(1−ρ₀)·ζ(ρ₀) = 0·... = 0 (χ₀ finite at 1−ρ₀: re(1−ρ₀) ∈ (0,1) no Γ pole ✓) — contradiction with ζ(s) ≠ 0 ✓. OK — manageably fiddly. So the digamma identity route: ζ′/ζ(s) = −[ζ′/ζ(1−s)] − logDeriv Gammaℝ (1−s)·(−1)?? Let me just do it cleanly in the design: logDeriv Λ (w) = logDeriv Gammaℝ w + logDeriv ζ w (where Λ, ΓR, ζ all ≠ 0, analytic). Λ(1−s) = Λ(s) ⟹ deriv both sides at s: −Λ′(1−s) = Λ′(s) ⟹ logDeriv Λ (s) = Λ′(s)/Λ(s) = −Λ′(1−s)/Λ(1−s)·... = −logDeriv Λ (1−s) ✓. So logDeriv ζ (s) = logDeriv Λ(s) − logDeriv ΓR(s) = −logDeriv Λ(1−s) − logDeriv ΓR(s) = −[logDeriv ΓR(1−s) + logDeriv ζ(1−s)] − logDeriv ΓR(s). = −ζ′/ζ(1−s) − [ΓR′/ΓR(1−s) + ΓR′/ΓR(s)]. ΓR′/ΓR(w) = −(log π)/2 + (1/2)ψ(w/2) (the ii′-3a split ✓ `logDeriv_Gammaℝ_one_add`-style — actually that's in LiArchimedean for 1+s form; the general: Zeta23 `RvM.logDeriv_Gammaℝ` was used in Y.lean ✓ exists!). ΓR′/ΓR(1−s) + ΓR′/ΓR(s) = −log π + (1/2)[ψ((1−s)/2) + ψ(s/2)]. And ψ((1−s)/2) + ψ(s/2): reflection for ψ: ψ(1−w) − ψ(w) = π cot(πw)... wait: the ψ reflection: ψ(1−z) − ψ(z) = π·cot(πz). Hmm — is that in Mathlib? `Complex.digamma_one_sub`? Maybe not. Our pair: ψ((1−s)/2) + ψ(s/2) — SUM not difference. ψ((1−s)/2) = ψ(1 − (1+s)/2) hmm — reflection with w = (1+s)/2: ψ(1−w) − ψ(w) = π cot(πw): 1−w = (1−s)/2 ✓: ψ((1−s)/2) = ψ((1+s)/2) + π cot(π(1+s)/2) = ψ((1+s)/2) − π tan(πs/2)... cot(π(1+s)/2) = cot(π/2 + πs/2) = −tan(πs/2). So sum = ψ(s/2) + ψ((1+s)/2) − π tan(πs/2)?? This is getting complicated — and ψ(s/2) for re(s/2) ∈ [−5/4, 1/4] — digamma bound on NEGATIVE-re region — does Zeta23's digamma bound cover that? norm_digamma_le had hw : 0 < w.re — NO. Ugh. Better: keep it as −(1/2)[ψ((1−s)/2) + ψ(s/2)] and bound each separately?? ψ(s/2) with re(s/2) ∈ [−5/4, 1/4] — negative-re digamma — NOT covered by Zeta23's bounds (0 < re). Use the recurrence: ψ(s/2) = ψ(s/2 + 2) − 1/(s/2) − 1/(s/2+1) (digamma_add_one twice) — shifting re by +2 into [3/4, 9/4] ✓ THEN the Zeta23 bound applies, and the two rational terms are ≤ 1/|s/2| + 1/|s/2+1| ≤ small. digamma_add_one: `Complex.digamma_add_one`? Mathlib has `digamma_add_one`? hmm — earlier session used `digamma_apply_add_one` (D-066 inventory mentioned `digamma_one`, `digamma_apply_add_one` ✓ Mathlib). ✓. And ψ((1−s)/2): re ∈ [1/4, 7/4] ✓ covered by Zeta23 bound directly. So the ψ-reflection isn't needed; only the ψ-recurrence. The full reflection identity: ζ′/ζ(s) = −ζ′/ζ(1−s) + (log π) − (1/2)[ψ((1−s)/2) − ψ(s/2)]·... wait let me redo: −[ΓR′/ΓR(1−s) + ΓR′/ΓR(s)] = −[−log π + (1/2)(ψ((1−s)/2) + ψ(s/2))] = log π − (1/2)(ψ((1−s)/2) + ψ(s/2)). So: **R(s) = −R(1−s) + log π − (1/2)(ψ((1−s)/2) + ψ(s/2))** after the zero-sum cancellation. All pieces bounded: |ψ((1−s)/2)| ≤ C log|t| (Zeta23, re ∈ [1/4, 7/4] — check the exact bound form); |ψ(s/2)| = |ψ(s/2+2) − 1/(s/2) − 1/(s/2+1)| ≤ C log|t| + small ✓. This is ALL buildable from existing pieces. The genuinely new builds for ii′-5: 1. The B₁-rep polynomial bound |ζ(s)| ≤ C(1+|s|)/(2σ) for 0 < σ — assemble from Zeta23 pieces (check ZetaSum_aux1's exact form). 2. The Davenport right-region R-bound (disc at 5/2+it) — the main assembly using StrongPNTPrefix + ZeroCountProp. 3. The FE-reflection to σ ∈ [−5/2, 1/2] — logDeriv algebra + digamma bounds. 4. Constant-folding to A = 10.5, B₀ = 48 shape. Hmm wait — one thing to double-check in step 2's disc: the application region σ ∈ [1/2, 7/2] — but hold on, D-036's R-bound is needed for σ ∈ [−5/2, 3] — the right region [1/2, 3] via disc, left [−5/2, 1/2] via reflection (needs right R-bound at re(1−s) ∈ [1/2, 7/2] — so disc must cover σ up to 7/2 ✓ as designed). Also — the disc R-bound derivation needs the C₀-count for the zeros (perimeter ZeroCountProp ✓ ii′-4) — count of zeros within the collection radius: those with |γ−t| ≤ ~1.2 (the collection disc |ρ−s₁| ≤ 1.803 has |γ−t| ≤ 1.803·... im(ρ−s₁) = γ−t: |γ−t| ≤ 1.803): zeros with |γ−t| ≤ 1.803 ⊆ [t−2, t+2] → ≤ C₀-count over 2 unit windows ≈ 2·C0hat... via ZeroCountProp at two windows ✓. Hmm, actually — wait. Do we even need the Blaschke/Jensen machinery? The Davenport argument: g(s) = ζ(s)·∏(s−ρₖ)⁻¹ (NOT the Blaschke factor form — the plain (s−ρ)⁻¹ division) — zero-free on the disc ⟹ log g analytic; Re log g = log|g| = log|ζ| − Σ log|s−ρₖ| ≤ log(C(1+|t|)²) − m·log(clearance)... on the OUTER circle |s−s₁| = R: |s−ρₖ| ≥ R − |ρₖ−s₁| ≥ 9/4 − 1.803 ≥ 0.447: log|g| ≤ log|ζ| + m·log(1/0.447) ≤ 2 log|t| + C + m·0.81. m ≤ count ≤ 2·C0hat(t+2)-ish ≤ 2·(0.433 log(t+3)+...) ≤ log t·const. So Re log g ≤ A' log|t| + B' on the outer circle ⟹ by maximum principle on the disc ✓ (Re log g harmonic; or apply borelCaratheodory which only needs the bound on the ball... borelCaratheodory' wants Re f ≤ M on ball(0,R) ✓ max-principle extends circle to ball ✓). Then BorelCaratheodoryDeriv: |(log g)′(s)| ≤ 16M R²/(R−r)³ on |s−s₁| ≤ r (r = 1+margin covering σ ∈ [1/2, 7/2] hmm — wait application region |s−s₁| ≤ 1: r = 1; R = 9/4; (R−r) = 5/4: factor 16·(9/4)²·/(5/4)³ = 16·5.06/1.95 ≈ 41.5 — fine constant). Then (log g)′ = ζ′/ζ − Σₖ 1/(s−ρₖ) — EXACTLY the R-sum when the collection = {zeros with |γ−t|<1}... but our collection disc |ρ−s₁| ≤ 1.803 includes zeros with |γ−t| ∈ [1, 1.803] (the annulus extras: |γ−t| ∈ [1, 1.803] have |ρ−s₁|² = (5/2−β)²+(t−γ)² ≥ (3/2)²+1 = 3.25 — could be ≤ 1.803² = 3.25 ✓ included iff (5/2−β)²+(t−γ)² ≤ 3.25). Hmm — so the collection is a superset of the near zeros. Then ζ′/ζ − Σ_{collection} 1/(s−ρ) = (log g)′ bounded; and R(s) = ζ′/ζ − Σ_{|γ−t|<1} 1/(s−ρ) = (log g)′(s) + Σ_{collection ∖ near} 1/(s−ρ). The extra terms: |s−ρ| ≥ distance from s (|s−s₁| ≤ 1) to ρ (|ρ−s₁| ∈ [1.7, 1.803] for the annulus ones with |γ−t| ≥ 1... hmm the extra zeros have |γ−t| ≥ 1 AND |ρ−s₁| ≤ 1.803: |s−ρ| ≥ |ρ−s₁| − |s−s₁| ≥ 1.7−1 = 0.7? Not uniform... need |s−ρ| lower bound: |s−ρ| ≥ ||Im||: |t−γ| ≥ 1 ✓ (extras have |γ−t| ≥ 1) — so each extra term ≤ 1, and the number of extras ≤ total count ≤ 2C0hat. So |Σ extras| ≤ count ≤ C log t ✓ fine. And zeros with multiplicity: g = ζ/∏(s−ρₖ)^{mult} — with zeroMult factors ✓. Also need LOWER bound on |ζ(s₁)| (center) for the BC lemma? borelCaratheodory' needs f(0) = 0 normalization — LogOfAnalyticFunction gives J_B with J_B(0) = 0 ✓ (it constructs the log with J_B(0) = 0 — reading the statement: "∃ J_B, AnalyticOnNhd ... ∧ (J_B 0 = 0) ∧ (∀ z ∈ closedBall 0 r, deriv J_B z = deriv B z / B z)" — J_B(0) = 0 built in ✓ so no center lower bound needed for THAT; but wait — borelCaratheodory' with f = J_B − J_B(0)... J_B(0) = 0 ✓ directly. But hold on — the Re-bound for J_B: Re J_B = log|B| — hmm — J_B's real part on the ball: borelCaratheodory' hypothesis: ∀ z ∈ ball(0,R), (f z).re ≤ M: need Re J_B(z) ≤ M on the ball: Re J_B = log|B| + const: since J_B(0) = 0 and (Re J_B)(z) = log|B(z)| − log|B(0)|: log|B(z)| ≤ log(sup|B|) ✓ and −log|B(0)| — the CENTER lower bound |B(0)| needed after all!! |B(0)| = |g(s₁)| = |ζ(s₁)|/∏|s₁−ρₖ|: |ζ(5/2+it)| ≥ ... ζ lower bound on re = 5/2: |ζ(s)| ≥ 1/ζ(5/2)-ish via Euler product log: |ζ(s)| = exp(Re log ζ) = exp(−Σ Re(...)) ≥ exp(−Σ ...) = ∏(1−p^{−5/2})... = 1/ζ(5/2)·... roughly |ζ(σ+it)| ≥ ζ(2σ)/ζ(σ) for σ > 1 (standard: log|ζ| ≥ −Σ|Λ|/... : |ζ(s)| ≥ ζ(2σ)/ζ(σ)). Mathlib/Zeta23: `ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div` (D-066 inventory ✓): logDeriv series Σ Λ(n)n^{−s} — |ζ′/ζ(s)| ≤ −ζ′/ζ(σ) for re ≥ ... and |ζ(s)|: via log ζ = Σ Λ/(log n) n^{−s}: Mathlib LSeries: `riemannZeta` log: `Complex.log`... there might be `norm_riemannZeta_ge`? or derive: |ζ(s)| ≥ exp(−Σ Λ(n)/log n · n^{−σ})... = exp(log ζ(σ)·−...) hmm: |ζ(s)| = |exp(Σ...)|... For re s > 1: log ζ s = Σ_p Σ_k p^{−ks}/k (abs conv); |ζ s| = exp(Re log ζ s) ≥ exp(−|log ζ s|) ≥ exp(−Σ Λ(n)/log n·n^{−σ}) = exp(−(−log... )) hmm = exp(−log... ) = 1/ζ(σ)·... wait Σ Λ(n)/(log n) n^{−σ} = Σ_p Σ_k p^{−kσ}/k = −Σ_p log(1−p^{−σ}) = log ζ(σ)·... log ζ(σ) = −Σ_p log(1−p^{−σ}) hmm sign: log ζ(σ) = Σ_p −log(1−p^{−σ}) > 0. And Re log ζ(s) ≥ −Σ_p Σ_k p^{−kσ}/k = −log... = −log ζ(σ)?? hmm: |Σ...| ≤ Σ Λ(n)/log n n^{−σ} = log ζ σ... wait Σ_n Λ(n)/(log n)·n^{−σ}: at σ = 5/2: = log ζ(5/2)? The Dirichlet series of log ζ is Σ Λ(n)/(log n) n^{−s} ✓. So Re log ζ(s) ≥ −log ζ(σ)·... hmm actually Re(log ζ(s)) ≥ −|log ζ(s)| ≥ −Σ Λ(n)/(log n)n^{−σ} = −logζ(σ)... log ζ(σ) at σ = 5/2: ζ(2.5) ≈ 1.34: log ≈ 0.294: |ζ(s)| ≥ e^{−0.294} ≈ 0.745 ✓. So |ζ(5/2+it)| ≥ 0.745 — a clean CONSTANT lower bound via the LSeries log. Mathlib: does it have log ζ as a series? `Complex.log_riemannZeta`? hmm — there's `LSeries` log: maybe `Complex.log_riemannZeta_eq_tsum`? If not, derive via the von Mangoldt series and exp — logDeriv series exists (D-066 ✓) — from that: |ζ(s)| lower bound via... hmm the log series is the primitive... Actually simpler: |ζ(s)| = |∏_p (1−p^{−s})⁻¹| via Euler product — Mathlib has the Euler product `riemannZeta_eulerProduct`? There's `Complex.riemannZeta_euler_product`? I recall eulerProduct for LSeries: `LSeries.eulerProduct`? Might exist. OR even simpler: 1/|ζ(s)| = |1/ζ(s)| = |Σ μ(n)n^{−s}| ≤ Σ n^{−5/2} = ζ(5/2)!! 1/ζ(s) = Σ μ(n)/n^s for re > 1 (Mathlib: `LSeries μ`? `riemannZeta_inv`? there's `ArithmeticFunction.moebius` LSeries: 1/ζ = Σ μ(n)n^{−s} — Mathlib has `LSeries_moebius_eq_one_div_riemannZeta`? something). Then |ζ(s)| ≥ 1/ζ(σ) ✓ CONSTANT. That's the cleanest. Verify the lemma name later. OK. The plan is solid and entirely assemblable from existing pieces + modest new builds. Let me also quickly double-check the digamma bound in Zeta23 that Y.lean used: `norm_digamma_le` — where defined? grep. And `StirlingVert.digamma_stirling`. Then write the design doc D-067 and start building. Given the scope, session 022 will likely deliver: the D-067 design doc + possibly start the |ζ| poly bound. The full ii′-5 is 2–3 sessions per D-064. That's fine (sub-stage rule). Let me check the two digamma bounds + the B₁ rep + moebius-1/ζ lemma names.
The full toolkit exists. Key remaining checks: the Zeta23 digamma bound statements, the B₁ ζ-representation, and the 1/ζ = Σμ(n)n^{−s} lemma (for the center lower bound).
tool: Bash
input
{
  "command": "cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem norm_digamma_le\\|lemma norm_digamma_le\\|theorem digamma_stirling\\|lemma digamma_stirling\" Zeta23/ --include=*.lean -r | head -4; grep -rn \"theorem ZetaSum_aux1 \\|lemma ZetaSum_aux1 \" Zeta23/FromPNTPlus/ZetaBounds.lean | head -2",
  "description": "Locate digamma bounds and ZetaSum_aux1"
}
raw content_json (database row)
[{"type":"thinking","thinking":"The StrongPNTPrefix machinery is complete and general (discs centered at 0, normalized). This is the full Davenport toolkit:\n- `BorelCaratheodoryDeriv`: ‖deriv f z‖ ≤ 16MR²/(R−r)³ from Re f ≤ M on ball(0,R), f(0) = 0, z ∈ closedBall(0,r). \n- `LogOfAnalyticFunction`: builds J_B analytic with (deriv J_B) z = B′/B on closedBall(0,r), J_B(0) = 0, from B nonvanishing on closedBall(0,R).\n- `ZerosBound`: zero-count via Jensen.\n- Blaschke machinery: BlaschkeB (f with zeros in disc removed via Blaschke factors), BlaschkeNonzero, DiskBound (‖BlaschkeB‖ ≤ B on closedBall r).\n\nBut note: these are all centered at 0 with R < 1 normalization — we'd apply them to a rescaled/translated function f(w) = ζ(s₀ + R·w)-style. That's fine (standard).\n\nHowever — the geometric problem remains: to use these for ζ on a disc around s₀ = 2+it, we need |ζ| bounded on that disc; the disc must be big enough to cover the near zeros + the application region; covering σ down to −5/2 forces the disc to σ ≤ −1/2... \n\nWait, actually — let me reconsider the reflection route (b′) more carefully now, because with the exact-cancellation observation, the plan gets MUCH simpler:\n\n**The R-bound for σ ∈ [−5/2, 1/2] follows from the R-bound for σ ∈ [1/2, 7/2] by FE reflection** — R(s) = (log χ₀)′(s) − R(1−s) — zero sums cancel exactly. The (log χ₀)′ term: log 2 + log π + (π/2)cot(πs/2) − ψ(1−s) — all bounded by C·log|t| via EXISTING Zeta23 digamma bounds + elementary cot bound. NO new |ζ| bound needed for this half!\n\nAnd for σ ∈ [1/2, 7/2]: the Davenport disc B(2+it, R) with R chosen: \n- application points: |s − s₀| ≤ 3/2 (σ ∈ [1/2, 7/2])\n- near zeros |γ−t|<1: |ρ−s₀| ≤ √5 ≈ 2.236 — collection disc radius must be ≥ √5 → dips to σ ≤ 2−2.236 = −0.236 < 0!! STILL dips!\n\nHmm. The collection radius √5 > 2 is the killer. Unless... the Blaschke machinery doesn't require the zeros to be inside the SMALLER disc? Let me re-read: DiskBound (‖BlaschkeB r R f‖ ≤ B on closedBall r) — zeros in SetOfZeros r... the Blaschke factors (R − zρ̄/R) for zeros in disc r... Standard Davenport: zeros in B(s₀, R/2)-ish, bound on circle R. The zeros at distance up to √5 from s₀ need R > √5. UNAVOIDABLE with a disc centered at 2+it.\n\nWhat if the center moves: center s₁ = 5/2 + it? Application σ ∈ [1/2, 7/2]: |s−s₁| ≤ 2. Zeros: |ρ−s₁| ≤ √((3/2)²+1) = √(13/4) ≈ 1.803. So R must exceed max(2, 1.803+δ) = 2+δ... dips to σ = 5/2 − R < 1/2 ✓✓ R = 2.2 dips to 0.3 > 0!! WAIT: R needs > max(application 2, collection 1.803) + margins: R = 9/4 = 2.25: dips to σ = 0.25 > 0 ✓✓✓!! And the |ζ| bound needed on B(5/2+it, 9/4): σ ∈ [0.25, 4.75]: σ > 0 region — the B₁-representation covers it: |ζ(s)| ≤ 1/|s−1| + 1/2 + |s|/(2σ) — for σ ≥ 1/4: ≤ 1/(|t|) + 1/2 + 2|s|·... wait 1/(2σ) ≤ 2: |ζ| ≤ 1 + 1/2 + 2|s| ≤ C(1+|t|) ✓✓ POLYNOMIAL — via the B₁ rep which EXISTS in Zeta23 (ZetaSum_aux1 family)!!\n\nHold on, but the FE-reflection needs R(1−s) for re(1−s) ∈ [1/2, 7/2] — that's exactly the region the disc covers: application σ range for the RIGHT region is [1/2, 7/2] hmm — wait: right-region application is σ ∈ [1/2, 3] (the R-bound's range [−5/2, 3] split at 1/2); the reflection needs R(1−s) for s with σ ∈ [−5/2, 1/2]: re(1−s) ∈ [1/2, 7/2]. So the right R-bound must cover σ ∈ [1/2, 7/2]: |s − s₁| = |σ − 5/2| ≤ 1 ✓ within inner radius 1+... — even easier! Application: σ ∈ [1/2, 7/2] ⟹ |s−s₁| ≤ 1. Collection: zeros |γ−t|<1 ⟹ |ρ−s₁| ≤ √((3/2)²+1²) = √3.25 ≈ 1.803. Radii: inner r_a = 1 (+margin for derivative bound: z ∈ closedBall(s₁, r_a)), collection r_c = 1.803+, outer R: need R > r_c with clearance for the Blaschke denominator control... hmm what clearance do the StrongPNTPrefix lemmas need? DiskBound: ‖BlaschkeB r R f z‖ ≤ B for z ∈ closedBall(0, r) from ‖f‖ ≤ B on ‖z‖ ≤ R — the Blaschke factors (R − zρ̄/R) have |R − zρ̄/R| ≥ ... on |z| = R: = |z|·|z̄−ρ̄|/R = |z−ρ| hmm the factor (R − zρ̄/R) has |·| = |z−ρ| when |z| = R. BlaschkeB = f/∏(...): on the circle, |BlaschkeB| = |f|/∏|z−ρ|·... the construction handles it. The point: R > collection radius strictly. R = 9/4 = 2.25 > 1.803 ✓ clearance 0.447. And dips to σ = 0.25 ✓.\n\nWait — one more check: the application region for the DISC version is |s−s₁| ≤ 1 (σ ∈ [1/2, 7/2] hmm — but ALSO the imaginary part: application points are σ+it exactly (same t) ✓.\n\nHmm, but actually — do I even need the R-bound's σ-range down to −5/2 via reflection? Let me double check the reflection formula sign-factors etc. — that's for the design doc. The key geometric insight stands: \n\n**REVISED ROUTE (b′′):**\n1. Right R-bound on σ ∈ [1/2, 7/2], |t| ≥ 10: Davenport disc at s₁ = 5/2+it, R = 9/4 (stays σ ≥ 1/4 > 0), |ζ| ≤ C(1+|t|) via B₁-rep (Zeta23 EXISTS), Blaschke+BC via StrongPNTPrefix (EXISTS), zero count via perimeter ZeroCountProp (ii′-4 ✓).\n2. Left R-bound on σ ∈ [−5/2, 1/2], |t| ≥ 10: FE reflection R(s) = (log χ₀)′(s) − R(1−s) (zero sums cancel exactly); (log χ₀)′(s) = log(2π) + (π/2)cot(πs/2) − ψ(1−s): digamma bound from Zeta23 (norm_digamma_le / digamma_stirling — verify range: 1−s has re ∈ [1/2, 7/2] ✓ im ≤ −10 ✓) + cot elementary.\n3. Fold constants to A = 10.5, B₀ = 48 form.\n\nWait — issue: step 2's R(1−s) has |Im(1−s)| = |t| ≥ 10 ✓ and re(1−s) ∈ [1/2, 7/2] ✓ — matches step 1's range ✓✓.\n\nAnd what about |t| < 10? D-036 §1: \"For |t| < 10 (short end-segments): direct flint evaluation (finite set)\" — in the assembly (ii′-6) the short segments are handled by M₀-style direct bounds — the perimeter M₀ = 1.3352 (already declared per D-064 R5/perimeter). Actually the D-036/D-056 R-bound is stated for |t| ≥ 10 and the |t|<10 gap was closed by M₀ (E-023). So the Lean R-bound theorem: |t| ≥ 10 range only; M₀ stays perimeter. ✓ consistent with the session-012 perimeter decision.\n\nNow the exact Lean statement of the R-bound for the assembly (ii′-6): R(s) := logDeriv ζ s − Σ_{|γ−t|<1} 1/(s−ρ)... the sum over zeros with multiplicities? D-036: Σ_{|γ−t|<1} 1/(s−ρ) — over zeros with multiplicity (zeroMult). In Lean: sum over a Finset with zeroMult factors, mirroring rectInt'_Jlag's Sz. The exact form needed by ii′-6 will be pinned when building; the R-bound theorem should be stated with an explicit finset/mult form:\n\nRboundProp-like: for s = σ+it, σ ∈ [−5/2, 3], |t| ≥ 10, s not a zero/pole:\n‖logDeriv riemannZeta s − Σ_{ρ ∈ zerosIn...} zeroMult ρ / (s − ρ)‖ ≤ A·log(|t|+2) + B₀.\n\nHmm — the sum should be over the nontrivial zeros with |γ−t| < 1 counted with multiplicity zeroMult ρ (since logDeriv residue = order). Finset: (zerosIn_finite ...) — zerosIn T₁ T₂ has strict left: zerosIn (t−1) t — |γ−t|<1 ⟺ γ ∈ (t−1, t+1): zerosIn (t−1) (t+1)?? zerosIn T₁ T₂ = {ρ | IsNontrivialZero ρ ∧ T₁ < im ≤ T₂} — half-open. D-036's sum is |γ−t| < 1 — open both sides. Boundary-measure-zero: γ = t+1 exactly is excluded by zerosIn (t−1)(t+1)'s ≤... fiddly — I'll define the R-bound sum over the closed-window finset (zeroWindow-style from ii′-4) or match D-036's open window: define `nearZeros t := (zerosIn_finite ...).toFinset`-ish. Design decision for D-067/implementation.\n\nAlso for step 1 the zero-count input: ZerosBound (Jensen) gives a count from the |ζ| bound itself — OR use the perimeter ZeroCountProp (cleaner: it's the honest Trudgian count, already declared in ii′-4). The count is needed to bound |Σ 1/(s−ρ)| pieces and the Blaschke product size.\n\nOK — this is now a well-scoped plan. Remaining checks before writing the design doc:\n(a) The B₁-representation for ζ in Zeta23: exact statement (ZetaSum_aux1? or a ready-made \"ζ(s) = ... for σ > 0\"?). \n(b) Zeta23 digamma bounds: `norm_digamma_le` (Y.lean used it — where is it?) and `StirlingVert.digamma_stirling` statements.\n(c) Mathlib `riemannZeta_one_sub` exact statement (the FE in ζ form).\n(d) The logDeriv-FE relation: from ζ(1−s) = χ(s)·ζ(s)... Mathlib's riemannZeta_one_sub form: `riemannZeta_one_sub (s : ℂ) (hs : ∀ n : ℕ, s ≠ -(2n))... : riemannZeta (1 − s) = 2 * (2π)^(−s) * ... `? Need its exact form for the logDeriv computation. Alternatively derive logDeriv relation from Λ-FE: Λ(1−s) = Λ(s) ⟹ −Λ′(1−s) = Λ′(s)·(−1)... wait deriv: d/ds Λ(1−s) = −Λ′(1−s); equals Λ′(s)·1... Λ(1−s) = Λ(s) ⟹ −Λ′(1−s) = Λ′(s) ⟹ Λ′/Λ(s) = −Λ′/Λ(1−s)·... −(−Λ′(1−s))/Λ(1−s)... logDeriv Λ (s) = −logDeriv Λ (1−s). And logDeriv Λ = logDeriv ΓR + logDeriv ζ (off poles/zeros) ⟹ ζ′/ζ(s) = logDerivΓR... Let me define via Λ: logDeriv ζ s = logDeriv Λ s − logDeriv Gammaℝ s; and logDeriv Λ s = −logDeriv Λ (1−s) (from the FE); and logDeriv Λ (1−s) = logDeriv Gammaℝ (1−s) + logDeriv ζ (1−s) hmm — needs care at zeros/poles but on the region (s ∈ [−5/2,1/2], |t| ≥ 10): 1−s has re ∈ [1/2, 7/2] — Λ(1−s) ≠ 0? Λ zeros = nontrivial zeros (off 0,1) — 1−s with re ≥ 1/2: could be a zero if re(1−s) = 1/2 exactly and im matches a zero ordinate... on the region with |t| ≥ 10: 1−s = 1/2+iτ with τ = −t ≤ −10 — could coincide with a zero 1/2+iγ with γ = −t! At such points R(s) has a pole anyway (the theorem is about s with ζ(s) ≠ 0 implicitly — the R-bound is stated for s NOT a zero; at zeros both sides blow). For the inequality statement, we need s not a zero of ζ (else ‖R‖ is ∞/junk). Hmm — handle: state for s with riemannZeta s ≠ 0. At such s, is Λ(1−s) ≠ 0? Λ(1−s) = 0 ⟺ 1−s nontrivial zero ⟺ ... if ζ(s) ≠ 0 could 1−s still be a zero? 1−s = ρ₀ zero ⟺ ρ₀ ∈ (0,1)-strip zero; then s = 1−ρ₀ and by FE symmetry s is also a zero?! ζ(s) = ζ(1−ρ₀) = χ(1−ρ₀)ζ(ρ₀)·... = 0 ✓ — so ζ(s) ≠ 0 ⟹ 1−s not a zero (for s in the strip; edge cases re s = ... s = 1−ρ₀ with ρ₀ nontrivial ⟹ s has re ∈ (0,1) and is a zero by FE ✓). Wait — need to be careful: is ζ(1−ρ₀) = 0 from ζ(ρ₀) = 0 via Mathlib's riemannZeta_one_sub? That's the FE in the asymmetric form ✓ (its validity range: off the Γ poles — ρ₀ ∈ (0,1) strip fine). Zeta23 has `completedRiemannZeta_eq_zero_iff : Λ s = 0 ↔ IsNontrivialZero s` ✓ (CountByIntegral.lean:65). So Λ(1−s) ≠ 0 ⟺ ¬IsNontrivialZero(1−s); and ¬IsNontrivialZero(s) given ζ(s)≠0... hmm — need: s with re ∈ [−5/2,1/2], ζ(s) ≠ 0 ⟹ Λ(1−s) ≠ 0. If Λ(1−s) = 0: 1−s nontrivial zero: 0 < re(1−s) < 1 ✓ (re s ∈ (0,1) here? re(1−s) = 1−σ ∈ [1/2, 7/2]: nontrivial needs < 1: σ > 0. For σ ≤ 0: re(1−s) ≥ 1: Λ(1−s) ≠ 0 automatically (zeros of Λ are nontrivial with re ∈ (0,1)) ✓. For σ ∈ (0, 1/2]: 1−s = ρ₀ possible nontrivial zero ⟹ s = 1−ρ₀: ζ(s) = ζ(1−ρ₀): via FE ζ(1−ρ₀) = χ₀(1−ρ₀)·ζ(ρ₀) = 0·... = 0 (χ₀ finite at 1−ρ₀: re(1−ρ₀) ∈ (0,1) no Γ pole ✓) — contradiction with ζ(s) ≠ 0 ✓. OK — manageably fiddly.\n\nSo the digamma identity route: ζ′/ζ(s) = −[ζ′/ζ(1−s)] − logDeriv Gammaℝ (1−s)·(−1)?? Let me just do it cleanly in the design: \nlogDeriv Λ (w) = logDeriv Gammaℝ w + logDeriv ζ w (where Λ, ΓR, ζ all ≠ 0, analytic). \nΛ(1−s) = Λ(s) ⟹ deriv both sides at s: −Λ′(1−s) = Λ′(s) ⟹ logDeriv Λ (s) = Λ′(s)/Λ(s) = −Λ′(1−s)/Λ(1−s)·... = −logDeriv Λ (1−s) ✓.\nSo logDeriv ζ (s) = logDeriv Λ(s) − logDeriv ΓR(s) = −logDeriv Λ(1−s) − logDeriv ΓR(s) = −[logDeriv ΓR(1−s) + logDeriv ζ(1−s)] − logDeriv ΓR(s).\n= −ζ′/ζ(1−s) − [ΓR′/ΓR(1−s) + ΓR′/ΓR(s)].\nΓR′/ΓR(w) = −(log π)/2 + (1/2)ψ(w/2) (the ii′-3a split ✓ `logDeriv_Gammaℝ_one_add`-style — actually that's in LiArchimedean for 1+s form; the general: Zeta23 `RvM.logDeriv_Gammaℝ` was used in Y.lean ✓ exists!).\nΓR′/ΓR(1−s) + ΓR′/ΓR(s) = −log π + (1/2)[ψ((1−s)/2) + ψ(s/2)]. And ψ((1−s)/2) + ψ(s/2): reflection for ψ: ψ(1−w) − ψ(w) = π cot(πw)... wait: the ψ reflection: ψ(1−z) − ψ(z) = π·cot(πz). Hmm — is that in Mathlib? `Complex.digamma_one_sub`? Maybe not. Our pair: ψ((1−s)/2) + ψ(s/2) — SUM not difference. ψ((1−s)/2) = ψ(1 − (1+s)/2) hmm — reflection with w = (1+s)/2: ψ(1−w) − ψ(w) = π cot(πw): 1−w = (1−s)/2 ✓: ψ((1−s)/2) = ψ((1+s)/2) + π cot(π(1+s)/2) = ψ((1+s)/2) − π tan(πs/2)... cot(π(1+s)/2) = cot(π/2 + πs/2) = −tan(πs/2). So sum = ψ(s/2) + ψ((1+s)/2) − π tan(πs/2)?? This is getting complicated — and ψ(s/2) for re(s/2) ∈ [−5/4, 1/4] — digamma bound on NEGATIVE-re region — does Zeta23's digamma bound cover that? norm_digamma_le had hw : 0 < w.re — NO. Ugh.\n\nBetter: keep it as −(1/2)[ψ((1−s)/2) + ψ(s/2)] and bound each separately?? ψ(s/2) with re(s/2) ∈ [−5/4, 1/4] — negative-re digamma — NOT covered by Zeta23's bounds (0 < re). Use the recurrence: ψ(s/2) = ψ(s/2 + 2) − 1/(s/2) − 1/(s/2+1) (digamma_add_one twice) — shifting re by +2 into [3/4, 9/4] ✓ THEN the Zeta23 bound applies, and the two rational terms are ≤ 1/|s/2| + 1/|s/2+1| ≤ small. digamma_add_one: `Complex.digamma_add_one`? Mathlib has `digamma_add_one`? hmm — earlier session used `digamma_apply_add_one` (D-066 inventory mentioned `digamma_one`, `digamma_apply_add_one` ✓ Mathlib). ✓.\n\nAnd ψ((1−s)/2): re ∈ [1/4, 7/4] ✓ covered by Zeta23 bound directly.\n\nSo the ψ-reflection isn't needed; only the ψ-recurrence. The full reflection identity:\n\nζ′/ζ(s) = −ζ′/ζ(1−s) + (log π) − (1/2)[ψ((1−s)/2) − ψ(s/2)]·... wait let me redo: −[ΓR′/ΓR(1−s) + ΓR′/ΓR(s)] = −[−log π + (1/2)(ψ((1−s)/2) + ψ(s/2))] = log π − (1/2)(ψ((1−s)/2) + ψ(s/2)).\n\nSo: **R(s) = −R(1−s) + log π − (1/2)(ψ((1−s)/2) + ψ(s/2))** after the zero-sum cancellation. All pieces bounded: |ψ((1−s)/2)| ≤ C log|t| (Zeta23, re ∈ [1/4, 7/4] — check the exact bound form); |ψ(s/2)| = |ψ(s/2+2) − 1/(s/2) − 1/(s/2+1)| ≤ C log|t| + small ✓.\n\nThis is ALL buildable from existing pieces. The genuinely new builds for ii′-5:\n1. The B₁-rep polynomial bound |ζ(s)| ≤ C(1+|s|)/(2σ) for 0 < σ — assemble from Zeta23 pieces (check ZetaSum_aux1's exact form).\n2. The Davenport right-region R-bound (disc at 5/2+it) — the main assembly using StrongPNTPrefix + ZeroCountProp.\n3. The FE-reflection to σ ∈ [−5/2, 1/2] — logDeriv algebra + digamma bounds.\n4. Constant-folding to A = 10.5, B₀ = 48 shape.\n\nHmm wait — one thing to double-check in step 2's disc: the application region σ ∈ [1/2, 7/2] — but hold on, D-036's R-bound is needed for σ ∈ [−5/2, 3] — the right region [1/2, 3] via disc, left [−5/2, 1/2] via reflection (needs right R-bound at re(1−s) ∈ [1/2, 7/2] — so disc must cover σ up to 7/2 ✓ as designed).\n\nAlso — the disc R-bound derivation needs the C₀-count for the zeros (perimeter ZeroCountProp ✓ ii′-4) — count of zeros within the collection radius: those with |γ−t| ≤ ~1.2 (the collection disc |ρ−s₁| ≤ 1.803 has |γ−t| ≤ 1.803·... im(ρ−s₁) = γ−t: |γ−t| ≤ 1.803): zeros with |γ−t| ≤ 1.803 ⊆ [t−2, t+2] → ≤ C₀-count over 2 unit windows ≈ 2·C0hat... via ZeroCountProp at two windows ✓.\n\nHmm, actually — wait. Do we even need the Blaschke/Jensen machinery? The Davenport argument: g(s) = ζ(s)·∏(s−ρₖ)⁻¹ (NOT the Blaschke factor form — the plain (s−ρ)⁻¹ division) — zero-free on the disc ⟹ log g analytic; Re log g = log|g| = log|ζ| − Σ log|s−ρₖ| ≤ log(C(1+|t|)²) − m·log(clearance)... on the OUTER circle |s−s₁| = R: |s−ρₖ| ≥ R − |ρₖ−s₁| ≥ 9/4 − 1.803 ≥ 0.447: log|g| ≤ log|ζ| + m·log(1/0.447) ≤ 2 log|t| + C + m·0.81. m ≤ count ≤ 2·C0hat(t+2)-ish ≤ 2·(0.433 log(t+3)+...) ≤ log t·const. So Re log g ≤ A' log|t| + B' on the outer circle ⟹ by maximum principle on the disc ✓ (Re log g harmonic; or apply borelCaratheodory which only needs the bound on the ball... borelCaratheodory' wants Re f ≤ M on ball(0,R) ✓ max-principle extends circle to ball ✓). Then BorelCaratheodoryDeriv: |(log g)′(s)| ≤ 16M R²/(R−r)³ on |s−s₁| ≤ r (r = 1+margin covering σ ∈ [1/2, 7/2] hmm — wait application region |s−s₁| ≤ 1: r = 1; R = 9/4; (R−r) = 5/4: factor 16·(9/4)²·/(5/4)³ = 16·5.06/1.95 ≈ 41.5 — fine constant).\nThen (log g)′ = ζ′/ζ − Σₖ 1/(s−ρₖ) — EXACTLY the R-sum when the collection = {zeros with |γ−t|<1}... but our collection disc |ρ−s₁| ≤ 1.803 includes zeros with |γ−t| ∈ [1, 1.803] (the annulus extras: |γ−t| ∈ [1, 1.803] have |ρ−s₁|² = (5/2−β)²+(t−γ)² ≥ (3/2)²+1 = 3.25 — could be ≤ 1.803² = 3.25 ✓ included iff (5/2−β)²+(t−γ)² ≤ 3.25). Hmm — so the collection is a superset of the near zeros. Then ζ′/ζ − Σ_{collection} 1/(s−ρ) = (log g)′ bounded; and R(s) = ζ′/ζ − Σ_{|γ−t|<1} 1/(s−ρ) = (log g)′(s) + Σ_{collection ∖ near} 1/(s−ρ). The extra terms: |s−ρ| ≥ distance from s (|s−s₁| ≤ 1) to ρ (|ρ−s₁| ∈ [1.7, 1.803] for the annulus ones with |γ−t| ≥ 1... hmm the extra zeros have |γ−t| ≥ 1 AND |ρ−s₁| ≤ 1.803: |s−ρ| ≥ |ρ−s₁| − |s−s₁| ≥ 1.7−1 = 0.7? Not uniform... need |s−ρ| lower bound: |s−ρ| ≥ ||Im||: |t−γ| ≥ 1 ✓ (extras have |γ−t| ≥ 1) — so each extra term ≤ 1, and the number of extras ≤ total count ≤ 2C0hat. So |Σ extras| ≤ count ≤ C log t ✓ fine. And zeros with multiplicity: g = ζ/∏(s−ρₖ)^{mult} — with zeroMult factors ✓.\n\nAlso need LOWER bound on |ζ(s₁)| (center) for the BC lemma? borelCaratheodory' needs f(0) = 0 normalization — LogOfAnalyticFunction gives J_B with J_B(0) = 0 ✓ (it constructs the log with J_B(0) = 0 — reading the statement: \"∃ J_B, AnalyticOnNhd ... ∧ (J_B 0 = 0) ∧ (∀ z ∈ closedBall 0 r, deriv J_B z = deriv B z / B z)\" — J_B(0) = 0 built in ✓ so no center lower bound needed for THAT; but wait — borelCaratheodory' with f = J_B − J_B(0)... J_B(0) = 0 ✓ directly. But hold on — the Re-bound for J_B: Re J_B = log|B| — hmm — J_B's real part on the ball: borelCaratheodory' hypothesis: ∀ z ∈ ball(0,R), (f z).re ≤ M: need Re J_B(z) ≤ M on the ball: Re J_B = log|B| + const: since J_B(0) = 0 and (Re J_B)(z) = log|B(z)| − log|B(0)|: log|B(z)| ≤ log(sup|B|) ✓ and −log|B(0)| — the CENTER lower bound |B(0)| needed after all!! |B(0)| = |g(s₁)| = |ζ(s₁)|/∏|s₁−ρₖ|: |ζ(5/2+it)| ≥ ... ζ lower bound on re = 5/2: |ζ(s)| ≥ 1/ζ(5/2)-ish via Euler product log: |ζ(s)| = exp(Re log ζ) = exp(−Σ Re(...)) ≥ exp(−Σ ...) = ∏(1−p^{−5/2})... = 1/ζ(5/2)·... roughly |ζ(σ+it)| ≥ ζ(2σ)/ζ(σ) for σ > 1 (standard: log|ζ| ≥ −Σ|Λ|/... : |ζ(s)| ≥ ζ(2σ)/ζ(σ)). Mathlib/Zeta23: `ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div` (D-066 inventory ✓): logDeriv series Σ Λ(n)n^{−s} — |ζ′/ζ(s)| ≤ −ζ′/ζ(σ) for re ≥ ... and |ζ(s)|: via log ζ = Σ Λ/(log n) n^{−s}: Mathlib LSeries: `riemannZeta` log: `Complex.log`... there might be `norm_riemannZeta_ge`? or derive: |ζ(s)| ≥ exp(−Σ Λ(n)/log n · n^{−σ})... = exp(log ζ(σ)·−...) hmm: |ζ(s)| = |exp(Σ...)|... For re s > 1: log ζ s = Σ_p Σ_k p^{−ks}/k (abs conv); |ζ s| = exp(Re log ζ s) ≥ exp(−|log ζ s|) ≥ exp(−Σ Λ(n)/log n·n^{−σ}) = exp(−(−log... )) hmm = exp(−log... ) = 1/ζ(σ)·... wait Σ Λ(n)/(log n) n^{−σ} = Σ_p Σ_k p^{−kσ}/k = −Σ_p log(1−p^{−σ}) = log ζ(σ)·... log ζ(σ) = −Σ_p log(1−p^{−σ}) hmm sign: log ζ(σ) = Σ_p −log(1−p^{−σ}) > 0. And Re log ζ(s) ≥ −Σ_p Σ_k p^{−kσ}/k = −log... = −log ζ(σ)?? hmm: |Σ...| ≤ Σ Λ(n)/log n n^{−σ} = log ζ σ... wait Σ_n Λ(n)/(log n)·n^{−σ}: at σ = 5/2: = log ζ(5/2)? The Dirichlet series of log ζ is Σ Λ(n)/(log n) n^{−s} ✓. So Re log ζ(s) ≥ −log ζ(σ)·... hmm actually Re(log ζ(s)) ≥ −|log ζ(s)| ≥ −Σ Λ(n)/(log n)n^{−σ} = −logζ(σ)... log ζ(σ) at σ = 5/2: ζ(2.5) ≈ 1.34: log ≈ 0.294: |ζ(s)| ≥ e^{−0.294} ≈ 0.745 ✓. So |ζ(5/2+it)| ≥ 0.745 — a clean CONSTANT lower bound via the LSeries log. Mathlib: does it have log ζ as a series? `Complex.log_riemannZeta`? hmm — there's `LSeries` log: maybe `Complex.log_riemannZeta_eq_tsum`? If not, derive via the von Mangoldt series and exp — logDeriv series exists (D-066 ✓) — from that: |ζ(s)| lower bound via... hmm the log series is the primitive... Actually simpler: |ζ(s)| = |∏_p (1−p^{−s})⁻¹| via Euler product — Mathlib has the Euler product `riemannZeta_eulerProduct`? There's `Complex.riemannZeta_euler_product`? I recall eulerProduct for LSeries: `LSeries.eulerProduct`? Might exist. OR even simpler: 1/|ζ(s)| = |1/ζ(s)| = |Σ μ(n)n^{−s}| ≤ Σ n^{−5/2} = ζ(5/2)!! 1/ζ(s) = Σ μ(n)/n^s for re > 1 (Mathlib: `LSeries μ`? `riemannZeta_inv`? there's `ArithmeticFunction.moebius` LSeries: 1/ζ = Σ μ(n)n^{−s} — Mathlib has `LSeries_moebius_eq_one_div_riemannZeta`? something). Then |ζ(s)| ≥ 1/ζ(σ) ✓ CONSTANT. That's the cleanest. Verify the lemma name later.\n\nOK. The plan is solid and entirely assemblable from existing pieces + modest new builds. Let me also quickly double-check the digamma bound in Zeta23 that Y.lean used: `norm_digamma_le` — where defined? grep. And `StirlingVert.digamma_stirling`. Then write the design doc D-067 and start building.\n\nGiven the scope, session 022 will likely deliver: the D-067 design doc + possibly start the |ζ| poly bound. The full ii′-5 is 2–3 sessions per D-064. That's fine (sub-stage rule).\n\nLet me check the two digamma bounds + the B₁ rep + moebius-1/ζ lemma names.","signature":""},{"type":"text","text":"The full toolkit exists. Key remaining checks: the Zeta23 digamma bound statements, the B₁ ζ-representation, and the 1/ζ = Σμ(n)n^{−s} lemma (for the center lower bound)."},{"type":"tool_use","id":"Bash_169","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem norm_digamma_le\\|lemma norm_digamma_le\\|theorem digamma_stirling\\|lemma digamma_stirling\" Zeta23/ --include=*.lean -r | head -4; grep -rn \"theorem ZetaSum_aux1 \\|lemma ZetaSum_aux1 \" Zeta23/FromPNTPlus/ZetaBounds.lean | head -2","description":"Locate digamma bounds and ZetaSum_aux1"},"extra_content":null}]