← Session 27 — ii′-5c/5d: Davenport disc + FE-reflection bounds
thinking (28052 chars)
While the build runs, let me start planning 5e-ii (the near-axis digamma bound). From D-068 §1 (C2):
**Target**: ‖ψ(w)‖ ≤ C·log(2+‖w‖) for w with dist(w, −ℕ) ≥ 1/4 — plus the right-half mild case.
Wait — actually, let me reconsider the exact statement needed for 5e-v. On the circle's near-axis left part: w = s/2 with re w ∈ [−R/2 − ..., ...] and dist(w, −ℕ) ≥ 1/8. The bound needed: ‖ψ(w)‖ ≤ C·log(2+‖w‖).
Proof plan (from D-068):
1. m := ⌈−re w⌉₊ + 2 (so re(w + m) ∈ [1, 3]-ish: re w + m ≥ −re w + ... wait: re(w + m) = re w + m where m ≥ −re w + 1 ⟹ re(w+m) ≥ 1; and re(w+m) ≤ re w + (−re w + 2) + ... = 2+ hmm: m = ⌈−re w⌉₊ + 2 ≤ (−re w + 1) + 2 = −re w + 3: re(w+m) ≤ 3; and ≥ re w + (−re w) + 2 = 2 — wait ⌈−re w⌉₊ ≥ −re w: re(w+m) ≥ 2. Hmm: m = ⌈−re w⌉₊ + 2 ≥ −re w + 2 ⟹ re(w+m) ≥ 2; ≤ −re w + 1 + 2 + re w = 3 (Nat.ceil_lt_add_one: ⌈x⌉₊ < x+1 needs 0 ≤ x — for −re w possibly negative: if re w ≥ 0 then ⌈−re w⌉₊ could be 0 — the hypothesis dist(w,−ℕ) ≥ 1/4 with re w ≥ 0: then w is already in the right half-plane — the recurrence isn't needed... Let me just define m := ⌈max 0 (−re w)⌉₊ + 2? For re w ≥ 0: m = 2: re(w+2) ≥ 2 ✓ fine — the recurrence with 2 steps always works. Actually simpler: m := ⌈|re w|⌉₊ + 2 (same as 5d's n) — re(w+m) = re w + m ≥ re w + |re w| + 2 ≥ 2 ✓ and ≤ re w + |re w| + 3 ≤ 3 + 2|re w| — hmm for re w very positive the shift is long but harmless (the sum bound still works). Wait but for re w > 0 the poles being avoided are at 0, −1, ... which are all to the LEFT — the shifted point w+m lands at re ∈ [re w + |re w| + 2, ...] fine.
Actually — for the bound ‖ψ(w)‖ ≤ C log(2+‖w‖), the case re w ≥ 1 is directly handled by... hmm — no! digamma_stirling needs |im| ≥ 1/2 and compactness needs re ∈ [1,2] — for re w ≥ 2 with |im| < 1/2 we need the series-split mild case anyway. So the unified statement over all w with dist(w, −ℕ) ≥ 1/4:
ψ(w) = ψ(w+m) − Σ_{j=0}^{m−1} (w+j)⁻¹ with m = ⌈|re w|⌉₊ + 2:
(a) the sum: Σ_{j<m} ‖w+j‖⁻¹ ≤ C·log(m+1): the real parts re w + j for j = 0..m−1 are 1-separated reals; ‖w+j‖ ≥ max(|re w + j|, |im w|)... For the sum bound: partition the j's by the real value: |re w + j| takes values in { |re w|, |re w + 1|, ... } — 1-separated BUT possibly one/two values near 0 — there ‖w+j‖ ≥ dist(w, −ℕ)?? NO — ‖w+j‖ ≥ ... hmm: if |re w + j| < 1/4 then w + j is within 1/4 of the imaginary axis — NOT of −ℕ. The distance condition is dist(w, {0,−1,−2,...}) ≥ 1/4 — i.e., |w − (−l)| = |w + l| ≥ 1/4 for all l ∈ ℕ. So ‖w+j‖ ≥ 1/4 for all j ✓ EXACTLY the condition. And for j with |re w + j| ≥ i (integer i ≥ 1): ‖w+j‖ ≥ |re w + j| — the number of j with |re w + j| ∈ [i, i+1) is ≤ 2 (1-separated). So Σ_j 1/‖w+j‖ ≤ Σ_{i≥1} 2/i + 2·(1/(1/4))·... let me formalize: let d_j := |re(w + j)|: the d_j are 1-separated (d_{j+1} = d_j ± 1 — monotone in j since re w + j increases with j: d_j = |re w + j| is V-shaped). The clean bound: for j with re w + j ≥ 0: those j ≥ j₀ := ⌈−re w⌉₊: 1/‖w+j‖ ≤ 1/max(1/4, re w + j) with re w + j taking values ≥ ... ugh. The V-shape: re w + j crosses 0 at most once; the values |re w + j| ≥ 1/4 everywhere except... no — |re(w+j)| can be < 1/4 (when re w + j ≈ 0) — but then ‖w+j‖ ≥ |im w| — hmm and if im w ≈ 0 too then w + j ≈ 0 ∈ −ℕ violating dist ≥ 1/4 ⟹ in that case ‖w+j‖ ≥ 1/4 via the dist condition ✓. So: ‖w+j‖ ≥ max(|re(w+j)|, 1/4) for all j (the second from: if |re(w+j)| < 1/4 then... wait NO — the dist condition says |w + j| ≥ 1/4 only when −j ∈ −ℕ i.e. always (j ∈ ℕ) ✓ — dist(w, −ℕ) ≥ 1/4 means exactly ∀ j : ℕ, ‖w + j‖ ≥ 1/4? dist(w, {0,−1,−2,...}) = inf_l ‖w − (−l)‖ = inf_l ‖w + l‖ ≥ 1/4 ⟹ ∀ l, ‖w+l‖ ≥ 1/4 ✓ YES.) So ‖w+j‖ ≥ max(|re(w+j)|, 1/4) and the real parts are 1-separated: Σ_{j=0}^{m−1} 1/‖w+j‖ ≤ Σ_j 1/max(|re(w+j)|, 1/4): the values |re(w+j)| are 1-separated nonneg reals with... the count of j with |re(w+j)| ≤ i is ≤ 2i+2 (j's with re(w+j) ∈ [−i, i]: an interval of length 2i with 1-separated points ⟹ ≤ 2i+1 points). So Σ_j 1/max(|re(w+j)|,1/4) ≤ Σ_{i=0}^{m} (count in (i, i+1])·(1/max(i/2...)) — the standard dyadic: ≤ 2·(4) + Σ_{i≥1} 2·(1/i)·2... = 8 + 4·H_m ≤ 8 + 4·log(m+1)·... H_m ≤ 1 + log m. So ≤ C + 4 log m. Fine — a clean real estimate; in Lean, this needs the bin-packing bound: Σ_{j ∈ range m} 1/max(|re(w+j)|, 1/4) ≤ 8 + 4·(1 + log m). The Lean proof of the separated-sum bound is itself a mini-project (dyadic decomposition of a finite sum, bin counting via injectivity into bins...). Hmm — this is the fiddly part. Alternative simpler-to-Lean bound: pair the terms: j and j' = j+1: 1/‖w+j‖ + 1/‖w+j+1‖ — hmm.
ALTERNATIVE cleaner approach: Σ_{j=0}^{m-1} (w+j)⁻¹ vs the INTEGRAL ∫₀^m (w+x)⁻¹ dx — the EM comparison again but now the path w+[0,m] can hit 0... if re(w+j) crosses 0 the FTC integral ∫ (w+x)⁻¹ dx diverges at the pole. BUT — the Cauchy PV/value: for w with im w ≠ 0 the path avoids 0 (im(w+x) = im w ≠ 0 ✓ slit plane) — THAT was the 5d case (|im w| ≥ 2). For im w ≠ 0 but small: the 5d EM argument works VERBATIM with |im w| ≥ δ: the arctan bound ∫₀^m dx/((x+a)²+c²) ≤ π/c with c = |im w| SMALL — blows up as 1/c. So EM gives the remainder ≤ π/(2|im w|) — NOT uniform in the near-axis case. So EM is out for |im| small; the recurrence+separated-sum is the right route, and the separated-sum estimate is genuinely needed.
For the Lean estimate, the cleanest formulation: for j ∈ range m, the points x_j := re w + j are 1-separated (x_{j+1} = x_j + 1 exactly!) — so the sum Σ 1/max(|x_j|, 1/4) is bounded by counting: for each j, EITHER |x_j| ≥ 1/4 OR (the unique small one)... Actually the cleanest: the x_j are exactly x_0 + j — an arithmetic progression with difference 1. The sum Σ_{j<m} 1/max(|x_0+j|, 1/4): the terms where x_0 + j ∈ [−1/4, 1/4]: at most ONE j (the spacing is 1 > 1/2 = the interval length... could be 1 j). For that j: 1/(1/4) = 4. For the others: 1/|x_0+j| with |x_0+j| ≥ 1/4 and 1-separated: Σ ≤ Σ_{j: x_0+j < −1/4} 1/|x_0+j| + Σ_{j: x_0+j > 1/4} 1/|x_0+j|: each side is a sum of 1/(decreasing/increasing 1-separated values ≥ 1/4): ≤ 1/(1/4)·... the positive side: values x ≥ 1/4 spaced by 1: Σ ≤ 4 + 1/(5/4) + 1/(9/4) + ... hmm depends on the phase. Uniform bound: for any 1-separated increasing sequence y_1 < y_2 < ... with y_1 ≥ 1/4: Σ 1/y_i ≤ 4 + Σ_{i≥2} 1/(y_1 + (i−1)) ≤ 4 + Σ_{i≥2} 1/(i−1 + 1/4) ≤ 4 + Σ_{l≥1} 1/l·... Σ_{l≥1} 1/(l − 3/4) ≤ 4/1 + Σ_{l≥2} 1/(l−1) hmm = 4 + H_{m} ≤ 4 + 1 + log m... Let me just bound: Σ_{i=1}^{m} 1/y_i with y_i ≥ i − 3/4 ≥ i/4 (i ≥ 1): 1/y_i ≤ 4/i: Σ ≤ 4·H_m ≤ 4(1 + log m). And the negative side same. Total ≤ 4 (the small one) + 2·4·(1 + log m) = 12 + 8 log m. With m ≤ |re w| + 3 ≤ ‖w‖ + 3: log m ≤ log(‖w‖+3) ≤ log(2+‖w‖) + 2·... So Σ ≤ C₁ + C₂ log(2+‖w‖). In Lean: this needs: y_i ≥ i − 3/4 ⟹ 1/y_i ≤ 4/i for i ≥ 1 (i − 3/4 ≥ i/4 ⟺ 3i/4 ≥ 3/4 ⟺ i ≥ 1 ✓); Σ_{i=1}^{m} 1/i ≤ 1 + log m (harmonic-log: Mathlib `Real.sum_one_div_le_log`? there IS `Real.sum_one_div_le_log (n : ℕ) : ∑ k ∈ range n, (1:ℝ)/(k+1) ≤ Real.log (n+1) + 1`? or harmonic_le_log — Mathlib has harmonic number bounds: `Real.harmonic_le_log`? Let me check at build: there's `sum_one_div_le_log` in Mathlib.Analysis.SumOverInterval or ...Nat: I recall `Real.sum_one_div_le_log : (∑ k in Finset.range n, (1:ℝ)/(k+1)) ≤ Real.log n + 1`? something like it exists (harmonic ≤ log n + 1).
Hmm OK — this sub-build has real content. Estimated 0.25–0.5 session in D-068. The pieces:
(a) `digamma_add_natCast` — HAVE IT (LiReflect §5).
(b) The separated reciprocal sum bound (the mini-project).
(c) ψ(w+m) bound: cases on |im w| vs 1/2: |im| ≥ 1/2: digamma_stirling (re(w+m) ≥ 2 > 0, |im(w+m)| = |im w| ≥ 1/2 ✓): ‖ψ(v)‖ ≤ ‖log v‖ + 3/(im v)² + 1/(2‖v‖) ≤ log‖v‖ + π + 3/(1/4) + ... ≤ C log(2+‖v‖) fine. |im| < 1/2: v = w+m has re ∈ [2, 3], |im| < 1/2: compact set — ψ continuous on {re ∈ [2,3], |im| ≤ 1/2}: bounded by a constant D (IsCompact.exists_forall_ge? — the exact boundedness lemma: `IsCompact.exists_forall_ge (hK : IsCompact K) (hf : ContinuousOn f K) : ∃ C, ∀ x ∈ K, ‖f x‖ ≤ C`? hmm — `IsCompact.exists_bound_of_continuousOn`? There's `IsCompact.exists_forall_ge` for real-valued: (hK : IsCompact s) (hf : ContinuousOn f s) : ∃ b, ∀ x ∈ s, f x ≤ b ✓ — apply to f := fun w => ‖ψ w‖... need ψ continuousOn on the compact: ψ = logDeriv Gamma: continuous off the poles: the compact {re ∈ [2,3]} ∩ {|im| ≤ 1/2} avoids poles (re ≥ 2 > 0): differentiableAt_Gamma + logDeriv continuity: `ContinuousOn (digamma) K` via (differentiableAt_Gamma ...).continuousAt... ψ = deriv Gamma / Gamma: ContinuousOn.div (deriv continuous — Gamma is differentiable everywhere-off-poles; its DERIVATIVE continuous — hmm deriv Gamma continuity: Gamma is analytic ⟹ deriv continuous on the open domain: `DifferentiableAt.continuousAt_deriv`? no — analyticity gives deriv analytic: AnalyticOn.deriv? `AnalyticOnNhd.deriv`? — there's `AnalyticOn.deriv`/`AnalyticOnNhd.deriv : AnalyticOnNhd f s → AnalyticOnNhd (deriv f) s`? I recall `AnalyticOn.deriv` exists. Then analytic ⟹ continuous. Then /Gamma (nonzero on K via Gamma_ne_zero — Γ(w) ≠ 0 for w not a nonpositive integer — `Complex.Gamma_ne_zero (hs : ∀ m : ℕ, w ≠ -m)`? from the logDeriv_Gammaℝ proof: `Complex.Gamma_ne_zero` used with `intro m h` pattern ✓). So ContinuousOn ψ K ✓.
(d) the assembly: ‖ψ(w)‖ ≤ ‖ψ(w+m)‖ + Σ‖w+j‖⁻¹ ≤ [compact D or stirling C·log] + [C₁ + C₂ log m] ≤ C₃ log(2+‖w‖) for ‖w‖ ≥ 1/4 (‖w‖ ≥ dist ≥ 1/4 — hmm ‖w‖ ≥ 1/4 from dist(w,−ℕ) ≥ 1/4 with 0 ∈ −ℕ ✓). Fold constants to a clean C: ‖ψ(w)‖ ≤ C·Real.log (2 + ‖w‖) with C ~ 20 or whatever falls out.
Hmm wait — for 5e-v's use, the exact form: on the circle part with w = s/2, ‖w‖ ≤ R/2 + 1: log(2+‖w‖) ≤ log(2R) ≤ 2 log R for R ≥ 10-ish. So ‖logDeriv ΓR(s)‖ ≤ (log π)/2 + ½‖ψ(s/2)‖ ≤ C log R. ✓.
Also needed (D-068 C2 second part): the right-half mild case re w ≥ 2 (any |im| < 1/2): ψ(w) − log w = O(1) via the series split — do I need it separately? In the assembly above, the re(w+m) ∈ [2,3] landing works for ANY w (with m = ⌈|re w|⌉₊+2): for re w ≥ 2 already: m = ⌈re w⌉₊ + 2: the sum Σ_{j<m} 1/‖w+j‖: the real parts re w + j ≥ 2: 1-separated ⟹ Σ ≤ Σ 1/(2 + j) ≍ H_m = O(log m) = O(log(‖w‖+3)) ✓ same bound. And ψ(w+m) with re(w+m) ∈ [re w + re w + 2, ...] — for re w ≥ 2: re(w+m) ∈ [2re w + 2, 2re w + 3] — NOT in [2,3]!! The compactness landing zone breaks for re w > 3/2. Hmm. So for re w large the shift should be SMALL: m = 2 suffices if re w ≥ 2 (land in [4, 5]) — but then ψ(w+m) with re ∈ [4,5]: not compact either. The RIGHT approach for re w ≥ 2: no shift at all needed conceptually — ψ(w) ≈ log w — but digamma_stirling needs |im| ≥ 1/2. For re w ≥ 2, |im| < 1/2: use the Weierstrass series directly (D-068's note): ψ(w) + γ + 1/w = Σ'_n w/((n+1)(w+n+1)): ‖Σ‖ ≤ ‖w‖·Σ 1/((n+1)‖w+n+1‖): with re w ≥ 2: ‖w+n+1‖ ≥ re w + n + 1 ≥ n + 3: so term ≤ ‖w‖/((n+1)(n+3))... Σ_{n} ‖w‖/((n+1)(n+3)): ≤ ‖w‖·Σ 1/(n+1)²·... = ‖w‖·π²/6·1/... wait that's O(‖w‖) — no: 1/((n+1)(n+3)) ≤ 1/(n+1)² sums to O(1) ⟹ ‖Σ‖ ≤ C‖w‖ — TOO BIG again. The split: Σ_{n+1 ≤ A} + Σ_{n+1 > A} with A = re w: term ≤ ‖w‖/((n+1)(re w + n + 1)): for n+1 ≤ A: ≤ ‖w‖/((n+1)·A) ≍ (1+1/A)... ≤ 2/(n+1) (‖w‖/A ≤ √(A²+1/4)/A ≤ 1.01): sum ≍ 2 log A; for n+1 > A: ≤ ‖w‖/(n+1)²: sum ≤ ‖w‖/A ≍ 1: total O(log A) ✓. So the right-half mild case: ψ(w) = log w + O(1) via the series split at A = re w — needs: the digamma_series (Zeta23 ✓ exists), the split-sum estimate Σ_n 1/((n+1)(A+n+1)) ≤ C(1 + log A)/A — another mini-estimate (two-part: n+1 ≤ ⌊A⌋: Σ 1/((n+1)A) = H/A; n+1 > A: Σ 1/(n+1)² tail ≤ 1/A·C — the tail Σ_{n>N} 1/n² ≤ 1/N: Mathlib: `Real.tendsto_sum_...`? there are lemmas for Σ 1/n² tail? `summable_one_div_nat_pow`... the tail bound might need a custom estimate: Σ_{n=N+1}^{∞} 1/n² ≤ ∫_N^∞ dx/x² = 1/N: via the EM-ish integral comparison or `Summable` bound... Alternatively bound the whole sum by comparison with the log: Σ_n 1/((n+1)(A+n+1)) — telescope: 1/((n+1)(A+n+1)) = (1/A)·(1/(n+1) − 1/(A+n+1))... partial fractions! Σ_{n=0}^{∞} (1/A)(1/(n+1) − 1/(n+1+A)) = (1/A)·Σ_{n=0}∞ [1/(n+1) − 1/(n+1+A)]: the tail-telescope: for A INTEGER: Σ_{n=0}^{N} (1/(n+1) − 1/(n+1+A)) = Σ_{n=1}^{A} 1/n − ... = H_A − (H_{N+A} − H_N)·... as N → ∞: H_{N+A} − H_N → 0·... hmm H_{N+A}−H_N ≈ A/N → 0 ✓ so the sum = H_A ≍ log A. For real A: similar with floors. This gives Σ = (1/A)(H_{⌈A⌉} + O(1)) = O(log A / A) ✓ — elementary but ANOTHER telescope. Ugh — these mini-estimates pile up.
Let me reconsider: maybe a slicker unified bound for the re ≥ 2 mild case: ψ(w) for re w ≥ 2, |im w| ≤ 1/2: shift DOWN?? no. Use the recurrence to go LEFT by 0 (already right) — hmm. OR use the integral representation? OR — use digamma_stirling at w' = w with |im w| < 1/2 by going to w'' = w + i(1/2)?? no — that's a different function value.
ALTERNATIVE: real-analytic bound: for re w ≥ 2, |im w| ≤ 1/2: ‖ψ(w) − log w‖ ≤ C via: ψ(w) − log w = ∫-representation? There's the Binet-type formula... Actually simplest Lean route: use digamma_stirling at w with |im w| ≥ 1/2 AND cover |im w| < 1/2 by CONTINUITY on... re w ∈ [2, ∞) is not compact. Hmm.
OR: bound ‖ψ(w)‖ directly by the series with the SAME 1-separated-bin trick: ψ(w) + γ + 1/w = Σ_n w/((n+1)(w+n+1)): |term_n| = ‖w‖/((n+1)‖w+n+1‖): with re w ≥ 2: ‖w+n+1‖ ≥ n+3 (re): |term_n| ≤ ‖w‖/((n+1)(n+3)): Σ: pair consecutive: 1/((n+1)(n+3)) = (1/2)(1/(n+1) − 1/(n+3)): telescope Σ_{n=0}^{N} = (1/2)(1 + 1/2 − 1/(N+2) − 1/(N+3)) → 3/4: so Σ_all |term| ≤ ‖w‖·3/4 = O(‖w‖)?? — NO this is the crude bound again (O(‖w‖)). The correct bound needs the n+1 ≤ A split with the 1/A factor...
You know what — for 5e-v's ACTUAL need, let me look at what's needed precisely: logDeriv ΓR(1−s) at s on the circle with re s ≈ −R (left near-axis): 1−s has re ≈ 1+R, |im(1−s)| = |t| < 10: w' = (1−s)/2: re w' ≈ R/2 ≥ 2, |im w'| < 5. So I need ‖ψ(w')‖ = O(log R) for re w' ≥ 2, |im w'| ≤ 5. The |im| ∈ [1/2, 5] sub-case: digamma_stirling ✓. The |im| < 1/2 sub-case: genuinely needs the mild bound. Hmm OK.
SIMPLEST correct route for the mild case — the EM comparison AGAIN but now the path is SAFE (re w ≥ 2, the path w + [0, m] never nears 0!): use the 5d EM machinery with m = 1 (shift by ONE only): ψ(w) = ψ(w+1) − 1/w and bound ψ(w+1)... that doesn't help (still |im| < 1/2).
OK here's the cleanest: the EM form of the digamma-log comparison with the full telescope VALID for re w > 0: ψ(w) − log w: use the digamma_series (Weierstrass): ψ(w) = −γ − 1/w + Σ'_n (1/(n+1) − 1/(w+n+1)) and compare Σ'_n (1/(n+1) − 1/(w+n+1)) with log w via... the series Σ [1/(n+1) − 1/(w+n+1)] = Σ w/((n+1)(w+n+1)) — and its difference from log(w+N)-ish...
Hmm — actually, hold on. Let me reconsider whether the mild case is needed AT ALL. In 5e-v, the points on the circle with |t| < 10: I could instead use the 5c/5d R-bounds which need |t| ≥ 10, and handle |t| < 10 by COMPACTNESS of ζ′/ζ? NO — the circle at |t| < 10 has re s ≈ ±R → ∞: not compact. The right point re s ≈ +R: Dirichlet series ✓ O(1). The left point re s ≈ −R: FE-reflect: ζ′/ζ(s) = −ζ′/ζ(1−s) − [logDeriv ΓR(1−s) + logDeriv ΓR(s)]:
- logDeriv ΓR(1−s): re(1−s) ≈ 1+R: RvM.logDeriv_Gammaℝ (re > 0) = −(logπ)/2 + ½ψ((1−s)/2): ψ(w') with re w' ≈ R/2, |im w'| = |t|/2 < 5: THE MILD CASE — needed.
- logDeriv ΓR(s): re s ≈ −R: via 5d's logDeriv_Gammaℝ_shift... only +4 — insufficient for re s/2 ≈ −R/2. Need: logDeriv ΓR(s) = −(logπ)/2 + ½ψ(s/2) for im s ≠ 0 — wait 5d proved logDeriv_Gammaℝ_shift : logDeriv ΓR s = logDeriv ΓR (s+4) − 2(s+1)/(s(s+2)) — for re s ≈ −R: s+4 still has re ≈ −R+4 < 0 for R > 4! The +4 shift was sized for re s ∈ [−5/2, 1/2]. For re s ≈ −R: need the GENERAL shift by n ≈ R/2: logDeriv ΓR s = logDeriv ΓR (s + 2m) − Σ_{j<m} ... — the GENERAL recurrence for logDeriv ΓR: ψ(s/2) = ψ(s/2 + m) − Σ_{j<m} 1/(s/2 + j) — this is exactly the near-axis digamma bound's recurrence applied to logDeriv ΓR directly. So for the LEFT point: logDeriv ΓR(s) = −(logπ)/2 + ½ψ(s/2) with ψ(s/2) = ψ(s/2+m) − Σ 1/(s/2+j) — the C2 bound. So BOTH the mild right case (for ΓR(1−s)) and the C2 left case (for ΓR(s)) are needed. Confirmed D-068's scoping.
For the mild right case — actually there IS a slick route I missed: for re w ≥ 2, |im w| ≤ 5: ψ(w) = ψ(w + i·(1 − im w))?? no. Hmm — what about using digamma_stirling at w + i·c for a vertical shift? ψ(w + i) − ψ(w) = 1/w... no that's the recurrence for +1 not +i. No vertical recurrence exists.
What about the mean-value route: ψ(w) − ψ(w + i/2) = ∫... no.
The series-split it is. Actually — wait, one more idea: ψ(w) − log(w) for re w ≥ 2: via Binet's formula ψ(w) = log w − 1/(2w) − ∫₀^∞ ... (Binet) — not in Mathlib surely.
OR — the cleanest: shift LEFT to the compact zone is impossible, shift RIGHT changes nothing (|im| fixed)...
OK let me just embrace the series route for the mild case:
`norm_digamma_sub_log_le_of_two_le_re {w : ℂ} (hw : 2 ≤ w.re) : ‖digamma w − log w‖ ≤ C`:
via digamma_series (needs w ∈ integerComplement: re w ≥ 2 ⟹ w not a nonpositive integer ✓):
ψ(w) = −γ − 1/w + Σ'_n a_n with a_n = 1/(n+1) − 1/(w+n+1).
Σ'_n a_n vs log w: Σ_{n=0}^{∞} a_n = lim_{N} Σ_{n<N} [1/(n+1) − 1/(w+n+1)] — partial-fraction telescope vs log: Σ_{n<N} 1/(n+1) = H_N ≈ log N + γ; Σ_{n<N} 1/(w+n+1) ≈ log(w+N) − log(w) + γ-ish... — this is EXACTLY the Euler product for Gamma! log Γ(w) = ... — circular.
Direct bound: ‖Σ'_n a_n − log w‖ ≤ ... hmm — the statement I NEED is just ‖ψ(w)‖ ≤ C log(2+‖w‖) — i.e., ‖−γ − 1/w + Σ a_n‖ ≤ C log(2+‖w‖) for re w ≥ 2. From the series: Σ a_n = Σ w/((n+1)(w+n+1)): bound Σ |a_n| ≤ Σ ‖w‖/((n+1)(re w + n + 1)) (‖w+n+1‖ ≥ re w + n + 1 since re ≥ 2 > 0... ‖w+n+1‖ ≥ re(w+n+1) = re w + n + 1 ✓):
Σ_n ‖w‖/((n+1)(re w + n + 1)) = ‖w‖·Σ_n 1/((n+1)(A+n+1)) with A := re w ≥ 2.
Sub-claim: Σ_{n=0}^∞ 1/((n+1)(A+n+1)) ≤ (1 + log(A+1))/A for A ≥ 2.
Proof of sub-claim: split at N := ⌈A⌉:
head (n+1 ≤ N): 1/((n+1)(A+n+1)) ≤ 1/(A(n+1)): Σ_{n=0}^{N−1} ≤ H_N/A ≤ (1 + log N)/A·... H_N ≤ 1 + log N (harmonic bound) ≤ (1 + log(A+1))/1... so head ≤ (1 + log N)/A.
tail (n+1 > N ⟹ n+1 ≥ N+1 > A): 1/((n+1)(A+n+1)) ≤ 1/(n+1)²: Σ_{n ≥ N} 1/(n+1)² ≤ 1/N·... the tail Σ_{n=N}∞ 1/(n+1)² ≤ 1/(N+1) + ∫... ≤ 2/N (integral comparison or the known tail): ≤ 2/A·... since N ≥ A: 1/N ≤ 1/A... hmm 2/N ≤ 2/A ✓.
Total: (1 + log N)/A + 2/A with N = ⌈A⌉ ≤ A+1: log N ≤ log(A+1): ≤ (3 + log(A+1))/A.
Then ‖Σ a_n‖ ≤ ‖w‖·(3 + log(A+1))/A with ‖w‖/A = ‖w‖/re w ≤ √(1 + (im/re)²) ≤ √(1 + 25/4) ≤ 3 for |im| ≤ 5, re ≥ 2. So ‖Σ a_n‖ ≤ 3(3 + log(A+1)) ≤ 9 + 3 log(‖w‖ + 1) ≤ C log(2+‖w‖) for ‖w‖ ≥ 2 ✓.
Final: ‖ψ(w)‖ ≤ γ + ‖1/w‖ + ‖Σ a_n‖ ≤ 1 + 1/2 + C log(2+‖w‖) ≤ C' log(2+‖w‖) (for ‖w‖ ≥ 2: log(2+‖w‖) ≥ log 4 > 1: constants fold: γ + 1/2 + 9 ≤ C'·log 4...). Take C' = 20 say.
The Lean ingredients: digamma_series (Zeta23 ✓), the harmonic bound H_N ≤ 1 + log N (Mathlib? check), the tail Σ 1/(n+1)² ≤ 2/(N+1)-ish (the integral comparison — Mathlib has `Real.sum_one_div_sq_le_...`? or the telescoped 1/(n(n+1)) = 1/n − 1/(n+1) comparison: 1/(n+1)² ≤ 1/(n(n+1)) = 1/n − 1/(n+1) ⟹ tail ≤ 1/N EXACTLY via telescoping!! `∑' 1/(n(n+1)) = 1` telescope — clean!): tail Σ_{n≥N} 1/(n+1)² ≤ Σ_{n≥N} 1/(n(n+1)) = Σ_{n≥N} [1/n − 1/(n+1)] = 1/N (telescoping series: `Summable` of 1/n−1/(n+1) with tsum = 1/N — via hasSum_of_tendsto: partial sums telescope to 1/N − 1/(M+1) → 1/N ✓). NICE — the tail bound is clean via the telescope (no integral comparison needed).
And the partial sums/telescoping in Lean: tsum of (fun n => 1/n − 1/(n+1)) from N: = 1/N: `hasSum_iff`... there might be an existing lemma: `Real.tsum_one_div_sub...`? or build via Finset partial sum + tendsto. ~30 lines.
And the harmonic bound H_N ≤ 1 + log N: Mathlib `Real.sum_one_div_le_log`? Hmm — I recall `Real.harmonic_le_log`? Not sure. Alternatives: H_N = Σ_{k=1}^{N} 1/k ≤ 1 + ∫₁^N dx/x = 1 + log N: the integral comparison `sum_le_integral_of_decreasing`? There IS `Antitone.sum_le_integral`? hmm or `sum_le_integral_of_monotone...`. Mathlib: `Monotone.sum_le_integral` / `Antitone.integral_le_sum`: for decreasing f: ∫₁^N f ≤ Σ_{k=1}^{N-1} f(k)... The form I need: Σ_{k=2}^{N} 1/k ≤ ∫₁^N dx/x = log N: `Antitone.sum_le_integral (h : Antitone f) : ∑ i ∈ Ioc a b, f i ≤ ∫ x in a..b+1?...` — the exact form: `Antitone.sum_le_integral {f : ℝ → ℝ} (hf : Antitone f) : ∑ i ∈ Finset.Ioc a b, f ↑i ≤ ∫ x in a..b, f x`? There are such lemmas in Mathlib.MeasureTheory/Integral or Analysis.SumIntegralComparisons: `Antitone.sum_le_integral : Antitone f → ∑ i ∈ Ioc a b, f (i+1) ≤ ∫ x in a..b, f x`? I'll check. The needed comparison: Σ_{k=2}^N 1/k ≤ ∫₁^N dx/x. Via Antitone.sum_le_integral on f = 1/x over [1, N]: Σ_{k ∈ Ioc 1 N}... the lemma form: ∑_{i=a+1}^{b} f(i) ≤ ∫_a^b f for decreasing f ≥ 0. ✓ exists surely.
OK — the 5e-ii build has three pieces:
(A) `norm_digamma_le_of_dist_nat_ge` (the near-axis LEFT-plane bound): dist(w, −ℕ) ≥ 1/4 ⟹ ‖ψ(w)‖ ≤ C·log(2+‖w‖) — via digamma_add_natCast (have) + the separated reciprocal sum bound + ψ(w+m) via StirlingVert (|im| ≥ 1/2) or compactness (|im| < 1/2, re(w+m) ∈ [2,3]).
(B) `norm_digamma_le_of_two_le_re` (the mild right bound): re w ≥ 2 ⟹ ‖ψ(w)‖ ≤ C·log(2+‖w‖) (+O(1)) — via the Weierstrass series split + telescope tail + harmonic-log.
(C) The separated reciprocal sum bound (shared): for the points w+j with 1-separated real parts and ‖w+j‖ ≥ δ: Σ_{j<m} ‖w+j‖⁻¹ ≤ C(1/δ + log m) — the bin-packing estimate.
Hmm — actually (C): with the V-shaped |re(w+j)|: the values |re(w+j)| for j = 0..m−1: since re(w+j) = re w + j is an AP with difference 1: the sum Σ 1/max(‖...‖) — let me simplify (C) using the AP structure directly: Σ_{j=0}^{m-1} 1/‖w+j‖ ≤ Σ_{j=0}^{m-1} 1/max(|re w + j|, 1/4): the sequence |re w + j|: decreases to the zero-crossing then increases. Split at j₀ = the crossing: two monotone sides. Each side: 1-separated values ≥ ... the smallest ≥ 0 possibly (if re w + j hits near 0) — but those j have ‖w+j‖ ≥ 1/4 (dist condition) ⟹ term ≤ 4: at most TWO such j (|re w + j| < 1/4 for at most one j since spacing 1; and the boundary ones with |re w+j| ∈ [1/4, 1/2)...) — hmm let me bound: term_j ≤ 1/max(|re w + j|, 1/4): the j's with |re w+j| < 1/4: ≤ 1 j: term ≤ 4. The rest: |re w + j| ≥ 1/4, 1-separated AP: on the positive side (re w + j ≥ 1/4): values ≥ 1/4 increasing by 1: Σ ≤ 4 + 1/(5/4) + 1/(9/4) + ... ≤ 4 + Σ_{i≥1} 1/(i + 1/4) ≤ 4 + Σ_{i≥1} 1/i·... 1/(i+1/4) ≤ 1/i·(4i/(4i+1)) ≤ 1/i·1 for i ≥ 1 hmm 1/(i+1/4) = 4/(4i+1) ≤ 4/(4i) = 1/i: so Σ_positive ≤ 4 + Σ_{i=1}^{m} 1/i = 4 + H_m. Same negative side. Total: 4 + 2(4 + H_m) = 12 + 2H_m ≤ 12 + 2(1 + log m) = 14 + 2 log m. So Σ ≤ 14 + 2 log m — uniform in the phase! Because the AP steps by exactly 1 and each side's smallest positive value is ≥ 1/4 (or the term is bounded by 4 via the dist condition).
Wait — careful: the sides' smallest values: positive side smallest could be ∈ (0, 1/4) — then its term is ≤ 1/(1/4) = 4 via the dist condition ✓ (that's the "at most one small j" — counted in the first 4). Hmm — but I need |re w + j| < 1/4 ⟹ ‖w+j‖ ≥ 1/4 — NO: the dist condition gives ‖w+j‖ ≥ 1/4 ALWAYS (every j) ✓ so term_j ≤ 4 always; and for |re w + j| ≥ 1/4 the term ≤ 1/|re w + j| ✓. So: at most ONE j with |re w + j| < 1/4 (spacing 1): term ≤ 4; the positive side (re w + j ≥ 1/4): terms 1/(re w+j) with values 1-separated ≥ 1/4: ≤ 4 + H_m (as computed: first term ≤ 4, rest ≤ 1/i); negative side same. Total ≤ 4 + 2(4 + H_m) = 12 + 2H_m ✓. In Lean: this is a finite-sum estimate over range m — decompose range m by the sign of re w + j and the small-j case... The Lean encoding: rather than the geometric case split, use: Σ_{j<m} f(j) with f(j) = 1/max(|re w+j|, 1/4) — hmm the max form is awkward. Alternative encoding: term_j ≤ g(j) where g(j) := if |re w + j| < 1/4 then 4 else 1/|re w + j|... The cleanest Lean proof of the sum bound might go via: map j ↦ re w + j and bound by comparison with the harmonic sum via a rearrangement... Actually maybe simpler: bound each term by the BIN index: let i_j := ⌊|re w + j|⌋ (for |re w+j| ≥ 1): then term ≤ 1/i_j... the bin map is at-most-2-to-1 (1-separated: |re w + j| ∈ [i, i+1) for at most 2 j's? an AP with diff 1: the values in [i, i+1): at most 2 (could be 1 or 2 depending on phase) — hmm exactly: j ↦ re w + j mod 1 is fixed; the values in bin [i, i+1): exactly one per unit interval of the AP but the ABSOLUTE value folds: bins [i, i+1) and [−i−1, −i) both map to i: at most 2 total ✓. So Σ_j term_j ≤ (j with |re w+j| < 1: ≤ 2 j's, each ≤ 4) + Σ_{i=1}^{m} 2·(1/i) = 8 + 2H_m ✓ cleaner counting: at most 2 j's with |re w+j| < 1 (AP spacing 1 ⟹ at most 2 in (−1, 1) — hmm (−1,1) has length 2, an AP with diff 1 has at most ⌈2/1⌉ = 2 points ✓); for |re w+j| ≥ 1: term ≤ 1/|re w+j| ≤ 1/⌊|re w+j|⌋ and the floor-map at most 2-to-1 onto {1, 2, ...}: Σ ≤ Σ_i 2/i.
In Lean this counting argument needs: the floor-map injectivity bound — Finset.card_le_card_of_injOn-style with fibers ≤ 2... This is getting heavy for what should be a simple estimate.
ALTERNATIVE for (C) — skip the log-tightness: do we actually need O(log m)? The sum Σ_{j<m} 1/‖w+j‖ with 1-separated real parts and ‖w+j‖ ≥ 1/4: the CRUDE bound Σ ≤ 4m — then ψ(w) ≤ C + 4m + ... with m ≈ ‖w‖: ‖ψ(w)‖ ≤ C‖w‖ — too big for o(R)!! We need o(R) for F: F's ΓR-piece on the circle contributes |ψ(s/2)| ≍ ... if the bound is O(‖w‖) = O(R) then |F| = O(R) on circles — and (F(z)−F(0))/z bounded → F linear → c = 0 needs o(R)!! O(R) gives F(z) = F(0) + cz and then the second step: |F(R_k)| ≤ C·R_k is CONSISTENT with c ≠ 0 — the argument FAILS to force c = 0. So O(log m) (or anything o(m)) is ESSENTIAL. The 1-separated log bound is the heart of it. OK — no escape from the counting. Fine.
Lean encoding of (C), cleanest I can see: induction-free via comparison with a telescope? Note: for the AP x_j = a + j (a = re w): Σ_{j=0}^{m-1} 1/max(|a+j|, 1/4)... hmm — actually use the V-split: let j₀ := ⌈−a⌉₊ (first j with a + j ≥ 0): split range m at j₀ (Finset.range_eq_Ico, sum over Ico 0 j₀ and Ico j₀ m):
- right side Ico j₀ m: x_j = a + j ≥ 0 increasing: 1/max(x_j, 1/4): the first term (j = j₀): x_{j₀} ∈ [0, 1): term ≤ 4; for j ≥ j₀+1: x_j ≥ 1·... x_j = a + j ≥ a + j₀ + 1 ≥ 1? hmm a + j₀ ∈ [0,1) ⟹ a + j ∈ [j−j₀, j−j₀+1): 1/x_j ≤ 1/(j−j₀) for j > j₀ (if a + j₀ ≥ 0: x_j ≥ j − j₀ ✓): Σ_{j=j₀+1}^{m−1} 1/x_j ≤ Σ_{i=1}^{m} 1/i = H_m ✓; plus the j₀ term ≤ 4. So right side ≤ 4 + H_m ✓ CLEAN.
- left side Ico 0 j₀: x_j = a + j < 0 decreasing in j: |x_j| = −a − j: at j = j₀−1: |x| ∈ (0, 1]: term ≤ 4; j ≤ j₀−2: |x_j| = −a−j ≥ j₀ − 1 − j·... |x_j| ≥ (j₀−1) − j + (−(a + j₀−1))·... let me redo: |x_{j₀−1}| = −(a + j₀ − 1) = 1 − (a + j₀) ∈ (0, 1] ✓ term ≤ 4; for j ≤ j₀−2: |x_j| = |x_{j₀−1}| + (j₀−1−j) ≥ (j₀−1−j)·... |x_j| = −a−j ≥ −a − (j₀−2) + (j₀−2−j) = |x_{j₀−2}| + (j₀−2−j)... — the values |x_j| for j = j₀−2, j₀−3, ..., 0: |x_{j₀−2}|, |x_{j₀−2}|+1, ...: |x_{j₀−2}| = 2 − (a+j₀) ∈ (1, 2]: hmm ≥ 1: so |x_j| ≥ (j₀−1−j) + (1 − (a+j₀))·... let me just: |x_j| = −(a+j) = −(a+j₀) + (j₀−j) ≥ 0 + (j₀−j) − 1 + ... since a+j₀ < 1: −(a+j₀) > −1: |x_j| > j₀ − j − 1: for j ≤ j₀ − 2: j₀ − j − 1 ≥ 1 > 0: so 1/|x_j| ≤ 1/(j₀−j−1): Σ_{j=0}^{j₀−2} ≤ Σ_{i=1}^{j₀−1} 1/i ≤ H_m ✓ (i = j₀−j−1 reindex). So left side ≤ 4 + H_m ✓.
Total: Σ ≤ 8 + 2H_m ≤ 8 + 2(1 + log m) = 10 + 2 log m. And the reindexing/1/x bounds in Lean: the V-split sum decomposition with the two one-sided estimates — each side is a monotone comparison ~40 lines. Hmm. This is the honest price.
For (B)'s ingredients: the harmonic bound H_m ≤ 1 + log m: Mathlib — let me check for `harmonic_le_log` or similar. There's `Real.harmonic_le_log`? or in Mathlib/Analysis/SumOverInterval... I'll grep at build. If missing: prove via Antitone.sum_le_integral with ∫1/x = log.
OK — the build should be done. Let me check it, commit 5e-i, then start 5e-ii with piece (C) as the first build. Actually — 5e-ii is 0.25–0.5 session and this session already has 5e-i. Let me land 5e-i cleanly (build+audit+commit), then start 5e-ii and see how far it gets. Per the pacing rule, if 5e-ii runs long, commit at a clean boundary.
While the build runs — the 5e-ii analysis shows the reciprocal-sum estimate is the heart of the near-axis bound (O(log m) is essential, O(m) would fail the o(R) squeeze). Checking the build.
tool: Bash
input
{
"command": "tail -4 \"C:\\Users\\lucky\\AppData\\Local\\Temp\\nguyen\\538d422e-9e27-42ba-92b1-de9965bbd1b7\\tasks\\bxf4vkbll.output\" 2>/dev/null || echo \"still running\"",
"description": "Check build progress"
}
raw content_json (database row)
[{"type":"thinking","thinking":"While the build runs, let me start planning 5e-ii (the near-axis digamma bound). From D-068 §1 (C2):\n\n**Target**: ‖ψ(w)‖ ≤ C·log(2+‖w‖) for w with dist(w, −ℕ) ≥ 1/4 — plus the right-half mild case.\n\nWait — actually, let me reconsider the exact statement needed for 5e-v. On the circle's near-axis left part: w = s/2 with re w ∈ [−R/2 − ..., ...] and dist(w, −ℕ) ≥ 1/8. The bound needed: ‖ψ(w)‖ ≤ C·log(2+‖w‖).\n\nProof plan (from D-068):\n1. m := ⌈−re w⌉₊ + 2 (so re(w + m) ∈ [1, 3]-ish: re w + m ≥ −re w + ... wait: re(w + m) = re w + m where m ≥ −re w + 1 ⟹ re(w+m) ≥ 1; and re(w+m) ≤ re w + (−re w + 2) + ... = 2+ hmm: m = ⌈−re w⌉₊ + 2 ≤ (−re w + 1) + 2 = −re w + 3: re(w+m) ≤ 3; and ≥ re w + (−re w) + 2 = 2 — wait ⌈−re w⌉₊ ≥ −re w: re(w+m) ≥ 2. Hmm: m = ⌈−re w⌉₊ + 2 ≥ −re w + 2 ⟹ re(w+m) ≥ 2; ≤ −re w + 1 + 2 + re w = 3 (Nat.ceil_lt_add_one: ⌈x⌉₊ < x+1 needs 0 ≤ x — for −re w possibly negative: if re w ≥ 0 then ⌈−re w⌉₊ could be 0 — the hypothesis dist(w,−ℕ) ≥ 1/4 with re w ≥ 0: then w is already in the right half-plane — the recurrence isn't needed... Let me just define m := ⌈max 0 (−re w)⌉₊ + 2? For re w ≥ 0: m = 2: re(w+2) ≥ 2 ✓ fine — the recurrence with 2 steps always works. Actually simpler: m := ⌈|re w|⌉₊ + 2 (same as 5d's n) — re(w+m) = re w + m ≥ re w + |re w| + 2 ≥ 2 ✓ and ≤ re w + |re w| + 3 ≤ 3 + 2|re w| — hmm for re w very positive the shift is long but harmless (the sum bound still works). Wait but for re w > 0 the poles being avoided are at 0, −1, ... which are all to the LEFT — the shifted point w+m lands at re ∈ [re w + |re w| + 2, ...] fine.\n Actually — for the bound ‖ψ(w)‖ ≤ C log(2+‖w‖), the case re w ≥ 1 is directly handled by... hmm — no! digamma_stirling needs |im| ≥ 1/2 and compactness needs re ∈ [1,2] — for re w ≥ 2 with |im| < 1/2 we need the series-split mild case anyway. So the unified statement over all w with dist(w, −ℕ) ≥ 1/4:\n \n ψ(w) = ψ(w+m) − Σ_{j=0}^{m−1} (w+j)⁻¹ with m = ⌈|re w|⌉₊ + 2:\n (a) the sum: Σ_{j<m} ‖w+j‖⁻¹ ≤ C·log(m+1): the real parts re w + j for j = 0..m−1 are 1-separated reals; ‖w+j‖ ≥ max(|re w + j|, |im w|)... For the sum bound: partition the j's by the real value: |re w + j| takes values in { |re w|, |re w + 1|, ... } — 1-separated BUT possibly one/two values near 0 — there ‖w+j‖ ≥ dist(w, −ℕ)?? NO — ‖w+j‖ ≥ ... hmm: if |re w + j| < 1/4 then w + j is within 1/4 of the imaginary axis — NOT of −ℕ. The distance condition is dist(w, {0,−1,−2,...}) ≥ 1/4 — i.e., |w − (−l)| = |w + l| ≥ 1/4 for all l ∈ ℕ. So ‖w+j‖ ≥ 1/4 for all j ✓ EXACTLY the condition. And for j with |re w + j| ≥ i (integer i ≥ 1): ‖w+j‖ ≥ |re w + j| — the number of j with |re w + j| ∈ [i, i+1) is ≤ 2 (1-separated). So Σ_j 1/‖w+j‖ ≤ Σ_{i≥1} 2/i + 2·(1/(1/4))·... let me formalize: let d_j := |re(w + j)|: the d_j are 1-separated (d_{j+1} = d_j ± 1 — monotone in j since re w + j increases with j: d_j = |re w + j| is V-shaped). The clean bound: for j with re w + j ≥ 0: those j ≥ j₀ := ⌈−re w⌉₊: 1/‖w+j‖ ≤ 1/max(1/4, re w + j) with re w + j taking values ≥ ... ugh. The V-shape: re w + j crosses 0 at most once; the values |re w + j| ≥ 1/4 everywhere except... no — |re(w+j)| can be < 1/4 (when re w + j ≈ 0) — but then ‖w+j‖ ≥ |im w| — hmm and if im w ≈ 0 too then w + j ≈ 0 ∈ −ℕ violating dist ≥ 1/4 ⟹ in that case ‖w+j‖ ≥ 1/4 via the dist condition ✓. So: ‖w+j‖ ≥ max(|re(w+j)|, 1/4) for all j (the second from: if |re(w+j)| < 1/4 then... wait NO — the dist condition says |w + j| ≥ 1/4 only when −j ∈ −ℕ i.e. always (j ∈ ℕ) ✓ — dist(w, −ℕ) ≥ 1/4 means exactly ∀ j : ℕ, ‖w + j‖ ≥ 1/4? dist(w, {0,−1,−2,...}) = inf_l ‖w − (−l)‖ = inf_l ‖w + l‖ ≥ 1/4 ⟹ ∀ l, ‖w+l‖ ≥ 1/4 ✓ YES.) So ‖w+j‖ ≥ max(|re(w+j)|, 1/4) and the real parts are 1-separated: Σ_{j=0}^{m−1} 1/‖w+j‖ ≤ Σ_j 1/max(|re(w+j)|, 1/4): the values |re(w+j)| are 1-separated nonneg reals with... the count of j with |re(w+j)| ≤ i is ≤ 2i+2 (j's with re(w+j) ∈ [−i, i]: an interval of length 2i with 1-separated points ⟹ ≤ 2i+1 points). So Σ_j 1/max(|re(w+j)|,1/4) ≤ Σ_{i=0}^{m} (count in (i, i+1])·(1/max(i/2...)) — the standard dyadic: ≤ 2·(4) + Σ_{i≥1} 2·(1/i)·2... = 8 + 4·H_m ≤ 8 + 4·log(m+1)·... H_m ≤ 1 + log m. So ≤ C + 4 log m. Fine — a clean real estimate; in Lean, this needs the bin-packing bound: Σ_{j ∈ range m} 1/max(|re(w+j)|, 1/4) ≤ 8 + 4·(1 + log m). The Lean proof of the separated-sum bound is itself a mini-project (dyadic decomposition of a finite sum, bin counting via injectivity into bins...). Hmm — this is the fiddly part. Alternative simpler-to-Lean bound: pair the terms: j and j' = j+1: 1/‖w+j‖ + 1/‖w+j+1‖ — hmm.\n \n ALTERNATIVE cleaner approach: Σ_{j=0}^{m-1} (w+j)⁻¹ vs the INTEGRAL ∫₀^m (w+x)⁻¹ dx — the EM comparison again but now the path w+[0,m] can hit 0... if re(w+j) crosses 0 the FTC integral ∫ (w+x)⁻¹ dx diverges at the pole. BUT — the Cauchy PV/value: for w with im w ≠ 0 the path avoids 0 (im(w+x) = im w ≠ 0 ✓ slit plane) — THAT was the 5d case (|im w| ≥ 2). For im w ≠ 0 but small: the 5d EM argument works VERBATIM with |im w| ≥ δ: the arctan bound ∫₀^m dx/((x+a)²+c²) ≤ π/c with c = |im w| SMALL — blows up as 1/c. So EM gives the remainder ≤ π/(2|im w|) — NOT uniform in the near-axis case. So EM is out for |im| small; the recurrence+separated-sum is the right route, and the separated-sum estimate is genuinely needed. \n \n For the Lean estimate, the cleanest formulation: for j ∈ range m, the points x_j := re w + j are 1-separated (x_{j+1} = x_j + 1 exactly!) — so the sum Σ 1/max(|x_j|, 1/4) is bounded by counting: for each j, EITHER |x_j| ≥ 1/4 OR (the unique small one)... Actually the cleanest: the x_j are exactly x_0 + j — an arithmetic progression with difference 1. The sum Σ_{j<m} 1/max(|x_0+j|, 1/4): the terms where x_0 + j ∈ [−1/4, 1/4]: at most ONE j (the spacing is 1 > 1/2 = the interval length... could be 1 j). For that j: 1/(1/4) = 4. For the others: 1/|x_0+j| with |x_0+j| ≥ 1/4 and 1-separated: Σ ≤ Σ_{j: x_0+j < −1/4} 1/|x_0+j| + Σ_{j: x_0+j > 1/4} 1/|x_0+j|: each side is a sum of 1/(decreasing/increasing 1-separated values ≥ 1/4): ≤ 1/(1/4)·... the positive side: values x ≥ 1/4 spaced by 1: Σ ≤ 4 + 1/(5/4) + 1/(9/4) + ... hmm depends on the phase. Uniform bound: for any 1-separated increasing sequence y_1 < y_2 < ... with y_1 ≥ 1/4: Σ 1/y_i ≤ 4 + Σ_{i≥2} 1/(y_1 + (i−1)) ≤ 4 + Σ_{i≥2} 1/(i−1 + 1/4) ≤ 4 + Σ_{l≥1} 1/l·... Σ_{l≥1} 1/(l − 3/4) ≤ 4/1 + Σ_{l≥2} 1/(l−1) hmm = 4 + H_{m} ≤ 4 + 1 + log m... Let me just bound: Σ_{i=1}^{m} 1/y_i with y_i ≥ i − 3/4 ≥ i/4 (i ≥ 1): 1/y_i ≤ 4/i: Σ ≤ 4·H_m ≤ 4(1 + log m). And the negative side same. Total ≤ 4 (the small one) + 2·4·(1 + log m) = 12 + 8 log m. With m ≤ |re w| + 3 ≤ ‖w‖ + 3: log m ≤ log(‖w‖+3) ≤ log(2+‖w‖) + 2·... So Σ ≤ C₁ + C₂ log(2+‖w‖). In Lean: this needs: y_i ≥ i − 3/4 ⟹ 1/y_i ≤ 4/i for i ≥ 1 (i − 3/4 ≥ i/4 ⟺ 3i/4 ≥ 3/4 ⟺ i ≥ 1 ✓); Σ_{i=1}^{m} 1/i ≤ 1 + log m (harmonic-log: Mathlib `Real.sum_one_div_le_log`? there IS `Real.sum_one_div_le_log (n : ℕ) : ∑ k ∈ range n, (1:ℝ)/(k+1) ≤ Real.log (n+1) + 1`? or harmonic_le_log — Mathlib has harmonic number bounds: `Real.harmonic_le_log`? Let me check at build: there's `sum_one_div_le_log` in Mathlib.Analysis.SumOverInterval or ...Nat: I recall `Real.sum_one_div_le_log : (∑ k in Finset.range n, (1:ℝ)/(k+1)) ≤ Real.log n + 1`? something like it exists (harmonic ≤ log n + 1). \n \n Hmm OK — this sub-build has real content. Estimated 0.25–0.5 session in D-068. The pieces:\n (a) `digamma_add_natCast` — HAVE IT (LiReflect §5).\n (b) The separated reciprocal sum bound (the mini-project).\n (c) ψ(w+m) bound: cases on |im w| vs 1/2: |im| ≥ 1/2: digamma_stirling (re(w+m) ≥ 2 > 0, |im(w+m)| = |im w| ≥ 1/2 ✓): ‖ψ(v)‖ ≤ ‖log v‖ + 3/(im v)² + 1/(2‖v‖) ≤ log‖v‖ + π + 3/(1/4) + ... ≤ C log(2+‖v‖) fine. |im| < 1/2: v = w+m has re ∈ [2, 3], |im| < 1/2: compact set — ψ continuous on {re ∈ [2,3], |im| ≤ 1/2}: bounded by a constant D (IsCompact.exists_forall_ge? — the exact boundedness lemma: `IsCompact.exists_forall_ge (hK : IsCompact K) (hf : ContinuousOn f K) : ∃ C, ∀ x ∈ K, ‖f x‖ ≤ C`? hmm — `IsCompact.exists_bound_of_continuousOn`? There's `IsCompact.exists_forall_ge` for real-valued: (hK : IsCompact s) (hf : ContinuousOn f s) : ∃ b, ∀ x ∈ s, f x ≤ b ✓ — apply to f := fun w => ‖ψ w‖... need ψ continuousOn on the compact: ψ = logDeriv Gamma: continuous off the poles: the compact {re ∈ [2,3]} ∩ {|im| ≤ 1/2} avoids poles (re ≥ 2 > 0): differentiableAt_Gamma + logDeriv continuity: `ContinuousOn (digamma) K` via (differentiableAt_Gamma ...).continuousAt... ψ = deriv Gamma / Gamma: ContinuousOn.div (deriv continuous — Gamma is differentiable everywhere-off-poles; its DERIVATIVE continuous — hmm deriv Gamma continuity: Gamma is analytic ⟹ deriv continuous on the open domain: `DifferentiableAt.continuousAt_deriv`? no — analyticity gives deriv analytic: AnalyticOn.deriv? `AnalyticOnNhd.deriv`? — there's `AnalyticOn.deriv`/`AnalyticOnNhd.deriv : AnalyticOnNhd f s → AnalyticOnNhd (deriv f) s`? I recall `AnalyticOn.deriv` exists. Then analytic ⟹ continuous. Then /Gamma (nonzero on K via Gamma_ne_zero — Γ(w) ≠ 0 for w not a nonpositive integer — `Complex.Gamma_ne_zero (hs : ∀ m : ℕ, w ≠ -m)`? from the logDeriv_Gammaℝ proof: `Complex.Gamma_ne_zero` used with `intro m h` pattern ✓). So ContinuousOn ψ K ✓.\n (d) the assembly: ‖ψ(w)‖ ≤ ‖ψ(w+m)‖ + Σ‖w+j‖⁻¹ ≤ [compact D or stirling C·log] + [C₁ + C₂ log m] ≤ C₃ log(2+‖w‖) for ‖w‖ ≥ 1/4 (‖w‖ ≥ dist ≥ 1/4 — hmm ‖w‖ ≥ 1/4 from dist(w,−ℕ) ≥ 1/4 with 0 ∈ −ℕ ✓). Fold constants to a clean C: ‖ψ(w)‖ ≤ C·Real.log (2 + ‖w‖) with C ~ 20 or whatever falls out.\n\n Hmm wait — for 5e-v's use, the exact form: on the circle part with w = s/2, ‖w‖ ≤ R/2 + 1: log(2+‖w‖) ≤ log(2R) ≤ 2 log R for R ≥ 10-ish. So ‖logDeriv ΓR(s)‖ ≤ (log π)/2 + ½‖ψ(s/2)‖ ≤ C log R. ✓.\n\n Also needed (D-068 C2 second part): the right-half mild case re w ≥ 2 (any |im| < 1/2): ψ(w) − log w = O(1) via the series split — do I need it separately? In the assembly above, the re(w+m) ∈ [2,3] landing works for ANY w (with m = ⌈|re w|⌉₊+2): for re w ≥ 2 already: m = ⌈re w⌉₊ + 2: the sum Σ_{j<m} 1/‖w+j‖: the real parts re w + j ≥ 2: 1-separated ⟹ Σ ≤ Σ 1/(2 + j) ≍ H_m = O(log m) = O(log(‖w‖+3)) ✓ same bound. And ψ(w+m) with re(w+m) ∈ [re w + re w + 2, ...] — for re w ≥ 2: re(w+m) ∈ [2re w + 2, 2re w + 3] — NOT in [2,3]!! The compactness landing zone breaks for re w > 3/2. Hmm. So for re w large the shift should be SMALL: m = 2 suffices if re w ≥ 2 (land in [4, 5]) — but then ψ(w+m) with re ∈ [4,5]: not compact either. The RIGHT approach for re w ≥ 2: no shift at all needed conceptually — ψ(w) ≈ log w — but digamma_stirling needs |im| ≥ 1/2. For re w ≥ 2, |im| < 1/2: use the Weierstrass series directly (D-068's note): ψ(w) + γ + 1/w = Σ'_n w/((n+1)(w+n+1)): ‖Σ‖ ≤ ‖w‖·Σ 1/((n+1)‖w+n+1‖): with re w ≥ 2: ‖w+n+1‖ ≥ re w + n + 1 ≥ n + 3: so term ≤ ‖w‖/((n+1)(n+3))... Σ_{n} ‖w‖/((n+1)(n+3)): ≤ ‖w‖·Σ 1/(n+1)²·... = ‖w‖·π²/6·1/... wait that's O(‖w‖) — no: 1/((n+1)(n+3)) ≤ 1/(n+1)² sums to O(1) ⟹ ‖Σ‖ ≤ C‖w‖ — TOO BIG again. The split: Σ_{n+1 ≤ A} + Σ_{n+1 > A} with A = re w: term ≤ ‖w‖/((n+1)(re w + n + 1)): for n+1 ≤ A: ≤ ‖w‖/((n+1)·A) ≍ (1+1/A)... ≤ 2/(n+1) (‖w‖/A ≤ √(A²+1/4)/A ≤ 1.01): sum ≍ 2 log A; for n+1 > A: ≤ ‖w‖/(n+1)²: sum ≤ ‖w‖/A ≍ 1: total O(log A) ✓. So the right-half mild case: ψ(w) = log w + O(1) via the series split at A = re w — needs: the digamma_series (Zeta23 ✓ exists), the split-sum estimate Σ_n 1/((n+1)(A+n+1)) ≤ C(1 + log A)/A — another mini-estimate (two-part: n+1 ≤ ⌊A⌋: Σ 1/((n+1)A) = H/A; n+1 > A: Σ 1/(n+1)² tail ≤ 1/A·C — the tail Σ_{n>N} 1/n² ≤ 1/N: Mathlib: `Real.tendsto_sum_...`? there are lemmas for Σ 1/n² tail? `summable_one_div_nat_pow`... the tail bound might need a custom estimate: Σ_{n=N+1}^{∞} 1/n² ≤ ∫_N^∞ dx/x² = 1/N: via the EM-ish integral comparison or `Summable` bound... Alternatively bound the whole sum by comparison with the log: Σ_n 1/((n+1)(A+n+1)) — telescope: 1/((n+1)(A+n+1)) = (1/A)·(1/(n+1) − 1/(A+n+1))... partial fractions! Σ_{n=0}^{∞} (1/A)(1/(n+1) − 1/(n+1+A)) = (1/A)·Σ_{n=0}∞ [1/(n+1) − 1/(n+1+A)]: the tail-telescope: for A INTEGER: Σ_{n=0}^{N} (1/(n+1) − 1/(n+1+A)) = Σ_{n=1}^{A} 1/n − ... = H_A − (H_{N+A} − H_N)·... as N → ∞: H_{N+A} − H_N → 0·... hmm H_{N+A}−H_N ≈ A/N → 0 ✓ so the sum = H_A ≍ log A. For real A: similar with floors. This gives Σ = (1/A)(H_{⌈A⌉} + O(1)) = O(log A / A) ✓ — elementary but ANOTHER telescope. Ugh — these mini-estimates pile up.\n\n Let me reconsider: maybe a slicker unified bound for the re ≥ 2 mild case: ψ(w) for re w ≥ 2, |im w| ≤ 1/2: shift DOWN?? no. Use the recurrence to go LEFT by 0 (already right) — hmm. OR use the integral representation? OR — use digamma_stirling at w' = w with |im w| < 1/2 by going to w'' = w + i(1/2)?? no — that's a different function value.\n\n ALTERNATIVE: real-analytic bound: for re w ≥ 2, |im w| ≤ 1/2: ‖ψ(w) − log w‖ ≤ C via: ψ(w) − log w = ∫-representation? There's the Binet-type formula... Actually simplest Lean route: use digamma_stirling at w with |im w| ≥ 1/2 AND cover |im w| < 1/2 by CONTINUITY on... re w ∈ [2, ∞) is not compact. Hmm.\n\n OR: bound ‖ψ(w)‖ directly by the series with the SAME 1-separated-bin trick: ψ(w) + γ + 1/w = Σ_n w/((n+1)(w+n+1)): |term_n| = ‖w‖/((n+1)‖w+n+1‖): with re w ≥ 2: ‖w+n+1‖ ≥ n+3 (re): |term_n| ≤ ‖w‖/((n+1)(n+3)): Σ: pair consecutive: 1/((n+1)(n+3)) = (1/2)(1/(n+1) − 1/(n+3)): telescope Σ_{n=0}^{N} = (1/2)(1 + 1/2 − 1/(N+2) − 1/(N+3)) → 3/4: so Σ_all |term| ≤ ‖w‖·3/4 = O(‖w‖)?? — NO this is the crude bound again (O(‖w‖)). The correct bound needs the n+1 ≤ A split with the 1/A factor... \n\n You know what — for 5e-v's ACTUAL need, let me look at what's needed precisely: logDeriv ΓR(1−s) at s on the circle with re s ≈ −R (left near-axis): 1−s has re ≈ 1+R, |im(1−s)| = |t| < 10: w' = (1−s)/2: re w' ≈ R/2 ≥ 2, |im w'| < 5. So I need ‖ψ(w')‖ = O(log R) for re w' ≥ 2, |im w'| ≤ 5. The |im| ∈ [1/2, 5] sub-case: digamma_stirling ✓. The |im| < 1/2 sub-case: genuinely needs the mild bound. Hmm OK.\n\n SIMPLEST correct route for the mild case — the EM comparison AGAIN but now the path is SAFE (re w ≥ 2, the path w + [0, m] never nears 0!): use the 5d EM machinery with m = 1 (shift by ONE only): ψ(w) = ψ(w+1) − 1/w and bound ψ(w+1)... that doesn't help (still |im| < 1/2). \n\n OK here's the cleanest: the EM form of the digamma-log comparison with the full telescope VALID for re w > 0: ψ(w) − log w: use the digamma_series (Weierstrass): ψ(w) = −γ − 1/w + Σ'_n (1/(n+1) − 1/(w+n+1)) and compare Σ'_n (1/(n+1) − 1/(w+n+1)) with log w via... the series Σ [1/(n+1) − 1/(w+n+1)] = Σ w/((n+1)(w+n+1)) — and its difference from log(w+N)-ish... \n\n Hmm — actually, hold on. Let me reconsider whether the mild case is needed AT ALL. In 5e-v, the points on the circle with |t| < 10: I could instead use the 5c/5d R-bounds which need |t| ≥ 10, and handle |t| < 10 by COMPACTNESS of ζ′/ζ? NO — the circle at |t| < 10 has re s ≈ ±R → ∞: not compact. The right point re s ≈ +R: Dirichlet series ✓ O(1). The left point re s ≈ −R: FE-reflect: ζ′/ζ(s) = −ζ′/ζ(1−s) − [logDeriv ΓR(1−s) + logDeriv ΓR(s)]:\n - logDeriv ΓR(1−s): re(1−s) ≈ 1+R: RvM.logDeriv_Gammaℝ (re > 0) = −(logπ)/2 + ½ψ((1−s)/2): ψ(w') with re w' ≈ R/2, |im w'| = |t|/2 < 5: THE MILD CASE — needed.\n - logDeriv ΓR(s): re s ≈ −R: via 5d's logDeriv_Gammaℝ_shift... only +4 — insufficient for re s/2 ≈ −R/2. Need: logDeriv ΓR(s) = −(logπ)/2 + ½ψ(s/2) for im s ≠ 0 — wait 5d proved logDeriv_Gammaℝ_shift : logDeriv ΓR s = logDeriv ΓR (s+4) − 2(s+1)/(s(s+2)) — for re s ≈ −R: s+4 still has re ≈ −R+4 < 0 for R > 4! The +4 shift was sized for re s ∈ [−5/2, 1/2]. For re s ≈ −R: need the GENERAL shift by n ≈ R/2: logDeriv ΓR s = logDeriv ΓR (s + 2m) − Σ_{j<m} ... — the GENERAL recurrence for logDeriv ΓR: ψ(s/2) = ψ(s/2 + m) − Σ_{j<m} 1/(s/2 + j) — this is exactly the near-axis digamma bound's recurrence applied to logDeriv ΓR directly. So for the LEFT point: logDeriv ΓR(s) = −(logπ)/2 + ½ψ(s/2) with ψ(s/2) = ψ(s/2+m) − Σ 1/(s/2+j) — the C2 bound. So BOTH the mild right case (for ΓR(1−s)) and the C2 left case (for ΓR(s)) are needed. Confirmed D-068's scoping.\n\n For the mild right case — actually there IS a slick route I missed: for re w ≥ 2, |im w| ≤ 5: ψ(w) = ψ(w + i·(1 − im w))?? no. Hmm — what about using digamma_stirling at w + i·c for a vertical shift? ψ(w + i) − ψ(w) = 1/w... no that's the recurrence for +1 not +i. No vertical recurrence exists.\n\n What about the mean-value route: ψ(w) − ψ(w + i/2) = ∫... no.\n\n The series-split it is. Actually — wait, one more idea: ψ(w) − log(w) for re w ≥ 2: via Binet's formula ψ(w) = log w − 1/(2w) − ∫₀^∞ ... (Binet) — not in Mathlib surely.\n\n OR — the cleanest: shift LEFT to the compact zone is impossible, shift RIGHT changes nothing (|im| fixed)... \n\n OK let me just embrace the series route for the mild case:\n `norm_digamma_sub_log_le_of_two_le_re {w : ℂ} (hw : 2 ≤ w.re) : ‖digamma w − log w‖ ≤ C`:\n via digamma_series (needs w ∈ integerComplement: re w ≥ 2 ⟹ w not a nonpositive integer ✓):\n ψ(w) = −γ − 1/w + Σ'_n a_n with a_n = 1/(n+1) − 1/(w+n+1).\n Σ'_n a_n vs log w: Σ_{n=0}^{∞} a_n = lim_{N} Σ_{n<N} [1/(n+1) − 1/(w+n+1)] — partial-fraction telescope vs log: Σ_{n<N} 1/(n+1) = H_N ≈ log N + γ; Σ_{n<N} 1/(w+n+1) ≈ log(w+N) − log(w) + γ-ish... — this is EXACTLY the Euler product for Gamma! log Γ(w) = ... — circular. \n Direct bound: ‖Σ'_n a_n − log w‖ ≤ ... hmm — the statement I NEED is just ‖ψ(w)‖ ≤ C log(2+‖w‖) — i.e., ‖−γ − 1/w + Σ a_n‖ ≤ C log(2+‖w‖) for re w ≥ 2. From the series: Σ a_n = Σ w/((n+1)(w+n+1)): bound Σ |a_n| ≤ Σ ‖w‖/((n+1)(re w + n + 1)) (‖w+n+1‖ ≥ re w + n + 1 since re ≥ 2 > 0... ‖w+n+1‖ ≥ re(w+n+1) = re w + n + 1 ✓): \n Σ_n ‖w‖/((n+1)(re w + n + 1)) = ‖w‖·Σ_n 1/((n+1)(A+n+1)) with A := re w ≥ 2.\n Sub-claim: Σ_{n=0}^∞ 1/((n+1)(A+n+1)) ≤ (1 + log(A+1))/A for A ≥ 2.\n Proof of sub-claim: split at N := ⌈A⌉: \n head (n+1 ≤ N): 1/((n+1)(A+n+1)) ≤ 1/(A(n+1)): Σ_{n=0}^{N−1} ≤ H_N/A ≤ (1 + log N)/A·... H_N ≤ 1 + log N (harmonic bound) ≤ (1 + log(A+1))/1... so head ≤ (1 + log N)/A.\n tail (n+1 > N ⟹ n+1 ≥ N+1 > A): 1/((n+1)(A+n+1)) ≤ 1/(n+1)²: Σ_{n ≥ N} 1/(n+1)² ≤ 1/N·... the tail Σ_{n=N}∞ 1/(n+1)² ≤ 1/(N+1) + ∫... ≤ 2/N (integral comparison or the known tail): ≤ 2/A·... since N ≥ A: 1/N ≤ 1/A... hmm 2/N ≤ 2/A ✓.\n Total: (1 + log N)/A + 2/A with N = ⌈A⌉ ≤ A+1: log N ≤ log(A+1): ≤ (3 + log(A+1))/A.\n Then ‖Σ a_n‖ ≤ ‖w‖·(3 + log(A+1))/A with ‖w‖/A = ‖w‖/re w ≤ √(1 + (im/re)²) ≤ √(1 + 25/4) ≤ 3 for |im| ≤ 5, re ≥ 2. So ‖Σ a_n‖ ≤ 3(3 + log(A+1)) ≤ 9 + 3 log(‖w‖ + 1) ≤ C log(2+‖w‖) for ‖w‖ ≥ 2 ✓.\n Final: ‖ψ(w)‖ ≤ γ + ‖1/w‖ + ‖Σ a_n‖ ≤ 1 + 1/2 + C log(2+‖w‖) ≤ C' log(2+‖w‖) (for ‖w‖ ≥ 2: log(2+‖w‖) ≥ log 4 > 1: constants fold: γ + 1/2 + 9 ≤ C'·log 4...). Take C' = 20 say.\n \n The Lean ingredients: digamma_series (Zeta23 ✓), the harmonic bound H_N ≤ 1 + log N (Mathlib? check), the tail Σ 1/(n+1)² ≤ 2/(N+1)-ish (the integral comparison — Mathlib has `Real.sum_one_div_sq_le_...`? or the telescoped 1/(n(n+1)) = 1/n − 1/(n+1) comparison: 1/(n+1)² ≤ 1/(n(n+1)) = 1/n − 1/(n+1) ⟹ tail ≤ 1/N EXACTLY via telescoping!! `∑' 1/(n(n+1)) = 1` telescope — clean!): tail Σ_{n≥N} 1/(n+1)² ≤ Σ_{n≥N} 1/(n(n+1)) = Σ_{n≥N} [1/n − 1/(n+1)] = 1/N (telescoping series: `Summable` of 1/n−1/(n+1) with tsum = 1/N — via hasSum_of_tendsto: partial sums telescope to 1/N − 1/(M+1) → 1/N ✓). NICE — the tail bound is clean via the telescope (no integral comparison needed).\n And the partial sums/telescoping in Lean: tsum of (fun n => 1/n − 1/(n+1)) from N: = 1/N: `hasSum_iff`... there might be an existing lemma: `Real.tsum_one_div_sub...`? or build via Finset partial sum + tendsto. ~30 lines.\n\n And the harmonic bound H_N ≤ 1 + log N: Mathlib `Real.sum_one_div_le_log`? Hmm — I recall `Real.harmonic_le_log`? Not sure. Alternatives: H_N = Σ_{k=1}^{N} 1/k ≤ 1 + ∫₁^N dx/x = 1 + log N: the integral comparison `sum_le_integral_of_decreasing`? There IS `Antitone.sum_le_integral`? hmm or `sum_le_integral_of_monotone...`. Mathlib: `Monotone.sum_le_integral` / `Antitone.integral_le_sum`: for decreasing f: ∫₁^N f ≤ Σ_{k=1}^{N-1} f(k)... The form I need: Σ_{k=2}^{N} 1/k ≤ ∫₁^N dx/x = log N: `Antitone.sum_le_integral (h : Antitone f) : ∑ i ∈ Ioc a b, f i ≤ ∫ x in a..b+1?...` — the exact form: `Antitone.sum_le_integral {f : ℝ → ℝ} (hf : Antitone f) : ∑ i ∈ Finset.Ioc a b, f ↑i ≤ ∫ x in a..b, f x`? There are such lemmas in Mathlib.MeasureTheory/Integral or Analysis.SumIntegralComparisons: `Antitone.sum_le_integral : Antitone f → ∑ i ∈ Ioc a b, f (i+1) ≤ ∫ x in a..b, f x`? I'll check. The needed comparison: Σ_{k=2}^N 1/k ≤ ∫₁^N dx/x. Via Antitone.sum_le_integral on f = 1/x over [1, N]: Σ_{k ∈ Ioc 1 N}... the lemma form: ∑_{i=a+1}^{b} f(i) ≤ ∫_a^b f for decreasing f ≥ 0. ✓ exists surely.\n\nOK — the 5e-ii build has three pieces:\n(A) `norm_digamma_le_of_dist_nat_ge` (the near-axis LEFT-plane bound): dist(w, −ℕ) ≥ 1/4 ⟹ ‖ψ(w)‖ ≤ C·log(2+‖w‖) — via digamma_add_natCast (have) + the separated reciprocal sum bound + ψ(w+m) via StirlingVert (|im| ≥ 1/2) or compactness (|im| < 1/2, re(w+m) ∈ [2,3]).\n(B) `norm_digamma_le_of_two_le_re` (the mild right bound): re w ≥ 2 ⟹ ‖ψ(w)‖ ≤ C·log(2+‖w‖) (+O(1)) — via the Weierstrass series split + telescope tail + harmonic-log.\n(C) The separated reciprocal sum bound (shared): for the points w+j with 1-separated real parts and ‖w+j‖ ≥ δ: Σ_{j<m} ‖w+j‖⁻¹ ≤ C(1/δ + log m) — the bin-packing estimate.\n\nHmm — actually (C): with the V-shaped |re(w+j)|: the values |re(w+j)| for j = 0..m−1: since re(w+j) = re w + j is an AP with difference 1: the sum Σ 1/max(‖...‖) — let me simplify (C) using the AP structure directly: Σ_{j=0}^{m-1} 1/‖w+j‖ ≤ Σ_{j=0}^{m-1} 1/max(|re w + j|, 1/4): the sequence |re w + j|: decreases to the zero-crossing then increases. Split at j₀ = the crossing: two monotone sides. Each side: 1-separated values ≥ ... the smallest ≥ 0 possibly (if re w + j hits near 0) — but those j have ‖w+j‖ ≥ 1/4 (dist condition) ⟹ term ≤ 4: at most TWO such j (|re w + j| < 1/4 for at most one j since spacing 1; and the boundary ones with |re w+j| ∈ [1/4, 1/2)...) — hmm let me bound: term_j ≤ 1/max(|re w + j|, 1/4): the j's with |re w+j| < 1/4: ≤ 1 j: term ≤ 4. The rest: |re w + j| ≥ 1/4, 1-separated AP: on the positive side (re w + j ≥ 1/4): values ≥ 1/4 increasing by 1: Σ ≤ 4 + 1/(5/4) + 1/(9/4) + ... ≤ 4 + Σ_{i≥1} 1/(i + 1/4) ≤ 4 + Σ_{i≥1} 1/i·... 1/(i+1/4) ≤ 1/i·(4i/(4i+1)) ≤ 1/i·1 for i ≥ 1 hmm 1/(i+1/4) = 4/(4i+1) ≤ 4/(4i) = 1/i: so Σ_positive ≤ 4 + Σ_{i=1}^{m} 1/i = 4 + H_m. Same negative side. Total: 4 + 2(4 + H_m) = 12 + 2H_m ≤ 12 + 2(1 + log m) = 14 + 2 log m. So Σ ≤ 14 + 2 log m — uniform in the phase! Because the AP steps by exactly 1 and each side's smallest positive value is ≥ 1/4 (or the term is bounded by 4 via the dist condition). \n\n Wait — careful: the sides' smallest values: positive side smallest could be ∈ (0, 1/4) — then its term is ≤ 1/(1/4) = 4 via the dist condition ✓ (that's the \"at most one small j\" — counted in the first 4). Hmm — but I need |re w + j| < 1/4 ⟹ ‖w+j‖ ≥ 1/4 — NO: the dist condition gives ‖w+j‖ ≥ 1/4 ALWAYS (every j) ✓ so term_j ≤ 4 always; and for |re w + j| ≥ 1/4 the term ≤ 1/|re w + j| ✓. So: at most ONE j with |re w + j| < 1/4 (spacing 1): term ≤ 4; the positive side (re w + j ≥ 1/4): terms 1/(re w+j) with values 1-separated ≥ 1/4: ≤ 4 + H_m (as computed: first term ≤ 4, rest ≤ 1/i); negative side same. Total ≤ 4 + 2(4 + H_m) = 12 + 2H_m ✓. In Lean: this is a finite-sum estimate over range m — decompose range m by the sign of re w + j and the small-j case... The Lean encoding: rather than the geometric case split, use: Σ_{j<m} f(j) with f(j) = 1/max(|re w+j|, 1/4) — hmm the max form is awkward. Alternative encoding: term_j ≤ g(j) where g(j) := if |re w + j| < 1/4 then 4 else 1/|re w + j|... The cleanest Lean proof of the sum bound might go via: map j ↦ re w + j and bound by comparison with the harmonic sum via a rearrangement... Actually maybe simpler: bound each term by the BIN index: let i_j := ⌊|re w + j|⌋ (for |re w+j| ≥ 1): then term ≤ 1/i_j... the bin map is at-most-2-to-1 (1-separated: |re w + j| ∈ [i, i+1) for at most 2 j's? an AP with diff 1: the values in [i, i+1): at most 2 (could be 1 or 2 depending on phase) — hmm exactly: j ↦ re w + j mod 1 is fixed; the values in bin [i, i+1): exactly one per unit interval of the AP but the ABSOLUTE value folds: bins [i, i+1) and [−i−1, −i) both map to i: at most 2 total ✓. So Σ_j term_j ≤ (j with |re w+j| < 1: ≤ 2 j's, each ≤ 4) + Σ_{i=1}^{m} 2·(1/i) = 8 + 2H_m ✓ cleaner counting: at most 2 j's with |re w+j| < 1 (AP spacing 1 ⟹ at most 2 in (−1, 1) — hmm (−1,1) has length 2, an AP with diff 1 has at most ⌈2/1⌉ = 2 points ✓); for |re w+j| ≥ 1: term ≤ 1/|re w+j| ≤ 1/⌊|re w+j|⌋ and the floor-map at most 2-to-1 onto {1, 2, ...}: Σ ≤ Σ_i 2/i.\n In Lean this counting argument needs: the floor-map injectivity bound — Finset.card_le_card_of_injOn-style with fibers ≤ 2... This is getting heavy for what should be a simple estimate. \n\n ALTERNATIVE for (C) — skip the log-tightness: do we actually need O(log m)? The sum Σ_{j<m} 1/‖w+j‖ with 1-separated real parts and ‖w+j‖ ≥ 1/4: the CRUDE bound Σ ≤ 4m — then ψ(w) ≤ C + 4m + ... with m ≈ ‖w‖: ‖ψ(w)‖ ≤ C‖w‖ — too big for o(R)!! We need o(R) for F: F's ΓR-piece on the circle contributes |ψ(s/2)| ≍ ... if the bound is O(‖w‖) = O(R) then |F| = O(R) on circles — and (F(z)−F(0))/z bounded → F linear → c = 0 needs o(R)!! O(R) gives F(z) = F(0) + cz and then the second step: |F(R_k)| ≤ C·R_k is CONSISTENT with c ≠ 0 — the argument FAILS to force c = 0. So O(log m) (or anything o(m)) is ESSENTIAL. The 1-separated log bound is the heart of it. OK — no escape from the counting. Fine.\n\n Lean encoding of (C), cleanest I can see: induction-free via comparison with a telescope? Note: for the AP x_j = a + j (a = re w): Σ_{j=0}^{m-1} 1/max(|a+j|, 1/4)... hmm — actually use the V-split: let j₀ := ⌈−a⌉₊ (first j with a + j ≥ 0): split range m at j₀ (Finset.range_eq_Ico, sum over Ico 0 j₀ and Ico j₀ m): \n - right side Ico j₀ m: x_j = a + j ≥ 0 increasing: 1/max(x_j, 1/4): the first term (j = j₀): x_{j₀} ∈ [0, 1): term ≤ 4; for j ≥ j₀+1: x_j ≥ 1·... x_j = a + j ≥ a + j₀ + 1 ≥ 1? hmm a + j₀ ∈ [0,1) ⟹ a + j ∈ [j−j₀, j−j₀+1): 1/x_j ≤ 1/(j−j₀) for j > j₀ (if a + j₀ ≥ 0: x_j ≥ j − j₀ ✓): Σ_{j=j₀+1}^{m−1} 1/x_j ≤ Σ_{i=1}^{m} 1/i = H_m ✓; plus the j₀ term ≤ 4. So right side ≤ 4 + H_m ✓ CLEAN.\n - left side Ico 0 j₀: x_j = a + j < 0 decreasing in j: |x_j| = −a − j: at j = j₀−1: |x| ∈ (0, 1]: term ≤ 4; j ≤ j₀−2: |x_j| = −a−j ≥ j₀ − 1 − j·... |x_j| ≥ (j₀−1) − j + (−(a + j₀−1))·... let me redo: |x_{j₀−1}| = −(a + j₀ − 1) = 1 − (a + j₀) ∈ (0, 1] ✓ term ≤ 4; for j ≤ j₀−2: |x_j| = |x_{j₀−1}| + (j₀−1−j) ≥ (j₀−1−j)·... |x_j| = −a−j ≥ −a − (j₀−2) + (j₀−2−j) = |x_{j₀−2}| + (j₀−2−j)... — the values |x_j| for j = j₀−2, j₀−3, ..., 0: |x_{j₀−2}|, |x_{j₀−2}|+1, ...: |x_{j₀−2}| = 2 − (a+j₀) ∈ (1, 2]: hmm ≥ 1: so |x_j| ≥ (j₀−1−j) + (1 − (a+j₀))·... let me just: |x_j| = −(a+j) = −(a+j₀) + (j₀−j) ≥ 0 + (j₀−j) − 1 + ... since a+j₀ < 1: −(a+j₀) > −1: |x_j| > j₀ − j − 1: for j ≤ j₀ − 2: j₀ − j − 1 ≥ 1 > 0: so 1/|x_j| ≤ 1/(j₀−j−1): Σ_{j=0}^{j₀−2} ≤ Σ_{i=1}^{j₀−1} 1/i ≤ H_m ✓ (i = j₀−j−1 reindex). So left side ≤ 4 + H_m ✓.\n Total: Σ ≤ 8 + 2H_m ≤ 8 + 2(1 + log m) = 10 + 2 log m. And the reindexing/1/x bounds in Lean: the V-split sum decomposition with the two one-sided estimates — each side is a monotone comparison ~40 lines. Hmm. This is the honest price.\n\n For (B)'s ingredients: the harmonic bound H_m ≤ 1 + log m: Mathlib — let me check for `harmonic_le_log` or similar. There's `Real.harmonic_le_log`? or in Mathlib/Analysis/SumOverInterval... I'll grep at build. If missing: prove via Antitone.sum_le_integral with ∫1/x = log.\n\nOK — the build should be done. Let me check it, commit 5e-i, then start 5e-ii with piece (C) as the first build. Actually — 5e-ii is 0.25–0.5 session and this session already has 5e-i. Let me land 5e-i cleanly (build+audit+commit), then start 5e-ii and see how far it gets. Per the pacing rule, if 5e-ii runs long, commit at a clean boundary.","signature":""},{"type":"text","text":"While the build runs — the 5e-ii analysis shows the reciprocal-sum estimate is the heart of the near-axis bound (O(log m) is essential, O(m) would fail the o(R) squeeze). Checking the build."},{"type":"tool_use","id":"Bash_239","name":"Bash","input":{"command":"tail -4 \"C:\\Users\\lucky\\AppData\\Local\\Temp\\nguyen\\538d422e-9e27-42ba-92b1-de9965bbd1b7\\tasks\\bxf4vkbll.output\" 2>/dev/null || echo \"still running\"","description":"Check build progress"},"extra_content":null}]