Current task: —

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

#1806 assistant 2026-08-24 19:08:48.369 UTC · 627→10327 tok open ⤢
thinking (9716 chars)
Now §16 (3d): the main finset + unit_family_le + bucket counts. Plan: 1. `mainFinset (t : ℝ) : Finset {ρ : ℂ // IsNontrivialZero ρ} := (finite_subtype_norm_lt (2*t+1)).toFinset.filter (fun ρ => 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| < (Nat.floor t : ℝ) + 1)` Hmm — wait. Let me reconsider the main definition. Buckets k = ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1. The finset: zeros with x ≥ 1 and x < ⌊t⌋₊+1. Ball: x < ⌊t⌋₊+1 ≤ t+1 ⟹ |γ| ≤ t+x < 2t+1 ✓. Membership lemma: ρ ∈ mainFinset t ↔ 1 ≤ x ∧ x < ⌊t⌋₊+1 (given ‖ρ‖ < 2t+1, which follows — need to prove in the mem lemma: from x < ⌊t⌋₊+1 ≤ t+1: |γ| ≤ t+x < 2t+1, ‖ρ‖ ≤ |re|+|im| ≤ 1 + (2t+1) = 2t+2... wait — finite_subtype_norm_lt (2t+1) needs ‖ρ‖ < 2t+1: ‖ρ‖ ≤ |re|+|im| ≤ 1+(t+x) with x < t+1: < 1+t+t+1 = 2t+2 — NOT < 2t+1!! Tighten: |im| = |γ| ≤ t+x (for t ≥ 0: |γ| ≤ |t|+x = t+x ✓), so ‖ρ‖ ≤ 1 + t + x < 1 + t + (t+1) = 2t+2 — need the ball bound 2t+2: use finite_subtype_norm_lt (2t+2). ✓ 2. `mem_mainFinset : ρ ∈ mainFinset t ↔ 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| < (Nat.floor t : ℝ) + 1` — needs t ≥ 0 for the ball argument. 3. `unit_family_le` (the generalized dyadic_family_le clone): ``` lemma unit_family_le (FS : Finset {ρ : ℂ // IsNontrivialZero ρ}) (j : {ρ : ℂ // IsNontrivialZero ρ} → ℕ) (K : ℕ) (g : {ρ : ℂ // IsNontrivialZero ρ} → ℝ) (W : ℕ → ℝ) (cnt : ℕ → ℝ) (hW : ∀ k : ℕ, 0 ≤ W k) (hj : ∀ ρ ∈ FS, 1 ≤ j ρ ∧ j ρ ≤ K) (hterm : ∀ ρ ∈ FS, g ρ ≤ W (j ρ) * (zeroMult (ρ : ℂ) : ℝ)) (hcount : ∀ k : ℕ, ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ) ≤ cnt k) : ∑ ρ ∈ FS, g ρ ≤ ∑ k ∈ Finset.Ico 1 (K + 1), W k * cnt k ``` — direct clone of dyadic_family_le's proof. 4. `farG_le_farW_mul (ρ, x ≥ 1)`: farG t ρ ≤ 4.5·farW (⌊x⌋₊)·m: x ≥ k = ⌊x⌋₊ ⟹ x√(1+x²) ≥ k√(1+k²) (monotone: mul_le_mul: x ≥ k ≥ 0 and √(1+x²) ≥ √(1+k²) via sqrt_le_sqrt + pow) ⟹ 4.5·m/(x√(1+x²)) ≤ 4.5·m/(k√(1+k²)) = 4.5·m·farW k: div_le_div_iff₀ + mul_le_mul... form: farG = 4.5·m/(x√) vs 4.5·(m·farW k) = 4.5·m/(k√): ``` lemma farG_le_farW_mul {t : ℝ} (ρ : {ρ : ℂ // IsNontrivialZero ρ}) (hx : 1 ≤ |ρ.1.im - t|) : farG t ρ ≤ 4.5 * (farW (Nat.floor |ρ.1.im - t|) * (zeroMult ρ.1 : ℝ)) ``` — via the monotone chain. Note farG has the if — ρ with x ≥ 1 is far ✓ if_neg. 5. `main_bucket_count (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t} (ht : 10 ≤ t) (k : ℕ) (hk1 : 1 ≤ k) (hk2 : k ≤ Nat.floor t) : ∑ ρ ∈ (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im − t| = k), (zeroMult ρ.1 : ℝ) ≤ 2 * C0hat (t+1) + 0.55`: The bucket's zeros: x ∈ [k, k+1): γ ∈ [t+k, t+k+1) ∪ (t−k−1, t−k]. - Map to (zeroWindow (t+k)).toFinset ∪ (zeroWindow (t−k−1)).toFinset via val-image (like near_sum_refPoint_le's hsub). - Right count: hZC (t+k) (t+k ≥ 2 ✓) ≤ C0hat(t+k+1) ≤ C0hat(2t+1) (C0hat_mono: 1 ≤ t+k+1 ≤ 2t+1 ✓) ≤ C0hat(t+1)+0.55 (C0hat_two_t_add_one_le ht). - Left count: cases on k ≤ t−3: hZC (t−k−1) (t−k−1 ≥ 2) ≤ C0hat(t−k) ≤ C0hat(t+1) (mono: t−k ≥ 3 ≥ 1); else (k > t−3): the window [t−k−1, t−k] ⊆ (−14, 14) — empty by NoLowZeros: the toFinset sum = 0: prove: every element of (zeroWindow_finite (t−k−1)).toFinset has |im| < 14, contradicting NoLowZeros ⟹ the finset is empty ⟹ sum = 0. Formalize: ``` have hempty : (zeroWindow_finite (t−k−1)).toFinset = ∅ := by rw [Finset.eq_empty_iff_forall_notMem] intro ρ hρ rw [Set.Finite.mem_toFinset] at hρ obtain ⟨hz, h1, h2⟩ := hρ -- hz : IsNontrivialZero ρ, h1 : t−k−1 ≤ ρ.im, h2 : ρ.im ≤ t−k have h3 : 14 ≤ |ρ.im| := hNLZ ρ hz -- |ρ.im| < 14: ρ.im ∈ [t−k−1, t−k] with t−k < 5, t−k−1 > −14+... hmm: k > t−3 ⟹ t−k < 3... wait: k > t−3 ⟺ t−k < 3. And k ≤ ⌊t⌋₊ ≤ t ⟹ t−k ≥ 0. So ρ.im ∈ [t−k−1, t−k] ⊆ [−1, 3]: |ρ.im| ≤ 3 < 14 contradiction. -- Actually: t−k−1 ≥ t−t−1 = −1 (k ≤ t) and t−k < 3: ρ.im ∈ [−1, 3) hmm t−k−1 ≥ −1 (from k ≤ t): so ρ.im ≥ −1 ≥ −14 and ρ.im ≤ t−k < 3 < 14: |ρ.im| ≤ 3 < 14 ⟹ contradiction with h3. ``` Hmm wait — k ≤ Nat.floor t ≤ t: t−k ≥ 0 ✓; k > t−3 ⟹ t−k < 3 ✓; t−k−1 ∈ [−1, 2): ρ.im ≥ t−k−1 ≥ −1; ρ.im ≤ t−k < 3. So ρ.im ∈ [−1, 3): |ρ.im| ≤ 3 < 14 ⟹ NoLowZeros (14 ≤ |ρ.im|) fails ⟹ no such ρ ✓. - Then the filter-sum ≤ right-count + left-count ≤ (C0hat(t+1)+0.55) + C0hat(t+1) = 2C0hat(t+1)+0.55 ✓. The image bridge: FS.filter(j ρ = k) — the mult-sum over the image (Subtype.val): Finset.sum_image (Subtype.val injective) ✓ (near_sum_refPoint_le pattern); subset: image ⊆ union of the two window toFinsets: for ρ in the bucket: x = |ρ.im − t| ∈ [k, k+1): cases γ ≥ t: γ ∈ [t+k, t+k+1): zeroWindow (t+k) = [t+k, t+k+1] (closed) ✓; γ < t: γ ∈ (t−k−1, t−k] ⊆ zeroWindow (t−k−1) (closed) ✓. Then: sum over filter = sum over image ≤ sum over union = right + left (Finset.sum_le_sum_of_subset_of_nonneg + Finset.sum_union (disjoint: γ ≥ t+k ≥ t vs γ ≤ t−k ≤ t−1 ✓)). 6. The main assembly: ``` lemma farG_main_le {t : ℝ} (ht : 10 ≤ t) (hZC : ZeroCountProp) (hNLZ : NoLowZeros) : ∑ ρ ∈ mainFinset t, farG t ρ ≤ 4.5 * (2 * C0hat (t + 1) + 0.55) * 1.3476 := by apply (unit_family_le (mainFinset t) (fun ρ => Nat.floor |ρ.1.im − t|) (Nat.floor t) (farG t) (fun k => 4.5 * farW k) (fun _ => 2 * C0hat (t + 1) + 0.55) (fun k => by positivity-ish farW_nonneg...) _ _ _ _).trans ?_ · -- Σ (4.5·farW k)·cnt = (4.5·cnt)·Σ farW k ≤ (4.5·cnt)·1.3476 rw [← Finset.mul_sum] exact mul_le_mul_of_nonneg_left (farW_Ico_le _) (by positivity) · intro ρ hρ have hx := (mem_mainFinset ...).mp hρ -- 1 ≤ ⌊x⌋₊: Nat.one_le_floor_iff? : 1 ≤ ⌊x⌋₊ ⟺ 1 ≤ x — `Nat.one_le_floor_iff (hx : 0 ≤ x)?` or prove: ⌊x⌋₊ ≥ 1 from x ≥ 1: Nat.succ_le_floor? `Nat.one_le_floor_iff : 1 ≤ ⌊r⌋₊ ↔ 1 ≤ r` for r ≥ 0? — there's Nat.one_le_floor_iff (hr : 0 ≤ r)?? Let me guess: `Nat.one_le_floor_iff : 1 ≤ ⌊a⌋₊ ↔ 1 ≤ a` might need 0 ≤ a. floor of abs ≥ 0 always. Try Nat.succ_le_floor : 0 < a → n < a → n+1 ≤ ⌊a⌋₊?? For 1 ≤ x: Nat.one_le_iff_pos? Hmm — simplest: Nat.floor_mono (hx : 1 ≤ x) : ⌊1⌋₊ ≤ ⌊x⌋₊ with ⌊1⌋₊ = 1: `Nat.floor_mono : a ≤ b → ⌊a⌋₊ ≤ ⌊b⌋₊` ✓ and Nat.floor_one : ⌊(1:ℝ)⌋₊ = 1 ✓. -- ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_mono (x ≤ ... hmm x < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_le_floor? — x < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_lt : x < n+1... `Nat.floor_lt' (hn : n ≠ 0)?` or: ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1 (Nat.floor_le_iff? or Nat.lt_floor_add_one): `Nat.lt_floor_add_one (x) : x < ⌊x⌋₊ + 1` — I have x < ⌊t⌋₊+1: suppose ⌊x⌋₊ > ⌊t⌋₊: ⌊x⌋₊ ≥ ⌊t⌋₊+1 ⟹ x ≥ ⌊x⌋₊ ≥ ⌊t⌋₊+1 (Nat.floor_le) contradiction ✓ — prove by contradiction or use `Nat.floor_le_floor`? Let me use: have h := Nat.floor_le_floor (x) (Nat.floor t)?? — `Nat.floor_le_floor : x ≤ y → ⌊x⌋₊ ≤ ⌊y⌋₊`?? that's floor_mono. The bound: x < ⌊t⌋₊+1 doesn't give x ≤ t. Direct: Nat.floor_le_iff : ⌊x⌋₊ ≤ n ↔ x < n+1 (for n : ℕ): `Nat.floor_le_iff (hx : 0 ≤ x)?` — hmm. There's `Nat.floor_le' ?`. I'll find: Nat.floor_le_floor?? Let me use the contradiction approach in proof. · intro ρ hρ; exact farG_le_farW_mul ρ ((mem_mainFinset.mp hρ).1) · intro k; exact main_bucket_count hZC hNLZ ht k ? ? -- needs the k range... but hcount quantifies over ALL k! ``` PROBLEM: unit_family_le's hcount is ∀ k — but main_bucket_count needs 1 ≤ k ≤ ⌊t⌋₊. For k OUTSIDE the bucket range, the filter is EMPTY (no ρ with j ρ = k since j ρ ∈ [1, K]) ⟹ sum = 0 ≤ cnt k ✓. So hcount: for k ∉ [1, ⌊t⌋₊]: empty-filter proof; else main_bucket_count. Write: ``` · intro k by_cases hk : 1 ≤ k ∧ k ≤ Nat.floor t · exact main_bucket_count hZC hNLZ ht k hk.1 hk.2 · -- the filter is empty have hempty : (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im − t| = k) = ∅ := by rw [Finset.eq_empty_iff_forall_notMem] intro ρ hρ rw [Finset.mem_filter] at hρ obtain ⟨hmem, heq⟩ := hρ have hj := (mem_mainFinset_range ...).mp hmem -- 1 ≤ ⌊x⌋₊ ∧ ⌊x⌋₊ ≤ ⌊t⌋₊ exact hk ⟨heq ▸ hj.1, heq ▸ hj.2⟩ rw [hempty, Finset.sum_empty] positivity ``` — needs the bucket-range factoring (mem of mainFinset ⟹ 1 ≤ ⌊x⌋₊ ≤ ⌊t⌋₊). Hmm — main_bucket_count's cnt needs C0hat(t+1) — note ZeroCountProp is the hypothesis hZC. The main assembly's final form: 4.5·(2C₀+0.55)·1.3476 — matches my planned main bound ✓ (12.1284·C₀+3.33531 when expanded later). For the bucket index: use `Nat.floor |ρ.1.im − t|` — written `⌊|ρ.1.im − t|⌋₊` in notation: Nat.floor (·) — in Lean: `⌊x⌋₊` is notation for Nat.floor x. Let me use the notation. Let me now also check `finite_subtype_norm_lt` exists (used in nearZerosSub ✓) and `Nat.floor` API names: Nat.floor_mono ✓ (probably), Nat.floor_one, Nat.floor_le (⌊x⌋₊ ≤ x for x ≥ 0: `Nat.floor_le (hx : 0 ≤ x) : ⌊x⌋₊ ≤ x` ✓), Nat.lt_floor_add_one ✓ (probably: `Nat.lt_floor_add_one (x : ℝ) : x < ⌊x⌋₊ + 1` ✓ — was used in LiCircleBound: `Nat.lt_floor_add_one _` ✓). For ⌊x⌋₊ ≥ 1 from x ≥ 1: `Nat.one_le_floor_iff : 1 ≤ ⌊x⌋₊ ↔ 1 ≤ x`? — or Nat.floor_mono with Nat.floor_one. I'll use: have := Nat.floor_mono hx1 : Nat.floor 1 ≤ ⌊x⌋₊; rw [Nat.floor_one] at this ✓ — Nat.floor_one : ⌊(1:ℝ)⌋₊ = 1 ✓ probably exists; Nat.floor_mono : a ≤ b → ⌊a⌋₊ ≤ ⌊b⌋₊ ✓ exists (maybe `Nat.floor_mono`). For ⌊x⌋₊ ≤ ⌊t⌋₊ from x < ⌊t⌋₊+1: `Nat.floor_lt' ?` or: by_contra: ⌊x⌋₊ > ⌊t⌋₊ ⟹ ⌊x⌋₊ ≥ ⌊t⌋₊+1 ⟹ (⌊t⌋₊+1 : ℝ) ≤ (⌊x⌋₊ : ℝ) ≤ x (Nat.floor_le (abs_nonneg _)) ⟹ ⌊t⌋₊+1 ≤ x contradicts x < ⌊t⌋₊+1 ✓ omega/nlinarith. OK let me write §16. Also the filter-emptiness: `Finset.eq_empty_iff_forall_notMem` — banked from journal-032 ✓ exists. One more check: `mem_mainFinset` needs t ≥ 0 (for |t| = t and the ball): prove with (ht : 0 ≤ t). The ball: ‖ρ.1‖ ≤ |re| + |im| (Complex.norm_le_abs_re_add_abs_im ✓ used in nearZerosSub); |re| ≤ 1 ✓; |im| = |γ| ≤ t + x (t ≥ 0): |γ| = |γ − t + t| ≤ x + t ✓; x < ⌊t⌋₊+1 ≤ t+1 (Nat.floor_le ht) ⟹ ‖ρ‖ < 1 + t + t + 1 = 2t+2 ✓ ball finite_subtype_norm_lt (2t+2) ✓.
Now §16 (3d: main bucket machine). Writing unit_family_le + mainFinset + bucket counts + main assembly.
tool: Edit
input
{
  "replace_all": false,
  "file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean",
  "old_string": "  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 (by linarith : (0 : \u211d) \u2264 t))\n  exact h1.trans h2\n\nend NguyenRH1\n\nend",
  "new_string": "  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 (by linarith : (0 : \u211d) \u2264 t))\n  exact h1.trans h2\n\n/-! ## 16. Piece 3h: the main bucket machine -/\n\n/-- **The generic bucket-family bound** (the unit-interval analog of\nLiCircleBound's `dyadic_family_le`): with bucket index j(\u03c1) \u2208 Ico 1 (K+1),\nper-element bound g \u03c1 \u2264 W(j(\u03c1))\u00b7m, and per-bucket mult count \u2264 cnt k,\nthe FS-sum of g is at most \u03a3_{k \u2208 Ico 1 (K+1)} W k \u00b7 cnt k. -/\nlemma unit_family_le (FS : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n    (j : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u2115) (K : \u2115)\n    (g : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u211d) (W : \u2115 \u2192 \u211d) (cnt : \u2115 \u2192 \u211d)\n    (hW : \u2200 k : \u2115, 0 \u2264 W k)\n    (hj : \u2200 \u03c1 \u2208 FS, 1 \u2264 j \u03c1 \u2227 j \u03c1 \u2264 K)\n    (hterm : \u2200 \u03c1 \u2208 FS, g \u03c1 \u2264 W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d))\n    (hcount : \u2200 k : \u2115,\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), (zeroMult (\u03c1 : \u2102) : \u211d) \u2264 cnt k) :\n    \u2211 \u03c1 \u2208 FS, g \u03c1 \u2264 \u2211 k \u2208 Finset.Ico 1 (K + 1), W k * cnt k := by\n  classical\n  have h1 : \u2211 \u03c1 \u2208 FS, g \u03c1\n      \u2264 \u2211 \u03c1 \u2208 FS, W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d) :=\n    Finset.sum_le_sum (fun \u03c1 h\u03c1 => hterm \u03c1 h\u03c1)\n  have hmaps : \u2200 \u03c1 \u2208 FS, j \u03c1 \u2208 Finset.Ico 1 (K + 1) := by\n    intro \u03c1 h\u03c1\n    rw [Finset.mem_Ico]\n    have h1' := (hj \u03c1 h\u03c1).1\n    have h2' := (hj \u03c1 h\u03c1).2\n    exact \u27e8h1', by omega\u27e9\n  have h2 : \u2211 \u03c1 \u2208 FS, W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d)\n      = \u2211 k \u2208 Finset.Ico 1 (K + 1),\n        \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d) :=\n    (Finset.sum_fiberwise_of_maps_to hmaps\n      (fun \u03c1 => W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d))).symm\n  have h3 : \u2200 k \u2208 Finset.Ico 1 (K + 1),\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d)\n      = W k * \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), (zeroMult (\u03c1 : \u2102) : \u211d) := by\n    intro k hk\n    have hterm' : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k),\n        W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d) = W k * (zeroMult (\u03c1 : \u2102) : \u211d) := by\n      intro \u03c1 h\u03c1\n      rw [Finset.mem_filter] at h\u03c1\n      rw [h\u03c1.2]\n    rw [Finset.sum_congr rfl hterm', Finset.mul_sum]\n  have h4 : \u2200 k \u2208 Finset.Ico 1 (K + 1),\n      W k * \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), (zeroMult (\u03c1 : \u2102) : \u211d)\n        \u2264 W k * cnt k :=\n    fun k hk => mul_le_mul_of_nonneg_left (hcount k) (hW k)\n  calc \u2211 \u03c1 \u2208 FS, g \u03c1\n      \u2264 \u2211 \u03c1 \u2208 FS, W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d) := h1\n    _ = \u2211 k \u2208 Finset.Ico 1 (K + 1),\n          \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), W (j \u03c1) * (zeroMult (\u03c1 : \u2102) : \u211d) := h2\n    _ = \u2211 k \u2208 Finset.Ico 1 (K + 1),\n          W k * \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => j \u03c1 = k), (zeroMult (\u03c1 : \u2102) : \u211d) :=\n        Finset.sum_congr rfl h3\n    _ \u2264 \u2211 k \u2208 Finset.Ico 1 (K + 1), W k * cnt k :=\n        Finset.sum_le_sum h4\n\n/-- The main finset: far zeros with bucket k = \u230ax\u230b\u208a \u2264 \u230at\u230b\u208a (x = |\u03b3\u2212t|,\nequivalently x < \u230at\u230b\u208a+1; contained in the ball \u2016\u03c1\u2016 < 2t+2). -/\ndef mainFinset (t : \u211d) : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1} :=\n  (finite_subtype_norm_lt (2 * t + 2)).toFinset.filter fun \u03c1 =>\n    1 \u2264 |\u03c1.1.im - t| \u2227 |\u03c1.1.im - t| < (Nat.floor t : \u211d) + 1\n\nlemma mem_mainFinset {t : \u211d} (ht : 0 \u2264 t) {\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}} :\n    \u03c1 \u2208 mainFinset t \u2194\n      1 \u2264 |\u03c1.1.im - t| \u2227 |\u03c1.1.im - t| < (Nat.floor t : \u211d) + 1 := by\n  rw [mainFinset, Finset.mem_filter]\n  refine \u27e8fun h => h.2, fun h => \u27e8?_, h\u27e9\u27e9\n  rw [Set.Finite.mem_toFinset]\n  show \u2016\u03c1.1\u2016 < 2 * t + 2\n  have hle : \u2016\u03c1.1\u2016 \u2264 |\u03c1.1.re| + |\u03c1.1.im| := Complex.norm_le_abs_re_add_abs_im _\n  have hre : |\u03c1.1.re| \u2264 1 := by\n    have h1 : 0 < \u03c1.1.re := \u03c1.2.2.1\n    have h2 : \u03c1.1.re < 1 := \u03c1.2.2.2\n    rw [abs_le]\n    constructor <;> linarith\n  have him : |\u03c1.1.im| \u2264 t + |\u03c1.1.im - t| := by\n    calc |\u03c1.1.im| = |\u03c1.1.im - t + t| := by rw [sub_add_cancel]\n      _ \u2264 |\u03c1.1.im - t| + |t| := abs_add_le _ _\n      _ = |\u03c1.1.im - t| + t := by rw [abs_of_nonneg ht]\n      _ = t + |\u03c1.1.im - t| := by ring\n  have hft : (Nat.floor t : \u211d) \u2264 t := Nat.floor_le ht\n  have hx := h.2\n  have htr : (Nat.floor t : \u211d) + 1 \u2264 t + 1 := by linarith [hft]\n  have hx2 : |\u03c1.1.im - t| < t + 1 := lt_of_lt_of_le hx htr\n  linarith [hle, hre, him, hx2]\n\n/-- The bucket index of a main-finset element lies in [1, \u230at\u230b\u208a]. -/\nlemma mainFinset_bucket_range {t : \u211d} (ht : 0 \u2264 t)\n    {\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}} (h\u03c1 : \u03c1 \u2208 mainFinset t) :\n    1 \u2264 Nat.floor |\u03c1.1.im - t| \u2227 Nat.floor |\u03c1.1.im - t| \u2264 Nat.floor t := by\n  have hx := (mem_mainFinset ht).mp h\u03c1\n  constructor\n  \u00b7 have h1 := Nat.floor_mono hx.1\n    rwa [Nat.floor_one] at h1\n  \u00b7 by_contra hbad\n    push_neg at hbad\n    have h2 : Nat.floor t + 1 \u2264 Nat.floor |\u03c1.1.im - t| := hbad\n    have h3 : ((Nat.floor t + 1 : \u2115) : \u211d) \u2264 (Nat.floor |\u03c1.1.im - t| : \u211d) := by\n      exact_mod_cast h2\n    have h4 : (Nat.floor |\u03c1.1.im - t| : \u211d) \u2264 |\u03c1.1.im - t| :=\n      Nat.floor_le (abs_nonneg _)\n    have h5 : ((Nat.floor t : \u2115) : \u211d) + 1 \u2264 |\u03c1.1.im - t| := by\n      have h6 : ((Nat.floor t + 1 : \u2115) : \u211d) = (Nat.floor t : \u211d) + 1 := by\n        push_cast; ring\n      rw [h6] at h3\n      linarith [h3, h4]\n    linarith [hx.2, h5]\n\n/-- farG is bounded by 4.5\u00b7farW(\u230ax\u230b\u208a)\u00b7m (the monotone weight chain). -/\nlemma farG_le_farW_mul {t : \u211d} (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n    (hx : 1 \u2264 |\u03c1.1.im - t|) :\n    farG t \u03c1 \u2264 4.5 * (farW (Nat.floor |\u03c1.1.im - t|) * (zeroMult \u03c1.1 : \u211d)) := by\n  classical\n  have hfar : \u03c1 \u2209 nearZerosSub t := fun h => (not_lt).mp (by\n    have h' := mem_nearZerosSub.mp h\n    linarith [h', hx]) hx\n  rw [farG, if_neg hfar, farW]\n  set k : \u2115 := Nat.floor |\u03c1.1.im - t|\n  set x : \u211d := |\u03c1.1.im - t|\n  have hk1 : (1 : \u211d) \u2264 (k : \u211d) := by\n    have h1 := Nat.floor_mono hx\n    rw [Nat.floor_one] at h1\n    exact_mod_cast h1\n  have hkx : (k : \u211d) \u2264 x := Nat.floor_le (abs_nonneg _)\n  have hmono : (k : \u211d) * Real.sqrt (1 + (k : \u211d) ^ 2)\n      \u2264 x * Real.sqrt (1 + x ^ 2) := by\n    apply mul_le_mul hkx _ (Real.sqrt_nonneg _) (by positivity)\n    apply Real.sqrt_le_sqrt\n    nlinarith [hkx, abs_nonneg x, hkx]\n  have hm : (0 : \u211d) \u2264 (zeroMult \u03c1.1 : \u211d) := Nat.cast_nonneg _\n  have hpos : (0 : \u211d) < (k : \u211d) * Real.sqrt (1 + (k : \u211d) ^ 2) := by\n    have h1 : (0 : \u211d) < (k : \u211d) := by linarith [hk1]\n    positivity\n  rw [show (4.5 : \u211d) * (1 / ((k : \u211d) * Real.sqrt (1 + (k : \u211d) ^ 2)) * (zeroMult \u03c1.1 : \u211d))\n      = (4.5 * (zeroMult \u03c1.1 : \u211d)) * (1 / ((k : \u211d) * Real.sqrt (1 + (k : \u211d) ^ 2))) from by ring]\n  rw [show (4.5 : \u211d) * (zeroMult \u03c1.1 : \u211d) / (x * Real.sqrt (1 + x ^ 2))\n      = (4.5 * (zeroMult \u03c1.1 : \u211d)) * (1 / (x * Real.sqrt (1 + x ^ 2))) from by\n        rw [div_eq_mul_inv]]\n  apply mul_le_mul_of_nonneg_left _ (mul_nonneg (by norm_num : (0 : \u211d) \u2264 4.5) hm)\n  exact one_div_le_one_div_of_le hpos hmono\n\n/-- **The main bucket count**: the mult-weighted count of main-finset\nzeros with bucket k (1 \u2264 k \u2264 \u230at\u230b\u208a) is at most 2\u00b7C0hat(t+1) + 0.55\n(the two-window perimeter bound + NoLowZeros emptiness for low windows). -/\nlemma main_bucket_count (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t : \u211d} (ht : 10 \u2264 t)\n    {k : \u2115} (hk1 : 1 \u2264 k) (hk2 : k \u2264 Nat.floor t) :\n    \u2211 \u03c1 \u2208 (mainFinset t).filter (fun \u03c1 => Nat.floor |\u03c1.1.im - t| = k), (zeroMult \u03c1.1 : \u211d)\n      \u2264 2 * C0hat (t + 1) + 0.55 := by\n  classical\n  set FS := (mainFinset t).filter (fun \u03c1 => Nat.floor |\u03c1.1.im - t| = k) with hFS\n  have hk2R : (k : \u211d) \u2264 t := (Nat.floor_le (by linarith : (0 : \u211d) \u2264 t)).trans\n    (by exact_mod_cast hk2)\n  -- the right window count\n  have htk2 : (2 : \u211d) \u2264 t + (k : \u211d) := by\n    have h1 : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk1\n    linarith [ht, h1]\n  have hright : ((zeroWindow_finite (t + (k : \u211d))).toFinset.sum fun \u03c1 => zeroMult \u03c1 : \u211d)\n      \u2264 C0hat (t + (k : \u211d) + 1) := hZC (t + (k : \u211d)) htk2\n  have hright2 : C0hat (t + (k : \u211d) + 1) \u2264 C0hat (t + 1) + 0.55 := by\n    have h1 : C0hat (t + (k : \u211d) + 1) \u2264 C0hat (2 * t + 1) := by\n      apply C0hat_mono (by linarith [ht, hk1] : (1 : \u211d) \u2264 t + (k : \u211d) + 1)\n      linarith [hk2R]\n    exact h1.trans (C0hat_two_t_add_one_le ht)\n  -- the left window count (case split on k \u2264 t\u22123)\n  have hleft : ((zeroWindow_finite (t - (k : \u211d) - 1)).toFinset.sum fun \u03c1 => zeroMult \u03c1 : \u211d)\n      \u2264 C0hat (t + 1) := by\n    by_cases hcase : (3 : \u211d) \u2264 t - (k : \u211d)\n    \u00b7 have h1 : (2 : \u211d) \u2264 t - (k : \u211d) - 1 := by linarith [hcase]\n      have h2 := hZC (t - (k : \u211d) - 1) h1\n      have h3 : C0hat (t - (k : \u211d) - 1 + 1) \u2264 C0hat (t + 1) := by\n        apply C0hat_mono (by linarith [hcase] : (1 : \u211d) \u2264 t - (k : \u211d))\n        linarith [ht]\n      have h4 : t - (k : \u211d) - 1 + 1 = t - (k : \u211d) := by ring\n      rw [h4] at h2\n      exact h2.trans h3\n    \u00b7 push_neg at hcase\n      have hempty : (zeroWindow_finite (t - (k : \u211d) - 1)).toFinset = \u2205 := by\n        rw [Finset.eq_empty_iff_forall_notMem]\n        intro \u03c1 h\u03c1\n        rw [Set.Finite.mem_toFinset] at h\u03c1\n        obtain \u27e8hz, h1, h2\u27e9 := h\u03c1\n        have h3 : 14 \u2264 |\u03c1.im| := hNLZ \u03c1 hz\n        have h4 : \u03c1.im \u2264 t - (k : \u211d) := h2\n        have h5 : t - (k : \u211d) < 3 := hcase\n        have h6 : t - (k : \u211d) - 1 \u2265 -1 := by linarith [hk2R]\n        have h7 : \u03c1.im \u2265 -1 := by linarith [h1, h6]\n        have h8 : |\u03c1.im| < 14 := by\n          rw [abs_lt]\n          constructor <;> linarith [h4, h5, h7]\n        linarith [h3, h8]\n      rw [hempty, Finset.sum_empty]\n      have h9 : (0 : \u211d) \u2264 C0hat (t + 1) := by\n        have h10 := two_le_C0hat (by linarith [ht] : (1 : \u211d) \u2264 t + 1)\n        linarith\n      exact h9\n  -- the image bridge: bucket \u2286 right \u222a left windows\n  have hbridge : \u2211 \u03c1 \u2208 FS, (zeroMult \u03c1.1 : \u211d)\n      = \u2211 \u03c1 \u2208 FS.image (fun \u03c1 => \u03c1.1), (zeroMult \u03c1 : \u211d) := by\n    rw [Finset.sum_image (fun x _ y _ h => Subtype.ext h)]\n  have hsub : FS.image (fun \u03c1 => \u03c1.1)\n      \u2286 (zeroWindow_finite (t + (k : \u211d))).toFinset \u222a\n        (zeroWindow_finite (t - (k : \u211d) - 1)).toFinset := by\n    intro z hz\n    obtain \u27e8\u03c1, h\u03c1, rfl\u27e9 := Finset.mem_image.mp hz\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8hmem, heq\u27e9 := h\u03c1\n    have hx := (mem_mainFinset (by linarith : (0 : \u211d) \u2264 t)).mp hmem\n    have hk : Nat.floor |\u03c1.1.im - t| = k := heq\n    have hxk : (k : \u211d) \u2264 |\u03c1.1.im - t| := Nat.floor_le (abs_nonneg _)\n    rw [\u2190 hk] at hxk\n    have hxk1 : |\u03c1.1.im - t| < (k : \u211d) + 1 := by\n      have h1 := Nat.lt_floor_add_one |\u03c1.1.im - t|\n      rw [hk] at h1\n      have h2 : ((k + 1 : \u2115) : \u211d) = (k : \u211d) + 1 := by push_cast; ring\n      rwa [h2] at h1\n    rcases le_or_gt t \u03c1.1.im with him | him\n    \u00b7 -- \u03b3 \u2265 t: x = \u03b3 \u2212 t \u2208 [k, k+1): \u03b3 \u2208 [t+k, t+k+1) \u2286 zeroWindow (t+k)\n      apply Finset.mem_union_left\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 have h1 : |\u03c1.1.im - t| = \u03c1.1.im - t := abs_of_nonneg (by linarith [him])\n        rw [h1] at hxk\n        linarith [hxk]\n      \u00b7 have h1 : |\u03c1.1.im - t| = \u03c1.1.im - t := abs_of_nonneg (by linarith [him])\n        rw [h1] at hxk1\n        linarith [hxk1]\n    \u00b7 -- \u03b3 < t: x = t \u2212 \u03b3 \u2208 [k, k+1): \u03b3 \u2208 (t\u2212k\u22121, t\u2212k] \u2286 zeroWindow (t\u2212k\u22121)\n      apply Finset.mem_union_right\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 have h1 : |\u03c1.1.im - t| = t - \u03c1.1.im := abs_of_neg (by linarith [him])\n        rw [h1] at hxk1\n        linarith [hxk1]\n      \u00b7 have h1 : |\u03c1.1.im - t| = t - \u03c1.1.im := abs_of_neg (by linarith [him])\n        rw [h1] at hxk\n        linarith [hxk]\n  have hdisj : Disjoint (zeroWindow_finite (t + (k : \u211d))).toFinset\n      (zeroWindow_finite (t - (k : \u211d) - 1)).toFinset := by\n    rw [Finset.disjoint_left]\n    intro z hz1 hz2\n    rw [Set.Finite.mem_toFinset] at hz1 hz2\n    have h1 : t + (k : \u211d) \u2264 z.im := hz1.2.1\n    have h2 : z.im \u2264 t - (k : \u211d) := hz2.2.2\n    have h3 : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk1\n    linarith [h1, h2, h3]\n  have hW1 := (zeroWindow_finite (t + (k : \u211d)))\n  have hW2 := (zeroWindow_finite (t - (k : \u211d) - 1))\n  calc \u2211 \u03c1 \u2208 FS, (zeroMult \u03c1.1 : \u211d)\n      = \u2211 z \u2208 FS.image (fun \u03c1 => \u03c1.1), (zeroMult z : \u211d) := hbridge\n    _ \u2264 \u2211 z \u2208 hW1.toFinset \u222a hW2.toFinset, (zeroMult z : \u211d) :=\n        Finset.sum_le_sum_of_subset_of_nonneg hsub (fun z _ _ => Nat.cast_nonneg _)\n    _ = \u2211 z \u2208 hW1.toFinset, (zeroMult z : \u211d) + \u2211 z \u2208 hW2.toFinset, (zeroMult z : \u211d) :=\n        Finset.sum_union hdisj\n    _ \u2264 (C0hat (t + 1) + 0.55) + C0hat (t + 1) := by\n        have h1 : (((hW1).toFinset.sum fun \u03c1 => zeroMult \u03c1) : \u211d)\n            \u2264 C0hat (t + 1) + 0.55 := hright.trans hright2\n        have h2 : (((hW2).toFinset.sum fun \u03c1 => zeroMult \u03c1) : \u211d)\n            \u2264 C0hat (t + 1) := hleft\n        linarith [h1, h2]\n    _ = 2 * C0hat (t + 1) + 0.55 := by ring\n\n/-- **The main bound**: the main-finset farG sum is at most\n4.5\u00b7(2\u00b7C0hat(t+1) + 0.55)\u00b71.3476. -/\nlemma farG_main_le (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t : \u211d} (ht : 10 \u2264 t) :\n    \u2211 \u03c1 \u2208 mainFinset t, farG t \u03c1\n      \u2264 4.5 * (2 * C0hat (t + 1) + 0.55) * 1.3476 := by\n  classical\n  have hU := unit_family_le (mainFinset t) (fun \u03c1 => Nat.floor |\u03c1.1.im - t|)\n    (Nat.floor t) (farG t) (fun k => 4.5 * farW k)\n    (fun _ => 2 * C0hat (t + 1) + 0.55)\n    (fun k => mul_nonneg (by norm_num : (0 : \u211d) \u2264 4.5) (farW_nonneg k))\n    (fun \u03c1 h\u03c1 => mainFinset_bucket_range (by linarith : (0 : \u211d) \u2264 t) h\u03c1)\n    (fun \u03c1 h\u03c1 => farG_le_farW_mul \u03c1\n      ((mem_mainFinset (by linarith : (0 : \u211d) \u2264 t)).mp h\u03c1).1)\n    (fun k => by\n      by_cases hk : 1 \u2264 k \u2227 k \u2264 Nat.floor t\n      \u00b7 exact main_bucket_count hZC hNLZ ht hk.1 hk.2\n      \u00b7 push_neg at hk\n        have hempty : (mainFinset t).filter (fun \u03c1 => Nat.floor |\u03c1.1.im - t| = k) = \u2205 := by\n          rw [Finset.eq_empty_iff_forall_notMem]\n          intro \u03c1 h\u03c1\n          rw [Finset.mem_filter] at h\u03c1\n          obtain \u27e8hmem, heq\u27e9 := h\u03c1\n          have hj := mainFinset_bucket_range (by linarith : (0 : \u211d) \u2264 t) hmem\n          rw [heq] at hj\n          exact hk \u27e8hj.1, hj.2\u27e9\n        rw [hempty, Finset.sum_empty]\n        positivity)\n  have hsum : \u2211 k \u2208 Finset.Ico 1 (Nat.floor t + 1), (4.5 * farW k) * (2 * C0hat (t + 1) + 0.55)\n      = (4.5 * (2 * C0hat (t + 1) + 0.55)) * \u2211 k \u2208 Finset.Ico 1 (Nat.floor t + 1), farW k := by\n    rw [Finset.mul_sum]\n    apply Finset.sum_congr rfl\n    intro k _\n    ring\n  calc \u2211 \u03c1 \u2208 mainFinset t, farG t \u03c1\n      \u2264 \u2211 k \u2208 Finset.Ico 1 (Nat.floor t + 1), (4.5 * farW k) * (2 * C0hat (t + 1) + 0.55) := hU\n    _ = (4.5 * (2 * C0hat (t + 1) + 0.55)) * \u2211 k \u2208 Finset.Ico 1 (Nat.floor t + 1), farW k := hsum\n    _ \u2264 (4.5 * (2 * C0hat (t + 1) + 0.55)) * 1.3476 :=\n        mul_le_mul_of_nonneg_left (farW_Ico_le _) (by positivity)\n\nend NguyenRH1\n\nend"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Now §16 (3d): the main finset + unit_family_le + bucket counts. Plan:\n\n1. `mainFinset (t : ℝ) : Finset {ρ : ℂ // IsNontrivialZero ρ} := (finite_subtype_norm_lt (2*t+1)).toFinset.filter (fun ρ => 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| < (Nat.floor t : ℝ) + 1)`\n   Hmm — wait. Let me reconsider the main definition. Buckets k = ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1. The finset: zeros with x ≥ 1 and x < ⌊t⌋₊+1. Ball: x < ⌊t⌋₊+1 ≤ t+1 ⟹ |γ| ≤ t+x < 2t+1 ✓.\n   Membership lemma: ρ ∈ mainFinset t ↔ 1 ≤ x ∧ x < ⌊t⌋₊+1 (given ‖ρ‖ < 2t+1, which follows — need to prove in the mem lemma: from x < ⌊t⌋₊+1 ≤ t+1: |γ| ≤ t+x < 2t+1, ‖ρ‖ ≤ |re|+|im| ≤ 1 + (2t+1) = 2t+2... wait — finite_subtype_norm_lt (2t+1) needs ‖ρ‖ < 2t+1: ‖ρ‖ ≤ |re|+|im| ≤ 1+(t+x) with x < t+1: < 1+t+t+1 = 2t+2 — NOT < 2t+1!! Tighten: |im| = |γ| ≤ t+x (for t ≥ 0: |γ| ≤ |t|+x = t+x ✓), so ‖ρ‖ ≤ 1 + t + x < 1 + t + (t+1) = 2t+2 — need the ball bound 2t+2: use finite_subtype_norm_lt (2t+2). ✓\n\n2. `mem_mainFinset : ρ ∈ mainFinset t ↔ 1 ≤ |ρ.1.im − t| ∧ |ρ.1.im − t| < (Nat.floor t : ℝ) + 1` — needs t ≥ 0 for the ball argument.\n\n3. `unit_family_le` (the generalized dyadic_family_le clone):\n```\nlemma unit_family_le (FS : Finset {ρ : ℂ // IsNontrivialZero ρ})\n    (j : {ρ : ℂ // IsNontrivialZero ρ} → ℕ) (K : ℕ)\n    (g : {ρ : ℂ // IsNontrivialZero ρ} → ℝ) (W : ℕ → ℝ) (cnt : ℕ → ℝ)\n    (hW : ∀ k : ℕ, 0 ≤ W k)\n    (hj : ∀ ρ ∈ FS, 1 ≤ j ρ ∧ j ρ ≤ K)\n    (hterm : ∀ ρ ∈ FS, g ρ ≤ W (j ρ) * (zeroMult (ρ : ℂ) : ℝ))\n    (hcount : ∀ k : ℕ,\n      ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ) ≤ cnt k) :\n    ∑ ρ ∈ FS, g ρ ≤ ∑ k ∈ Finset.Ico 1 (K + 1), W k * cnt k\n```\n— direct clone of dyadic_family_le's proof.\n\n4. `farG_le_farW_mul (ρ, x ≥ 1)`: farG t ρ ≤ 4.5·farW (⌊x⌋₊)·m: x ≥ k = ⌊x⌋₊ ⟹ x√(1+x²) ≥ k√(1+k²) (monotone: mul_le_mul: x ≥ k ≥ 0 and √(1+x²) ≥ √(1+k²) via sqrt_le_sqrt + pow) ⟹ 4.5·m/(x√(1+x²)) ≤ 4.5·m/(k√(1+k²)) = 4.5·m·farW k: div_le_div_iff₀ + mul_le_mul... form: farG = 4.5·m/(x√) vs 4.5·(m·farW k) = 4.5·m/(k√): \n```\nlemma farG_le_farW_mul {t : ℝ} (ρ : {ρ : ℂ // IsNontrivialZero ρ})\n    (hx : 1 ≤ |ρ.1.im - t|) :\n    farG t ρ ≤ 4.5 * (farW (Nat.floor |ρ.1.im - t|) * (zeroMult ρ.1 : ℝ))\n```\n— via the monotone chain. Note farG has the if — ρ with x ≥ 1 is far ✓ if_neg.\n\n5. `main_bucket_count (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t} (ht : 10 ≤ t) (k : ℕ) (hk1 : 1 ≤ k) (hk2 : k ≤ Nat.floor t) : ∑ ρ ∈ (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im − t| = k), (zeroMult ρ.1 : ℝ) ≤ 2 * C0hat (t+1) + 0.55`:\n   The bucket's zeros: x ∈ [k, k+1): γ ∈ [t+k, t+k+1) ∪ (t−k−1, t−k].\n   - Map to (zeroWindow (t+k)).toFinset ∪ (zeroWindow (t−k−1)).toFinset via val-image (like near_sum_refPoint_le's hsub).\n   - Right count: hZC (t+k) (t+k ≥ 2 ✓) ≤ C0hat(t+k+1) ≤ C0hat(2t+1) (C0hat_mono: 1 ≤ t+k+1 ≤ 2t+1 ✓) ≤ C0hat(t+1)+0.55 (C0hat_two_t_add_one_le ht).\n   - Left count: cases on k ≤ t−3: hZC (t−k−1) (t−k−1 ≥ 2) ≤ C0hat(t−k) ≤ C0hat(t+1) (mono: t−k ≥ 3 ≥ 1); else (k > t−3): the window [t−k−1, t−k] ⊆ (−14, 14) — empty by NoLowZeros: the toFinset sum = 0: prove: every element of (zeroWindow_finite (t−k−1)).toFinset has |im| < 14, contradicting NoLowZeros ⟹ the finset is empty ⟹ sum = 0. Formalize: \n     ```\n     have hempty : (zeroWindow_finite (t−k−1)).toFinset = ∅ := by\n       rw [Finset.eq_empty_iff_forall_notMem]\n       intro ρ hρ\n       rw [Set.Finite.mem_toFinset] at hρ\n       obtain ⟨hz, h1, h2⟩ := hρ  -- hz : IsNontrivialZero ρ, h1 : t−k−1 ≤ ρ.im, h2 : ρ.im ≤ t−k\n       have h3 : 14 ≤ |ρ.im| := hNLZ ρ hz\n       -- |ρ.im| < 14: ρ.im ∈ [t−k−1, t−k] with t−k < 5, t−k−1 > −14+... hmm: k > t−3 ⟹ t−k < 3... wait: k > t−3 ⟺ t−k < 3. And k ≤ ⌊t⌋₊ ≤ t ⟹ t−k ≥ 0. So ρ.im ∈ [t−k−1, t−k] ⊆ [−1, 3]: |ρ.im| ≤ 3 < 14 contradiction.\n       -- Actually: t−k−1 ≥ t−t−1 = −1 (k ≤ t) and t−k < 3: ρ.im ∈ [−1, 3) hmm t−k−1 ≥ −1 (from k ≤ t): so ρ.im ≥ −1 ≥ −14 and ρ.im ≤ t−k < 3 < 14: |ρ.im| ≤ 3 < 14 ⟹ contradiction with h3.\n     ```\n     Hmm wait — k ≤ Nat.floor t ≤ t: t−k ≥ 0 ✓; k > t−3 ⟹ t−k < 3 ✓; t−k−1 ∈ [−1, 2): ρ.im ≥ t−k−1 ≥ −1; ρ.im ≤ t−k < 3. So ρ.im ∈ [−1, 3): |ρ.im| ≤ 3 < 14 ⟹ NoLowZeros (14 ≤ |ρ.im|) fails ⟹ no such ρ ✓.\n   - Then the filter-sum ≤ right-count + left-count ≤ (C0hat(t+1)+0.55) + C0hat(t+1) = 2C0hat(t+1)+0.55 ✓.\n   The image bridge: FS.filter(j ρ = k) — the mult-sum over the image (Subtype.val): Finset.sum_image (Subtype.val injective) ✓ (near_sum_refPoint_le pattern); subset: image ⊆ union of the two window toFinsets: for ρ in the bucket: x = |ρ.im − t| ∈ [k, k+1): cases γ ≥ t: γ ∈ [t+k, t+k+1): zeroWindow (t+k) = [t+k, t+k+1] (closed) ✓; γ < t: γ ∈ (t−k−1, t−k] ⊆ zeroWindow (t−k−1) (closed) ✓.\n   Then: sum over filter = sum over image ≤ sum over union = right + left (Finset.sum_le_sum_of_subset_of_nonneg + Finset.sum_union (disjoint: γ ≥ t+k ≥ t vs γ ≤ t−k ≤ t−1 ✓)).\n\n6. The main assembly:\n```\nlemma farG_main_le {t : ℝ} (ht : 10 ≤ t) (hZC : ZeroCountProp) (hNLZ : NoLowZeros) :\n    ∑ ρ ∈ mainFinset t, farG t ρ ≤ 4.5 * (2 * C0hat (t + 1) + 0.55) * 1.3476 := by\n  apply (unit_family_le (mainFinset t) (fun ρ => Nat.floor |ρ.1.im − t|) (Nat.floor t)\n    (farG t) (fun k => 4.5 * farW k) (fun _ => 2 * C0hat (t + 1) + 0.55)\n    (fun k => by positivity-ish farW_nonneg...) _ _ _ _).trans ?_\n  · -- Σ (4.5·farW k)·cnt = (4.5·cnt)·Σ farW k ≤ (4.5·cnt)·1.3476\n    rw [← Finset.mul_sum]\n    exact mul_le_mul_of_nonneg_left (farW_Ico_le _) (by positivity)\n  · intro ρ hρ\n    have hx := (mem_mainFinset ...).mp hρ\n    -- 1 ≤ ⌊x⌋₊: Nat.one_le_floor_iff? : 1 ≤ ⌊x⌋₊ ⟺ 1 ≤ x — `Nat.one_le_floor_iff (hx : 0 ≤ x)?` or prove: ⌊x⌋₊ ≥ 1 from x ≥ 1: Nat.succ_le_floor? `Nat.one_le_floor_iff : 1 ≤ ⌊r⌋₊ ↔ 1 ≤ r` for r ≥ 0? — there's Nat.one_le_floor_iff (hr : 0 ≤ r)?? Let me guess: `Nat.one_le_floor_iff : 1 ≤ ⌊a⌋₊ ↔ 1 ≤ a` might need 0 ≤ a. floor of abs ≥ 0 always. Try Nat.succ_le_floor : 0 < a → n < a → n+1 ≤ ⌊a⌋₊?? For 1 ≤ x: Nat.one_le_iff_pos? Hmm — simplest: Nat.floor_mono (hx : 1 ≤ x) : ⌊1⌋₊ ≤ ⌊x⌋₊ with ⌊1⌋₊ = 1: `Nat.floor_mono : a ≤ b → ⌊a⌋₊ ≤ ⌊b⌋₊` ✓ and Nat.floor_one : ⌊(1:ℝ)⌋₊ = 1 ✓.\n    -- ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_mono (x ≤ ... hmm x < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_le_floor? — x < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ < ⌊t⌋₊+1 ⟹ ⌊x⌋₊ ≤ ⌊t⌋₊: Nat.floor_lt : x < n+1... `Nat.floor_lt' (hn : n ≠ 0)?` or: ⌊x⌋₊ ≤ ⌊t⌋₊ ⟺ x < ⌊t⌋₊+1 (Nat.floor_le_iff? or Nat.lt_floor_add_one): `Nat.lt_floor_add_one (x) : x < ⌊x⌋₊ + 1` — I have x < ⌊t⌋₊+1: suppose ⌊x⌋₊ > ⌊t⌋₊: ⌊x⌋₊ ≥ ⌊t⌋₊+1 ⟹ x ≥ ⌊x⌋₊ ≥ ⌊t⌋₊+1 (Nat.floor_le) contradiction ✓ — prove by contradiction or use `Nat.floor_le_floor`? Let me use: have h := Nat.floor_le_floor (x) (Nat.floor t)?? — `Nat.floor_le_floor : x ≤ y → ⌊x⌋₊ ≤ ⌊y⌋₊`?? that's floor_mono. The bound: x < ⌊t⌋₊+1 doesn't give x ≤ t. Direct: Nat.floor_le_iff : ⌊x⌋₊ ≤ n ↔ x < n+1 (for n : ℕ): `Nat.floor_le_iff (hx : 0 ≤ x)?` — hmm. There's `Nat.floor_le' ?`. I'll find: Nat.floor_le_floor?? Let me use the contradiction approach in proof.\n  · intro ρ hρ; exact farG_le_farW_mul ρ ((mem_mainFinset.mp hρ).1)\n  · intro k; exact main_bucket_count hZC hNLZ ht k ? ?  -- needs the k range... but hcount quantifies over ALL k!\n```\nPROBLEM: unit_family_le's hcount is ∀ k — but main_bucket_count needs 1 ≤ k ≤ ⌊t⌋₊. For k OUTSIDE the bucket range, the filter is EMPTY (no ρ with j ρ = k since j ρ ∈ [1, K]) ⟹ sum = 0 ≤ cnt k ✓. So hcount: for k ∉ [1, ⌊t⌋₊]: empty-filter proof; else main_bucket_count. Write:\n```\n  · intro k\n    by_cases hk : 1 ≤ k ∧ k ≤ Nat.floor t\n    · exact main_bucket_count hZC hNLZ ht k hk.1 hk.2\n    · -- the filter is empty\n      have hempty : (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im − t| = k) = ∅ := by\n        rw [Finset.eq_empty_iff_forall_notMem]\n        intro ρ hρ\n        rw [Finset.mem_filter] at hρ\n        obtain ⟨hmem, heq⟩ := hρ\n        have hj := (mem_mainFinset_range ...).mp hmem  -- 1 ≤ ⌊x⌋₊ ∧ ⌊x⌋₊ ≤ ⌊t⌋₊\n        exact hk ⟨heq ▸ hj.1, heq ▸ hj.2⟩\n      rw [hempty, Finset.sum_empty]\n      positivity\n```\n— needs the bucket-range factoring (mem of mainFinset ⟹ 1 ≤ ⌊x⌋₊ ≤ ⌊t⌋₊).\n\nHmm — main_bucket_count's cnt needs C0hat(t+1) — note ZeroCountProp is the hypothesis hZC. The main assembly's final form: 4.5·(2C₀+0.55)·1.3476 — matches my planned main bound ✓ (12.1284·C₀+3.33531 when expanded later).\n\nFor the bucket index: use `Nat.floor |ρ.1.im − t|` — written `⌊|ρ.1.im − t|⌋₊` in notation: Nat.floor (·) — in Lean: `⌊x⌋₊` is notation for Nat.floor x. Let me use the notation.\n\nLet me now also check `finite_subtype_norm_lt` exists (used in nearZerosSub ✓) and `Nat.floor` API names: Nat.floor_mono ✓ (probably), Nat.floor_one, Nat.floor_le (⌊x⌋₊ ≤ x for x ≥ 0: `Nat.floor_le (hx : 0 ≤ x) : ⌊x⌋₊ ≤ x` ✓), Nat.lt_floor_add_one ✓ (probably: `Nat.lt_floor_add_one (x : ℝ) : x < ⌊x⌋₊ + 1` ✓ — was used in LiCircleBound: `Nat.lt_floor_add_one _` ✓).\nFor ⌊x⌋₊ ≥ 1 from x ≥ 1: `Nat.one_le_floor_iff : 1 ≤ ⌊x⌋₊ ↔ 1 ≤ x`? — or Nat.floor_mono with Nat.floor_one. I'll use: have := Nat.floor_mono hx1 : Nat.floor 1 ≤ ⌊x⌋₊; rw [Nat.floor_one] at this ✓ — Nat.floor_one : ⌊(1:ℝ)⌋₊ = 1 ✓ probably exists; Nat.floor_mono : a ≤ b → ⌊a⌋₊ ≤ ⌊b⌋₊ ✓ exists (maybe `Nat.floor_mono`).\nFor ⌊x⌋₊ ≤ ⌊t⌋₊ from x < ⌊t⌋₊+1: `Nat.floor_lt' ?` or: by_contra: ⌊x⌋₊ > ⌊t⌋₊ ⟹ ⌊x⌋₊ ≥ ⌊t⌋₊+1 ⟹ (⌊t⌋₊+1 : ℝ) ≤ (⌊x⌋₊ : ℝ) ≤ x (Nat.floor_le (abs_nonneg _)) ⟹ ⌊t⌋₊+1 ≤ x contradicts x < ⌊t⌋₊+1 ✓ omega/nlinarith.\n\nOK let me write §16. Also the filter-emptiness: `Finset.eq_empty_iff_forall_notMem` — banked from journal-032 ✓ exists.\n\nOne more check: `mem_mainFinset` needs t ≥ 0 (for |t| = t and the ball): prove with (ht : 0 ≤ t). The ball: ‖ρ.1‖ ≤ |re| + |im| (Complex.norm_le_abs_re_add_abs_im ✓ used in nearZerosSub); |re| ≤ 1 ✓; |im| = |γ| ≤ t + x (t ≥ 0): |γ| = |γ − t + t| ≤ x + t ✓; x < ⌊t⌋₊+1 ≤ t+1 (Nat.floor_le ht) ⟹ ‖ρ‖ < 1 + t + t + 1 = 2t+2 ✓ ball finite_subtype_norm_lt (2t+2) ✓.","signature":""},{"type":"text","text":"Now §16 (3d: main bucket machine). Writing unit_family_le + mainFinset + bucket counts + main assembly."},{"type":"tool_use","id":"Edit_165","name":"Edit","input":{"replace_all":false,"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean","old_string":"  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 (by linarith : (0 : ℝ) ≤ t))\n  exact h1.trans h2\n\nend NguyenRH1\n\nend","new_string":"  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 (by linarith : (0 : ℝ) ≤ t))\n  exact h1.trans h2\n\n/-! ## 16. Piece 3h: the main bucket machine -/\n\n/-- **The generic bucket-family bound** (the unit-interval analog of\nLiCircleBound's `dyadic_family_le`): with bucket index j(ρ) ∈ Ico 1 (K+1),\nper-element bound g ρ ≤ W(j(ρ))·m, and per-bucket mult count ≤ cnt k,\nthe FS-sum of g is at most Σ_{k ∈ Ico 1 (K+1)} W k · cnt k. -/\nlemma unit_family_le (FS : Finset {ρ : ℂ // IsNontrivialZero ρ})\n    (j : {ρ : ℂ // IsNontrivialZero ρ} → ℕ) (K : ℕ)\n    (g : {ρ : ℂ // IsNontrivialZero ρ} → ℝ) (W : ℕ → ℝ) (cnt : ℕ → ℝ)\n    (hW : ∀ k : ℕ, 0 ≤ W k)\n    (hj : ∀ ρ ∈ FS, 1 ≤ j ρ ∧ j ρ ≤ K)\n    (hterm : ∀ ρ ∈ FS, g ρ ≤ W (j ρ) * (zeroMult (ρ : ℂ) : ℝ))\n    (hcount : ∀ k : ℕ,\n      ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ) ≤ cnt k) :\n    ∑ ρ ∈ FS, g ρ ≤ ∑ k ∈ Finset.Ico 1 (K + 1), W k * cnt k := by\n  classical\n  have h1 : ∑ ρ ∈ FS, g ρ\n      ≤ ∑ ρ ∈ FS, W (j ρ) * (zeroMult (ρ : ℂ) : ℝ) :=\n    Finset.sum_le_sum (fun ρ hρ => hterm ρ hρ)\n  have hmaps : ∀ ρ ∈ FS, j ρ ∈ Finset.Ico 1 (K + 1) := by\n    intro ρ hρ\n    rw [Finset.mem_Ico]\n    have h1' := (hj ρ hρ).1\n    have h2' := (hj ρ hρ).2\n    exact ⟨h1', by omega⟩\n  have h2 : ∑ ρ ∈ FS, W (j ρ) * (zeroMult (ρ : ℂ) : ℝ)\n      = ∑ k ∈ Finset.Ico 1 (K + 1),\n        ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), W (j ρ) * (zeroMult (ρ : ℂ) : ℝ) :=\n    (Finset.sum_fiberwise_of_maps_to hmaps\n      (fun ρ => W (j ρ) * (zeroMult (ρ : ℂ) : ℝ))).symm\n  have h3 : ∀ k ∈ Finset.Ico 1 (K + 1),\n      ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), W (j ρ) * (zeroMult (ρ : ℂ) : ℝ)\n      = W k * ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ) := by\n    intro k hk\n    have hterm' : ∀ ρ ∈ FS.filter (fun ρ => j ρ = k),\n        W (j ρ) * (zeroMult (ρ : ℂ) : ℝ) = W k * (zeroMult (ρ : ℂ) : ℝ) := by\n      intro ρ hρ\n      rw [Finset.mem_filter] at hρ\n      rw [hρ.2]\n    rw [Finset.sum_congr rfl hterm', Finset.mul_sum]\n  have h4 : ∀ k ∈ Finset.Ico 1 (K + 1),\n      W k * ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ)\n        ≤ W k * cnt k :=\n    fun k hk => mul_le_mul_of_nonneg_left (hcount k) (hW k)\n  calc ∑ ρ ∈ FS, g ρ\n      ≤ ∑ ρ ∈ FS, W (j ρ) * (zeroMult (ρ : ℂ) : ℝ) := h1\n    _ = ∑ k ∈ Finset.Ico 1 (K + 1),\n          ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), W (j ρ) * (zeroMult (ρ : ℂ) : ℝ) := h2\n    _ = ∑ k ∈ Finset.Ico 1 (K + 1),\n          W k * ∑ ρ ∈ FS.filter (fun ρ => j ρ = k), (zeroMult (ρ : ℂ) : ℝ) :=\n        Finset.sum_congr rfl h3\n    _ ≤ ∑ k ∈ Finset.Ico 1 (K + 1), W k * cnt k :=\n        Finset.sum_le_sum h4\n\n/-- The main finset: far zeros with bucket k = ⌊x⌋₊ ≤ ⌊t⌋₊ (x = |γ−t|,\nequivalently x < ⌊t⌋₊+1; contained in the ball ‖ρ‖ < 2t+2). -/\ndef mainFinset (t : ℝ) : Finset {ρ : ℂ // IsNontrivialZero ρ} :=\n  (finite_subtype_norm_lt (2 * t + 2)).toFinset.filter fun ρ =>\n    1 ≤ |ρ.1.im - t| ∧ |ρ.1.im - t| < (Nat.floor t : ℝ) + 1\n\nlemma mem_mainFinset {t : ℝ} (ht : 0 ≤ t) {ρ : {ρ : ℂ // IsNontrivialZero ρ}} :\n    ρ ∈ mainFinset t ↔\n      1 ≤ |ρ.1.im - t| ∧ |ρ.1.im - t| < (Nat.floor t : ℝ) + 1 := by\n  rw [mainFinset, Finset.mem_filter]\n  refine ⟨fun h => h.2, fun h => ⟨?_, h⟩⟩\n  rw [Set.Finite.mem_toFinset]\n  show ‖ρ.1‖ < 2 * t + 2\n  have hle : ‖ρ.1‖ ≤ |ρ.1.re| + |ρ.1.im| := Complex.norm_le_abs_re_add_abs_im _\n  have hre : |ρ.1.re| ≤ 1 := by\n    have h1 : 0 < ρ.1.re := ρ.2.2.1\n    have h2 : ρ.1.re < 1 := ρ.2.2.2\n    rw [abs_le]\n    constructor <;> linarith\n  have him : |ρ.1.im| ≤ t + |ρ.1.im - 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 ht]\n      _ = t + |ρ.1.im - t| := by ring\n  have hft : (Nat.floor t : ℝ) ≤ t := Nat.floor_le ht\n  have hx := h.2\n  have htr : (Nat.floor t : ℝ) + 1 ≤ t + 1 := by linarith [hft]\n  have hx2 : |ρ.1.im - t| < t + 1 := lt_of_lt_of_le hx htr\n  linarith [hle, hre, him, hx2]\n\n/-- The bucket index of a main-finset element lies in [1, ⌊t⌋₊]. -/\nlemma mainFinset_bucket_range {t : ℝ} (ht : 0 ≤ t)\n    {ρ : {ρ : ℂ // IsNontrivialZero ρ}} (hρ : ρ ∈ mainFinset t) :\n    1 ≤ Nat.floor |ρ.1.im - t| ∧ Nat.floor |ρ.1.im - t| ≤ Nat.floor t := by\n  have hx := (mem_mainFinset ht).mp hρ\n  constructor\n  · have h1 := Nat.floor_mono hx.1\n    rwa [Nat.floor_one] at h1\n  · by_contra hbad\n    push_neg at hbad\n    have h2 : Nat.floor t + 1 ≤ Nat.floor |ρ.1.im - t| := hbad\n    have h3 : ((Nat.floor t + 1 : ℕ) : ℝ) ≤ (Nat.floor |ρ.1.im - t| : ℝ) := by\n      exact_mod_cast h2\n    have h4 : (Nat.floor |ρ.1.im - t| : ℝ) ≤ |ρ.1.im - t| :=\n      Nat.floor_le (abs_nonneg _)\n    have h5 : ((Nat.floor t : ℕ) : ℝ) + 1 ≤ |ρ.1.im - t| := by\n      have h6 : ((Nat.floor t + 1 : ℕ) : ℝ) = (Nat.floor t : ℝ) + 1 := by\n        push_cast; ring\n      rw [h6] at h3\n      linarith [h3, h4]\n    linarith [hx.2, h5]\n\n/-- farG is bounded by 4.5·farW(⌊x⌋₊)·m (the monotone weight chain). -/\nlemma farG_le_farW_mul {t : ℝ} (ρ : {ρ : ℂ // IsNontrivialZero ρ})\n    (hx : 1 ≤ |ρ.1.im - t|) :\n    farG t ρ ≤ 4.5 * (farW (Nat.floor |ρ.1.im - t|) * (zeroMult ρ.1 : ℝ)) := by\n  classical\n  have hfar : ρ ∉ nearZerosSub t := fun h => (not_lt).mp (by\n    have h' := mem_nearZerosSub.mp h\n    linarith [h', hx]) hx\n  rw [farG, if_neg hfar, farW]\n  set k : ℕ := Nat.floor |ρ.1.im - t|\n  set x : ℝ := |ρ.1.im - t|\n  have hk1 : (1 : ℝ) ≤ (k : ℝ) := by\n    have h1 := Nat.floor_mono hx\n    rw [Nat.floor_one] at h1\n    exact_mod_cast h1\n  have hkx : (k : ℝ) ≤ x := Nat.floor_le (abs_nonneg _)\n  have hmono : (k : ℝ) * Real.sqrt (1 + (k : ℝ) ^ 2)\n      ≤ x * Real.sqrt (1 + x ^ 2) := by\n    apply mul_le_mul hkx _ (Real.sqrt_nonneg _) (by positivity)\n    apply Real.sqrt_le_sqrt\n    nlinarith [hkx, abs_nonneg x, hkx]\n  have hm : (0 : ℝ) ≤ (zeroMult ρ.1 : ℝ) := Nat.cast_nonneg _\n  have hpos : (0 : ℝ) < (k : ℝ) * Real.sqrt (1 + (k : ℝ) ^ 2) := by\n    have h1 : (0 : ℝ) < (k : ℝ) := by linarith [hk1]\n    positivity\n  rw [show (4.5 : ℝ) * (1 / ((k : ℝ) * Real.sqrt (1 + (k : ℝ) ^ 2)) * (zeroMult ρ.1 : ℝ))\n      = (4.5 * (zeroMult ρ.1 : ℝ)) * (1 / ((k : ℝ) * Real.sqrt (1 + (k : ℝ) ^ 2))) from by ring]\n  rw [show (4.5 : ℝ) * (zeroMult ρ.1 : ℝ) / (x * Real.sqrt (1 + x ^ 2))\n      = (4.5 * (zeroMult ρ.1 : ℝ)) * (1 / (x * Real.sqrt (1 + x ^ 2))) from by\n        rw [div_eq_mul_inv]]\n  apply mul_le_mul_of_nonneg_left _ (mul_nonneg (by norm_num : (0 : ℝ) ≤ 4.5) hm)\n  exact one_div_le_one_div_of_le hpos hmono\n\n/-- **The main bucket count**: the mult-weighted count of main-finset\nzeros with bucket k (1 ≤ k ≤ ⌊t⌋₊) is at most 2·C0hat(t+1) + 0.55\n(the two-window perimeter bound + NoLowZeros emptiness for low windows). -/\nlemma main_bucket_count (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t : ℝ} (ht : 10 ≤ t)\n    {k : ℕ} (hk1 : 1 ≤ k) (hk2 : k ≤ Nat.floor t) :\n    ∑ ρ ∈ (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im - t| = k), (zeroMult ρ.1 : ℝ)\n      ≤ 2 * C0hat (t + 1) + 0.55 := by\n  classical\n  set FS := (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im - t| = k) with hFS\n  have hk2R : (k : ℝ) ≤ t := (Nat.floor_le (by linarith : (0 : ℝ) ≤ t)).trans\n    (by exact_mod_cast hk2)\n  -- the right window count\n  have htk2 : (2 : ℝ) ≤ t + (k : ℝ) := by\n    have h1 : (1 : ℝ) ≤ (k : ℝ) := by exact_mod_cast hk1\n    linarith [ht, h1]\n  have hright : ((zeroWindow_finite (t + (k : ℝ))).toFinset.sum fun ρ => zeroMult ρ : ℝ)\n      ≤ C0hat (t + (k : ℝ) + 1) := hZC (t + (k : ℝ)) htk2\n  have hright2 : C0hat (t + (k : ℝ) + 1) ≤ C0hat (t + 1) + 0.55 := by\n    have h1 : C0hat (t + (k : ℝ) + 1) ≤ C0hat (2 * t + 1) := by\n      apply C0hat_mono (by linarith [ht, hk1] : (1 : ℝ) ≤ t + (k : ℝ) + 1)\n      linarith [hk2R]\n    exact h1.trans (C0hat_two_t_add_one_le ht)\n  -- the left window count (case split on k ≤ t−3)\n  have hleft : ((zeroWindow_finite (t - (k : ℝ) - 1)).toFinset.sum fun ρ => zeroMult ρ : ℝ)\n      ≤ C0hat (t + 1) := by\n    by_cases hcase : (3 : ℝ) ≤ t - (k : ℝ)\n    · have h1 : (2 : ℝ) ≤ t - (k : ℝ) - 1 := by linarith [hcase]\n      have h2 := hZC (t - (k : ℝ) - 1) h1\n      have h3 : C0hat (t - (k : ℝ) - 1 + 1) ≤ C0hat (t + 1) := by\n        apply C0hat_mono (by linarith [hcase] : (1 : ℝ) ≤ t - (k : ℝ))\n        linarith [ht]\n      have h4 : t - (k : ℝ) - 1 + 1 = t - (k : ℝ) := by ring\n      rw [h4] at h2\n      exact h2.trans h3\n    · push_neg at hcase\n      have hempty : (zeroWindow_finite (t - (k : ℝ) - 1)).toFinset = ∅ := by\n        rw [Finset.eq_empty_iff_forall_notMem]\n        intro ρ hρ\n        rw [Set.Finite.mem_toFinset] at hρ\n        obtain ⟨hz, h1, h2⟩ := hρ\n        have h3 : 14 ≤ |ρ.im| := hNLZ ρ hz\n        have h4 : ρ.im ≤ t - (k : ℝ) := h2\n        have h5 : t - (k : ℝ) < 3 := hcase\n        have h6 : t - (k : ℝ) - 1 ≥ -1 := by linarith [hk2R]\n        have h7 : ρ.im ≥ -1 := by linarith [h1, h6]\n        have h8 : |ρ.im| < 14 := by\n          rw [abs_lt]\n          constructor <;> linarith [h4, h5, h7]\n        linarith [h3, h8]\n      rw [hempty, Finset.sum_empty]\n      have h9 : (0 : ℝ) ≤ C0hat (t + 1) := by\n        have h10 := two_le_C0hat (by linarith [ht] : (1 : ℝ) ≤ t + 1)\n        linarith\n      exact h9\n  -- the image bridge: bucket ⊆ right ∪ left windows\n  have hbridge : ∑ ρ ∈ FS, (zeroMult ρ.1 : ℝ)\n      = ∑ ρ ∈ FS.image (fun ρ => ρ.1), (zeroMult ρ : ℝ) := by\n    rw [Finset.sum_image (fun x _ y _ h => Subtype.ext h)]\n  have hsub : FS.image (fun ρ => ρ.1)\n      ⊆ (zeroWindow_finite (t + (k : ℝ))).toFinset ∪\n        (zeroWindow_finite (t - (k : ℝ) - 1)).toFinset := by\n    intro z hz\n    obtain ⟨ρ, hρ, rfl⟩ := Finset.mem_image.mp hz\n    rw [hFS, Finset.mem_filter] at hρ\n    obtain ⟨hmem, heq⟩ := hρ\n    have hx := (mem_mainFinset (by linarith : (0 : ℝ) ≤ t)).mp hmem\n    have hk : Nat.floor |ρ.1.im - t| = k := heq\n    have hxk : (k : ℝ) ≤ |ρ.1.im - t| := Nat.floor_le (abs_nonneg _)\n    rw [← hk] at hxk\n    have hxk1 : |ρ.1.im - t| < (k : ℝ) + 1 := by\n      have h1 := Nat.lt_floor_add_one |ρ.1.im - t|\n      rw [hk] at h1\n      have h2 : ((k + 1 : ℕ) : ℝ) = (k : ℝ) + 1 := by push_cast; ring\n      rwa [h2] at h1\n    rcases le_or_gt t ρ.1.im with him | him\n    · -- γ ≥ t: x = γ − t ∈ [k, k+1): γ ∈ [t+k, t+k+1) ⊆ zeroWindow (t+k)\n      apply Finset.mem_union_left\n      rw [Set.Finite.mem_toFinset]\n      refine ⟨ρ.2, ?_, ?_⟩\n      · have h1 : |ρ.1.im - t| = ρ.1.im - t := abs_of_nonneg (by linarith [him])\n        rw [h1] at hxk\n        linarith [hxk]\n      · have h1 : |ρ.1.im - t| = ρ.1.im - t := abs_of_nonneg (by linarith [him])\n        rw [h1] at hxk1\n        linarith [hxk1]\n    · -- γ < t: x = t − γ ∈ [k, k+1): γ ∈ (t−k−1, t−k] ⊆ zeroWindow (t−k−1)\n      apply Finset.mem_union_right\n      rw [Set.Finite.mem_toFinset]\n      refine ⟨ρ.2, ?_, ?_⟩\n      · have h1 : |ρ.1.im - t| = t - ρ.1.im := abs_of_neg (by linarith [him])\n        rw [h1] at hxk1\n        linarith [hxk1]\n      · have h1 : |ρ.1.im - t| = t - ρ.1.im := abs_of_neg (by linarith [him])\n        rw [h1] at hxk\n        linarith [hxk]\n  have hdisj : Disjoint (zeroWindow_finite (t + (k : ℝ))).toFinset\n      (zeroWindow_finite (t - (k : ℝ) - 1)).toFinset := by\n    rw [Finset.disjoint_left]\n    intro z hz1 hz2\n    rw [Set.Finite.mem_toFinset] at hz1 hz2\n    have h1 : t + (k : ℝ) ≤ z.im := hz1.2.1\n    have h2 : z.im ≤ t - (k : ℝ) := hz2.2.2\n    have h3 : (1 : ℝ) ≤ (k : ℝ) := by exact_mod_cast hk1\n    linarith [h1, h2, h3]\n  have hW1 := (zeroWindow_finite (t + (k : ℝ)))\n  have hW2 := (zeroWindow_finite (t - (k : ℝ) - 1))\n  calc ∑ ρ ∈ FS, (zeroMult ρ.1 : ℝ)\n      = ∑ z ∈ FS.image (fun ρ => ρ.1), (zeroMult z : ℝ) := hbridge\n    _ ≤ ∑ z ∈ hW1.toFinset ∪ hW2.toFinset, (zeroMult z : ℝ) :=\n        Finset.sum_le_sum_of_subset_of_nonneg hsub (fun z _ _ => Nat.cast_nonneg _)\n    _ = ∑ z ∈ hW1.toFinset, (zeroMult z : ℝ) + ∑ z ∈ hW2.toFinset, (zeroMult z : ℝ) :=\n        Finset.sum_union hdisj\n    _ ≤ (C0hat (t + 1) + 0.55) + C0hat (t + 1) := by\n        have h1 : (((hW1).toFinset.sum fun ρ => zeroMult ρ) : ℝ)\n            ≤ C0hat (t + 1) + 0.55 := hright.trans hright2\n        have h2 : (((hW2).toFinset.sum fun ρ => zeroMult ρ) : ℝ)\n            ≤ C0hat (t + 1) := hleft\n        linarith [h1, h2]\n    _ = 2 * C0hat (t + 1) + 0.55 := by ring\n\n/-- **The main bound**: the main-finset farG sum is at most\n4.5·(2·C0hat(t+1) + 0.55)·1.3476. -/\nlemma farG_main_le (hZC : ZeroCountProp) (hNLZ : NoLowZeros) {t : ℝ} (ht : 10 ≤ t) :\n    ∑ ρ ∈ mainFinset t, farG t ρ\n      ≤ 4.5 * (2 * C0hat (t + 1) + 0.55) * 1.3476 := by\n  classical\n  have hU := unit_family_le (mainFinset t) (fun ρ => Nat.floor |ρ.1.im - t|)\n    (Nat.floor t) (farG t) (fun k => 4.5 * farW k)\n    (fun _ => 2 * C0hat (t + 1) + 0.55)\n    (fun k => mul_nonneg (by norm_num : (0 : ℝ) ≤ 4.5) (farW_nonneg k))\n    (fun ρ hρ => mainFinset_bucket_range (by linarith : (0 : ℝ) ≤ t) hρ)\n    (fun ρ hρ => farG_le_farW_mul ρ\n      ((mem_mainFinset (by linarith : (0 : ℝ) ≤ t)).mp hρ).1)\n    (fun k => by\n      by_cases hk : 1 ≤ k ∧ k ≤ Nat.floor t\n      · exact main_bucket_count hZC hNLZ ht hk.1 hk.2\n      · push_neg at hk\n        have hempty : (mainFinset t).filter (fun ρ => Nat.floor |ρ.1.im - t| = k) = ∅ := by\n          rw [Finset.eq_empty_iff_forall_notMem]\n          intro ρ hρ\n          rw [Finset.mem_filter] at hρ\n          obtain ⟨hmem, heq⟩ := hρ\n          have hj := mainFinset_bucket_range (by linarith : (0 : ℝ) ≤ t) hmem\n          rw [heq] at hj\n          exact hk ⟨hj.1, hj.2⟩\n        rw [hempty, Finset.sum_empty]\n        positivity)\n  have hsum : ∑ k ∈ Finset.Ico 1 (Nat.floor t + 1), (4.5 * farW k) * (2 * C0hat (t + 1) + 0.55)\n      = (4.5 * (2 * C0hat (t + 1) + 0.55)) * ∑ k ∈ Finset.Ico 1 (Nat.floor t + 1), farW k := by\n    rw [Finset.mul_sum]\n    apply Finset.sum_congr rfl\n    intro k _\n    ring\n  calc ∑ ρ ∈ mainFinset t, farG t ρ\n      ≤ ∑ k ∈ Finset.Ico 1 (Nat.floor t + 1), (4.5 * farW k) * (2 * C0hat (t + 1) + 0.55) := hU\n    _ = (4.5 * (2 * C0hat (t + 1) + 0.55)) * ∑ k ∈ Finset.Ico 1 (Nat.floor t + 1), farW k := hsum\n    _ ≤ (4.5 * (2 * C0hat (t + 1) + 0.55)) * 1.3476 :=\n        mul_le_mul_of_nonneg_left (farW_Ico_le _) (by positivity)\n\nend NguyenRH1\n\nend"},"extra_content":null}]