Current task: —

← Session 31 — ii′-5f: tight R-bound 10.5/48 (piece 3 + pinch)

#1803 assistant 2026-08-24 18:49:02.348 UTC · 655→12770 tok open ⤢
thinking (15129 chars)
Committed (0829421). Now piece 3c: the far-series machine — the per-term bound, farG + summability, norm reduction. Let me write §15. Plan: 1. `farG (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℝ := if ρ ∈ nearZerosSub t then 0 else 4.5 * (zeroMult ρ.1 : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t)^2))` Hmm — division: 4.5·m/(x·√(1+x²)) with x = |ρ.im − t|. 2. farG_nonneg. 3. farG_summable (t): dominated by C·m/(1+γ²): For ρ far (x ≥ 1): 4.5/(x√(1+x²)) ≤ 4.5/x²; and |γ| ≤ x + t ≤ x + t·x (x ≥ 1... x + t ≤ x(1+t) ⟺ t ≤ tx ⟺ 1 ≤ x for t ≥ 1 ✓): |γ| ≤ (1+t)x ⟹ 1+γ² ≤ 1+(1+t)²x² ≤ 2(1+t)²x²·... wait direction: I want 1/x² ≤ C/(1+γ²): |γ| ≤ (1+t)x ⟹ γ² ≤ (1+t)²x² ⟹ 1+γ² ≤ 1+(1+t)²x² ≤ (1+t)²(1+x²)·... hmm 1+(1+t)²x² vs (1+t)²(1+x²) = (1+t)²+(1+t)²x²: 1+(1+t)²x² ≤ (1+t)²+(1+t)²x² ✓. So 1+γ² ≤ (1+t)²(1+x²) ≤ 2(1+t)²x² (1+x² ≤ 2x² for x ≥ 1 ✓). So 1/x² ≤ 2(1+t)²/(1+γ²) ✓. farG ρ ≤ 4.5·2(1+t)²·m/(1+γ²) = 9(1+t)²·m/(1+γ²) — summable via the LiCircleBound pattern (WeilEF.zero_sum_inv_sq zetaSeam with the normSq(gammaOf) comparison — clone tailTerm_summable's argument: 1+γ² vs 1+normSq(gammaOf ρ): normSq(gammaOf ρ) = im² + (1/2−re)² and 1+normSq ≤ 2(1+im²) — from tailTerm_summable: they showed dominator 2·m/(1+normSq(gammaOf)) works with 1/(1+im²) ≤ 2/(1+normSq(gammaOf)) ✓. So: farG ≤ 9(1+t)²·m/(1+γ²) ≤ 9(1+t)²·2·m/(1+normSq(gammaOf)) = 18(1+t)²·m/(1+normSq(gammaOf)) ✓ summable. 4. The per-term bound: ``` lemma seriesDiffTerm_norm_le_farG {t : ℝ} (ht : 10 ≤ t) {s : ℂ} (hσlo : -5/2 ≤ s.re) (hσhi : s.re ≤ 3) (him : s.im = t) (hζ : riemannZeta s ≠ 0) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ‖if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖ ≤ farG t ρ ``` For ρ near: both 0 ✓. For ρ far (x ≥ 1): ‖seriesDiffTerm‖ = m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) ≤ 4.5·m/(x·√(1+x²)): - seriesDiffTerm s s₀ ρ = m·(1/(s−ρ) − 1/(s₀−ρ)): algebra 1/(s−ρ) − 1/(s₀−ρ) = (s₀−s)/((s−ρ)(s₀−ρ)): needs s−ρ ≠ 0 (hζ: s = ρ ⟹ ζ s = 0 ✓ contradiction) and s₀−ρ ≠ 0 (s₀ = 2+it: re = 2 ≠ re ρ < 1 ✓). - norm: ‖m·(s₀−s)/((s−ρ)(s₀−ρ))‖ = m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) (norm_mul, norm_div, norm_natCast-ish: ‖(zeroMult ρ : ℂ)‖ = zeroMult ρ as ℝ ≥ 0). - ‖s₀−s‖ ≤ 4.5: s₀−s = (2−s.re:ℝ) (the hdiff from one_div_diff_le ✓ clone). - ‖s−ρ‖ ≥ x: |im(s−ρ)| = |t−γ| = x ✓ abs_im_le_norm. - ‖s₀−ρ‖ ≥ √(1+x²): ‖s₀−ρ‖² = (2−β)²+(t−γ)² ≥ 1+x² (|2−β| ≥ 1: β < 1). Via Complex.sq_norm or normSq: ‖z‖² = normSq z = re²+im² — `Complex.normSq` : ‖z‖^2 = normSq z? There's `Complex.sq_norm_sub`? Let me use: ‖s₀−ρ‖ ≥ √(1+x²) ⟺ 1+x² ≤ ‖s₀−ρ‖² (Real.le_sqrt (0 ≤ ‖s₀−ρ‖)? — direction: √(1+x²) ≤ ‖s₀−ρ‖ ⟺ 1+x² ≤ ‖s₀−ρ‖² via Real.le_sqrt (0 ≤ ?) hmm: Real.le_sqrt (hx : 0 ≤ x) (hy : 0 ≤ y) : x ≤ sqrt y ↔ x^2 ≤ y — I want sqrt(1+x²) ≤ ‖s₀−ρ‖: that's `Real.sqrt_le_iff`? or le of sqrt: `Real.sqrt_le_sqrt` no. The form: √A ≤ B ⟺ A ≤ B² (for B ≥ 0): `Real.sqrt_le_iff (hB : 0 ≤ B) : sqrt A ≤ B ↔ A ≤ B^2`? Hmm — earlier I used Real.le_sqrt (hx : 0 ≤ x) (hy : 0 ≤ y) : x ≤ √y ↔ x² ≤ y — with x = ‖s₀−ρ‖, y = 1+x²: ‖s₀−ρ‖ ≤ √(1+x²) ⟺ ‖s₀−ρ‖² ≤ 1+x² — WRONG direction. I want √(1+x²) ≤ ‖s₀−ρ‖: apply Real.le_sqrt with x := √(1+x²)?? circular. The right lemma: `Real.sqrt_le' ?`— let me think: sqrt A ≤ B ⟺ A ≤ B^2 when B ≥ 0: `Real.sqrt_le_iff (hy : 0 ≤ y) : sqrt x ≤ y ↔ x ≤ y ^ 2`? I believe `Real.sqrt_le_iff (hy : 0 ≤ y) : √x ≤ y ↔ x ≤ y^2`? or `sqrt_le_iff_le_sq`? — use: have := Real.sqrt_le_sqrt (h : 1+x² ≤ ‖s₀−ρ‖²) : √(1+x²) ≤ √(‖s₀−ρ‖²) = ‖s₀−ρ‖ (Real.sqrt_sq_eq_abs + abs_of_nonneg) ✓ — cleaner: ‖s₀−ρ‖² ≥ 1+x² via: ‖s₀−ρ‖² = normSq(s₀−ρ) = (2−β)² + (t−γ)² — `Complex.sq_norm` : ‖z‖^2 = normSq z — `Complex.sq_norm (z) : ‖z‖ ^ 2 = Complex.normSq z`? There's `Complex.normSq_apply` and `Complex.sq_norm_sub`? Hmm — from seriesTerm_norm_eq_div's usage: they used norm_div etc. For normSq: `Complex.sq_norm : ‖z‖^2 = normSq z`? I recall `Complex.sq_norm (z : ℂ) : ‖z‖ ^ 2 = normSq z` might be `Complex.norm_sq_eq_norm_sq`... Let me just compute: ``` have hsq : (1 : ℝ) + x ^ 2 ≤ ‖s₀ - ρ.1‖ ^ 2 := by have h1 : ‖s₀ - ρ.1‖ ^ 2 = (s₀ - ρ.1).re ^ 2 + (s₀ - ρ.1).im ^ 2 := by rw [Complex.sq_norm, Complex.normSq_apply] ... ``` Check Complex.sq_norm exists: `Complex.sq_norm (z : ℂ) : ‖z‖ ^ 2 = normSq z`? — hmm, there's `Complex.normSq_eq_norm_sq : normSq z = ‖z‖ ^ 2` (probably this direction) ✓ use that: rw [← Complex.normSq_eq_norm_sq, Complex.normSq_apply] — then re/im parts: (s₀−ρ).re = 2−β (s₀ = 2+tI: re 2, ρ.re = β: sub_re: 2−β ✓ simp), (s₀−ρ).im = t−γ ✓. Then (2−β)²+(t−γ)² ≥ 1+x²: |2−β| ≥ 1 ⟹ (2−β)² ≥ 1; (t−γ)² = x² (sq_abs: (t−γ)² = |t−γ|² = x² via sq_abs or abs... x := |t−γ|: (t−γ)² = x² via sq_abs: |t−γ|^2 = (t−γ)^2 (sq_abs (t−γ) : |t−γ|^2 = (t−γ)^2 ✓). |2−β| ≥ 1: β < 1 ⟹ 2−β > 1 ✓ abs_of_pos. - The assembly: m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) ≤ 4.5·m/(x·√(1+x²)): numerator: ‖s₀−s‖ ≤ 4.5 ✓ (m ≥ 0). denominator: ‖s−ρ‖·‖s₀−ρ‖ ≥ x·√(1+x²) (mul_le_mul of the two, pos). division: div_le_div: m·‖s₀−s‖/(‖s−ρ‖‖s₀−ρ‖) ≤ m·4.5/(x√(1+x²)) — via div_le_div (num ≤) (den ≥) (nonneg) (pos): div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d)?? — the signature issue again (div_le_div didn't exist). Use: div_le_div_iff₀? or: a/c ≤ b/d ⟺ a·d ≤ b·c: div_le_div_iff (hc : 0 < c)? (hd : 0 < d)? Let me do it manually: ``` rw [div_le_div_iff₀ hpos1 hpos2] -- a/c ≤ b/d ↔ a*d ≤ b*c ``` with c = ‖s−ρ‖·‖s₀−ρ‖ > 0 (x ≥ 1 > 0, √(1+x²) > 0) and d = x·√(1+x²) > 0: a·d ≤ b·c: m·‖s₀−s‖·(x√(1+x²)) ≤ m·4.5·(‖s−ρ‖‖s₀−ρ‖): via mul_le_mul (m·‖s₀−s‖ ≤ m·4.5) (x√(1+x²) ≤ ‖s−ρ‖‖s₀−ρ‖) ✓. div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a / b ≤ c / d ↔ a * d ≤ c * b ✓ (used before ✓). 5. The norm-tsum reduction: ``` lemma far_series_norm_le_farG_tsum (ht) {s} (hσlo)(hσhi)(him)(hζ) : ‖∑' ρ, if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2+tI) ρ‖ ≤ ∑' ρ, farG t ρ := by have h1 : ‖∑' ρ, ...‖ ≤ ∑' ρ, ‖if ρ ∈ nearZerosSub t then (0:ℂ) else seriesDiffTerm s (2+tI) ρ‖ := norm_tsum_le_tsum_norm <summable-norm> -- the norm family summable: of_norm_bounded by farG (pointwise via seriesDiffTerm_norm_le_farG + farG nonneg) have h2 : ∑' ρ, ‖...‖ ≤ ∑' ρ, farG t ρ := Summable.tsum_le_tsum (fun ρ => seriesDiffTerm_norm_le_farG ht hσlo hσhi him hζ ρ) <norm-summable> farG_summable exact h1.trans h2 ``` `norm_tsum_le_tsum_norm : Summable (fun i => ‖f i‖) → ‖∑' i, f i‖ ≤ ∑' i, ‖f i‖` — check name: `norm_tsum_le_tsum_norm (hf : Summable fun i => ‖f i‖) : ‖∑' i, f i‖ ≤ ∑' i, ‖f i‖` ✓ I believe. The norm-summable: Summable (fun ρ => ‖if ... ‖): of_norm_bounded farG_summable (fun ρ => by rw [Real.norm_eq_abs, abs_of_nonneg (norm_nonneg...)] hmm — ‖(x : ℂ)‖ vs farG: ‖‖x‖‖ = ‖x‖ (norm_norm): the of_norm_bounded condition: ‖f ρ‖ ≤ farG ρ where f ρ = the ℂ if-term: ‖f ρ‖_ℝ = ‖f ρ‖ (Real.norm of the complex norm: ‖(‖z‖ : ℝ)‖ = ‖z‖ via Real.norm_eq_abs + abs_of_nonneg (norm_nonneg z) ✓). Then seriesDiffTerm_norm_le_farG gives ‖if-term‖ ≤ farG ρ ✓. Then the SPLIT into main + tail (for 3d/3e): - mainFinset t := (finite_subtype_norm_lt (2t+1)).toFinset.filter (fun ρ => 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| ≤ t): Wait — the bucket index k(ρ) = ⌊x⌋₊ ≤ ⌊t⌋₊: the main finset: far zeros (x ≥ 1) with k(ρ) ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1: since x < ⌊t⌋₊+1 ≤ t+1: |γ| ≤ t+x < 2t+1 ✓ ball. Filter condition: 1 ≤ x ∧ x ≤ t (x ≤ t ⟹ k ≤ ⌊t⌋₊ ✓; and k ≤ ⌊t⌋₊ ⟹ x < ⌊t⌋₊+1 ≤ t+1: x could be in (t, t+1) — NOT covered by x ≤ t!! Hmm: k(ρ) ≤ ⌊t⌋₊ ⟺ ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1 — x ∈ (t, ⌊t⌋₊+1) possible when t not integer (x ∈ (t, t+1)): those zeros have k = ⌊t⌋₊ (main bucket) but x > t — my filter (x ≤ t) EXCLUDES them wrongly. Fix the filter: 1 ≤ x ∧ x < ⌊t⌋₊+1 (as a real): x < (⌊t⌋₊ : ℝ)+1. Hmm — but then the bucket-count proof: bucket k ≤ ⌊t⌋₊'s right window [t+k, t+k+1] — for x ∈ (t, ⌊t⌋₊+1) with k = ⌊t⌋₊: γ ∈ [t+⌊t⌋₊, t+⌊t⌋₊+1) ⊆ zeroWindow(t+⌊t⌋₊) ✓ fine. Simpler filter: 1 ≤ x ∧ x < (Nat.floor t : ℝ) + 1. Hmm — Nat.floor t = ⌊t⌋₊. Fine. - tsum split: ∑' farG = ∑_{mainFinset} farG + ∑' (if ∉ mainFinset then farG else 0) via tsum_split_finset (LiCircleBound's, ℝ version ✓). - The tail: ∑' (if ∉ main then farG else 0): zeros not in main: near (farG = 0 ✓) or x ≥ ⌊t⌋₊+1 > t: γ > 2t or γ < 0. Split further: = ∑' (fun ρ => if ρ.1.im > 2t then farG ρ else 0) + ∑' (fun ρ => if ρ.1.im < 0 then farG ρ else 0)?? — via Summable.tsum_add + tsum_congr: for ρ ∉ main with farG ρ ≠ 0: x ≥ ⌊t⌋₊+1 > t ⟹ γ > 2t ∨ γ < 0 (exclusive) ✓; and for ρ in main or near: all three are 0 ✓. The tsum_congr pointwise: (if ∉ main then farG else 0) = (if γ > 2t then farG else 0) + (if γ < 0 then farG else 0): case analysis on (near/in-main, γ>2t, γ<0) ✓. Both tails summable by of_norm_bounded (farG). - Then 3d: main ≤ 4.5·(2C₀+0.55)·S₃-ish ≤ ... and 3e: the two tail machines. Actually — wait, for the tail tsum split I realize there's redundancy: the tail zeros are x > t ⟹ γ > 2t or γ < 0 — and farG for γ < 0 has x = t+|γ|. The left/right tail machines then work on their respective if-forms. Let me also reconsider — do I even need the mainFinset as a subtype finset with the ball? The main sum: ∑_{mainFinset} farG — bounded by the bucket-family machine (unit_family_le) which takes FS + bucket index + per-bucket counts. FS = mainFinset. The bucket index k(ρ) := Nat.floor x = ⌊|ρ.1.im − t|⌋₊. Bucket range: 1 ≤ k ≤ ⌊t⌋₊. Per-element: farG ρ ≤ 4.5·m·W(k) with W(k) = 1/(k√(1+k²)) = farW k (x ≥ k ⟹ x√(1+x²) ≥ k√(1+k²) ⟹ farG ≤ 4.5·m/(k√(1+k²)) = 4.5·m·farW k ✓). Per-bucket count: ≤ 2C₀+0.55 (the two-window bridge). Then: main ≤ Σ_{k ∈ Ico 1 (⌊t⌋₊+1)} (4.5·farW k)·(2C₀+0.55) = 4.5·(2C₀+0.55)·Σ farW ≤ 4.5·(2C₀+0.55)·1.3476 (farW_Ico_le ✓). Let me now write §15 (3c). Then §16 (3d: unit_family_le + main). Then §17 (3e: the two tails). Then §18 (assembly + the far_series_le statement). For §15, write: ```lean /-! ## 15. Piece 3g: the farG majorant, its summability, and the norm reduction -/ def farG (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℝ := if ρ ∈ nearZerosSub t then (0 : ℝ) else 4.5 * (zeroMult ρ.1 : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2)) lemma farG_nonneg (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) ≤ farG t ρ := by classical by_cases h : ρ ∈ nearZerosSub t <;> simp [farG, h] · positivity lemma farG_summable (t : ℝ) : Summable (farG t) := by classical have hbase : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} => (18 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ))))) := (WeilEF.zero_sum_inv_sq zetaSeam).mul_left _ apply Summable.of_norm_bounded hbase intro ρ rw [farG] by_cases h : ρ ∈ nearZerosSub t · rw [if_pos h, norm_zero] positivity · rw [if_neg h] -- x := |ρ.1.im - t| ≥ 1 (far) have hx1 : (1 : ℝ) ≤ |ρ.1.im - t| := by have h' := mem_nearZerosSub.not.mp ... -- h : ρ ∉ nearZerosSub t: ¬(|ρ.im − t| < 1) ⟹ 1 ≤ |...| ... ... ``` Careful: h : ρ ∉ nearZerosSub t — mem_nearZerosSub : ρ ∈ nearZerosSub t ↔ |ρ.1.im − t| < 1: so ¬(|ρ.im−t| < 1) ⟹ 1 ≤ |ρ.im−t| (not_lt + abs_nonneg: le_of_not_lt ✓ but mem_nearZerosSub's statement — from the file: `mem_nearZerosSub : ρ ∈ nearZerosSub t ↔ |ρ.1.im - t| < 1` ✓. So hx1 := le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt)). The comparison: farG ρ = 4.5·m/(x√(1+x²)) with x ≥ 1: ≤ 4.5·m/x² (x√(1+x²) ≥ x² ⟹ 1/(x√(1+x²)) ≤ 1/x²: x·√(1+x²) ≥ x·x: √ ≥ x for x ≥ 0: √(1+x²) ≥ √x² = x (x ≥ 1 > 0)): then 4.5·m/x² ≤ 4.5·m·2(1+t)²/(1+γ²) via 1/x² ≤ 2(1+t)²/(1+γ²): from |γ| ≤ (1+t)·x: ``` have hgam : |ρ.1.im| ≤ (1 + t) * |ρ.1.im - t| := by -- |γ| ≤ x + t ≤ x + t·x = (1+t)·x (x ≥ 1, t ≥ 10 — actually t ≥ 0 suffices for t·x ≥ t when x ≥ 1) have h1 : |ρ.1.im| ≤ |ρ.1.im - t| + t := by calc |ρ.1.im| = |ρ.1.im - t + t| := by rw [sub_add_cancel] _ ≤ |ρ.1.im - t| + |t| := abs_add_le _ _ _ = |ρ.1.im - t| + t := by rw [abs_of_nonneg (by linarith [ht] : (0:ℝ) ≤ t)] -- t ≤ t·x (x ≥ 1, t ≥ 0) have h2 : t ≤ t * |ρ.1.im - t| := by have h3 : t * 1 ≤ t * |ρ.1.im - t| := mul_le_mul_of_nonneg_left hx1 (by linarith [ht] : (0:ℝ) ≤ t) rwa [mul_one] at h3 linarith [h1, h2] ``` Hmm — farG_summable needs t ≥ 0 (for |t| = t and t ≥ 0) — state with (ht : 0 ≤ t) — the far bound: 1+γ² ≤ (1+t)²·2·x²: ``` have h4 : 1 + ρ.1.im ^ 2 ≤ 2 * (1 + t) ^ 2 * (|ρ.1.im - t|) ^ 2 := by have h5 : ρ.1.im ^ 2 ≤ ((1 + t) * |ρ.1.im - t|) ^ 2 := by have h6 : |ρ.1.im| ≤ (1 + t) * |ρ.1.im - t| := hgam have h7 : (0 : ℝ) ≤ (1 + t) * |ρ.1.im - t| := by positivity calc ρ.1.im ^ 2 = |ρ.1.im| ^ 2 := by rw [sq_abs] _ ≤ ((1 + t) * |ρ.1.im - t|) ^ 2 := pow_le_pow_left₀ (abs_nonneg _) h6 2 -- 1 + γ² ≤ 1 + (1+t)²x² ≤ (1+t)²x² + (1+t)²x²?? no: 1 ≤ (1+t)²x² (t ≥ 0, x ≥ 1: (1+t)² ≥ 1, x² ≥ 1) have h8 : (1 : ℝ) ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by have h9 : (1 : ℝ) ≤ (1 + t) ^ 2 := by have h10 : (1 : ℝ) ≤ 1 + t := by linarith [ht] nlinarith [h10] have h11 : (1 : ℝ) ≤ |ρ.1.im - t| ^ 2 := by have h12 := pow_le_pow_left₀ (by norm_num : (0:ℝ) ≤ 1) hx1 2 rwa [one_pow] at h12 calc (1 : ℝ) = 1 * 1 := by ring _ ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := mul_le_mul h9 h11 (by positivity) (by positivity) -- assemble: 1 + γ² ≤ (1+t)²x² + (1+t)²x² = 2(1+t)²x² have h13 : ((1 + t) * |ρ.1.im - t|) ^ 2 = (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by ring rw [h13] at h5 linarith [h5, h8] ``` Then 1/x² ≤ 2(1+t)²/(1+γ²): div form: 1/x² ≤ 2(1+t)²/(1+γ²) ⟺ 1+γ² ≤ 2(1+t)²x² ✓ (h4) via div_le_div_iff₀-ish or one_div_le_one_div_of_le: 1/x² ≤ 2(1+t)²/(1+γ²): hmm — one_div_le_one_div_of_le (0 < x²) (x² ≤ ...)? no — the forms differ (2(1+t)² factor). Use: ``` have h14 : 1 / |ρ.1.im - t| ^ 2 ≤ (2 * (1 + t) ^ 2) / (1 + ρ.1.im ^ 2) := by rw [div_le_div_iff₀ (by positivity : (0:ℝ) < 1 + ρ.1.im^2) (by positivity : (0:ℝ) < |ρ.1.im - t|^2)] -- 1 * (x²) ≤ 2(1+t)² * (1+γ²)?? no — div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a/b ≤ c/d ↔ a*d ≤ c*b -- a = 1, b = 1+γ², c = 2(1+t)², d = x²: 1*x² ≤ 2(1+t)²*(1+γ²)?? WRONG DIRECTION — h4 says 1+γ² ≤ 2(1+t)²x² ``` hmm: 1/x² ≤ 2(1+t)²/(1+γ²) ⟺ 1·(1+γ²) ≤ 2(1+t)²·x²·... — cross multiply: 1+γ² ≤ 2(1+t)²x² — YES that's h4 ✓: div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a/b ≤ c/d ↔ a*d ≤ c*b: with a = 1, b = x², c = 2(1+t)², d = 1+γ²: 1·(1+γ²) ≤ 2(1+t)²·x² ✓ h4 ✓. Then farG = 4.5·m/(x√(1+x²)) ≤ 4.5·m/x² = 4.5·m·(1/x²) ≤ 4.5·m·2(1+t)²/(1+γ²) = 9(1+t)²·m/(1+γ²). Then the normSq(gammaOf) comparison (clone tailTerm_summable's hcmp): 1+normSq(gammaOf ρ) ≤ 2(1+γ²) ⟹ m/(1+γ²) ≤ 2·m/(1+normSq) ⟹ farG ≤ 18(1+t)²·m/(1+normSq(gammaOf)) ✓ the hbase dominator ✓. Hmm — the norm management: of_norm_bounded needs ‖farG ρ‖ ≤ hbase ρ: ‖farG ρ‖ = farG ρ (nonneg ✓ abs_of_nonneg) and hbase ρ = 18(1+t)²·(m/(1+normSq)) — nonneg ✓. This is getting long — let me just write it. For the per-term bound, the if-form: Actually — cleaner: prove the per-term bound as TWO lemmas: (a) the norm identity for seriesDiffTerm (m·‖s₀−s‖/(‖s−ρ‖‖s₀−ρ‖)), (b) the bound chain. Then the if-wrapper in far_series_norm_le_farG_tsum directly (both sides 0 when near). Let me write §15 now.
Now §15 (3c: farG + summability + per-term bound + norm reduction).
tool: Edit
input
{
  "replace_all": false,
  "file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean",
  "old_string": "  show (analyticOrderAt riemannZeta ((starRingEnd \u2102) \u03c1)).toNat\n      = (analyticOrderAt riemannZeta \u03c1).toNat\n  rw [analyticOrderAt_riemannZeta_conj h\u03c11]\n\nend NguyenRH1\n\nend",
  "new_string": "  show (analyticOrderAt riemannZeta ((starRingEnd \u2102) \u03c1)).toNat\n      = (analyticOrderAt riemannZeta \u03c1).toNat\n  rw [analyticOrderAt_riemannZeta_conj h\u03c11]\n\n/-! ## 15. Piece 3g: the farG majorant and the norm reduction -/\n\n/-- The far-term majorant: 4.5\u00b7m/(x\u221a(1+x\u00b2)) with x = |\u03b3 \u2212 t| (0 for near\nzeros). -/\ndef farG (t : \u211d) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u211d :=\n  if \u03c1 \u2208 nearZerosSub t then (0 : \u211d)\n  else 4.5 * (zeroMult \u03c1.1 : \u211d) / (|\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2))\n\nlemma farG_nonneg (t : \u211d) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : (0 : \u211d) \u2264 farG t \u03c1 := by\n  classical\n  by_cases h : \u03c1 \u2208 nearZerosSub t\n  \u00b7 rw [farG, if_pos h]\n  \u00b7 rw [farG, if_neg h]\n    positivity\n\n/-- The absolute-value estimate: |\u03b3| \u2264 (1+t)\u00b7x for x = |\u03b3\u2212t| \u2265 1, t \u2265 0. -/\nlemma abs_im_le_one_add_mul {t : \u211d} (ht : 0 \u2264 t) {\u03b3 : \u211d} (hx : 1 \u2264 |\u03b3 - t|) :\n    |\u03b3| \u2264 (1 + t) * |\u03b3 - t| := by\n  have h1 : |\u03b3| \u2264 |\u03b3 - t| + t := by\n    calc |\u03b3| = |\u03b3 - t + t| := by rw [sub_add_cancel]\n      _ \u2264 |\u03b3 - t| + |t| := abs_add_le _ _\n      _ = |\u03b3 - t| + t := by rw [abs_of_nonneg ht]\n  have h2 : t \u2264 t * |\u03b3 - t| := by\n    have h3 : t * 1 \u2264 t * |\u03b3 - t| := mul_le_mul_of_nonneg_left hx ht\n    rwa [mul_one] at h3\n  linarith [h1, h2]\n\n/-- farG is summable (dominated by 18(1+t)\u00b2\u00b7m/(1+\u2016\u03b3\u2016\u00b2)). -/\nlemma farG_summable {t : \u211d} (ht : 0 \u2264 t) : Summable (farG t) := by\n  classical\n  have hbase : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (18 * (1 + t) ^ 2) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left _\n  apply Summable.of_norm_bounded hbase\n  intro \u03c1\n  rw [Real.norm_eq_abs, abs_of_nonneg (farG_nonneg t \u03c1)]\n  rw [farG]\n  by_cases h : \u03c1 \u2208 nearZerosSub t\n  \u00b7 rw [if_pos h]\n    positivity\n  \u00b7 rw [if_neg h]\n    have hx1 : (1 : \u211d) \u2264 |\u03c1.1.im - t| :=\n      le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt))\n    -- the normSq(gammaOf) comparison (the tailTerm_summable pattern)\n    have hgam : Complex.normSq (gammaOf (\u03c1 : \u2102))\n        = (\u03c1 : \u2102).im ^ 2 + (1 / 2 - (\u03c1 : \u2102).re) ^ 2 := by\n      rw [Complex.normSq_apply, WeilEF.gammaOf_re, WeilEF.gammaOf_im]\n      ring\n    have hcmp : 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) \u2264 2 * (1 + (\u03c1 : \u2102).im ^ 2) := by\n      rw [hgam]\n      have hre : ((\u03c1 : \u2102).re - 1 / 2) ^ 2 \u2264 1 / 4 := by\n        have h0 := \u03c1.2.2.1\n        have h1 := \u03c1.2.2.2\n        nlinarith [sq_nonneg ((\u03c1 : \u2102).re - 1 / 2)]\n      nlinarith [sq_nonneg (\u03c1 : \u2102).im]\n    -- the (1+t)\u00b2x\u00b2 comparison\n    have h\u03b3bound : |\u03c1.1.im| \u2264 (1 + t) * |\u03c1.1.im - t| := abs_im_le_one_add_mul ht hx1\n    have h4 : 1 + \u03c1.1.im ^ 2 \u2264 2 * (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := by\n      have h5 : \u03c1.1.im ^ 2 \u2264 (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := by\n        calc \u03c1.1.im ^ 2 = |\u03c1.1.im| ^ 2 := by rw [sq_abs]\n          _ \u2264 ((1 + t) * |\u03c1.1.im - t|) ^ 2 :=\n              pow_le_pow_left\u2080 (abs_nonneg _) h\u03b3bound 2\n          _ = (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := by ring\n      have h8 : (1 : \u211d) \u2264 (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := by\n        have h9 : (1 : \u211d) \u2264 (1 + t) ^ 2 := by\n          have h10 : (1 : \u211d) \u2264 1 + t := by linarith [ht]\n          nlinarith [h10]\n        have h11 : (1 : \u211d) \u2264 |\u03c1.1.im - t| ^ 2 := by\n          have h12 := pow_le_pow_left\u2080 (by norm_num : (0 : \u211d) \u2264 1) hx1 2\n          rwa [one_pow] at h12\n        calc (1 : \u211d) = 1 * 1 := by ring\n          _ \u2264 (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 :=\n              mul_le_mul h9 h11 (by positivity) (by positivity)\n      linarith [h5, h8]\n    -- 1/(x\u221a(1+x\u00b2)) \u2264 1/x\u00b2 \u2264 2(1+t)\u00b2/(1+\u03b3\u00b2)\n    have h6 : 1 / (|\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2))\n        \u2264 1 / |\u03c1.1.im - t| ^ 2 := by\n      have h7 : |\u03c1.1.im - t| * |\u03c1.1.im - t|\n          \u2264 |\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2) := by\n        apply mul_le_mul_of_nonneg_left _ (abs_nonneg _)\n        calc |\u03c1.1.im - t| = Real.sqrt ((\u03c1.1.im - t) ^ 2) := by\n            rw [Real.sqrt_sq_eq_abs]\n          _ \u2264 Real.sqrt (1 + (\u03c1.1.im - t) ^ 2) :=\n            Real.sqrt_le_sqrt (by linarith [sq_nonneg (\u03c1.1.im - t)])\n      have h8 : (0 : \u211d) < |\u03c1.1.im - t| * |\u03c1.1.im - t| := by positivity\n      have h9 := one_div_le_one_div_of_le h8 h7\n      rwa [pow_two] at h9\n    have h10 : 1 / |\u03c1.1.im - t| ^ 2 \u2264 (2 * (1 + t) ^ 2) / (1 + \u03c1.1.im ^ 2) := by\n      rw [div_le_div_iff\u2080 (by positivity : (0 : \u211d) < 1 + \u03c1.1.im ^ 2)\n        (by positivity : (0 : \u211d) < |\u03c1.1.im - t| ^ 2)]\n      calc (1 : \u211d) * |\u03c1.1.im - t| ^ 2 = |\u03c1.1.im - t| ^ 2 := by ring\n        _ \u2264 1 + \u03c1.1.im ^ 2 := by nlinarith [sq_nonneg \u03c1.1.im]\n        _ \u2264 2 * (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := h4\n        _ = (2 * (1 + t) ^ 2) * (1 + \u03c1.1.im ^ 2) - (2 * (1 + t) ^ 2) * (\u03c1.1.im ^ 2)\n            + (2 * (1 + t) ^ 2) * (\u03c1.1.im ^ 2) - (2 * (1 + t) ^ 2) * |\u03c1.1.im - t| ^ 2\n            + (2 * (1 + t) ^ 2) * |\u03c1.1.im - t| ^ 2 := by ring\n    -- hmm, the above calc is wrong; replace below\n    have h10' : 1 / |\u03c1.1.im - t| ^ 2 \u2264 (2 * (1 + t) ^ 2) / (1 + \u03c1.1.im ^ 2) := by\n      rw [div_le_div_iff\u2080 (by positivity : (0 : \u211d) < 1 + \u03c1.1.im ^ 2)\n        (by positivity : (0 : \u211d) < |\u03c1.1.im - t| ^ 2)]\n      have h11 : (1 : \u211d) * |\u03c1.1.im - t| ^ 2 = |\u03c1.1.im - t| ^ 2 := by ring\n      rw [h11]\n      have h12 : (2 * (1 + t) ^ 2) * (1 + \u03c1.1.im ^ 2)\n          = 2 * (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 * (1 / |\u03c1.1.im - t| ^ 2)\n            * (1 + \u03c1.1.im ^ 2) := by\n        field_simp\n        ring\n      rw [h12]\n      apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : \u211d) \u2264 2 * (1 + t) ^ 2)\n      rw [show (1 / |\u03c1.1.im - t| ^ 2) * (1 + \u03c1.1.im ^ 2)\n          = (1 + \u03c1.1.im ^ 2) / |\u03c1.1.im - t| ^ 2 from by ring]\n      rw [div_le_iff\u2080 (by positivity : (0 : \u211d) < |\u03c1.1.im - t| ^ 2)]\n      calc 1 + \u03c1.1.im ^ 2 \u2264 2 * (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2 := h4\n        _ = 1 * (2 * (1 + t) ^ 2 * |\u03c1.1.im - t| ^ 2) := by ring\n    -- m/(1+\u03b3\u00b2) \u2264 2\u00b7m/(1+normSq)\n    have hpos1 : (0 : \u211d) < 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) := by\n      have h := Complex.normSq_nonneg (gammaOf (\u03c1 : \u2102)); linarith\n    have hpos2 : (0 : \u211d) < 1 + (\u03c1 : \u2102).im ^ 2 := by positivity\n    have hfrac : 1 / (1 + (\u03c1 : \u2102).im ^ 2) \u2264 2 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))) := by\n      rw [div_le_div_iff\u2080 hpos2 hpos1]\n      nlinarith [hcmp]\n    have hm : (0 : \u211d) \u2264 (zeroMult \u03c1 : \u211d) := Nat.cast_nonneg _\n    -- assemble\n    calc 4.5 * (zeroMult \u03c1 : \u211d) / (|\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2))\n        = (4.5 * (zeroMult \u03c1 : \u211d)) * (1 / (|\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2))) := by\n          rw [div_eq_mul_inv]\n      _ \u2264 (4.5 * (zeroMult \u03c1 : \u211d)) * ((2 * (1 + t) ^ 2) / (1 + \u03c1.1.im ^ 2)) :=\n          mul_le_mul_of_nonneg_left (h6.trans h10')\n            (mul_nonneg (by norm_num : (0 : \u211d) \u2264 4.5) hm)\n      _ = (9 * (1 + t) ^ 2) * ((zeroMult \u03c1 : \u211d) * (1 / (1 + \u03c1.1.im ^ 2))) := by ring\n      _ \u2264 (9 * (1 + t) ^ 2) * ((zeroMult \u03c1 : \u211d) * (2 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))))) := by\n          apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : \u211d) \u2264 9 * (1 + t) ^ 2)\n          rw [show (zeroMult \u03c1 : \u211d) * (2 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))))\n              = (zeroMult \u03c1 : \u211d) * 2 * (1 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) from by ring]\n          rw [show (zeroMult \u03c1 : \u211d) * (1 / (1 + \u03c1.1.im ^ 2))\n              = (zeroMult \u03c1 : \u211d) / (1 + \u03c1.1.im ^ 2) from by ring]\n          have h13 : (zeroMult \u03c1 : \u211d) / (1 + \u03c1.1.im ^ 2)\n              \u2264 (zeroMult \u03c1 : \u211d) * (2 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) := by\n            rw [show (zeroMult \u03c1 : \u211d) / (1 + \u03c1.1.im ^ 2)\n                = (zeroMult \u03c1 : \u211d) * (1 / (1 + \u03c1.1.im ^ 2)) from by ring]\n            exact mul_le_mul_of_nonneg_left hfrac hm\n          exact h13\n      _ = (18 * (1 + t) ^ 2) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) := by\n          ring\n\n/-- The per-term norm identity for the far difference term. -/\nlemma seriesDiffTerm_norm_eq {s s\u2080 : \u2102} (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n    (hs : s \u2260 \u03c1.1) (hs\u2080 : s\u2080 \u2260 \u03c1.1) :\n    \u2016seriesDiffTerm s s\u2080 \u03c1\u2016\n      = (zeroMult \u03c1.1 : \u211d) * \u2016s\u2080 - s\u2016 / (\u2016s - \u03c1.1\u2016 * \u2016s\u2080 - \u03c1.1\u2016) := by\n  have h1 : seriesDiffTerm s s\u2080 \u03c1\n      = (zeroMult \u03c1.1 : \u2102) * ((s\u2080 - s) / ((s - \u03c1.1) * (s\u2080 - \u03c1.1))) := by\n    rw [seriesDiffTerm]\n    have h2 : 1 / (s - \u03c1.1) - 1 / (s\u2080 - \u03c1.1)\n        = (s\u2080 - s) / ((s - \u03c1.1) * (s\u2080 - \u03c1.1)) := by\n      field_simp [sub_ne_zero.mpr hs, sub_ne_zero.mpr hs\u2080]\n      ring\n    rw [h2]\n  rw [h1, norm_mul, norm_div, norm_mul]\n  have h3 : \u2016(zeroMult \u03c1.1 : \u2102)\u2016 = (zeroMult \u03c1.1 : \u211d) := by\n    rw [show (zeroMult \u03c1.1 : \u2102) = ((zeroMult \u03c1.1 : \u211d) : \u2102) by push_cast; ring,\n      Complex.norm_real]\n    exact abs_of_nonneg (Nat.cast_nonneg _)\n  rw [h3]\n\n/-- The per-term far bound: the far difference term is bounded by farG. -/\nlemma seriesDiffTerm_norm_le_farG {t : \u211d} (ht : 10 \u2264 t) {s : \u2102}\n    (h\u03c3lo : -5 / 2 \u2264 s.re) (h\u03c3hi : s.re \u2264 3) (him : s.im = t)\n    (h\u03b6 : riemannZeta s \u2260 0) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    \u2016if \u03c1 \u2208 nearZerosSub t then (0 : \u2102) else seriesDiffTerm s (2 + t * Complex.I) \u03c1\u2016\n      \u2264 farG t \u03c1 := by\n  classical\n  by_cases h : \u03c1 \u2208 nearZerosSub t\n  \u00b7 rw [if_pos h, norm_zero, farG, if_pos h]\n  \u00b7 rw [if_neg h, farG, if_neg h]\n    have hx1 : (1 : \u211d) \u2264 |\u03c1.1.im - t| :=\n      le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt))\n    -- s \u2260 \u03c1 and s\u2080 \u2260 \u03c1\n    have hs : s \u2260 \u03c1.1 := by\n      intro hbad\n      apply h\u03b6\n      rw [hbad]\n      exact \u03c1.2.1\n    have hs\u2080 : (2 + t * Complex.I) \u2260 \u03c1.1 := by\n      intro hbad\n      have hre := \u03c1.2.2.2\n      have h1 : (2 + t * Complex.I).re = \u03c1.1.re := by rw [hbad]\n      simp at h1\n      linarith [h1, hre]\n    rw [seriesDiffTerm_norm_eq \u03c1 hs hs\u2080]\n    -- the three factors\n    have hdiff : (2 + t * Complex.I) - s = ((2 - s.re : \u211d) : \u2102) := by\n      rw [Complex.ext_iff]\n      constructor\n      \u00b7 simp\n      \u00b7 simp [him]\n    have hsdiff : \u2016(2 + t * Complex.I) - s\u2016 = |2 - s.re| := by\n      rw [hdiff]\n      exact Complex.norm_real _\n    have hsdiffle : \u2016(2 + t * Complex.I) - s\u2016 \u2264 4.5 := by\n      rw [hsdiff, abs_le]\n      constructor <;> linarith\n    have hx : \u2016s - \u03c1.1\u2016 \u2265 |\u03c1.1.im - t| := by\n      have h1 := abs_im_le_norm (s - \u03c1.1)\n      have h2 : (s - \u03c1.1).im = t - \u03c1.1.im := by simp [him]\n      rw [h2, abs_sub_comm] at h1\n      exact h1\n    have hx\u2080 : \u2016(2 + t * Complex.I) - \u03c1.1\u2016 \u2265 Real.sqrt (1 + (\u03c1.1.im - t) ^ 2) := by\n      have h\u03b2 : |2 - \u03c1.1.re| \u2265 1 := by\n        have h1 := \u03c1.2.2.2\n        rw [abs_of_pos (by linarith : (0 : \u211d) < 2 - \u03c1.1.re)]\n        linarith\n      have h1 : \u2016(2 + t * Complex.I) - \u03c1.1\u2016 ^ 2\n          = ((2 + t * Complex.I) - \u03c1.1).re ^ 2 + ((2 + t * Complex.I) - \u03c1.1).im ^ 2 := by\n        rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n      have h2 : (1 : \u211d) + (\u03c1.1.im - t) ^ 2 \u2264 \u2016(2 + t * Complex.I) - \u03c1.1\u2016 ^ 2 := by\n        rw [h1]\n        have hre : ((2 + t * Complex.I) - \u03c1.1).re = 2 - \u03c1.1.re := by simp\n        have him2 : ((2 + t * Complex.I) - \u03c1.1).im = t - \u03c1.1.im := by simp\n        rw [hre, him2]\n        have h3 : (2 - \u03c1.1.re) ^ 2 \u2265 1 := by\n          have h4 := pow_le_pow_left\u2080 (by norm_num : (0 : \u211d) \u2264 1) h\u03b2 2\n          rwa [one_pow, sq_abs] at h4\n        have h5 : (t - \u03c1.1.im) ^ 2 = (\u03c1.1.im - t) ^ 2 := by ring\n        rw [h5]\n        linarith [h3, sq_nonneg (\u03c1.1.im - t)]\n      have h6 := Real.sqrt_le_sqrt h2\n      rwa [Real.sqrt_sq_eq_abs, abs_of_nonneg (norm_nonneg _)] at h6\n    -- assemble\n    have hpos1 : (0 : \u211d) < \u2016s - \u03c1.1\u2016 * \u2016(2 + t * Complex.I) - \u03c1.1\u2016 := by\n      have h7 : (0 : \u211d) < \u2016s - \u03c1.1\u2016 := norm_pos_iff.mpr (sub_ne_zero.mpr hs)\n      have h8 : (0 : \u211d) < \u2016(2 + t * Complex.I) - \u03c1.1\u2016 :=\n        norm_pos_iff.mpr (sub_ne_zero.mpr hs\u2080)\n      positivity\n    have hpos2 : (0 : \u211d) < |\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2) := by\n      positivity\n    have h9 : \u2016(2 + t * Complex.I) - s\u2016 \u2264 4.5 := hsdiffle\n    have hm : (0 : \u211d) \u2264 (zeroMult \u03c1.1 : \u211d) := Nat.cast_nonneg _\n    rw [div_le_div_iff\u2080 hpos1 hpos2]\n    calc (zeroMult \u03c1.1 : \u211d) * \u2016(2 + t * Complex.I) - s\u2016\n          * (|\u03c1.1.im - t| * Real.sqrt (1 + (\u03c1.1.im - t) ^ 2))\n        \u2264 (zeroMult \u03c1.1 : \u211d) * 4.5 * (\u2016s - \u03c1.1\u2016 * \u2016(2 + t * Complex.I) - \u03c1.1\u2016) := by\n          apply mul_le_mul _ _ (by positivity) (by positivity)\n          \u00b7 calc (zeroMult \u03c1.1 : \u211d) * \u2016(2 + t * Complex.I) - s\u2016\n                \u2264 (zeroMult \u03c1.1 : \u211d) * 4.5 := mul_le_mul_of_nonneg_left h9 hm\n            _ \u2264 (zeroMult \u03c1.1 : \u211d) * 4.5 := le_rfl\n          \u00b7 exact mul_le_mul hx hx\u2080 (Real.sqrt_nonneg _) (abs_nonneg _)\n      _ = (4.5 * (zeroMult \u03c1.1 : \u211d)) * (\u2016s - \u03c1.1\u2016 * \u2016(2 + t * Complex.I) - \u03c1.1\u2016) := by ring\n\n/-- **The norm reduction**: the far-series norm is bounded by the farG\ntsum. -/\nlemma far_series_norm_le_farG_tsum {t : \u211d} (ht : 10 \u2264 t) {s : \u2102}\n    (h\u03c3lo : -5 / 2 \u2264 s.re) (h\u03c3hi : s.re \u2264 3) (him : s.im = t)\n    (h\u03b6 : riemannZeta s \u2260 0) :\n    \u2016\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      if \u03c1 \u2208 nearZerosSub t then (0 : \u2102) else seriesDiffTerm s (2 + t * Complex.I) \u03c1\u2016\n      \u2264 \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, farG t \u03c1 := by\n  classical\n  have hnorm_summ : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      \u2016if \u03c1 \u2208 nearZerosSub t then (0 : \u2102) else seriesDiffTerm s (2 + t * Complex.I) \u03c1\u2016) := by\n    apply Summable.of_norm_bounded (farG_summable ht.le)\n    intro \u03c1\n    rw [Real.norm_eq_abs, abs_of_nonneg (norm_nonneg _)]\n    exact seriesDiffTerm_norm_le_farG ht h\u03c3lo h\u03c3hi him h\u03b6 \u03c1\n  have h1 := norm_tsum_le_tsum_norm hnorm_summ\n  have h2 : (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      \u2016if \u03c1 \u2208 nearZerosSub t then (0 : \u2102) else seriesDiffTerm s (2 + t * Complex.I) \u03c1\u2016)\n      \u2264 \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, farG t \u03c1 :=\n    Summable.tsum_le_tsum (fun \u03c1 => seriesDiffTerm_norm_le_farG ht h\u03c3lo h\u03c3hi him h\u03b6 \u03c1)\n      hnorm_summ (farG_summable ht.le)\n  exact h1.trans h2\n\nend NguyenRH1\n\nend"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Committed (0829421). Now piece 3c: the far-series machine — the per-term bound, farG + summability, norm reduction. Let me write §15.\n\nPlan:\n1. `farG (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℝ := if ρ ∈ nearZerosSub t then 0 else 4.5 * (zeroMult ρ.1 : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t)^2))`\n   Hmm — division: 4.5·m/(x·√(1+x²)) with x = |ρ.im − t|.\n2. farG_nonneg.\n3. farG_summable (t): dominated by C·m/(1+γ²): \n   For ρ far (x ≥ 1): 4.5/(x√(1+x²)) ≤ 4.5/x²; and |γ| ≤ x + t ≤ x + t·x (x ≥ 1... x + t ≤ x(1+t) ⟺ t ≤ tx ⟺ 1 ≤ x for t ≥ 1 ✓): |γ| ≤ (1+t)x ⟹ 1+γ² ≤ 1+(1+t)²x² ≤ 2(1+t)²x²·... wait direction: I want 1/x² ≤ C/(1+γ²): |γ| ≤ (1+t)x ⟹ γ² ≤ (1+t)²x² ⟹ 1+γ² ≤ 1+(1+t)²x² ≤ (1+t)²(1+x²)·... hmm 1+(1+t)²x² vs (1+t)²(1+x²) = (1+t)²+(1+t)²x²: 1+(1+t)²x² ≤ (1+t)²+(1+t)²x² ✓. So 1+γ² ≤ (1+t)²(1+x²) ≤ 2(1+t)²x² (1+x² ≤ 2x² for x ≥ 1 ✓). So 1/x² ≤ 2(1+t)²/(1+γ²) ✓.\n   farG ρ ≤ 4.5·2(1+t)²·m/(1+γ²) = 9(1+t)²·m/(1+γ²) — summable via the LiCircleBound pattern (WeilEF.zero_sum_inv_sq zetaSeam with the normSq(gammaOf) comparison — clone tailTerm_summable's argument: 1+γ² vs 1+normSq(gammaOf ρ): normSq(gammaOf ρ) = im² + (1/2−re)² and 1+normSq ≤ 2(1+im²) — from tailTerm_summable: they showed dominator 2·m/(1+normSq(gammaOf)) works with 1/(1+im²) ≤ 2/(1+normSq(gammaOf)) ✓. So: farG ≤ 9(1+t)²·m/(1+γ²) ≤ 9(1+t)²·2·m/(1+normSq(gammaOf)) = 18(1+t)²·m/(1+normSq(gammaOf)) ✓ summable.\n4. The per-term bound:\n```\nlemma seriesDiffTerm_norm_le_farG {t : ℝ} (ht : 10 ≤ t) {s : ℂ}\n    (hσlo : -5/2 ≤ s.re) (hσhi : s.re ≤ 3) (him : s.im = t)\n    (hζ : riemannZeta s ≠ 0) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    ‖if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖\n      ≤ farG t ρ\n```\nFor ρ near: both 0 ✓. For ρ far (x ≥ 1): ‖seriesDiffTerm‖ = m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) ≤ 4.5·m/(x·√(1+x²)):\n- seriesDiffTerm s s₀ ρ = m·(1/(s−ρ) − 1/(s₀−ρ)): algebra 1/(s−ρ) − 1/(s₀−ρ) = (s₀−s)/((s−ρ)(s₀−ρ)): needs s−ρ ≠ 0 (hζ: s = ρ ⟹ ζ s = 0 ✓ contradiction) and s₀−ρ ≠ 0 (s₀ = 2+it: re = 2 ≠ re ρ < 1 ✓).\n- norm: ‖m·(s₀−s)/((s−ρ)(s₀−ρ))‖ = m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) (norm_mul, norm_div, norm_natCast-ish: ‖(zeroMult ρ : ℂ)‖ = zeroMult ρ as ℝ ≥ 0).\n- ‖s₀−s‖ ≤ 4.5: s₀−s = (2−s.re:ℝ) (the hdiff from one_div_diff_le ✓ clone).\n- ‖s−ρ‖ ≥ x: |im(s−ρ)| = |t−γ| = x ✓ abs_im_le_norm.\n- ‖s₀−ρ‖ ≥ √(1+x²): ‖s₀−ρ‖² = (2−β)²+(t−γ)² ≥ 1+x² (|2−β| ≥ 1: β < 1). Via Complex.sq_norm or normSq: ‖z‖² = normSq z = re²+im² — `Complex.normSq` : ‖z‖^2 = normSq z? There's `Complex.sq_norm_sub`? Let me use: ‖s₀−ρ‖ ≥ √(1+x²) ⟺ 1+x² ≤ ‖s₀−ρ‖² (Real.le_sqrt (0 ≤ ‖s₀−ρ‖)? — direction: √(1+x²) ≤ ‖s₀−ρ‖ ⟺ 1+x² ≤ ‖s₀−ρ‖² via Real.le_sqrt (0 ≤ ?) hmm: Real.le_sqrt (hx : 0 ≤ x) (hy : 0 ≤ y) : x ≤ sqrt y ↔ x^2 ≤ y — I want sqrt(1+x²) ≤ ‖s₀−ρ‖: that's `Real.sqrt_le_iff`? or le of sqrt: `Real.sqrt_le_sqrt` no. The form: √A ≤ B ⟺ A ≤ B² (for B ≥ 0): `Real.sqrt_le_iff (hB : 0 ≤ B) : sqrt A ≤ B ↔ A ≤ B^2`? Hmm — earlier I used Real.le_sqrt (hx : 0 ≤ x) (hy : 0 ≤ y) : x ≤ √y ↔ x² ≤ y — with x = ‖s₀−ρ‖, y = 1+x²: ‖s₀−ρ‖ ≤ √(1+x²) ⟺ ‖s₀−ρ‖² ≤ 1+x² — WRONG direction. I want √(1+x²) ≤ ‖s₀−ρ‖: apply Real.le_sqrt with x := √(1+x²)?? circular. The right lemma: `Real.sqrt_le' ?`— let me think: sqrt A ≤ B ⟺ A ≤ B^2 when B ≥ 0: `Real.sqrt_le_iff (hy : 0 ≤ y) : sqrt x ≤ y ↔ x ≤ y ^ 2`? I believe `Real.sqrt_le_iff (hy : 0 ≤ y) : √x ≤ y ↔ x ≤ y^2`? or `sqrt_le_iff_le_sq`? — use: have := Real.sqrt_le_sqrt (h : 1+x² ≤ ‖s₀−ρ‖²) : √(1+x²) ≤ √(‖s₀−ρ‖²) = ‖s₀−ρ‖ (Real.sqrt_sq_eq_abs + abs_of_nonneg) ✓ — cleaner: \n  ‖s₀−ρ‖² ≥ 1+x² via: ‖s₀−ρ‖² = normSq(s₀−ρ) = (2−β)² + (t−γ)² — `Complex.sq_norm` : ‖z‖^2 = normSq z — `Complex.sq_norm (z) : ‖z‖ ^ 2 = Complex.normSq z`? There's `Complex.normSq_apply` and `Complex.sq_norm_sub`? Hmm — from seriesTerm_norm_eq_div's usage: they used norm_div etc. For normSq: `Complex.sq_norm : ‖z‖^2 = normSq z`? I recall `Complex.sq_norm (z : ℂ) : ‖z‖ ^ 2 = normSq z` might be `Complex.norm_sq_eq_norm_sq`... Let me just compute: \n  ```\n  have hsq : (1 : ℝ) + x ^ 2 ≤ ‖s₀ - ρ.1‖ ^ 2 := by\n    have h1 : ‖s₀ - ρ.1‖ ^ 2 = (s₀ - ρ.1).re ^ 2 + (s₀ - ρ.1).im ^ 2 := by\n      rw [Complex.sq_norm, Complex.normSq_apply]\n    ...\n  ```\n  Check Complex.sq_norm exists: `Complex.sq_norm (z : ℂ) : ‖z‖ ^ 2 = normSq z`? — hmm, there's `Complex.normSq_eq_norm_sq : normSq z = ‖z‖ ^ 2` (probably this direction) ✓ use that: rw [← Complex.normSq_eq_norm_sq, Complex.normSq_apply] — then re/im parts: (s₀−ρ).re = 2−β (s₀ = 2+tI: re 2, ρ.re = β: sub_re: 2−β ✓ simp), (s₀−ρ).im = t−γ ✓. Then (2−β)²+(t−γ)² ≥ 1+x²: |2−β| ≥ 1 ⟹ (2−β)² ≥ 1; (t−γ)² = x² (sq_abs: (t−γ)² = |t−γ|² = x² via sq_abs or abs... x := |t−γ|: (t−γ)² = x² via sq_abs: |t−γ|^2 = (t−γ)^2 (sq_abs (t−γ) : |t−γ|^2 = (t−γ)^2 ✓).\n  |2−β| ≥ 1: β < 1 ⟹ 2−β > 1 ✓ abs_of_pos.\n- The assembly: m·‖s₀−s‖/(‖s−ρ‖·‖s₀−ρ‖) ≤ 4.5·m/(x·√(1+x²)):\n  numerator: ‖s₀−s‖ ≤ 4.5 ✓ (m ≥ 0).\n  denominator: ‖s−ρ‖·‖s₀−ρ‖ ≥ x·√(1+x²) (mul_le_mul of the two, pos).\n  division: div_le_div: m·‖s₀−s‖/(‖s−ρ‖‖s₀−ρ‖) ≤ m·4.5/(x√(1+x²)) — via div_le_div (num ≤) (den ≥) (nonneg) (pos): div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d)?? — the signature issue again (div_le_div didn't exist). Use: div_le_div_iff₀? or: a/c ≤ b/d ⟺ a·d ≤ b·c: div_le_div_iff (hc : 0 < c)? (hd : 0 < d)? Let me do it manually:\n  ```\n  rw [div_le_div_iff₀ hpos1 hpos2]  -- a/c ≤ b/d ↔ a*d ≤ b*c\n  ```\n  with c = ‖s−ρ‖·‖s₀−ρ‖ > 0 (x ≥ 1 > 0, √(1+x²) > 0) and d = x·√(1+x²) > 0: a·d ≤ b·c: m·‖s₀−s‖·(x√(1+x²)) ≤ m·4.5·(‖s−ρ‖‖s₀−ρ‖): via mul_le_mul (m·‖s₀−s‖ ≤ m·4.5) (x√(1+x²) ≤ ‖s−ρ‖‖s₀−ρ‖) ✓.\n  div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a / b ≤ c / d ↔ a * d ≤ c * b ✓ (used before ✓).\n\n5. The norm-tsum reduction:\n```\nlemma far_series_norm_le_farG_tsum (ht) {s} (hσlo)(hσhi)(him)(hζ) :\n    ‖∑' ρ, if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2+tI) ρ‖\n      ≤ ∑' ρ, farG t ρ := by\n  have h1 : ‖∑' ρ, ...‖ ≤ ∑' ρ, ‖if ρ ∈ nearZerosSub t then (0:ℂ) else seriesDiffTerm s (2+tI) ρ‖ :=\n    norm_tsum_le_tsum_norm <summable-norm>\n  -- the norm family summable: of_norm_bounded by farG (pointwise via seriesDiffTerm_norm_le_farG + farG nonneg)\n  have h2 : ∑' ρ, ‖...‖ ≤ ∑' ρ, farG t ρ :=\n    Summable.tsum_le_tsum (fun ρ => seriesDiffTerm_norm_le_farG ht hσlo hσhi him hζ ρ) <norm-summable> farG_summable\n  exact h1.trans h2\n```\n`norm_tsum_le_tsum_norm : Summable (fun i => ‖f i‖) → ‖∑' i, f i‖ ≤ ∑' i, ‖f i‖` — check name: `norm_tsum_le_tsum_norm (hf : Summable fun i => ‖f i‖) : ‖∑' i, f i‖ ≤ ∑' i, ‖f i‖` ✓ I believe.\nThe norm-summable: Summable (fun ρ => ‖if ... ‖): of_norm_bounded farG_summable (fun ρ => by rw [Real.norm_eq_abs, abs_of_nonneg (norm_nonneg...)] hmm — ‖(x : ℂ)‖ vs farG: ‖‖x‖‖ = ‖x‖ (norm_norm): the of_norm_bounded condition: ‖f ρ‖ ≤ farG ρ where f ρ = the ℂ if-term: ‖f ρ‖_ℝ = ‖f ρ‖ (Real.norm of the complex norm: ‖(‖z‖ : ℝ)‖ = ‖z‖ via Real.norm_eq_abs + abs_of_nonneg (norm_nonneg z) ✓). Then seriesDiffTerm_norm_le_farG gives ‖if-term‖ ≤ farG ρ ✓.\n\nThen the SPLIT into main + tail (for 3d/3e):\n- mainFinset t := (finite_subtype_norm_lt (2t+1)).toFinset.filter (fun ρ => 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| ≤ t):\n  Wait — the bucket index k(ρ) = ⌊x⌋₊ ≤ ⌊t⌋₊: the main finset: far zeros (x ≥ 1) with k(ρ) ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1: since x < ⌊t⌋₊+1 ≤ t+1: |γ| ≤ t+x < 2t+1 ✓ ball. Filter condition: 1 ≤ x ∧ x ≤ t (x ≤ t ⟹ k ≤ ⌊t⌋₊ ✓; and k ≤ ⌊t⌋₊ ⟹ x < ⌊t⌋₊+1 ≤ t+1: x could be in (t, t+1) — NOT covered by x ≤ t!! Hmm: k(ρ) ≤ ⌊t⌋₊ ⟺ ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1 — x ∈ (t, ⌊t⌋₊+1) possible when t not integer (x ∈ (t, t+1)): those zeros have k = ⌊t⌋₊ (main bucket) but x > t — my filter (x ≤ t) EXCLUDES them wrongly. Fix the filter: 1 ≤ x ∧ x < ⌊t⌋₊+1 (as a real): x < (⌊t⌋₊ : ℝ)+1. Hmm — but then the bucket-count proof: bucket k ≤ ⌊t⌋₊'s right window [t+k, t+k+1] — for x ∈ (t, ⌊t⌋₊+1) with k = ⌊t⌋₊: γ ∈ [t+⌊t⌋₊, t+⌊t⌋₊+1) ⊆ zeroWindow(t+⌊t⌋₊) ✓ fine.\n  Simpler filter: 1 ≤ x ∧ x < (Nat.floor t : ℝ) + 1. Hmm — Nat.floor t = ⌊t⌋₊. Fine.\n- tsum split: ∑' farG = ∑_{mainFinset} farG + ∑' (if ∉ mainFinset then farG else 0) via tsum_split_finset (LiCircleBound's, ℝ version ✓).\n- The tail: ∑' (if ∉ main then farG else 0): zeros not in main: near (farG = 0 ✓) or x ≥ ⌊t⌋₊+1 > t: γ > 2t or γ < 0. Split further: = ∑' (fun ρ => if ρ.1.im > 2t then farG ρ else 0) + ∑' (fun ρ => if ρ.1.im < 0 then farG ρ else 0)?? — via Summable.tsum_add + tsum_congr: for ρ ∉ main with farG ρ ≠ 0: x ≥ ⌊t⌋₊+1 > t ⟹ γ > 2t ∨ γ < 0 (exclusive) ✓; and for ρ in main or near: all three are 0 ✓. The tsum_congr pointwise: (if ∉ main then farG else 0) = (if γ > 2t then farG else 0) + (if γ < 0 then farG else 0): case analysis on (near/in-main, γ>2t, γ<0) ✓.\n  Both tails summable by of_norm_bounded (farG).\n- Then 3d: main ≤ 4.5·(2C₀+0.55)·S₃-ish ≤ ... and 3e: the two tail machines.\n\nActually — wait, for the tail tsum split I realize there's redundancy: the tail zeros are x > t ⟹ γ > 2t or γ < 0 — and farG for γ < 0 has x = t+|γ|. The left/right tail machines then work on their respective if-forms.\n\nLet me also reconsider — do I even need the mainFinset as a subtype finset with the ball? The main sum: ∑_{mainFinset} farG — bounded by the bucket-family machine (unit_family_le) which takes FS + bucket index + per-bucket counts. FS = mainFinset. The bucket index k(ρ) := Nat.floor x = ⌊|ρ.1.im − t|⌋₊. Bucket range: 1 ≤ k ≤ ⌊t⌋₊. Per-element: farG ρ ≤ 4.5·m·W(k) with W(k) = 1/(k√(1+k²)) = farW k (x ≥ k ⟹ x√(1+x²) ≥ k√(1+k²) ⟹ farG ≤ 4.5·m/(k√(1+k²)) = 4.5·m·farW k ✓). Per-bucket count: ≤ 2C₀+0.55 (the two-window bridge).\n\nThen: main ≤ Σ_{k ∈ Ico 1 (⌊t⌋₊+1)} (4.5·farW k)·(2C₀+0.55) = 4.5·(2C₀+0.55)·Σ farW ≤ 4.5·(2C₀+0.55)·1.3476 (farW_Ico_le ✓).\n\nLet me now write §15 (3c). Then §16 (3d: unit_family_le + main). Then §17 (3e: the two tails). Then §18 (assembly + the far_series_le statement).\n\nFor §15, write:\n\n```lean\n/-! ## 15. Piece 3g: the farG majorant, its summability, and the norm reduction -/\n\ndef farG (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℝ :=\n  if ρ ∈ nearZerosSub t then (0 : ℝ)\n  else 4.5 * (zeroMult ρ.1 : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))\n\nlemma farG_nonneg (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) ≤ farG t ρ := by\n  classical\n  by_cases h : ρ ∈ nearZerosSub t <;> simp [farG, h]\n  · positivity\n\nlemma farG_summable (t : ℝ) : Summable (farG t) := by\n  classical\n  have hbase : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (18 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ))))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left _\n  apply Summable.of_norm_bounded hbase\n  intro ρ\n  rw [farG]\n  by_cases h : ρ ∈ nearZerosSub t\n  · rw [if_pos h, norm_zero]\n    positivity\n  · rw [if_neg h]\n    -- x := |ρ.1.im - t| ≥ 1 (far)\n    have hx1 : (1 : ℝ) ≤ |ρ.1.im - t| := by\n      have h' := mem_nearZerosSub.not.mp ... -- h : ρ ∉ nearZerosSub t: ¬(|ρ.im − t| < 1) ⟹ 1 ≤ |...|\n      ...\n    ...\n```\nCareful: h : ρ ∉ nearZerosSub t — mem_nearZerosSub : ρ ∈ nearZerosSub t ↔ |ρ.1.im − t| < 1: so ¬(|ρ.im−t| < 1) ⟹ 1 ≤ |ρ.im−t| (not_lt + abs_nonneg: le_of_not_lt ✓ but mem_nearZerosSub's statement — from the file: `mem_nearZerosSub : ρ ∈ nearZerosSub t ↔ |ρ.1.im - t| < 1` ✓. So hx1 := le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt)).\n\nThe comparison: farG ρ = 4.5·m/(x√(1+x²)) with x ≥ 1: ≤ 4.5·m/x² (x√(1+x²) ≥ x² ⟹ 1/(x√(1+x²)) ≤ 1/x²: x·√(1+x²) ≥ x·x: √ ≥ x for x ≥ 0: √(1+x²) ≥ √x² = x (x ≥ 1 > 0)): then 4.5·m/x² ≤ 4.5·m·2(1+t)²/(1+γ²) via 1/x² ≤ 2(1+t)²/(1+γ²): from |γ| ≤ (1+t)·x: \n```\n    have hgam : |ρ.1.im| ≤ (1 + t) * |ρ.1.im - t| := by\n      -- |γ| ≤ x + t ≤ x + t·x = (1+t)·x (x ≥ 1, t ≥ 10 — actually t ≥ 0 suffices for t·x ≥ t when x ≥ 1)\n      have h1 : |ρ.1.im| ≤ |ρ.1.im - t| + t := by\n        calc |ρ.1.im| = |ρ.1.im - t + t| := by rw [sub_add_cancel]\n          _ ≤ |ρ.1.im - t| + |t| := abs_add_le _ _\n          _ = |ρ.1.im - t| + t := by rw [abs_of_nonneg (by linarith [ht] : (0:ℝ) ≤ t)]\n      -- t ≤ t·x (x ≥ 1, t ≥ 0)\n      have h2 : t ≤ t * |ρ.1.im - t| := by\n        have h3 : t * 1 ≤ t * |ρ.1.im - t| := mul_le_mul_of_nonneg_left hx1 (by linarith [ht] : (0:ℝ) ≤ t)\n        rwa [mul_one] at h3\n      linarith [h1, h2]\n```\nHmm — farG_summable needs t ≥ 0 (for |t| = t and t ≥ 0) — state with (ht : 0 ≤ t) — the far bound: 1+γ² ≤ (1+t)²·2·x²:\n```\n    have h4 : 1 + ρ.1.im ^ 2 ≤ 2 * (1 + t) ^ 2 * (|ρ.1.im - t|) ^ 2 := by\n      have h5 : ρ.1.im ^ 2 ≤ ((1 + t) * |ρ.1.im - t|) ^ 2 := by\n        have h6 : |ρ.1.im| ≤ (1 + t) * |ρ.1.im - t| := hgam\n        have h7 : (0 : ℝ) ≤ (1 + t) * |ρ.1.im - t| := by positivity\n        calc ρ.1.im ^ 2 = |ρ.1.im| ^ 2 := by rw [sq_abs]\n          _ ≤ ((1 + t) * |ρ.1.im - t|) ^ 2 := pow_le_pow_left₀ (abs_nonneg _) h6 2\n      -- 1 + γ² ≤ 1 + (1+t)²x² ≤ (1+t)²x² + (1+t)²x²?? no: 1 ≤ (1+t)²x² (t ≥ 0, x ≥ 1: (1+t)² ≥ 1, x² ≥ 1)\n      have h8 : (1 : ℝ) ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by\n        have h9 : (1 : ℝ) ≤ (1 + t) ^ 2 := by\n          have h10 : (1 : ℝ) ≤ 1 + t := by linarith [ht]\n          nlinarith [h10]\n        have h11 : (1 : ℝ) ≤ |ρ.1.im - t| ^ 2 := by\n          have h12 := pow_le_pow_left₀ (by norm_num : (0:ℝ) ≤ 1) hx1 2\n          rwa [one_pow] at h12\n        calc (1 : ℝ) = 1 * 1 := by ring\n          _ ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := mul_le_mul h9 h11 (by positivity) (by positivity)\n      -- assemble: 1 + γ² ≤ (1+t)²x² + (1+t)²x² = 2(1+t)²x²\n      have h13 : ((1 + t) * |ρ.1.im - t|) ^ 2 = (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by ring\n      rw [h13] at h5\n      linarith [h5, h8]\n```\nThen 1/x² ≤ 2(1+t)²/(1+γ²): div form: 1/x² ≤ 2(1+t)²/(1+γ²) ⟺ 1+γ² ≤ 2(1+t)²x² ✓ (h4) via div_le_div_iff₀-ish or one_div_le_one_div_of_le: 1/x² ≤ 2(1+t)²/(1+γ²): hmm — one_div_le_one_div_of_le (0 < x²) (x² ≤ ...)? no — the forms differ (2(1+t)² factor). Use: \n```\n    have h14 : 1 / |ρ.1.im - t| ^ 2 ≤ (2 * (1 + t) ^ 2) / (1 + ρ.1.im ^ 2) := by\n      rw [div_le_div_iff₀ (by positivity : (0:ℝ) < 1 + ρ.1.im^2) (by positivity : (0:ℝ) < |ρ.1.im - t|^2)]\n      -- 1 * (x²) ≤ 2(1+t)² * (1+γ²)?? no — div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a/b ≤ c/d ↔ a*d ≤ c*b\n      -- a = 1, b = 1+γ², c = 2(1+t)², d = x²: 1*x² ≤ 2(1+t)²*(1+γ²)?? WRONG DIRECTION — h4 says 1+γ² ≤ 2(1+t)²x²\n```\nhmm: 1/x² ≤ 2(1+t)²/(1+γ²) ⟺ 1·(1+γ²) ≤ 2(1+t)²·x²·... — cross multiply: 1+γ² ≤ 2(1+t)²x² — YES that's h4 ✓: div_le_div_iff₀ (hb : 0 < b) (hd : 0 < d) : a/b ≤ c/d ↔ a*d ≤ c*b: with a = 1, b = x², c = 2(1+t)², d = 1+γ²: 1·(1+γ²) ≤ 2(1+t)²·x² ✓ h4 ✓.\nThen farG = 4.5·m/(x√(1+x²)) ≤ 4.5·m/x² = 4.5·m·(1/x²) ≤ 4.5·m·2(1+t)²/(1+γ²) = 9(1+t)²·m/(1+γ²).\nThen the normSq(gammaOf) comparison (clone tailTerm_summable's hcmp): 1+normSq(gammaOf ρ) ≤ 2(1+γ²) ⟹ m/(1+γ²) ≤ 2·m/(1+normSq) ⟹ farG ≤ 18(1+t)²·m/(1+normSq(gammaOf)) ✓ the hbase dominator ✓.\n\nHmm — the norm management: of_norm_bounded needs ‖farG ρ‖ ≤ hbase ρ: ‖farG ρ‖ = farG ρ (nonneg ✓ abs_of_nonneg) and hbase ρ = 18(1+t)²·(m/(1+normSq)) — nonneg ✓.\n\nThis is getting long — let me just write it. For the per-term bound, the if-form: \n\nActually — cleaner: prove the per-term bound as TWO lemmas: (a) the norm identity for seriesDiffTerm (m·‖s₀−s‖/(‖s−ρ‖‖s₀−ρ‖)), (b) the bound chain. Then the if-wrapper in far_series_norm_le_farG_tsum directly (both sides 0 when near).\n\nLet me write §15 now.","signature":""},{"type":"text","text":"Now §15 (3c: farG + summability + per-term bound + norm reduction)."},{"type":"tool_use","id":"Edit_145","name":"Edit","input":{"replace_all":false,"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean","old_string":"  show (analyticOrderAt riemannZeta ((starRingEnd ℂ) ρ)).toNat\n      = (analyticOrderAt riemannZeta ρ).toNat\n  rw [analyticOrderAt_riemannZeta_conj hρ1]\n\nend NguyenRH1\n\nend","new_string":"  show (analyticOrderAt riemannZeta ((starRingEnd ℂ) ρ)).toNat\n      = (analyticOrderAt riemannZeta ρ).toNat\n  rw [analyticOrderAt_riemannZeta_conj hρ1]\n\n/-! ## 15. Piece 3g: the farG majorant and the norm reduction -/\n\n/-- The far-term majorant: 4.5·m/(x√(1+x²)) with x = |γ − t| (0 for near\nzeros). -/\ndef farG (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℝ :=\n  if ρ ∈ nearZerosSub t then (0 : ℝ)\n  else 4.5 * (zeroMult ρ.1 : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))\n\nlemma farG_nonneg (t : ℝ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) ≤ farG t ρ := by\n  classical\n  by_cases h : ρ ∈ nearZerosSub t\n  · rw [farG, if_pos h]\n  · rw [farG, if_neg h]\n    positivity\n\n/-- The absolute-value estimate: |γ| ≤ (1+t)·x for x = |γ−t| ≥ 1, t ≥ 0. -/\nlemma abs_im_le_one_add_mul {t : ℝ} (ht : 0 ≤ t) {γ : ℝ} (hx : 1 ≤ |γ - t|) :\n    |γ| ≤ (1 + t) * |γ - t| := by\n  have h1 : |γ| ≤ |γ - t| + t := by\n    calc |γ| = |γ - t + t| := by rw [sub_add_cancel]\n      _ ≤ |γ - t| + |t| := abs_add_le _ _\n      _ = |γ - t| + t := by rw [abs_of_nonneg ht]\n  have h2 : t ≤ t * |γ - t| := by\n    have h3 : t * 1 ≤ t * |γ - t| := mul_le_mul_of_nonneg_left hx ht\n    rwa [mul_one] at h3\n  linarith [h1, h2]\n\n/-- farG is summable (dominated by 18(1+t)²·m/(1+‖γ‖²)). -/\nlemma farG_summable {t : ℝ} (ht : 0 ≤ t) : Summable (farG t) := by\n  classical\n  have hbase : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (18 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ))))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left _\n  apply Summable.of_norm_bounded hbase\n  intro ρ\n  rw [Real.norm_eq_abs, abs_of_nonneg (farG_nonneg t ρ)]\n  rw [farG]\n  by_cases h : ρ ∈ nearZerosSub t\n  · rw [if_pos h]\n    positivity\n  · rw [if_neg h]\n    have hx1 : (1 : ℝ) ≤ |ρ.1.im - t| :=\n      le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt))\n    -- the normSq(gammaOf) comparison (the tailTerm_summable pattern)\n    have hgam : Complex.normSq (gammaOf (ρ : ℂ))\n        = (ρ : ℂ).im ^ 2 + (1 / 2 - (ρ : ℂ).re) ^ 2 := by\n      rw [Complex.normSq_apply, WeilEF.gammaOf_re, WeilEF.gammaOf_im]\n      ring\n    have hcmp : 1 + Complex.normSq (gammaOf (ρ : ℂ)) ≤ 2 * (1 + (ρ : ℂ).im ^ 2) := by\n      rw [hgam]\n      have hre : ((ρ : ℂ).re - 1 / 2) ^ 2 ≤ 1 / 4 := by\n        have h0 := ρ.2.2.1\n        have h1 := ρ.2.2.2\n        nlinarith [sq_nonneg ((ρ : ℂ).re - 1 / 2)]\n      nlinarith [sq_nonneg (ρ : ℂ).im]\n    -- the (1+t)²x² comparison\n    have hγbound : |ρ.1.im| ≤ (1 + t) * |ρ.1.im - t| := abs_im_le_one_add_mul ht hx1\n    have h4 : 1 + ρ.1.im ^ 2 ≤ 2 * (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by\n      have h5 : ρ.1.im ^ 2 ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by\n        calc ρ.1.im ^ 2 = |ρ.1.im| ^ 2 := by rw [sq_abs]\n          _ ≤ ((1 + t) * |ρ.1.im - t|) ^ 2 :=\n              pow_le_pow_left₀ (abs_nonneg _) hγbound 2\n          _ = (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by ring\n      have h8 : (1 : ℝ) ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := by\n        have h9 : (1 : ℝ) ≤ (1 + t) ^ 2 := by\n          have h10 : (1 : ℝ) ≤ 1 + t := by linarith [ht]\n          nlinarith [h10]\n        have h11 : (1 : ℝ) ≤ |ρ.1.im - t| ^ 2 := by\n          have h12 := pow_le_pow_left₀ (by norm_num : (0 : ℝ) ≤ 1) hx1 2\n          rwa [one_pow] at h12\n        calc (1 : ℝ) = 1 * 1 := by ring\n          _ ≤ (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 :=\n              mul_le_mul h9 h11 (by positivity) (by positivity)\n      linarith [h5, h8]\n    -- 1/(x√(1+x²)) ≤ 1/x² ≤ 2(1+t)²/(1+γ²)\n    have h6 : 1 / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))\n        ≤ 1 / |ρ.1.im - t| ^ 2 := by\n      have h7 : |ρ.1.im - t| * |ρ.1.im - t|\n          ≤ |ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2) := by\n        apply mul_le_mul_of_nonneg_left _ (abs_nonneg _)\n        calc |ρ.1.im - t| = Real.sqrt ((ρ.1.im - t) ^ 2) := by\n            rw [Real.sqrt_sq_eq_abs]\n          _ ≤ Real.sqrt (1 + (ρ.1.im - t) ^ 2) :=\n            Real.sqrt_le_sqrt (by linarith [sq_nonneg (ρ.1.im - t)])\n      have h8 : (0 : ℝ) < |ρ.1.im - t| * |ρ.1.im - t| := by positivity\n      have h9 := one_div_le_one_div_of_le h8 h7\n      rwa [pow_two] at h9\n    have h10 : 1 / |ρ.1.im - t| ^ 2 ≤ (2 * (1 + t) ^ 2) / (1 + ρ.1.im ^ 2) := by\n      rw [div_le_div_iff₀ (by positivity : (0 : ℝ) < 1 + ρ.1.im ^ 2)\n        (by positivity : (0 : ℝ) < |ρ.1.im - t| ^ 2)]\n      calc (1 : ℝ) * |ρ.1.im - t| ^ 2 = |ρ.1.im - t| ^ 2 := by ring\n        _ ≤ 1 + ρ.1.im ^ 2 := by nlinarith [sq_nonneg ρ.1.im]\n        _ ≤ 2 * (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := h4\n        _ = (2 * (1 + t) ^ 2) * (1 + ρ.1.im ^ 2) - (2 * (1 + t) ^ 2) * (ρ.1.im ^ 2)\n            + (2 * (1 + t) ^ 2) * (ρ.1.im ^ 2) - (2 * (1 + t) ^ 2) * |ρ.1.im - t| ^ 2\n            + (2 * (1 + t) ^ 2) * |ρ.1.im - t| ^ 2 := by ring\n    -- hmm, the above calc is wrong; replace below\n    have h10' : 1 / |ρ.1.im - t| ^ 2 ≤ (2 * (1 + t) ^ 2) / (1 + ρ.1.im ^ 2) := by\n      rw [div_le_div_iff₀ (by positivity : (0 : ℝ) < 1 + ρ.1.im ^ 2)\n        (by positivity : (0 : ℝ) < |ρ.1.im - t| ^ 2)]\n      have h11 : (1 : ℝ) * |ρ.1.im - t| ^ 2 = |ρ.1.im - t| ^ 2 := by ring\n      rw [h11]\n      have h12 : (2 * (1 + t) ^ 2) * (1 + ρ.1.im ^ 2)\n          = 2 * (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 * (1 / |ρ.1.im - t| ^ 2)\n            * (1 + ρ.1.im ^ 2) := by\n        field_simp\n        ring\n      rw [h12]\n      apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : ℝ) ≤ 2 * (1 + t) ^ 2)\n      rw [show (1 / |ρ.1.im - t| ^ 2) * (1 + ρ.1.im ^ 2)\n          = (1 + ρ.1.im ^ 2) / |ρ.1.im - t| ^ 2 from by ring]\n      rw [div_le_iff₀ (by positivity : (0 : ℝ) < |ρ.1.im - t| ^ 2)]\n      calc 1 + ρ.1.im ^ 2 ≤ 2 * (1 + t) ^ 2 * |ρ.1.im - t| ^ 2 := h4\n        _ = 1 * (2 * (1 + t) ^ 2 * |ρ.1.im - t| ^ 2) := by ring\n    -- m/(1+γ²) ≤ 2·m/(1+normSq)\n    have hpos1 : (0 : ℝ) < 1 + Complex.normSq (gammaOf (ρ : ℂ)) := by\n      have h := Complex.normSq_nonneg (gammaOf (ρ : ℂ)); linarith\n    have hpos2 : (0 : ℝ) < 1 + (ρ : ℂ).im ^ 2 := by positivity\n    have hfrac : 1 / (1 + (ρ : ℂ).im ^ 2) ≤ 2 / (1 + Complex.normSq (gammaOf (ρ : ℂ))) := by\n      rw [div_le_div_iff₀ hpos2 hpos1]\n      nlinarith [hcmp]\n    have hm : (0 : ℝ) ≤ (zeroMult ρ : ℝ) := Nat.cast_nonneg _\n    -- assemble\n    calc 4.5 * (zeroMult ρ : ℝ) / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))\n        = (4.5 * (zeroMult ρ : ℝ)) * (1 / (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))) := by\n          rw [div_eq_mul_inv]\n      _ ≤ (4.5 * (zeroMult ρ : ℝ)) * ((2 * (1 + t) ^ 2) / (1 + ρ.1.im ^ 2)) :=\n          mul_le_mul_of_nonneg_left (h6.trans h10')\n            (mul_nonneg (by norm_num : (0 : ℝ) ≤ 4.5) hm)\n      _ = (9 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) * (1 / (1 + ρ.1.im ^ 2))) := by ring\n      _ ≤ (9 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) * (2 / (1 + Complex.normSq (gammaOf (ρ : ℂ))))) := by\n          apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : ℝ) ≤ 9 * (1 + t) ^ 2)\n          rw [show (zeroMult ρ : ℝ) * (2 / (1 + Complex.normSq (gammaOf (ρ : ℂ))))\n              = (zeroMult ρ : ℝ) * 2 * (1 / (1 + Complex.normSq (gammaOf (ρ : ℂ)))) from by ring]\n          rw [show (zeroMult ρ : ℝ) * (1 / (1 + ρ.1.im ^ 2))\n              = (zeroMult ρ : ℝ) / (1 + ρ.1.im ^ 2) from by ring]\n          have h13 : (zeroMult ρ : ℝ) / (1 + ρ.1.im ^ 2)\n              ≤ (zeroMult ρ : ℝ) * (2 / (1 + Complex.normSq (gammaOf (ρ : ℂ)))) := by\n            rw [show (zeroMult ρ : ℝ) / (1 + ρ.1.im ^ 2)\n                = (zeroMult ρ : ℝ) * (1 / (1 + ρ.1.im ^ 2)) from by ring]\n            exact mul_le_mul_of_nonneg_left hfrac hm\n          exact h13\n      _ = (18 * (1 + t) ^ 2) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ)))) := by\n          ring\n\n/-- The per-term norm identity for the far difference term. -/\nlemma seriesDiffTerm_norm_eq {s s₀ : ℂ} (ρ : {ρ : ℂ // IsNontrivialZero ρ})\n    (hs : s ≠ ρ.1) (hs₀ : s₀ ≠ ρ.1) :\n    ‖seriesDiffTerm s s₀ ρ‖\n      = (zeroMult ρ.1 : ℝ) * ‖s₀ - s‖ / (‖s - ρ.1‖ * ‖s₀ - ρ.1‖) := by\n  have h1 : seriesDiffTerm s s₀ ρ\n      = (zeroMult ρ.1 : ℂ) * ((s₀ - s) / ((s - ρ.1) * (s₀ - ρ.1))) := by\n    rw [seriesDiffTerm]\n    have h2 : 1 / (s - ρ.1) - 1 / (s₀ - ρ.1)\n        = (s₀ - s) / ((s - ρ.1) * (s₀ - ρ.1)) := by\n      field_simp [sub_ne_zero.mpr hs, sub_ne_zero.mpr hs₀]\n      ring\n    rw [h2]\n  rw [h1, norm_mul, norm_div, norm_mul]\n  have h3 : ‖(zeroMult ρ.1 : ℂ)‖ = (zeroMult ρ.1 : ℝ) := by\n    rw [show (zeroMult ρ.1 : ℂ) = ((zeroMult ρ.1 : ℝ) : ℂ) by push_cast; ring,\n      Complex.norm_real]\n    exact abs_of_nonneg (Nat.cast_nonneg _)\n  rw [h3]\n\n/-- The per-term far bound: the far difference term is bounded by farG. -/\nlemma seriesDiffTerm_norm_le_farG {t : ℝ} (ht : 10 ≤ t) {s : ℂ}\n    (hσlo : -5 / 2 ≤ s.re) (hσhi : s.re ≤ 3) (him : s.im = t)\n    (hζ : riemannZeta s ≠ 0) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    ‖if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖\n      ≤ farG t ρ := by\n  classical\n  by_cases h : ρ ∈ nearZerosSub t\n  · rw [if_pos h, norm_zero, farG, if_pos h]\n  · rw [if_neg h, farG, if_neg h]\n    have hx1 : (1 : ℝ) ≤ |ρ.1.im - t| :=\n      le_of_not_lt (fun hlt => h (mem_nearZerosSub.mpr hlt))\n    -- s ≠ ρ and s₀ ≠ ρ\n    have hs : s ≠ ρ.1 := by\n      intro hbad\n      apply hζ\n      rw [hbad]\n      exact ρ.2.1\n    have hs₀ : (2 + t * Complex.I) ≠ ρ.1 := by\n      intro hbad\n      have hre := ρ.2.2.2\n      have h1 : (2 + t * Complex.I).re = ρ.1.re := by rw [hbad]\n      simp at h1\n      linarith [h1, hre]\n    rw [seriesDiffTerm_norm_eq ρ hs hs₀]\n    -- the three factors\n    have hdiff : (2 + t * Complex.I) - s = ((2 - s.re : ℝ) : ℂ) := by\n      rw [Complex.ext_iff]\n      constructor\n      · simp\n      · simp [him]\n    have hsdiff : ‖(2 + t * Complex.I) - s‖ = |2 - s.re| := by\n      rw [hdiff]\n      exact Complex.norm_real _\n    have hsdiffle : ‖(2 + t * Complex.I) - s‖ ≤ 4.5 := by\n      rw [hsdiff, abs_le]\n      constructor <;> linarith\n    have hx : ‖s - ρ.1‖ ≥ |ρ.1.im - t| := by\n      have h1 := abs_im_le_norm (s - ρ.1)\n      have h2 : (s - ρ.1).im = t - ρ.1.im := by simp [him]\n      rw [h2, abs_sub_comm] at h1\n      exact h1\n    have hx₀ : ‖(2 + t * Complex.I) - ρ.1‖ ≥ Real.sqrt (1 + (ρ.1.im - t) ^ 2) := by\n      have hβ : |2 - ρ.1.re| ≥ 1 := by\n        have h1 := ρ.2.2.2\n        rw [abs_of_pos (by linarith : (0 : ℝ) < 2 - ρ.1.re)]\n        linarith\n      have h1 : ‖(2 + t * Complex.I) - ρ.1‖ ^ 2\n          = ((2 + t * Complex.I) - ρ.1).re ^ 2 + ((2 + t * Complex.I) - ρ.1).im ^ 2 := by\n        rw [← Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n      have h2 : (1 : ℝ) + (ρ.1.im - t) ^ 2 ≤ ‖(2 + t * Complex.I) - ρ.1‖ ^ 2 := by\n        rw [h1]\n        have hre : ((2 + t * Complex.I) - ρ.1).re = 2 - ρ.1.re := by simp\n        have him2 : ((2 + t * Complex.I) - ρ.1).im = t - ρ.1.im := by simp\n        rw [hre, him2]\n        have h3 : (2 - ρ.1.re) ^ 2 ≥ 1 := by\n          have h4 := pow_le_pow_left₀ (by norm_num : (0 : ℝ) ≤ 1) hβ 2\n          rwa [one_pow, sq_abs] at h4\n        have h5 : (t - ρ.1.im) ^ 2 = (ρ.1.im - t) ^ 2 := by ring\n        rw [h5]\n        linarith [h3, sq_nonneg (ρ.1.im - t)]\n      have h6 := Real.sqrt_le_sqrt h2\n      rwa [Real.sqrt_sq_eq_abs, abs_of_nonneg (norm_nonneg _)] at h6\n    -- assemble\n    have hpos1 : (0 : ℝ) < ‖s - ρ.1‖ * ‖(2 + t * Complex.I) - ρ.1‖ := by\n      have h7 : (0 : ℝ) < ‖s - ρ.1‖ := norm_pos_iff.mpr (sub_ne_zero.mpr hs)\n      have h8 : (0 : ℝ) < ‖(2 + t * Complex.I) - ρ.1‖ :=\n        norm_pos_iff.mpr (sub_ne_zero.mpr hs₀)\n      positivity\n    have hpos2 : (0 : ℝ) < |ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2) := by\n      positivity\n    have h9 : ‖(2 + t * Complex.I) - s‖ ≤ 4.5 := hsdiffle\n    have hm : (0 : ℝ) ≤ (zeroMult ρ.1 : ℝ) := Nat.cast_nonneg _\n    rw [div_le_div_iff₀ hpos1 hpos2]\n    calc (zeroMult ρ.1 : ℝ) * ‖(2 + t * Complex.I) - s‖\n          * (|ρ.1.im - t| * Real.sqrt (1 + (ρ.1.im - t) ^ 2))\n        ≤ (zeroMult ρ.1 : ℝ) * 4.5 * (‖s - ρ.1‖ * ‖(2 + t * Complex.I) - ρ.1‖) := by\n          apply mul_le_mul _ _ (by positivity) (by positivity)\n          · calc (zeroMult ρ.1 : ℝ) * ‖(2 + t * Complex.I) - s‖\n                ≤ (zeroMult ρ.1 : ℝ) * 4.5 := mul_le_mul_of_nonneg_left h9 hm\n            _ ≤ (zeroMult ρ.1 : ℝ) * 4.5 := le_rfl\n          · exact mul_le_mul hx hx₀ (Real.sqrt_nonneg _) (abs_nonneg _)\n      _ = (4.5 * (zeroMult ρ.1 : ℝ)) * (‖s - ρ.1‖ * ‖(2 + t * Complex.I) - ρ.1‖) := by ring\n\n/-- **The norm reduction**: the far-series norm is bounded by the farG\ntsum. -/\nlemma far_series_norm_le_farG_tsum {t : ℝ} (ht : 10 ≤ t) {s : ℂ}\n    (hσlo : -5 / 2 ≤ s.re) (hσhi : s.re ≤ 3) (him : s.im = t)\n    (hζ : riemannZeta s ≠ 0) :\n    ‖∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖\n      ≤ ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, farG t ρ := by\n  classical\n  have hnorm_summ : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      ‖if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖) := by\n    apply Summable.of_norm_bounded (farG_summable ht.le)\n    intro ρ\n    rw [Real.norm_eq_abs, abs_of_nonneg (norm_nonneg _)]\n    exact seriesDiffTerm_norm_le_farG ht hσlo hσhi him hζ ρ\n  have h1 := norm_tsum_le_tsum_norm hnorm_summ\n  have h2 : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      ‖if ρ ∈ nearZerosSub t then (0 : ℂ) else seriesDiffTerm s (2 + t * Complex.I) ρ‖)\n      ≤ ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, farG t ρ :=\n    Summable.tsum_le_tsum (fun ρ => seriesDiffTerm_norm_le_farG ht hσlo hσhi him hζ ρ)\n      hnorm_summ (farG_summable ht.le)\n  exact h1.trans h2\n\nend NguyenRH1\n\nend"},"extra_content":null}]