Current task: —

← Session 17 — Lean tier (i): elementary proofs (after crash)

#671 assistant 2026-08-20 06:17:25.145 UTC · 1007→1065 tok open ⤢
thinking (1912 chars)
1. **1099: simp no progress** — hder's `simp only [Pi.mul_apply] at h` — remove it; then `exact h` — if exact fails on the Pi form, convert. Try removing simp and keeping exact h. 2. **1124: linarith failed (hb2x)**: goal a✝ : iimB²*x + iimB < 9.9809 with h1 : 1.9218*4.4721 ≤ iimB²*x and hblo : 1.3862943606 ≤ iimB. Need: iimB²*x + iimB ≥ 1.9218*4.4721 + 1.3862943606 = 8.59462 + 1.38629 = 9.98091 ≥ 9.9809 ✓. linarith: 1.9218*4.4721 — linarith computes this as a CONSTANT? linarith can evaluate 1.9218*4.4721 = 8.594618...: then iimB²*x + iimB ≥ 8.5946... + 1.3862943... = 9.98091 ≥ 9.9809 ✓ should work — unless linarith can't multiply the two decimal CONSTANTS?? It can (constant folding). Hmm — nlinarith [hblo] was my code: `nlinarith [hblo]` — the error says plain "linarith failed" (nlinarith calls linarith first?). The h1 coefficient 1.9218*4.4721 — linarith treats as product of two literals ✓ folds. Then needs iimB ≥ 1.3862943606: hblo ✓. 8.5946+1.3862943 = 9.98092 — wait precisely: 1.9218*4.4721 = 8.5945818: +1.3862943606 = 9.9808762 < 9.9809!!! My margin collapsed: 9.9808762 < 9.9809 ✗. Recompute: 1.9218 × 4.4721: 1.9218×4 = 7.6872; 1.9218×0.4721 = 0.90728...: 1.9218×0.4 = 0.76872; 1.9218×0.0721 = 0.13856; total 0.90728; sum = 8.59448. +1.3862943606 = 9.98078 < 9.9809 ✗✗. So my 9.9809 is too tight. Use 9.9807: then hbig: 0.8862943606*9.9807 = 8.84604 ≥ 8.8460?? compute: 0.8862943606*9.9807 = 8.84584...: 0.8862943606*9.9807: 0.8862943606*10 = 8.862943606; minus 0.8862943606*0.0193 = 0.017105; = 8.845838. So use hb2x ≥ 9.9807, hbig: 8.8458 ≤ a*(...): and final need: b² − a(b²x+b) ≤ 0 ⟸ b² ≤ 1.92182 ≤ 8.8458 ✓ margin huge ✓. Set constants: hb2x : 9.9807 ≤ ...; hbig : (8.8458:ℝ) ≤ ... Also 1125:51 unsolved — the calc's second step: mul_le_mul ha hb2x (by norm_num) hapos.le — hb2x had wrong constant ✓ same fix. 3. Also check hb2lo nlinarith [hblo] worked (1.9218 ≤ iimB² ✓ passed).
The constant 9.9809 is too tight (actual: 9.98078). Loosening to 9.9807 / 8.8458, and removing the no-progress simp.
tool: Edit ok
input
{
  "file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiSkeleton.lean",
  "old_string": "    rw [e] at h\n    simp only [Pi.mul_apply] at h\n    exact h\n  apply antitoneOn_of_deriv_nonpos (convex_Ici _)",
  "new_string": "    rw [e] at h\n    exact h\n  apply antitoneOn_of_deriv_nonpos (convex_Ici _)"
}
result 2026-08-20 06:17:25Z → 2026-08-24 04:28:38Z
{
  "filePath": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiCircleBound.lean",
  "oldString": "          _ \u2264 (32 * C0hat (4 * (k : \u211d) + 9 / 2)) *\n                (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5)) :=\n              mul_le_mul_of_nonneg_left nearZeros_count_le (by positivity)",
  "newString": "          _ \u2264 (32 * C0hat (4 * (k : \u211d) + 9 / 2)) *\n                (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5)) :=\n              mul_le_mul_of_nonneg_left nearZeros_count_le (by positivity)\n          _ = 32 * C0hat (4 * (k : \u211d) + 9 / 2) * (3 * A0count) *\n                Real.log (3 * max |s.im - 1| |s.im + 1| + 5) := by ring",
  "originalFile": "/-\nNguyenRH1/LiCircleBound.lean \u2014 tier ii\u2032 sub-stage ii\u2032-5e-v (D-068 \u00a75):\nthe circle bound for the partial-fraction difference and the squeeze to\nthe capstone identity.\n\n\u00a70: conjugate symmetry of the nontrivial zeros (for the lower-half\n    circle arcs).\n\u00a71: the mult-weighted ordinate-window count bridges from Zeta23's RvM\n    local count (`zeta_local_zero_count`: Ncount(t, t+1] \u2264 A\u2080\u00b7log(|t|+3)\n    with multiplicity, ALL t \u2014 no perimeter): `A0count` + the dyadic\n    interval count `Ncount_le_of_interval`.\n\u00a72: the Dirichlet bound `norm_logDeriv_zeta_le_dirichlet` (\u2016\u03b6\u2032/\u03b6 s\u2016 \u2264\n    dirichletC2 for re s \u2265 2; \u2212\u03b6\u2032/\u03b6 = LSeries \u039b, termwise \u2264 the s = 2\n    majorant) \u2014 the right near-axis arc input.\n\u00a73+: (this file, subsequent sub-stages) the series bound, the logDeriv\n    assembly, the Fexpr circle bound, the Schwarz squeeze, and the\n    capstone `partialFraction_identity`.\n\nArchive references: D-068 \u00a75, journal-029.\n-/\nimport Mathlib\nimport Zeta23.RvM.LocalCount\nimport NguyenRH1.LiFEntire\nimport NguyenRH1.LiGapCircles\nimport NguyenRH1.LiDisc\nimport NguyenRH1.LiReflect\nimport NguyenRH1.LiDigammaLeft\n\nopen Zeta23 Complex Filter Topology\n\nnoncomputable section\n\nnamespace NguyenRH1\n\n/-! ## 0. Conjugate symmetry -/\n\n/-- The conjugate of a nontrivial zero is a nontrivial zero. -/\nlemma isNontrivialZero_conj {\u03c1 : \u2102} (h\u03c1 : IsNontrivialZero \u03c1) :\n    IsNontrivialZero ((starRingEnd \u2102) \u03c1) := by\n  refine \u27e8?_, ?_, ?_\u27e9\n  \u00b7 rw [_root_.riemannZeta_conj, h\u03c1.1, map_zero]\n  \u00b7 rw [Complex.conj_re]; exact h\u03c1.2.1\n  \u00b7 rw [Complex.conj_re]; exact h\u03c1.2.2\n\n/-! ## 1. The mult-weighted window count bridges -/\n\n/-- The local-count constant: from Zeta23's RvM local count\n(`zeta_local_zero_count`, [Tit86 Thm 9.2] \u2014 mult-weighted, two-sided,\nall t, PROVED unconditionally in Zeta23). -/\ndef A0count : \u211d := Classical.choose Zeta23.RvM.zeta_local_zero_count\n\nlemma A0count_ge_one : (1 : \u211d) \u2264 A0count :=\n  (Classical.choose_spec Zeta23.RvM.zeta_local_zero_count).1\n\nlemma A0count_pos : (0 : \u211d) < A0count := lt_of_lt_of_le one_pos A0count_ge_one\n\n/-- The unit-window bound: Ncount(t, t+1] \u2264 A\u2080\u00b7log(|t|+3). -/\nlemma Ncount_window_le (t : \u211d) :\n    (Zeta23.Ncount t (t + 1) : \u211d) \u2264 A0count * Real.log (|t| + 3) :=\n  (Classical.choose_spec Zeta23.RvM.zeta_local_zero_count).2 t\n\n/-- Window additivity: Ncount(a, c] = Ncount(a, b] + Ncount(b, c] for\na \u2264 b \u2264 c (the disjoint union of the ordinate windows). -/\nlemma Ncount_add_of_le {a b c : \u211d} (hab : a \u2264 b) (hbc : b \u2264 c) :\n    Zeta23.Ncount a c = Zeta23.Ncount a b + Zeta23.Ncount b c := by\n  have hunion : Zeta23.zerosIn a c = Zeta23.zerosIn a b \u222a Zeta23.zerosIn b c := by\n    ext \u03c1\n    constructor\n    \u00b7 intro h\u03c1c\n      obtain \u27e8h\u03c1, ha, hc\u27e9 := h\u03c1c\n      rcases le_or_gt \u03c1.im b with h | h\n      \u00b7 exact Set.mem_union_left _ \u27e8h\u03c1, ha, h\u27e9\n      \u00b7 exact Set.mem_union_right _ \u27e8h\u03c1, h, hc\u27e9\n    \u00b7 intro h\n      rcases h with h\u03c1b | h\u03c1c\n      \u00b7 obtain \u27e8h\u03c1, ha, hb\u27e9 := h\u03c1b\n        exact \u27e8h\u03c1, ha, hb.trans hbc\u27e9\n      \u00b7 obtain \u27e8h\u03c1, hb, hc\u27e9 := h\u03c1c\n        exact \u27e8h\u03c1, hab.trans_lt hb, hc\u27e9\n  have hdisj : Disjoint (Zeta23.zerosIn a b) (Zeta23.zerosIn b c) := by\n    rw [Set.disjoint_iff]\n    intro \u03c1 \u27e8h1, h2\u27e9\n    exact absurd (h1.2.2.trans_lt h2.2.1) (lt_irrefl \u03c1.im)\n  rw [Zeta23.Ncount, Zeta23.Ncount, Zeta23.Ncount, hunion]\n  exact_mod_cast finsum_mem_union hdisj (Zeta23.zerosIn_finite a b)\n    (Zeta23.zerosIn_finite b c)\n\n/-- The N-step unit-window chain: Ncount(a, a+N] \u2264 A\u2080\u00b7N\u00b7log(|a|+N+3). -/\nlemma Ncount_chain_le (a : \u211d) (N : \u2115) :\n    (Zeta23.Ncount a (a + (N : \u211d)) : \u211d)\n      \u2264 A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3) := by\n  induction N with\n  | zero =>\n    simp only [Nat.cast_zero, add_zero]\n    have h0 : Zeta23.zerosIn a a = \u2205 := by\n      ext \u03c1\n      constructor\n      \u00b7 intro h\n        obtain \u27e8-, h1, h2\u27e9 := h\n        exact absurd (h2.trans_lt h1) (lt_irrefl _)\n      \u00b7 intro h\n        simp at h\n    have hz : Zeta23.Ncount a a = 0 := by\n      simp only [Zeta23.Ncount, h0, finsum_mem_empty]\n    rw [hz, Nat.cast_zero]\n    simp\n  | succ N ih =>\n    have hN0 : (0 : \u211d) \u2264 (N : \u211d) := Nat.cast_nonneg N\n    have hsplit : Zeta23.Ncount a (a + (N : \u211d) + 1)\n        = Zeta23.Ncount a (a + (N : \u211d)) + Zeta23.Ncount (a + (N : \u211d)) (a + (N : \u211d) + 1) :=\n      Ncount_add_of_le (a := a) (b := a + (N : \u211d)) (c := a + (N : \u211d) + 1)\n        (by linarith) (by linarith)\n    have hcast : a + ((N + 1 : \u2115) : \u211d) = a + (N : \u211d) + 1 := by push_cast; ring\n    rw [hcast, hsplit]\n    have hwin := Ncount_window_le (a + (N : \u211d))\n    have hlog : Real.log (|a + (N : \u211d)| + 3) \u2264 Real.log (|a| + (N : \u211d) + 3) := by\n      apply Real.log_le_log (by positivity)\n      have h1 : |a + (N : \u211d)| \u2264 |a| + (N : \u211d) :=\n        (abs_add_le _ _).trans (by rw [abs_of_nonneg (show (0 : \u211d) \u2264 (N : \u211d) from Nat.cast_nonneg N)])\n      linarith\n    have hlogpos : (0 : \u211d) \u2264 Real.log (|a| + (N : \u211d) + 3) := by\n      apply Real.log_nonneg\n      have h1 : (1 : \u211d) \u2264 |a| + 3 := by linarith [abs_nonneg a]\n      linarith [hN0]\n    have hlogpos' : (0 : \u211d) \u2264 Real.log (|a| + ((N : \u211d) + 1) + 3) := by\n      apply Real.log_nonneg\n      have h1 : (1 : \u211d) \u2264 |a| + 3 := by linarith [abs_nonneg a]\n      linarith [hN0]\n    push_cast\n    -- goal: \u2191(Ncount a (a+\u2191N)) + \u2191(Ncount (a+\u2191N) (a+\u2191N+1)) \u2264 A\u2080(\u2191N+1)\u00b7log(|a|+(\u2191N+1)+3)\n    have hlogC : Real.log (|a| + (N : \u211d) + 3)\n        \u2264 Real.log (|a| + ((N : \u211d) + 1) + 3) :=\n      Real.log_le_log (by positivity) (by linarith)\n    have hle1 : A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3)\n        \u2264 A0count * (N : \u211d) * Real.log (|a| + ((N : \u211d) + 1) + 3) :=\n      mul_le_mul_of_nonneg_left hlogC (mul_nonneg A0count_pos.le hN0)\n    have hle2 : A0count * Real.log (|a + (N : \u211d)| + 3)\n        \u2264 A0count * Real.log (|a| + ((N : \u211d) + 1) + 3) := by\n      apply mul_le_mul_of_nonneg_left _ A0count_pos.le\n      apply Real.log_le_log (by positivity)\n      have h1 : |a + (N : \u211d)| \u2264 |a| + (N : \u211d) :=\n        (abs_add_le _ _).trans (by rw [abs_of_nonneg (show (0 : \u211d) \u2264 (N : \u211d) from Nat.cast_nonneg N)])\n      linarith\n    have hsum : \u2191(Zeta23.Ncount a (a + (N : \u211d))) + \u2191(Zeta23.Ncount (a + (N : \u211d)) (a + (N : \u211d) + 1))\n        \u2264 A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3)\n          + A0count * Real.log (|a + (N : \u211d)| + 3) :=\n      add_le_add ih hwin\n    linarith [hsum, hle1, hle2]\n\n/-- The dyadic-interval count: Ncount(a, b] \u2264 A\u2080\u00b7(b\u2212a+1)\u00b7log(b+4) for\n0 \u2264 a \u2264 b (the unit-window chain + the ceil cover). -/\nlemma Ncount_le_of_interval {a b : \u211d} (ha : 0 \u2264 a) (hab : a \u2264 b) :\n    (Zeta23.Ncount a b : \u211d) \u2264 A0count * (b - a + 1) * Real.log (b + 4) := by\n  set N : \u2115 := \u2308b - a\u2309\u208a with hN\n  have hNb : b \u2264 a + (N : \u211d) := by\n    have h := Nat.le_ceil (b - a)\n    rw [\u2190 hN] at h\n    have h2 : (b - a : \u211d) \u2264 (N : \u211d) := h\n    linarith\n  have hsub : Zeta23.zerosIn a b \u2286 Zeta23.zerosIn a (a + (N : \u211d)) := by\n    intro \u03c1 h\u03c1\n    refine \u27e8h\u03c1.1, h\u03c1.2.1, ?_\u27e9\n    exact h\u03c1.2.2.trans hNb\n  have hle : Zeta23.Ncount a b \u2264 Zeta23.Ncount a (a + (N : \u211d)) := by\n    rw [Zeta23.Ncount, Zeta23.Ncount]\n    rw [finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite a b),\n      finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite a (a + (N : \u211d)))]\n    apply Finset.sum_le_sum_of_subset_of_nonneg\n    \u00b7 intro \u03c1 h\u03c1\n      rw [Set.Finite.mem_toFinset] at h\u03c1 \u22a2\n      exact hsub h\u03c1\n    \u00b7 intro \u03c1 _ _\n      exact Nat.cast_nonneg _\n  have hchain := Ncount_chain_le a N\n  have hNle : (N : \u211d) \u2264 b - a + 1 := by\n    have h := Nat.ceil_lt_add_one (sub_nonneg.mpr hab)\n    rw [\u2190 hN] at h\n    have h2 : ((N : \u211d)) < b - a + 1 := by exact_mod_cast h\n    linarith\n  have hlogle : Real.log (|a| + (N : \u211d) + 3) \u2264 Real.log (b + 4) := by\n    apply Real.log_le_log (by positivity)\n    rw [abs_of_nonneg ha]\n    linarith\n  calc (Zeta23.Ncount a b : \u211d)\n      \u2264 (Zeta23.Ncount a (a + (N : \u211d)) : \u211d) := by exact_mod_cast hle\n    _ \u2264 A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3) := hchain\n    _ \u2264 A0count * (b - a + 1) * Real.log (b + 4) := by\n        have hlogpos : (0 : \u211d) \u2264 Real.log (b + 4) := by\n          apply Real.log_nonneg; linarith\n        have h1 : A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3)\n            \u2264 A0count * (N : \u211d) * Real.log (b + 4) :=\n          mul_le_mul_of_nonneg_left hlogle (mul_nonneg A0count_pos.le (Nat.cast_nonneg N))\n        have h2 : A0count * (N : \u211d) * Real.log (b + 4)\n            \u2264 A0count * (b - a + 1) * Real.log (b + 4) := by\n          apply mul_le_mul_of_nonneg_right _ hlogpos\n          nlinarith [A0count_pos, hNle, sub_nonneg.mpr hab]\n        exact h1.trans h2\n\n/-! ## 2. The Dirichlet bound -/\n\n/-- The Dirichlet majorant constant: the absolute sum of the von\nMangoldt L-series terms at s = 2 (summable since 2 > 1). -/\ndef dirichletC2 : \u211d :=\n  \u2211' n : \u2115, \u2016LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) (2 : \u2102) n\u2016\n\n/-- \u2016\u03b6\u2032/\u03b6 s\u2016 \u2264 C\u2082 for re s \u2265 2 (the Dirichlet-series majorant:\n\u2212\u03b6\u2032/\u03b6 = LSeries \u039b for re > 1, termwise \u2264 the s = 2 sum). -/\nlemma norm_logDeriv_zeta_le_dirichlet {s : \u2102} (hs : 2 \u2264 s.re) :\n    \u2016logDeriv riemannZeta s\u2016 \u2264 dirichletC2 := by\n  have hs1 : (1 : \u211d) < s.re := by linarith\n  have h1 : -logDeriv riemannZeta s\n      = LSeries (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s := by\n    have h2 := ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div hs1\n    rw [logDeriv, Pi.div_apply, h2]\n    ring\n  have hsum2 : Summable (fun n : \u2115 =>\n      \u2016LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) (2 : \u2102) n\u2016) := by\n    rw [summable_norm_iff]\n    exact ArithmeticFunction.LSeriesSummable_vonMangoldt (by norm_num)\n  have hsumS : Summable (fun n : \u2115 =>\n      \u2016LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s n\u2016) := by\n    rw [summable_norm_iff]\n    exact ArithmeticFunction.LSeriesSummable_vonMangoldt hs1\n  have hle : \u2016LSeries (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s\u2016\n      \u2264 dirichletC2 := by\n    show \u2016\u2211' n : \u2115, LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s n\u2016 \u2264 _\n    calc \u2016\u2211' n : \u2115, LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s n\u2016\n        \u2264 \u2211' n : \u2115, \u2016LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s n\u2016 :=\n          norm_tsum_le_tsum_norm hsumS\n      _ \u2264 \u2211' n : \u2115, \u2016LSeries.term (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) (2 : \u2102) n\u2016 :=\n          Summable.tsum_le_tsum (fun n => LSeries.norm_term_le_of_re_le_re _ (by\n            simp\n            exact hs) n) hsumS hsum2\n      _ = dirichletC2 := rfl\n  calc \u2016logDeriv riemannZeta s\u2016\n      = \u2016LSeries (fun n => (ArithmeticFunction.vonMangoldt n : \u2102)) s\u2016 := by\n        rw [\u2190 h1, norm_neg]\n    _ \u2264 dirichletC2 := hle\n\n/-- The Dirichlet majorant is nonnegative (a tsum of norms). -/\nlemma dirichletC2_nonneg : (0 : \u211d) \u2264 dirichletC2 :=\n  tsum_nonneg (fun n => norm_nonneg _)\n\n/-! ## 3. The tsum split + the generalized interval count + the low-zero\nconstant -/\n\n/-- Splitting a summable real tsum over a finset:\n\u2211' f = \u2211_{i \u2208 s} f i + \u2211' (if i \u2208 s then 0 else f i). -/\nlemma tsum_split_finset {\u03b9 : Type*} [DecidableEq \u03b9] {f : \u03b9 \u2192 \u211d} (hf : Summable f)\n    (s : Finset \u03b9) :\n    \u2211' i, f i = \u2211 i \u2208 s, f i + \u2211' i, (if i \u2208 s then 0 else f i) := by\n  classical\n  have h1 : Summable (fun i => if i \u2208 s then f i else 0) := by\n    apply Summable.of_norm_bounded hf.norm\n    intro i\n    by_cases hi : i \u2208 s <;> simp [hi]\n  have h2 : Summable (fun i => if i \u2208 s then 0 else f i) := by\n    apply Summable.of_norm_bounded hf.norm\n    intro i\n    by_cases hi : i \u2208 s <;> simp [hi]\n  have h3 : \u2211' i, f i\n      = \u2211' i, ((if i \u2208 s then f i else 0) + (if i \u2208 s then 0 else f i)) := by\n    apply tsum_congr\n    intro i\n    by_cases hi : i \u2208 s <;> simp [hi]\n  rw [h3, Summable.tsum_add h1 h2]\n  congr 1\n  rw [tsum_eq_sum (s := s) (fun b hb => if_neg hb)]\n  exact Finset.sum_congr rfl (fun b hb => if_pos hb)\n\n/-- The generalized dyadic-interval count (both signs):\nNcount(a, b] \u2264 A\u2080\u00b7(b\u2212a+1)\u00b7log(3\u00b7max|a||b| + 5). -/\nlemma Ncount_le_of_interval_gen {a b : \u211d} (hab : a \u2264 b) :\n    (Zeta23.Ncount a b : \u211d)\n      \u2264 A0count * (b - a + 1) * Real.log (3 * max |a| |b| + 5) := by\n  set N : \u2115 := \u2308b - a\u2309\u208a with hN\n  have hNb : b \u2264 a + (N : \u211d) := by\n    have h := Nat.le_ceil (b - a)\n    rw [\u2190 hN] at h\n    linarith\n  have hsub : Zeta23.zerosIn a b \u2286 Zeta23.zerosIn a (a + (N : \u211d)) := by\n    intro \u03c1 h\u03c1\n    exact \u27e8h\u03c1.1, h\u03c1.2.1, h\u03c1.2.2.trans hNb\u27e9\n  have hle : Zeta23.Ncount a b \u2264 Zeta23.Ncount a (a + (N : \u211d)) := by\n    rw [Zeta23.Ncount, Zeta23.Ncount]\n    rw [finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite a b),\n      finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite a (a + (N : \u211d)))]\n    apply Finset.sum_le_sum_of_subset_of_nonneg\n    \u00b7 intro \u03c1 h\u03c1\n      rw [Set.Finite.mem_toFinset] at h\u03c1 \u22a2\n      exact hsub h\u03c1\n    \u00b7 intro \u03c1 _ _\n      exact Nat.cast_nonneg _\n  have hchain := Ncount_chain_le a N\n  have hNle : (N : \u211d) \u2264 b - a + 1 := by\n    have h := Nat.ceil_lt_add_one (sub_nonneg.mpr hab)\n    rw [\u2190 hN] at h\n    have h2 : ((N : \u211d)) < b - a + 1 := by exact_mod_cast h\n    linarith\n  have hlogle : Real.log (|a| + (N : \u211d) + 3)\n      \u2264 Real.log (3 * max |a| |b| + 5) := by\n    apply Real.log_le_log (by positivity)\n    have hM1 : |a| \u2264 max |a| |b| := le_max_left _ _\n    have hM2 : |b| \u2264 max |a| |b| := le_max_right _ _\n    have hba : b - a \u2264 |b| + |a| := by\n      have h1 := le_abs_self b\n      have h2 : -a \u2264 |a| := by rw [\u2190 abs_neg a]; exact le_abs_self (-a)\n      linarith\n    nlinarith [hNle, hM1, hM2, hba, abs_nonneg a, abs_nonneg b]\n  have hlogpos : (0 : \u211d) \u2264 Real.log (3 * max |a| |b| + 5) := by\n    apply Real.log_nonneg\n    have h1 : (0 : \u211d) \u2264 max |a| |b| := le_trans (abs_nonneg a) (le_max_left _ _)\n    linarith\n  calc (Zeta23.Ncount a b : \u211d)\n      \u2264 (Zeta23.Ncount a (a + (N : \u211d)) : \u211d) := by exact_mod_cast hle\n    _ \u2264 A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3) := hchain\n    _ \u2264 A0count * (b - a + 1) * Real.log (3 * max |a| |b| + 5) := by\n        have h1 : A0count * (N : \u211d) * Real.log (|a| + (N : \u211d) + 3)\n            \u2264 A0count * (N : \u211d) * Real.log (3 * max |a| |b| + 5) :=\n          mul_le_mul_of_nonneg_left hlogle (mul_nonneg A0count_pos.le (Nat.cast_nonneg N))\n        have h2 : A0count * (N : \u211d) * Real.log (3 * max |a| |b| + 5)\n            \u2264 A0count * (b - a + 1) * Real.log (3 * max |a| |b| + 5) := by\n          apply mul_le_mul_of_nonneg_right _ hlogpos\n          nlinarith [A0count_pos, hNle, sub_nonneg.mpr hab]\n        exact h1.trans h2\n\n/-- The low-zero finset: nontrivial zeros with \u2016\u03c1\u2016 \u2264 3. -/\ndef lowZeros : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1} :=\n  (show {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | \u2016(\u03c1 : \u2102)\u2016 \u2264 3}.Finite from\n    (finite_subtype_norm_lt 4).subset\n      (fun \u03c1 h\u03c1 => lt_of_le_of_lt (show \u2016(\u03c1 : \u2102)\u2016 \u2264 3 from h\u03c1) (by norm_num))).toFinset\n\n/-- The low-zero symbolic constant (a fixed finite sum of fixed positive\nreals; \u2016\u03c1\u2016 > 0 for nontrivial \u03c1 since re \u03c1 > 0). -/\ndef lowZeroConst : \u211d :=\n  \u2211 \u03c1 \u2208 lowZeros, (zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016)\n\nlemma lowZeroConst_nonneg : 0 \u2264 lowZeroConst :=\n  Finset.sum_nonneg fun _\u03c1 _ => mul_nonneg (Nat.cast_nonneg _)\n    (add_nonneg one_pos.le (div_nonneg one_pos.le (norm_nonneg _)))\n\n/-! ## 4. The far-tail bound -/\n\n/-- The dyadic log series closed form:\n\u2211' j, ((j+4)\u00b7log 2 + log X)/2^j = 10\u00b7log 2 + 2\u00b7log X. -/\nlemma tsum_dyadic_log (X : \u211d) :\n    \u2211' j : \u2115, ((j + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j\n      = 10 * Real.log 2 + 2 * Real.log X := by\n  have hgeom2H : Summable (fun j : \u2115 => ((1 : \u211d) / 2) ^ j) := summable_geometric_two\n  have hgeom2 : \u2211' j : \u2115, ((1 : \u211d) / 2) ^ j = 2 := tsum_geometric_two\n  have hlinH := hasSum_coe_mul_geometric_of_norm_lt_one (r := (1 : \u211d) / 2) (by norm_num)\n  have hlin : \u2211' j : \u2115, (j : \u211d) * ((1 : \u211d) / 2) ^ j = 2 := by\n    have h := hlinH.tsum_eq\n    norm_num at h\n    exact h\n  have hsplit : (fun j : \u2115 => ((j + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j)\n      = fun j : \u2115 => Real.log 2 * ((j : \u211d) * ((1 : \u211d) / 2) ^ j)\n        + (4 * Real.log 2 + Real.log X) * ((1 : \u211d) / 2) ^ j := by\n    funext j\n    have hj : (2 : \u211d) ^ j \u2260 0 := pow_ne_zero _ two_ne_zero\n    rw [one_div_pow]\n    field_simp\n    ring\n  rw [hsplit, Summable.tsum_add (hlinH.summable.mul_left _) (hgeom2H.mul_left _)]\n  rw [tsum_mul_left, tsum_mul_left, hlin, hgeom2]\n  ring\n\n/-- log 2 \u2264 1 (since 2 \u2264 e). -/\nlemma log_two_le_one : Real.log 2 \u2264 1 := by\n  rw [show (1 : \u211d) = Real.log (Real.exp 1) by rw [Real.log_exp]]\n  apply Real.log_le_log (by norm_num)\n  have h := Real.exp_one_gt_d9\n  linarith\n\n/-- For X \u2265 200: (4A\u2080/X)\u00b7(10\u00b7log 2 + 2\u00b7log X) \u2264 16\u00b7A\u2080\u00b7log X / X. -/\nlemma dyadic_tail_constant {X : \u211d} (hX : 200 \u2264 X) :\n    (4 * A0count / X) * (10 * Real.log 2 + 2 * Real.log X)\n      \u2264 16 * A0count * Real.log X / X := by\n  have hX0 : (0 : \u211d) < X := by linarith\n  have hlogX : 5 \u2264 Real.log X := by\n    rw [show (5 : \u211d) = Real.log (Real.exp 5) by rw [Real.log_exp]]\n    apply Real.log_le_log (Real.exp_pos _)\n    have h1 : Real.exp 5 = (Real.exp 1) ^ 5 := by\n      rw [\u2190 Real.exp_nat_mul]\n      norm_num\n    have h2 := Real.exp_one_lt_d9.le\n    have h3 : (Real.exp 1) ^ 5 \u2264 (2.7182818286 : \u211d) ^ 5 :=\n      pow_le_pow_left\u2080 (Real.exp_pos 1).le h2 5\n    have h4 : (2.7182818286 : \u211d) ^ 5 \u2264 200 := by norm_num\n    linarith [h1, h3, h4]\n  have hlog2 := log_two_le_one\n  have hA0 : (0 : \u211d) \u2264 4 * A0count / X :=\n    div_nonneg (mul_nonneg (by norm_num) A0count_pos.le) hX0.le\n  have h1 : 10 * Real.log 2 + 2 * Real.log X \u2264 4 * Real.log X := by linarith\n  calc (4 * A0count / X) * (10 * Real.log 2 + 2 * Real.log X)\n      \u2264 (4 * A0count / X) * (4 * Real.log X) := mul_le_mul_of_nonneg_left h1 hA0\n    _ = 16 * A0count * Real.log X / X := by ring\n\n/-- The dyadic class of a zero relative to scale X:\nNat.log 2 \u230a|im \u03c1|/X\u230b\u208a, so 2^j\u00b7X \u2264 |im \u03c1| < 2^{j+1}\u00b7X when |im \u03c1| \u2265 X. -/\ndef dyadClass (X : \u211d) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2115 :=\n  Nat.log 2 \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a\n\nlemma dyadClass_lower {X : \u211d} (hX : 0 < X) {\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}}\n    (h\u03c1 : X \u2264 |(\u03c1 : \u2102).im|) :\n    (2 : \u211d) ^ dyadClass X \u03c1 * X \u2264 |(\u03c1 : \u2102).im| := by\n  have hfl : \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a \u2260 0 := by\n    rw [Ne, Nat.floor_eq_zero]\n    push Not\n    have h1 : (1 : \u211d) \u2264 |(\u03c1 : \u2102).im| / X := (le_div_iff\u2080 hX).mpr (by linarith)\n    linarith\n  have h2 := Nat.pow_log_le_self 2 hfl\n  have h3 : ((2 ^ dyadClass X \u03c1 : \u2115) : \u211d) \u2264 \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a := by exact_mod_cast h2\n  have h4 : (\u230a|(\u03c1 : \u2102).im| / X\u230b\u208a : \u211d) \u2264 |(\u03c1 : \u2102).im| / X := Nat.floor_le (by positivity)\n  have h5 : ((2 ^ dyadClass X \u03c1 : \u2115) : \u211d) = (2 : \u211d) ^ dyadClass X \u03c1 := by push_cast; ring\n  rw [h5] at h3\n  rw [le_div_iff\u2080 hX] at h4\n  have h6 : (2 : \u211d) ^ dyadClass X \u03c1 * X \u2264 \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a * X :=\n    mul_le_mul_of_nonneg_right h3 hX.le\n  linarith\n\nlemma dyadClass_upper {X : \u211d} (hX : 0 < X) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    |(\u03c1 : \u2102).im| < (2 : \u211d) ^ (dyadClass X \u03c1 + 1) * X := by\n  have h2 : \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a < 2 ^ (dyadClass X \u03c1 + 1) :=\n    Nat.lt_pow_succ_log_self (by norm_num) _\n  have h3 : (\u230a|(\u03c1 : \u2102).im| / X\u230b\u208a : \u211d) + 1 \u2264 (2 : \u211d) ^ (dyadClass X \u03c1 + 1) := by\n    have h4 : \u230a|(\u03c1 : \u2102).im| / X\u230b\u208a + 1 \u2264 2 ^ (dyadClass X \u03c1 + 1) := h2\n    have h5 : ((\u230a|(\u03c1 : \u2102).im| / X\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (dyadClass X \u03c1 + 1) : \u2115) : \u211d) := by\n      exact_mod_cast h4\n    push_cast at h5\n    linarith\n  have h6 : |(\u03c1 : \u2102).im| / X < (2 : \u211d) ^ (dyadClass X \u03c1 + 1) :=\n    (Nat.lt_floor_add_one _).trans_le h3\n  rw [div_lt_iff\u2080 hX] at h6\n  linarith\n\n/-- The tail summand (if-form on the zero subtype). -/\ndef tailTerm (X : \u211d) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u211d :=\n  if X < |(\u03c1 : \u2102).im| then (zeroMult \u03c1 : \u211d) / (1 + ((\u03c1 : \u2102).im) ^ 2) else 0\n\nlemma tailTerm_nonneg {X : \u211d} (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    0 \u2264 tailTerm X \u03c1 := by\n  by_cases h : X < |(\u03c1 : \u2102).im| <;>\n    simp [tailTerm, h, div_nonneg (Nat.cast_nonneg _)\n      (by positivity : (0 : \u211d) \u2264 1 + ((\u03c1 : \u2102).im) ^ 2)]\n\n/-- The tail summand is summable (dominated by 2\u00b7m/(1+\u2016\u03b3\u2016\u00b2) via\n1 + \u2016\u03b3\u2016\u00b2 \u2264 2(1 + im\u00b2)). -/\nlemma tailTerm_summable (X : \u211d) :\n    Summable (tailTerm X) := by\n  have hbase : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      2 * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left 2\n  apply Summable.of_norm_bounded hbase\n  intro \u03c1\n  rw [tailTerm]\n  by_cases h : X < |(\u03c1 : \u2102).im|\n  \u00b7 rw [if_pos h]\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    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    calc \u2016(zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2)\u2016\n        = (zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2) := by\n          rw [Real.norm_eq_abs, abs_of_nonneg (div_nonneg (Nat.cast_nonneg _) hpos2.le)]\n      _ \u2264 2 * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) := by\n          rw [show (zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2)\n              = (zeroMult \u03c1 : \u211d) * (1 / (1 + (\u03c1 : \u2102).im ^ 2)) from by ring]\n          rw [show 2 * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))))\n              = (zeroMult \u03c1 : \u211d) * (2 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) from by ring]\n          exact mul_le_mul_of_nonneg_left hfrac hm\n  \u00b7 rw [if_neg h, norm_zero]\n    have hnn := Complex.normSq_nonneg (gammaOf (\u03c1 : \u2102))\n    exact mul_nonneg (by norm_num) (div_nonneg (Nat.cast_nonneg _) (by linarith))\n\n/-- The dyadic log series is summable. -/\nlemma dyadicLog_summable (X : \u211d) :\n    Summable (fun j : \u2115 => ((j + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j) := by\n  have hlinH := hasSum_coe_mul_geometric_of_norm_lt_one (r := (1 : \u211d) / 2) (by norm_num)\n  have hsplit : (fun j : \u2115 => ((j + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j)\n      = fun j : \u2115 => Real.log 2 * ((j : \u211d) * ((1 : \u211d) / 2) ^ j)\n        + (4 * Real.log 2 + Real.log X) * ((1 : \u211d) / 2) ^ j := by\n    funext j\n    have hj : (2 : \u211d) ^ j \u2260 0 := pow_ne_zero _ two_ne_zero\n    rw [one_div_pow]\n    field_simp\n    ring\n  rw [hsplit]\n  exact (hlinH.summable.mul_left _).add (summable_geometric_two.mul_left _)\n\n/-- The dyadic fiber {dyadClass X \u03c1 = j} is finite. -/\nlemma dyadClass_fiber_finite {X : \u211d} (hX : 0 < X) (j : \u2115) :\n    {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j}.Finite := by\n  apply (finite_subtype_norm_lt (1 + (2 : \u211d) ^ (j + 1) * X + 1)).subset\n  intro \u03c1 h\u03c1\n  have h\u03c1j : dyadClass X \u03c1 = j := h\u03c1\n  have hup := dyadClass_upper hX \u03c1\n  rw [h\u03c1j] at hup\n  have hnorm : \u2016(\u03c1 : \u2102)\u2016 \u2264 |(\u03c1 : \u2102).re| + |(\u03c1 : \u2102).im| :=\n    Complex.norm_le_abs_re_add_abs_im _\n  have hre : |(\u03c1 : \u2102).re| \u2264 1 := by\n    rw [abs_le]\n    exact \u27e8by linarith [\u03c1.2.2.1], by linarith [\u03c1.2.2.2]\u27e9\n  have h2pow : (0 : \u211d) \u2264 (2 : \u211d) ^ (j + 1) * X := by positivity\n  show \u2016(\u03c1 : \u2102)\u2016 < 1 + (2 : \u211d) ^ (j + 1) * X + 1\n  linarith\n\n/-- The fiber count: the zeros in the dyadic fiber with X < |\u03b3| have\nmultiplicity-sum \u2264 A\u2080\u00b7(2^{j+1}X+3)\u00b7log(3\u00b72^{j+1}X+5). -/\nlemma fiber_mult_count {X : \u211d} (hX : 200 \u2264 X) (j : \u2115) :\n    \u2211 \u03c1 \u2208 (Set.Finite.subset (dyadClass_fiber_finite (by linarith : (0 : \u211d) < X) j)\n        (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n        (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset,\n      (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 A0count * ((2 : \u211d) ^ (j + 1) * X + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n  classical\n  have hX0 : (0 : \u211d) < X := by linarith\n  have h2jX : (0 : \u211d) < (2 : \u211d) ^ j * X := by positivity\n  have h2j1X : (0 : \u211d) < (2 : \u211d) ^ (j + 1) * X := by positivity\n  set FS := (Set.Finite.subset (dyadClass_fiber_finite (by linarith : (0 : \u211d) < X) j)\n      (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n      (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset with hFS\n  have hmemFS : \u2200 \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      \u03c1 \u2208 FS \u2194 dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im| := by\n    intro \u03c1\n    rw [hFS, Set.Finite.mem_toFinset]\n    exact Iff.rfl\n  have hW1 : (Zeta23.zerosIn ((2 : \u211d) ^ j * X - 1) ((2 : \u211d) ^ (j + 1) * X)).Finite :=\n    Zeta23.zerosIn_finite _ _\n  have hW2 : (Zeta23.zerosIn (-((2 : \u211d) ^ (j + 1) * X)) (-((2 : \u211d) ^ j * X))).Finite :=\n    Zeta23.zerosIn_finite _ _\n  have himg : FS.image (Subtype.val) \u2286 hW1.toFinset \u222a hW2.toFinset := by\n    intro z hz\n    obtain \u27e8\u03c1, h\u03c1, rfl\u27e9 := Finset.mem_image.mp hz\n    rw [hmemFS] at h\u03c1\n    obtain \u27e8h\u03c1j, hgt\u27e9 := h\u03c1\n    have hup : |(\u03c1 : \u2102).im| < (2 : \u211d) ^ (j + 1) * X := by\n      have h := dyadClass_upper hX0 \u03c1\n      rw [h\u03c1j] at h\n      exact h\n    have hlo : (2 : \u211d) ^ j * X \u2264 |(\u03c1 : \u2102).im| := by\n      have h := dyadClass_lower hX0 (show X \u2264 |(\u03c1 : \u2102).im| from hgt.le)\n      rw [h\u03c1j] at h\n      exact h\n    rcases le_or_gt 0 (\u03c1 : \u2102).im with him | him\n    \u00b7 apply Finset.mem_union_left\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 rw [abs_of_nonneg him] at hlo\n        linarith\n      \u00b7 rw [abs_of_nonneg him] at hup\n        linarith\n    \u00b7 apply Finset.mem_union_right\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 rw [abs_of_neg him] at hup\n        linarith\n      \u00b7 rw [abs_of_neg him] at hlo\n        linarith\n  have hsum_img : \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      = \u2211 z \u2208 FS.image (Subtype.val), (zeroMult z : \u211d) := by\n    rw [Finset.sum_image (fun x _ y _ h => Subtype.val_injective h)]\n  have hdisj : Disjoint hW1.toFinset hW2.toFinset := by\n    rw [Finset.disjoint_left]\n    intro z hz1 hz2\n    rw [Set.Finite.mem_toFinset] at hz1 hz2\n    have h1 : (2 : \u211d) ^ j * X - 1 < z.im := hz1.2.1\n    have h2 : z.im \u2264 -((2 : \u211d) ^ j * X) := hz2.2.2\n    have hge : (1 : \u211d) \u2264 (2 : \u211d) ^ j * X := by\n      have h1le : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n      nlinarith [h1le, hX]\n    linarith\n  calc \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      = \u2211 z \u2208 FS.image (Subtype.val), (zeroMult z : \u211d) := hsum_img\n    _ \u2264 \u2211 z \u2208 hW1.toFinset \u222a hW2.toFinset, (zeroMult z : \u211d) :=\n        Finset.sum_le_sum_of_subset_of_nonneg himg (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    _ = (Zeta23.Ncount ((2 : \u211d) ^ j * X - 1) ((2 : \u211d) ^ (j + 1) * X) : \u211d)\n        + (Zeta23.Ncount (-((2 : \u211d) ^ (j + 1) * X)) (-((2 : \u211d) ^ j * X)) : \u211d) := by\n        rw [Zeta23.Ncount, Zeta23.Ncount, finsum_mem_eq_finite_toFinset_sum _ hW1,\n          finsum_mem_eq_finite_toFinset_sum _ hW2, Nat.cast_sum, Nat.cast_sum]\n    _ \u2264 A0count * ((2 : \u211d) ^ (j + 1) * X + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n        have h2jX1 : (1 : \u211d) \u2264 (2 : \u211d) ^ j * X := by\n          have h1 : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n          nlinarith [h1, hX]\n        have hpowX : (2 : \u211d) ^ (j + 1) * X = 2 * ((2 : \u211d) ^ j * X) := by\n          rw [pow_succ']; ring\n        have hlogpos : (0 : \u211d) \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n          apply Real.log_nonneg\n          linarith [h2j1X]\n        have h1 := Ncount_le_of_interval_gen (a := (2 : \u211d) ^ j * X - 1)\n          (b := (2 : \u211d) ^ (j + 1) * X) (by linarith [hpowX, h2jX1])\n        have h2 := Ncount_le_of_interval_gen (a := -((2 : \u211d) ^ (j + 1) * X))\n          (b := -((2 : \u211d) ^ j * X)) (by linarith [hpowX, h2jX1])\n        -- the log arguments match L = log(3\u00b72^{j+1}X + 5)\n        have hlog1 : Real.log (3 * max |(2 : \u211d) ^ j * X - 1| |(2 : \u211d) ^ (j + 1) * X| + 5)\n            \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n          apply Real.log_le_log (by positivity)\n          have hmax : max |(2 : \u211d) ^ j * X - 1| |(2 : \u211d) ^ (j + 1) * X|\n              \u2264 (2 : \u211d) ^ (j + 1) * X := by\n            apply max_le\n            \u00b7 rw [abs_of_nonneg (by linarith [h2jX1])]\n              nlinarith [h2jX, h2j1X]\n            \u00b7 rw [abs_of_nonneg h2j1X.le]\n          linarith [hmax]\n        have hlog2 : Real.log (3 * max |-((2 : \u211d) ^ (j + 1) * X)| |-((2 : \u211d) ^ j * X)| + 5)\n            \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n          apply Real.log_le_log (by positivity)\n          have hmax : max |-((2 : \u211d) ^ (j + 1) * X)| |-((2 : \u211d) ^ j * X)|\n              \u2264 (2 : \u211d) ^ (j + 1) * X := by\n            apply max_le\n            \u00b7 rw [abs_neg, abs_of_nonneg h2j1X.le]\n            \u00b7 rw [abs_neg, abs_of_nonneg h2jX.le]\n              nlinarith [h2jX, h2j1X]\n          linarith [hmax]\n        -- the lengths: b\u2212a+1 = 2^jX + 2 and 2^jX + 1\n        have hlen1 : (2 : \u211d) ^ (j + 1) * X - ((2 : \u211d) ^ j * X - 1) + 1\n            = (2 : \u211d) ^ j * X + 2 := by\n          have hpow : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n          rw [hpow]\n          ring\n        have hlen2 : -((2 : \u211d) ^ j * X) - (-((2 : \u211d) ^ (j + 1) * X)) + 1\n            = (2 : \u211d) ^ j * X + 1 := by\n          have hpow : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n          rw [hpow]\n          ring\n        rw [hlen1] at h1\n        rw [hlen2] at h2\n        -- assemble: A\u2080(2^jX+2)L + A\u2080(2^jX+1)L = A\u2080(2^{j+1}X+3)L\n        have hA0 := A0count_pos.le\n        have h1' : (Zeta23.Ncount ((2 : \u211d) ^ j * X - 1) ((2 : \u211d) ^ (j + 1) * X) : \u211d)\n            \u2264 A0count * ((2 : \u211d) ^ j * X + 2) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) :=\n          h1.trans (mul_le_mul_of_nonneg_left hlog1 (by positivity))\n        have h2' : (Zeta23.Ncount (-((2 : \u211d) ^ (j + 1) * X)) (-((2 : \u211d) ^ j * X)) : \u211d)\n            \u2264 A0count * ((2 : \u211d) ^ j * X + 1) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) :=\n          h2.trans (mul_le_mul_of_nonneg_left hlog2 (by positivity))\n        have hpow : (2 : \u211d) ^ (j + 1) * X = 2 * ((2 : \u211d) ^ j * X) := by rw [pow_succ']; ring\n        rw [hpow] at h1' h2' \u22a2\n        linarith [h1', h2', hA0, hlogpos]\n\n/-- The per-fiber tail bound (in \u211d\u22650\u221e): the sum of ofReal(tailTerm X)\nover the dyadic fiber (dyadClass X)\u207b\u00b9'{j} is at most ofReal of\n(1/(2^j X)\u00b2)\u00b7A\u2080\u00b7(2^{j+1}X+3)\u00b7log(3\u00b72^{j+1}X+5). -/\nlemma fiber_tail_le {X : \u211d} (hX : 200 \u2264 X) (j : \u2115) :\n    \u2211' b : (dyadClass X) \u207b\u00b9' {j}, ENNReal.ofReal (tailTerm X b.1)\n      \u2264 ENNReal.ofReal ((1 / ((2 : \u211d) ^ j * X) ^ 2) *\n        (A0count * ((2 : \u211d) ^ (j + 1) * X + 3)\n          * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5))) := by\n  classical\n  have hX0 : (0 : \u211d) < X := by linarith\n  have hfin : ((dyadClass X) \u207b\u00b9' {j} : Set {\u03c1 : \u2102 // IsNontrivialZero \u03c1}).Finite := by\n    have h := dyadClass_fiber_finite hX0 j\n    have h2 : ((dyadClass X) \u207b\u00b9' {j} : Set {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n        = {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j} := by\n      ext \u03c1\n      exact Iff.rfl\n    rw [h2]\n    exact h\n  have htsum : \u2211' b : (dyadClass X) \u207b\u00b9' {j}, ENNReal.ofReal (tailTerm X b.1)\n      = \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n        ((dyadClass X) \u207b\u00b9' {j}).indicator (fun \u03c1 => ENNReal.ofReal (tailTerm X \u03c1)) \u03c1 :=\n    tsum_subtype ((dyadClass X) \u207b\u00b9' {j})\n      (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => ENNReal.ofReal (tailTerm X \u03c1))\n  rw [htsum]\n  rw [tsum_eq_sum (s := hfin.toFinset) (fun \u03c1 h\u03c1 => by\n    apply Set.indicator_of_notMem\n    rwa [Set.Finite.mem_toFinset] at h\u03c1)]\n  rw [Finset.sum_congr rfl (fun \u03c1 h\u03c1 =>\n    Set.indicator_of_mem (by rwa [Set.Finite.mem_toFinset] at h\u03c1) _)]\n  rw [\u2190 ENNReal.ofReal_sum_of_nonneg (fun \u03c1 _ => tailTerm_nonneg \u03c1)]\n  apply ENNReal.ofReal_le_ofReal\n  rw [\u2190 Finset.sum_filter_add_sum_filter_not hfin.toFinset\n    (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => X < |(\u03c1 : \u2102).im|) (tailTerm X)]\n  have hzero : \u2211 \u03c1 \u2208 hfin.toFinset.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u00ac X < |(\u03c1 : \u2102).im|), tailTerm X \u03c1 = 0 := by\n    apply Finset.sum_eq_zero\n    intro \u03c1 h\u03c1\n    rw [Finset.mem_filter] at h\u03c1\n    rw [tailTerm, if_neg h\u03c1.2]\n  rw [hzero, add_zero]\n  have hfilter_eq : hfin.toFinset.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => X < |(\u03c1 : \u2102).im|)\n      = (Set.Finite.subset (dyadClass_fiber_finite hX0 j)\n        (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n        (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset := by\n    ext \u03c1\n    simp only [Finset.mem_filter, Set.Finite.mem_toFinset]\n    exact Iff.rfl\n  rw [hfilter_eq]\n  calc \u2211 \u03c1 \u2208 (Set.Finite.subset (dyadClass_fiber_finite hX0 j)\n          (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n          (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset, tailTerm X \u03c1\n      \u2264 \u2211 \u03c1 \u2208 (Set.Finite.subset (dyadClass_fiber_finite hX0 j)\n          (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n          (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset,\n        (1 / ((2 : \u211d) ^ j * X) ^ 2) * (zeroMult (\u03c1 : \u2102) : \u211d) := by\n        apply Finset.sum_le_sum\n        intro \u03c1 h\u03c1\n        rw [Set.Finite.mem_toFinset] at h\u03c1\n        obtain \u27e8h\u03c1j, hgt\u27e9 := h\u03c1\n        have hlo : (2 : \u211d) ^ j * X \u2264 |(\u03c1 : \u2102).im| := by\n          have h := dyadClass_lower hX0 (show X \u2264 |(\u03c1 : \u2102).im| from hgt.le)\n          rw [h\u03c1j] at h\n          exact h\n        have hlo2 : ((2 : \u211d) ^ j * X) ^ 2 \u2264 ((\u03c1 : \u2102).im) ^ 2 := by\n          have h := pow_le_pow_left\u2080 (by positivity : (0 : \u211d) \u2264 (2 : \u211d) ^ j * X) hlo 2\n          rwa [sq_abs] at h\n        have hsq : ((2 : \u211d) ^ j * X) ^ 2 \u2264 1 + ((\u03c1 : \u2102).im) ^ 2 := by\n          linarith [hlo2, sq_nonneg (\u03c1 : \u2102).im]\n        have hpos1 : (0 : \u211d) < 1 + ((\u03c1 : \u2102).im) ^ 2 := by positivity\n        have hpos2 : (0 : \u211d) < ((2 : \u211d) ^ j * X) ^ 2 := by positivity\n        rw [tailTerm, if_pos hgt]\n        rw [show (zeroMult (\u03c1 : \u2102) : \u211d) / (1 + ((\u03c1 : \u2102).im) ^ 2)\n            = (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / (1 + ((\u03c1 : \u2102).im) ^ 2)) from by ring]\n        rw [show (1 / ((2 : \u211d) ^ j * X) ^ 2) * (zeroMult (\u03c1 : \u2102) : \u211d)\n            = (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / ((2 : \u211d) ^ j * X) ^ 2) from by ring]\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        rw [div_le_div_iff\u2080 hpos1 hpos2]\n        nlinarith [hsq]\n    _ = (1 / ((2 : \u211d) ^ j * X) ^ 2) *\n          \u2211 \u03c1 \u2208 (Set.Finite.subset (dyadClass_fiber_finite hX0 j)\n            (t := {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | dyadClass X \u03c1 = j \u2227 X < |(\u03c1 : \u2102).im|})\n            (fun \u03c1 h\u03c1 => h\u03c1.1)).toFinset, (zeroMult (\u03c1 : \u2102) : \u211d) := by\n        rw [Finset.mul_sum]\n    _ \u2264 (1 / ((2 : \u211d) ^ j * X) ^ 2) *\n          (A0count * ((2 : \u211d) ^ (j + 1) * X + 3)\n            * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5)) :=\n        mul_le_mul_of_nonneg_left (fiber_mult_count hX j) (by positivity)\n\n/-- **The far-tail bound**: for X \u2265 200, the zeros with |\u03b3| > X\ncontribute \u03a3 m/(1+\u03b3\u00b2) \u2264 16\u00b7A\u2080\u00b7log X / X. -/\ntheorem zero_tail_inv_sq_le {X : \u211d} (hX : 200 \u2264 X) :\n    \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, tailTerm X \u03c1\n      \u2264 16 * A0count * Real.log X / X := by\n  have hX0 : (0 : \u211d) < X := by linarith\n  have hlogXnn : (0 : \u211d) \u2264 Real.log X := Real.log_nonneg (by linarith)\n  have hC0 : (0 : \u211d) \u2264 16 * A0count * Real.log X / X :=\n    div_nonneg (mul_nonneg (mul_nonneg (by norm_num) A0count_pos.le) hlogXnn) hX0.le\n  rw [\u2190 ENNReal.ofReal_le_ofReal_iff hC0]\n  rw [ENNReal.ofReal_tsum_of_nonneg (fun \u03c1 => tailTerm_nonneg \u03c1) (tailTerm_summable X)]\n  rw [\u2190 ENNReal.tsum_fiberwise (fun \u03c1 => ENNReal.ofReal (tailTerm X \u03c1)) (dyadClass X)]\n  -- the real dyadic majorant\n  set F : \u2115 \u2192 \u211d := fun j => (1 / ((2 : \u211d) ^ j * X) ^ 2) *\n    (A0count * ((2 : \u211d) ^ (j + 1) * X + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5)) with hFdef\n  set G : \u2115 \u2192 \u211d := fun j => (((j : \u211d) + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j with hGdef\n  have hFnn : \u2200 j : \u2115, 0 \u2264 F j := by\n    intro j\n    rw [hFdef]\n    have hL : (0 : \u211d) \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n      apply Real.log_nonneg\n      have h2j1X : (0 : \u211d) < (2 : \u211d) ^ (j + 1) * X := by positivity\n      linarith\n    have h2j1X : (0 : \u211d) \u2264 (2 : \u211d) ^ (j + 1) * X := by positivity\n    exact mul_nonneg (div_nonneg (by norm_num) (by positivity))\n      (mul_nonneg (mul_nonneg A0count_pos.le (by linarith)) hL)\n  have hGnn : \u2200 j : \u2115, 0 \u2264 (4 * A0count / X) * G j := by\n    intro j\n    rw [hGdef]\n    have hlog2nn : (0 : \u211d) \u2264 Real.log 2 := Real.log_nonneg (by norm_num)\n    have hjn : (0 : \u211d) \u2264 (j : \u211d) := Nat.cast_nonneg j\n    have hGj : (0 : \u211d) \u2264 (((j : \u211d) + 4) * Real.log 2 + Real.log X) :=\n      add_nonneg (mul_nonneg (by linarith) hlog2nn) hlogXnn\n    exact mul_nonneg (div_nonneg (mul_nonneg (by norm_num) A0count_pos.le) hX0.le)\n      (div_nonneg hGj (by positivity))\n  have hFle : \u2200 j : \u2115, F j \u2264 (4 * A0count / X) * G j := by\n    intro j\n    rw [hFdef, hGdef]\n    show (1 / ((2 : \u211d) ^ j * X) ^ 2)\n        * (A0count * ((2 : \u211d) ^ (j + 1) * X + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5))\n        \u2264 (4 * A0count / X)\n          * ((((j : \u211d) + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j)\n    have h2jX1 : (1 : \u211d) \u2264 (2 : \u211d) ^ j * X := by\n      have h1 : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n      nlinarith [h1, hX]\n    have h2jX : (0 : \u211d) < (2 : \u211d) ^ j * X := by positivity\n    have h2j1X : (0 : \u211d) < (2 : \u211d) ^ (j + 1) * X := by positivity\n    have h2j : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n    have hLnn : (0 : \u211d) \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by\n      apply Real.log_nonneg\n      linarith\n    -- log(3\u00b72^{j+1}X+5) \u2264 (j+4)\u00b7log 2 + log X\n    have hlogle : Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5)\n        \u2264 ((j : \u211d) + 4) * Real.log 2 + Real.log X := by\n      have harg : 3 * (2 : \u211d) ^ (j + 1) * X + 5 \u2264 (2 : \u211d) ^ (j + 4) * X := by\n        have hpow : (2 : \u211d) ^ (j + 4) = 16 * (2 : \u211d) ^ j := by\n          rw [show (2 : \u211d) ^ (j + 4) = (2 : \u211d) ^ j * (2 : \u211d) ^ 4 from by rw [\u2190 pow_add]]\n          ring_nf\n        rw [hpow]\n        have hpow2 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        rw [hpow2]\n        nlinarith [h2jX1, h2jX]\n      have hlogeq : Real.log ((2 : \u211d) ^ (j + 4) * X)\n          = ((j : \u211d) + 4) * Real.log 2 + Real.log X := by\n        rw [Real.log_mul (by positivity : (2 : \u211d) ^ (j + 4) \u2260 0) (by linarith : X \u2260 0)]\n        rw [Real.log_pow]\n        push_cast\n        ring\n      rw [\u2190 hlogeq]\n      exact Real.log_le_log (by positivity) harg\n    -- the two factor bounds\n    have hfac1 : A0count * ((2 : \u211d) ^ (j + 1) * X + 3) / ((2 : \u211d) ^ j * X) ^ 2\n        \u2264 (4 * A0count) / (X * (2 : \u211d) ^ j) := by\n      rw [div_le_div_iff\u2080 (by positivity) (by positivity)]\n      have hpow : (2 : \u211d) ^ (j + 1) * X = 2 * ((2 : \u211d) ^ j * X) := by rw [pow_succ']; ring\n      have h2jX200 : (200 : \u211d) \u2264 (2 : \u211d) ^ j * X := by\n        have h1p : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n        nlinarith [h1p, hX]\n      have hkey : A0count * ((2 : \u211d) ^ j * X) * 3\n          \u2264 A0count * ((2 : \u211d) ^ j * X) * (2 * ((2 : \u211d) ^ j * X)) := by\n        apply mul_le_mul_of_nonneg_left _ (mul_nonneg A0count_pos.le (by positivity))\n        linarith [h2jX200]\n      rw [hpow]\n      have hA0 := A0count_pos.le\n      nlinarith [hkey, h2jX, hA0]\n    have h1 : (1 / ((2 : \u211d) ^ j * X) ^ 2) *\n          (A0count * ((2 : \u211d) ^ (j + 1) * X + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5))\n        = (A0count * ((2 : \u211d) ^ (j + 1) * X + 3) / ((2 : \u211d) ^ j * X) ^ 2)\n          * Real.log (3 * (2 : \u211d) ^ (j + 1) * X + 5) := by ring\n    rw [h1]\n    have h2 : (4 * A0count / X) * ((((j : \u211d) + 4) * Real.log 2 + Real.log X) / (2 : \u211d) ^ j)\n        = ((4 * A0count) / (X * (2 : \u211d) ^ j))\n          * (((j : \u211d) + 4) * Real.log 2 + Real.log X) := by\n      field_simp\n    rw [h2]\n    apply mul_le_mul hfac1 hlogle hLnn\n    apply div_nonneg _ (mul_nonneg hX0.le (by positivity))\n    exact mul_nonneg (by norm_num) A0count_pos.le\n  have hGsum : Summable (fun j : \u2115 => (4 * A0count / X) * G j) :=\n    (dyadicLog_summable X).mul_left _\n  have hFsum : Summable F := by\n    apply Summable.of_norm_bounded hGsum\n    intro j\n    rw [Real.norm_eq_abs, abs_of_nonneg (hFnn j)]\n    exact hFle j\n  have hGtotal : \u2211' j : \u2115, G j = 10 * Real.log 2 + 2 * Real.log X := tsum_dyadic_log X\n  have htotal : \u2211' j : \u2115, F j \u2264 16 * A0count * Real.log X / X := by\n    calc \u2211' j : \u2115, F j \u2264 \u2211' j : \u2115, (4 * A0count / X) * G j :=\n          Summable.tsum_le_tsum hFle hFsum hGsum\n      _ = (4 * A0count / X) * (10 * Real.log 2 + 2 * Real.log X) := by\n          rw [tsum_mul_left, hGtotal]\n      _ \u2264 16 * A0count * Real.log X / X := dyadic_tail_constant hX\n  calc \u2211' j : \u2115, \u2211' b : (dyadClass X) \u207b\u00b9' {j}, ENNReal.ofReal (tailTerm X b.1)\n      \u2264 \u2211' j : \u2115, ENNReal.ofReal (F j) := by\n        apply ENNReal.tsum_le_tsum\n        intro j\n        exact fiber_tail_le hX j\n    _ = ENNReal.ofReal (\u2211' j : \u2115, F j) := (ENNReal.ofReal_tsum_of_nonneg hFnn hFsum).symm\n    _ \u2264 ENNReal.ofReal (16 * A0count * Real.log X / X) := ENNReal.ofReal_le_ofReal htotal\n\n/-! ## 5. The threshold lemma and the zero-free circle (5e-v-b chunk 3a)\n\nThe \u03b3-gap circle radius R \u2208 [4k+5/2, 4k+3] with k \u2265 4000 satisfies\n416\u00b7\u0108\u2080(4k+9/2) \u2264 4k+5/2 \u2264 R (`gapCircle_threshold`) \u2014 explicit\nlinear/rational arithmetic from the two exp facts 2.7\u00b9\u2070 \u2265 16006.5 and\n2.72\u2079 \u2264 16006.5 plus log x \u2264 x\u22121. Consequences: 16\u00b7\u0108\u2080 < R (the circle\ncarries NO nontrivial zero, `not_isNontrivialZero_on_gapCircle`) and\n13/R \u2264 1/(32\u00b7\u0108\u2080) (the critical-arc clearance, used in the shell bounds\nof the next chunk). -/\n\n/-- **The threshold lemma**: for k \u2265 4000, 416\u00b7\u0108\u2080(4k+9/2) \u2264 4k+5/2.\nBase bound \u0108\u2080(16004.5) \u2264 9.3564 (log 16006.5 \u2264 10 via 2.7\u00b9\u2070 \u2265 16006.5;\nlog log \u2264 log 10 \u2264 2.4 via e^{2.4} \u2265 10.2); increment\n\u0108\u2080(x) \u2212 \u0108\u2080(16004.5) \u2264 0.532\u00b7(x\u221216004.5)/16006.5 via log(a/b) \u2264 a/b \u2212 1\n(twice; log 16006.5 \u2265 9 via 2.72\u2079 \u2264 16006.5). -/\ntheorem gapCircle_threshold {k : \u2115} (hk : 4000 \u2264 k) :\n    416 * C0hat (4 * (k : \u211d) + 9 / 2) \u2264 4 * (k : \u211d) + 5 / 2 := by\n  have hk4 : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n    have hkR : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n    linarith\n  -- the exp facts\n  have he10 : (16006.5 : \u211d) \u2264 Real.exp 10 := by\n    have h1 : Real.exp 10 = (Real.exp 1) ^ 10 := by\n      rw [\u2190 Real.exp_nat_mul]; norm_num\n    have h2 : (2.7 : \u211d) \u2264 Real.exp 1 := by\n      have h := Real.exp_one_gt_d9; linarith\n    have h3 : (2.7 : \u211d) ^ 10 \u2264 (Real.exp 1) ^ 10 :=\n      pow_le_pow_left\u2080 (by norm_num) h2 10\n    have h4 : (16006.5 : \u211d) \u2264 (2.7 : \u211d) ^ 10 := by norm_num\n    linarith [h1, h3, h4]\n  have hL0up : Real.log (16006.5) \u2264 10 := by\n    rw [show (10 : \u211d) = Real.log (Real.exp 10) by rw [Real.log_exp]]\n    exact Real.log_le_log (by norm_num) he10\n  have he9 : Real.exp 9 \u2264 (16006.5 : \u211d) := by\n    have h1 : Real.exp 9 = (Real.exp 1) ^ 9 := by\n      rw [\u2190 Real.exp_nat_mul]; norm_num\n    have h2 : Real.exp 1 \u2264 (2.72 : \u211d) := by\n      have h := Real.exp_one_lt_d9.le; linarith\n    have h3 : (Real.exp 1) ^ 9 \u2264 (2.72 : \u211d) ^ 9 :=\n      pow_le_pow_left\u2080 (Real.exp_pos 1).le h2 9\n    have h4 : (2.72 : \u211d) ^ 9 \u2264 16006.5 := by norm_num\n    linarith [h1, h3, h4]\n  have hL0lo : (9 : \u211d) \u2264 Real.log (16006.5) := by\n    rw [show (9 : \u211d) = Real.log (Real.exp 9) by rw [Real.log_exp]]\n    exact Real.log_le_log (Real.exp_pos _) he9\n  have he2 : (2.7 : \u211d) ^ 2 \u2264 Real.exp 2 := by\n    have h1 : Real.exp 2 = (Real.exp 1) ^ 2 := by\n      rw [\u2190 Real.exp_nat_mul]; norm_num\n    have h2 : (2.7 : \u211d) \u2264 Real.exp 1 := by\n      have h := Real.exp_one_gt_d9; linarith\n    have h3 : (2.7 : \u211d) ^ 2 \u2264 (Real.exp 1) ^ 2 :=\n      pow_le_pow_left\u2080 (by norm_num) h2 2\n    linarith [h1, h3]\n  have he04 : (1.4 : \u211d) \u2264 Real.exp 0.4 := by\n    have h := Real.add_one_le_exp (0.4 : \u211d)\n    linarith\n  have he24 : (10 : \u211d) \u2264 Real.exp 2.4 := by\n    have h1 : Real.exp 2.4 = Real.exp 2 * Real.exp 0.4 := by\n      rw [\u2190 Real.exp_add]; norm_num\n    have h2 : (10 : \u211d) \u2264 (2.7 : \u211d) ^ 2 * 1.4 := by norm_num\n    have h3 : (2.7 : \u211d) ^ 2 * 1.4 \u2264 Real.exp 2 * Real.exp 0.4 :=\n      mul_le_mul he2 he04 (by norm_num) (Real.exp_pos 2).le\n    linarith [h1, h3]\n  have hlog10 : Real.log 10 \u2264 (2.4 : \u211d) := by\n    rw [show (2.4 : \u211d) = Real.log (Real.exp 2.4) by rw [Real.log_exp]]\n    exact Real.log_le_log (by norm_num) he24\n  have hLL0 : Real.log (Real.log (16006.5)) \u2264 2.4 :=\n    (Real.log_le_log (by linarith [hL0lo]) hL0up).trans hlog10\n  -- the increments, with x = 4k+9/2, x+2 = 4k+13/2 \u2265 16006.5\n  set y : \u211d := 4 * (k : \u211d) with hy\n  have hx2 : (16006.5 : \u211d) \u2264 y + 13 / 2 := by linarith\n  have h\u0394def : (y + 13 / 2) / 16006.5 - 1 = (y - 16000) / 16006.5 := by\n    field_simp\n    ring\n  have hinc0 : Real.log (y + 13 / 2) - Real.log (16006.5)\n      \u2264 (y - 16000) / 16006.5 := by\n    have hpos : (0 : \u211d) < (y + 13 / 2) / 16006.5 := by positivity\n    have h1 := Real.log_le_sub_one_of_pos hpos\n    have h2 : Real.log (y + 13 / 2)\n        = Real.log (16006.5) + Real.log ((y + 13 / 2) / 16006.5) := by\n      rw [\u2190 Real.log_mul (by norm_num : (16006.5 : \u211d) \u2260 0)\n        (by positivity : (y + 13 / 2) / 16006.5 \u2260 0)]\n      congr 1\n      field_simp\n    rw [h\u0394def] at h1\n    linarith [h2, h1]\n  have hinc1 : Real.log (y + 13 / 2) \u2264 10 + (y - 16000) / 16006.5 := by\n    linarith [hinc0, hL0up]\n  have hLge : Real.log (16006.5) \u2264 Real.log (y + 13 / 2) :=\n    Real.log_le_log (by norm_num) hx2\n  have hinc2 : Real.log (Real.log (y + 13 / 2))\n      \u2264 2.4 + (Real.log (y + 13 / 2) - Real.log (16006.5)) / 9 := by\n    have hpos : (0 : \u211d) < Real.log (y + 13 / 2) / Real.log (16006.5) :=\n      div_pos (by linarith [hL0lo, hLge]) (by linarith [hL0lo])\n    have h1 := Real.log_le_sub_one_of_pos hpos\n    have h2 : Real.log (Real.log (y + 13 / 2))\n        = Real.log (Real.log (16006.5))\n          + Real.log (Real.log (y + 13 / 2) / Real.log (16006.5)) := by\n      rw [\u2190 Real.log_mul (by linarith [hL0lo] : Real.log (16006.5) \u2260 0)\n        (by positivity : Real.log (y + 13 / 2) / Real.log (16006.5) \u2260 0)]\n      congr 1\n      field_simp\n    have h3 : Real.log (y + 13 / 2) / Real.log (16006.5) - 1\n        \u2264 (Real.log (y + 13 / 2) - Real.log (16006.5)) / 9 := by\n      have h4 : Real.log (y + 13 / 2) / Real.log (16006.5) - 1\n          = (Real.log (y + 13 / 2) - Real.log (16006.5))\n            / Real.log (16006.5) := by\n        field_simp\n      rw [h4]\n      exact div_le_div_of_nonneg_left (by linarith [hLge]) (by norm_num)\n        hL0lo\n    linarith [h1, h2, h3, hLL0]\n  -- assemble: \u0108\u2080(4k+9/2) \u2264 9.3564 + 0.532\u00b7(y\u221216000)/16006.5\n  unfold C0hat\n  have h\u0394nn : (0 : \u211d) \u2264 (y - 16000) / 16006.5 := by positivity\n  have h\u0394le : (y - 16000) / 16006.5 \u2264 (y - 16000) / 16000 :=\n    div_le_div_of_nonneg_left (by linarith) (by norm_num) (by norm_num)\n  have hC : 0.433 * Real.log (y + 9 / 2 + 2)\n        + 0.886 * Real.log (Real.log (y + 9 / 2 + 2)) + 2.9\n      \u2264 9.3564 + 0.532 * ((y - 16000) / 16006.5) := by\n    have harg : y + 9 / 2 + 2 = y + 13 / 2 := by ring\n    rw [harg]\n    linarith [hinc1, hinc2, hinc0, h\u0394nn]\n  have hC2 : 416 * (0.433 * Real.log (y + 9 / 2 + 2)\n        + 0.886 * Real.log (Real.log (y + 9 / 2 + 2)) + 2.9)\n      \u2264 416 * (9.3564 + 0.532 * ((y - 16000) / 16006.5)) :=\n    mul_le_mul_of_nonneg_left hC (by norm_num)\n  have hfin : 416 * (9.3564 + 0.532 * ((y - 16000) / 16006.5))\n      \u2264 y + 5 / 2 := by\n    have h1 : 416 * (9.3564 + 0.532 * ((y - 16000) / 16006.5))\n        \u2264 416 * (9.3564 + 0.532 * ((y - 16000) / 16000)) := by\n      exact mul_le_mul_of_nonneg_left\n        (add_le_add (le_refl _)\n          (mul_le_mul_of_nonneg_left h\u0394le (by norm_num : (0 : \u211d) \u2264 0.532)))\n        (by norm_num : (0 : \u211d) \u2264 416)\n    have h2 : 416 * (9.3564 + 0.532 * ((y - 16000) / 16000))\n        = 3670.9504 + 0.013832 * y := by\n      field_simp\n      ring\n    rw [h2] at h1\n    linarith [hk4]\n  calc 416 * (0.433 * Real.log (y + 9 / 2 + 2)\n        + 0.886 * Real.log (Real.log (y + 9 / 2 + 2)) + 2.9)\n      \u2264 416 * (9.3564 + 0.532 * ((y - 16000) / 16006.5)) := hC2\n    _ \u2264 y + 5 / 2 := hfin\n\n/-- |im \u03c1| \u2265 \u2016\u03c1\u2016 \u2212 1 for a nontrivial zero (\u2016\u03c1\u2016 \u2264 |re| + |im| \u2264 1 + |im|). -/\nlemma abs_im_ge_norm_sub_one (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    \u2016(\u03c1 : \u2102)\u2016 - 1 \u2264 |(\u03c1 : \u2102).im| := by\n  have hnorm : \u2016(\u03c1 : \u2102)\u2016 \u2264 |(\u03c1 : \u2102).re| + |(\u03c1 : \u2102).im| :=\n    Complex.norm_le_abs_re_add_abs_im _\n  have hre : |(\u03c1 : \u2102).re| \u2264 1 := by\n    rw [abs_le]\n    exact \u27e8by linarith [\u03c1.2.2.1], by linarith [\u03c1.2.2.2]\u27e9\n  linarith\n\n/-- **The gap circle is zero-free**: for k \u2265 4000 and R with the\ngap-circle properties, no point s with \u2016s\u2016 = R is a nontrivial zero.\n(A zero on the circle would have ordinate \u00b1\u221a(R\u00b2\u2212re\u00b2) within 1/R of R,\nbelow the \u03b3-gap clearance 1/(16\u00b7\u0108\u2080) since 16\u00b7\u0108\u2080 < R by the threshold.) -/\ntheorem not_isNontrivialZero_on_gapCircle {k : \u2115} (hk : 4000 \u2264 k)\n    {R : \u211d} (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      (1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2))) \u2264 |\u03c1.im - R| \u2228\n        1 \u2264 |\u03c1.im - R|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) : \u00ac IsNontrivialZero s := by\n  intro hz\n  have hth := gapCircle_threshold hk\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hR1 : (1 : \u211d) < R := by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith [hRlo]\n  -- 16\u00b7\u0108\u2080 < R\n  have h16 : 16 * C0hat (4 * (k : \u211d) + 9 / 2) < R := by\n    have h1 : 16 * C0hat (4 * (k : \u211d) + 9 / 2)\n        < 416 * C0hat (4 * (k : \u211d) + 9 / 2) := by\n      have hpos : (0 : \u211d) < C0hat (4 * (k : \u211d) + 9 / 2) := by linarith [h\u01082]\n      nlinarith [hpos]\n    linarith [hth, hRlo, h1]\n  -- the ordinate t = |im s| and its distance to R\n  have hnormSq : \u2016s\u2016 ^ 2 = s.re ^ 2 + s.im ^ 2 := by\n    rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n    ring\n  have hre2 : s.re ^ 2 \u2264 1 := by\n    have h0 := hz.2.1\n    have h1 := hz.2.2\n    nlinarith [sq_nonneg s.re]\n  have ht_le : |s.im| \u2264 R := by\n    have h := abs_im_le_norm s\n    rw [hs] at h\n    exact h\n  have ht2 : |s.im| ^ 2 = R ^ 2 - s.re ^ 2 := by\n    have h1 : s.im ^ 2 = R ^ 2 - s.re ^ 2 := by\n      have h2 : s.re ^ 2 + s.im ^ 2 = R ^ 2 := by\n        rw [\u2190 hnormSq, hs]\n      linarith\n    rw [sq_abs]\n    linarith [h1]\n  -- R \u2212 |im s| = re\u00b2/(R+|im s|) \u2264 1/R\n  have hRt : R - |s.im| = s.re ^ 2 / (R + |s.im|) := by\n    have hne : R + |s.im| \u2260 0 := by positivity\n    field_simp\n    have h1 : (R - |s.im|) * (R + |s.im|) = R ^ 2 - |s.im| ^ 2 := by ring\n    rw [h1, ht2]\n    ring\n  have hRt_le : R - |s.im| \u2264 1 / R := by\n    rw [hRt]\n    have h1 : s.re ^ 2 / (R + |s.im|) \u2264 s.re ^ 2 / R := by\n      apply div_le_div_of_nonneg_left (sq_nonneg _) (by linarith [hR1])\n      have h2 : (0 : \u211d) \u2264 |s.im| := abs_nonneg _\n      linarith\n    have h3 : s.re ^ 2 / R \u2264 1 / R := by\n      apply div_le_div_of_nonneg_right _ (by linarith [hR1])\n      linarith [hre2]\n    exact h1.trans h3\n  -- the witness zero with positive ordinate\n  have hkR0 : (0 : \u211d) < R := by linarith [hR1]\n  set \u03c1' : \u2102 := if 0 \u2264 s.im then s else (starRingEnd \u2102) s with h\u03c1'\n  have h\u03c1'z : IsNontrivialZero \u03c1' := by\n    rw [h\u03c1']\n    by_cases him : 0 \u2264 s.im\n    \u00b7 rw [if_pos him]; exact hz\n    \u00b7 rw [if_neg him]; exact isNontrivialZero_conj hz\n  have h\u03c1'im : \u03c1'.im = |s.im| := by\n    rw [h\u03c1']\n    by_cases him : 0 \u2264 s.im\n    \u00b7 rw [if_pos him]; exact (abs_of_nonneg him).symm\n    \u00b7 rw [if_neg him, Complex.conj_im]\n      exact (abs_of_neg (lt_of_not_ge him)).symm\n  -- |im \u03c1' \u2212 R| = R \u2212 |im s| \u2264 1/R < min 1 (1/(16\u0108\u2080)): contradiction\n  have hgap' := hgap \u03c1' h\u03c1'z\n  rw [h\u03c1'im] at hgap'\n  have hle : (|s.im| : \u211d) - R \u2264 0 := by linarith [ht_le]\n  have hdist : |(|s.im| : \u211d) - R| = R - |s.im| := by\n    rw [abs_of_nonpos hle]\n    ring\n  rw [hdist] at hgap'\n  have hsmall : R - |s.im| < 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) := by\n    have hpos : (0 : \u211d) < 16 * C0hat (4 * (k : \u211d) + 9 / 2) := by\n      linarith [h\u01082]\n    have h1 : 1 / R < 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) :=\n      one_div_lt_one_div_of_lt hpos h16\n    linarith [hRt_le, h1]\n  have hsmall1 : R - |s.im| < 1 := by\n    have h1 : 1 / R < 1 := (div_lt_one (by linarith [hR1] : (0 : \u211d) < R)).mpr hR1\n    linarith [hRt_le, h1]\n  rcases hgap' with h | h\n  \u00b7 linarith [h, hsmall]\n  \u00b7 linarith [h, hsmall1]\n\n/-! ## 6. The per-term norm identity, the count brick, and the tail\napplication (5e-v-b chunk 3b)\n\n`seriesTerm_norm_eq_div`: on the zero-free circle (\u2016s\u2016 = R),\n\u2016seriesTerm s \u03c1\u2016 = m\u00b7R/(\u2016\u03c1\u2016\u00b7\u2016s\u2212\u03c1\u2016) (the key algebra\n1/(s\u2212\u03c1)+1/\u03c1 = s/(\u03c1(s\u2212\u03c1))). `circleZeros R`: the finite part\n{\u2016\u03c1\u2016 < 2R+1}. `sum_zeroMult_le_of_im_band`: the reusable window-count\nbrick \u2014 a zero finset whose ordinates lie in the band [a, b] (with the\nsign-separation c, max a c \u2265 1) has multiplicity-sum \u2264\n3\u00b7A\u2080\u00b7(b\u2212a+2)\u00b7log(3\u00b7max|a||b|+5) (the two-window cover\n(M\u22121, b] \u222a (\u2212b\u22121, \u2212M], M := max a c; the \u22121 paddings absorb the\nnon-strict band bounds; the negative window's log loses +1 via\n3b+8 \u2264 2(3b+5)). `series_tail_le`: the far tail (\u2016\u03c1\u2016 \u2265 2R+1) \u2264\n91\u00b7A\u2080\u00b7log R via `seriesTerm_norm_le` + `zero_tail_inv_sq_le`.\n`seriesFun_norm_le_split`: the ONE tsum split. -/\n\n/-- The per-term norm identity on a zero-free circle. -/\nlemma seriesTerm_norm_eq_div {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R)\n    (hsz : \u00ac IsNontrivialZero s) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    \u2016seriesTerm s \u03c1\u2016 =\n      (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016)) := by\n  have h0 : (\u03c1 : \u2102) \u2260 0 := by\n    intro h\n    have hre := \u03c1.2.2.1\n    rw [h] at hre\n    simp at hre\n  have h1 : s - (\u03c1 : \u2102) \u2260 0 := by\n    intro h\n    apply hsz\n    have hs_eq : s = (\u03c1 : \u2102) := by rw [\u2190 sub_eq_zero]; exact h\n    rw [hs_eq]\n    exact \u03c1.2\n  have halg := one_div_sub_add_one_div h0 h1\n  simp only [seriesTerm]\n  rw [halg, norm_mul, RCLike.norm_natCast, norm_div, norm_mul, hs]\n\n/-- The finite-part finset for the circle split: {\u2016\u03c1\u2016 < 2R+1}. -/\ndef circleZeros (R : \u211d) : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1} :=\n  (finite_subtype_norm_lt (2 * R + 1)).toFinset\n\nlemma mem_circleZeros {R : \u211d} {\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}} :\n    \u03c1 \u2208 circleZeros R \u2194 \u2016(\u03c1 : \u2102)\u2016 < 2 * R + 1 :=\n  Set.Finite.mem_toFinset _\n\n/-- **The count brick**: a zero finset with ordinates in the band\n[a, b] (sign-separated by c, 1 \u2264 max a c \u2264 b) has multiplicity-sum\n\u2264 3\u00b7A\u2080\u00b7(b\u2212a+2)\u00b7log(3\u00b7max|a||b|+5). -/\nlemma sum_zeroMult_le_of_im_band (FS : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n    {a b c : \u211d} (hM1 : (1 : \u211d) \u2264 max a c) (hMb : max a c \u2264 b)\n    (hsub : \u2200 \u03c1 \u2208 FS, a \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 b \u2227 c \u2264 |(\u03c1 : \u2102).im|) :\n    \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 3 * A0count * (b - a + 2) * Real.log (3 * max |a| |b| + 5) := by\n  classical\n  set M := max a c with hM\n  have hM1' : (1 : \u211d) \u2264 M := hM1\n  have hMb' : M \u2264 b := hMb\n  have hb1 : (1 : \u211d) \u2264 b := le_trans hM1' hMb'\n  have hW1 : (Zeta23.zerosIn (M - 1) b).Finite := Zeta23.zerosIn_finite _ _\n  have hW2 : (Zeta23.zerosIn (-b - 1) (-M)).Finite := Zeta23.zerosIn_finite _ _\n  have himg : FS.image (Subtype.val) \u2286 hW1.toFinset \u222a hW2.toFinset := by\n    intro z hz\n    obtain \u27e8\u03c1, h\u03c1, rfl\u27e9 := Finset.mem_image.mp hz\n    have hbnd1 := (hsub \u03c1 h\u03c1).1\n    have hbnd2 := (hsub \u03c1 h\u03c1).2.1\n    have hbnd3 := (hsub \u03c1 h\u03c1).2.2\n    have hMle : M \u2264 |(\u03c1 : \u2102).im| := max_le_iff.mpr \u27e8hbnd1, hbnd3\u27e9\n    rcases le_or_gt 0 (\u03c1 : \u2102).im with him | him\n    \u00b7 apply Finset.mem_union_left\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 rw [abs_of_nonneg him] at hMle\n        linarith\n      \u00b7 rw [abs_of_nonneg him] at hbnd2\n        exact hbnd2\n    \u00b7 apply Finset.mem_union_right\n      rw [Set.Finite.mem_toFinset]\n      refine \u27e8\u03c1.2, ?_, ?_\u27e9\n      \u00b7 rw [abs_of_neg him] at hbnd2\n        linarith\n      \u00b7 rw [abs_of_neg him] at hMle\n        linarith\n  have hdisj : Disjoint hW1.toFinset hW2.toFinset := by\n    rw [Finset.disjoint_left]\n    intro z hz1 hz2\n    rw [Set.Finite.mem_toFinset] at hz1 hz2\n    have h1 : M - 1 < z.im := hz1.2.1\n    have h2 : z.im \u2264 -M := hz2.2.2\n    linarith [hM1']\n  have hbridge : \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 (Zeta23.Ncount (M - 1) b : \u211d) + (Zeta23.Ncount (-b - 1) (-M) : \u211d) := by\n    have hsum_img : \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n        = \u2211 z \u2208 FS.image (Subtype.val), (zeroMult z : \u211d) :=\n      (Finset.sum_image (f := fun z : \u2102 => (zeroMult z : \u211d))\n        (fun x _ y _ h => Subtype.val_injective h)).symm\n    rw [hsum_img]\n    calc \u2211 z \u2208 FS.image (Subtype.val), (zeroMult z : \u211d)\n        \u2264 \u2211 z \u2208 hW1.toFinset \u222a hW2.toFinset, (zeroMult z : \u211d) :=\n          Finset.sum_le_sum_of_subset_of_nonneg himg (fun z _ _ => Nat.cast_nonneg _)\n      _ = \u2211 z \u2208 hW1.toFinset, (zeroMult z : \u211d)\n            + \u2211 z \u2208 hW2.toFinset, (zeroMult z : \u211d) :=\n          Finset.sum_union hdisj\n      _ = (Zeta23.Ncount (M - 1) b : \u211d) + (Zeta23.Ncount (-b - 1) (-M) : \u211d) := by\n          rw [Zeta23.Ncount, Zeta23.Ncount, finsum_mem_eq_finite_toFinset_sum _ hW1,\n            finsum_mem_eq_finite_toFinset_sum _ hW2, Nat.cast_sum, Nat.cast_sum]\n  -- the log comparisons\n  have hLpos : (0 : \u211d) < 3 * max |a| |b| + 5 := by\n    have h1 : (0 : \u211d) \u2264 max |a| |b| := le_trans (abs_nonneg a) (le_max_left _ _)\n    linarith\n  have hLnn : (0 : \u211d) \u2264 Real.log (3 * max |a| |b| + 5) := by\n    apply Real.log_nonneg\n    have h1 : (0 : \u211d) \u2264 max |a| |b| := le_trans (abs_nonneg a) (le_max_left _ _)\n    linarith\n  have hL1 : (1 : \u211d) \u2264 Real.log (3 * max |a| |b| + 5) := by\n    have h1 : (5 : \u211d) \u2264 3 * max |a| |b| + 5 := by\n      have h2 : (0 : \u211d) \u2264 max |a| |b| := le_trans (abs_nonneg a) (le_max_left _ _)\n      linarith\n    rw [Real.le_log_iff_exp_le hLpos]\n    have h2 : Real.exp 1 \u2264 (5 : \u211d) := by\n      have h := Real.exp_one_lt_d9.le\n      linarith\n    linarith [h1, h2]\n  have hLog1 : Real.log (3 * max |M - 1| |b| + 5)\n      \u2264 Real.log (3 * max |a| |b| + 5) := by\n    apply Real.log_le_log (by positivity)\n    have h1 : |M - 1| \u2264 max |a| |b| := by\n      have h2 : |M - 1| = M - 1 := abs_of_nonneg (by linarith [hM1'])\n      rw [h2]\n      have h3 : M - 1 \u2264 |b| := by\n        have h4 : |b| = b := abs_of_nonneg (by linarith [hb1])\n        rw [h4]\n        linarith [hMb']\n      have h4 : |b| \u2264 max |a| |b| := le_max_right _ _\n      linarith [h3, h4]\n    have h2 : |b| \u2264 max |a| |b| := le_max_right _ _\n    have h3 := max_le h1 h2\n    linarith [h3]\n  have hLog2 : Real.log (3 * max |-b - 1| |-M| + 5)\n      \u2264 Real.log (3 * max |a| |b| + 5) + 1 := by\n    have h1 : |-b - 1| = b + 1 := by\n      rw [show -b - 1 = -(b + 1) by ring, abs_neg, abs_of_nonneg (by linarith [hb1])]\n    have h2 : |-M| = M := by\n      rw [abs_neg]\n      exact abs_of_nonneg (by linarith [hM1'] : (0 : \u211d) \u2264 M)\n    have h3 : max |-b - 1| |-M| = b + 1 := by\n      rw [h1, h2]\n      exact max_eq_left (by linarith [hMb'])\n    rw [h3]\n    have h4 : 3 * (b + 1) + 5 \u2264 2 * (3 * max |a| |b| + 5) := by\n      have h6 : (b : \u211d) \u2264 max |a| |b| :=\n        le_trans (le_abs_self b) (le_max_right _ _)\n      linarith [h6]\n    have h5 : Real.log (3 * (b + 1) + 5)\n        \u2264 Real.log (2 * (3 * max |a| |b| + 5)) :=\n      Real.log_le_log (by positivity) h4\n    have h6 : Real.log (2 * (3 * max |a| |b| + 5))\n        = Real.log 2 + Real.log (3 * max |a| |b| + 5) :=\n      Real.log_mul (by norm_num : (2 : \u211d) \u2260 0) (by linarith [hLpos])\n    have h7 := log_two_le_one\n    linarith [h5, h6, h7]\n  -- the two window counts\n  have hw1 : (Zeta23.Ncount (M - 1) b : \u211d)\n      \u2264 A0count * (b - M + 2) * Real.log (3 * max |a| |b| + 5) := by\n    have h1 := Ncount_le_of_interval_gen (a := M - 1) (b := b) (by linarith [hMb'])\n    have h2 : b - (M - 1) + 1 = b - M + 2 := by ring\n    rw [h2] at h1\n    exact h1.trans (mul_le_mul_of_nonneg_left hLog1\n      (mul_nonneg A0count_pos.le (by linarith [hMb'])))\n  have hw2 : (Zeta23.Ncount (-b - 1) (-M) : \u211d)\n      \u2264 A0count * (b - M + 2) * (Real.log (3 * max |a| |b| + 5) + 1) := by\n    have h1 := Ncount_le_of_interval_gen (a := -b - 1) (b := -M) (by linarith [hMb'])\n    have h2 : -M - (-b - 1) + 1 = b - M + 2 := by ring\n    rw [h2] at h1\n    exact h1.trans (mul_le_mul_of_nonneg_left hLog2\n      (mul_nonneg A0count_pos.le (by linarith [hMb'])))\n  have hMa : a \u2264 M := le_max_left _ _\n  calc \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 (Zeta23.Ncount (M - 1) b : \u211d) + (Zeta23.Ncount (-b - 1) (-M) : \u211d) := hbridge\n    _ \u2264 A0count * (b - M + 2) * Real.log (3 * max |a| |b| + 5)\n          + A0count * (b - M + 2) * (Real.log (3 * max |a| |b| + 5) + 1) :=\n        add_le_add hw1 hw2\n    _ = A0count * (b - M + 2) * (2 * Real.log (3 * max |a| |b| + 5) + 1) := by ring\n    _ \u2264 A0count * (b - a + 2) * (3 * Real.log (3 * max |a| |b| + 5)) := by\n        apply mul_le_mul\n        \u00b7 exact mul_le_mul_of_nonneg_left (by linarith [hMa]) A0count_pos.le\n        \u00b7 linarith [hL1, hLnn]\n        \u00b7 linarith [hL1, hLnn]\n        \u00b7 exact mul_nonneg A0count_pos.le (by linarith [hMa, hMb'])\n    _ = 3 * A0count * (b - a + 2) * Real.log (3 * max |a| |b| + 5) := by ring\n\n/-- 9 \u2264 log R for R \u2265 16002 (e\u2079 \u2264 2.72\u2079 \u2264 16002). -/\nlemma nine_le_log_of_16002_le {R : \u211d} (hR : (16002 : \u211d) \u2264 R) :\n    (9 : \u211d) \u2264 Real.log R := by\n  have he9 : Real.exp 9 \u2264 (16002 : \u211d) := by\n    have h1 : Real.exp 9 = (Real.exp 1) ^ 9 := by\n      rw [\u2190 Real.exp_nat_mul]; norm_num\n    have h2 : Real.exp 1 \u2264 (2.72 : \u211d) := by\n      have h := Real.exp_one_lt_d9.le\n      linarith\n    have h3 : (Real.exp 1) ^ 9 \u2264 (2.72 : \u211d) ^ 9 :=\n      pow_le_pow_left\u2080 (Real.exp_pos 1).le h2 9\n    have h4 : (2.72 : \u211d) ^ 9 \u2264 16002 := by norm_num\n    linarith [h1, h3, h4]\n  rw [show (9 : \u211d) = Real.log (Real.exp 9) by rw [Real.log_exp]]\n  exact Real.log_le_log (Real.exp_pos _) (he9.trans hR)\n\n/-- **The tail application**: for \u2016s\u2016 = R \u2265 16002, the if-zeroed tail\nover {\u2016\u03c1\u2016 \u2265 2R+1} is \u2264 91\u00b7A\u2080\u00b7log R (per-term (17R/6)\u00b7m/(1+\u03b3\u00b2) via\n`seriesTerm_norm_le` + 1/(1+\u2016\u03b3\u2016\u00b2) \u2264 1/(1+im\u00b2), then\n`zero_tail_inv_sq_le` at X = 2R\u22121 \u2265 200). -/\nlemma series_tail_le {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hR : (16002 : \u211d) \u2264 R) :\n    \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016)\n      \u2264 91 * A0count * Real.log R := by\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hX : (200 : \u211d) \u2264 2 * R - 1 := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hpoint : \u2200 \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016)\n        \u2264 (17 * R / 6) * tailTerm (2 * R - 1) \u03c1 := by\n    intro \u03c1\n    by_cases hmem : \u03c1 \u2208 circleZeros R\n    \u00b7 rw [if_pos hmem]\n      exact mul_nonneg (by positivity) (tailTerm_nonneg \u03c1)\n    \u00b7 rw [if_neg hmem]\n      have hnorm : (2 * R + 1 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := by\n        have h := not_lt.mp (mt mem_circleZeros.mpr hmem)\n        linarith\n      have h\u03c12 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := by linarith [hR, hnorm]\n      have hs\u03c1 : 2 * \u2016s\u2016 \u2264 \u2016(\u03c1 : \u2102)\u2016 := by rw [hs]; linarith [hnorm]\n      have h1 := seriesTerm_norm_le \u03c1 h\u03c12 hs\u03c1\n      rw [hs] at h1\n      -- m/(1+\u2016\u03b3\u2016\u00b2) \u2264 m/(1+im\u00b2) = tailTerm (|im| \u2265 \u2016\u03c1\u2016\u22121 \u2265 2R > 2R\u22121)\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 : \u211d) + (\u03c1 : \u2102).im ^ 2\n          \u2264 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) := by\n        rw [hgam]\n        have h2 : (0 : \u211d) \u2264 (1 / 2 - (\u03c1 : \u2102).re) ^ 2 := sq_nonneg _\n        linarith\n      have hpos1 : (0 : \u211d) < 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) := by\n        have h := Complex.normSq_nonneg (gammaOf (\u03c1 : \u2102))\n        linarith\n      have hpos2 : (0 : \u211d) < 1 + (\u03c1 : \u2102).im ^ 2 := by positivity\n      have hfrac : 1 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))\n          \u2264 1 / (1 + (\u03c1 : \u2102).im ^ 2) :=\n        one_div_le_one_div_of_le hpos2 hcmp\n      have hm : (0 : \u211d) \u2264 (zeroMult \u03c1 : \u211d) := Nat.cast_nonneg _\n      have h2 : (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))\n          \u2264 (zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2) := by\n        rw [show (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))\n            = (zeroMult \u03c1 : \u211d) * (1 / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) from by ring]\n        rw [show (zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2)\n            = (zeroMult \u03c1 : \u211d) * (1 / (1 + (\u03c1 : \u2102).im ^ 2)) from by ring]\n        exact mul_le_mul_of_nonneg_left hfrac hm\n      have him : (2 : \u211d) * R - 1 < |(\u03c1 : \u2102).im| := by\n        have h3 := abs_im_ge_norm_sub_one \u03c1\n        linarith [hnorm, hR]\n      rw [tailTerm, if_pos him]\n      calc \u2016seriesTerm s \u03c1\u2016\n          \u2264 17 / 6 * R * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))) := h1\n        _ \u2264 17 / 6 * R * ((zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2)) :=\n            mul_le_mul_of_nonneg_left h2 (by positivity)\n        _ = 17 * R / 6 * ((zeroMult \u03c1 : \u211d) / (1 + (\u03c1 : \u2102).im ^ 2)) := by ring\n  have hsumL : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016) := by\n    apply Summable.of_norm_bounded (seriesSummable s).norm\n    intro \u03c1\n    by_cases h : \u03c1 \u2208 circleZeros R <;> simp [h]\n  have hsumR : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (17 * R / 6) * tailTerm (2 * R - 1) \u03c1) :=\n    (tailTerm_summable (2 * R - 1)).mul_left _\n  have htsum := Summable.tsum_le_tsum hpoint hsumL hsumR\n  rw [tsum_mul_left] at htsum\n  have htail := zero_tail_inv_sq_le hX\n  have hlog2R : Real.log (2 * R - 1) \u2264 2 * Real.log R := by\n    have h1 : Real.log (2 * R - 1) \u2264 Real.log (2 * R) := by\n      apply Real.log_le_log (by linarith [hRpos])\n      linarith\n    have h2 : Real.log (2 * R) = Real.log 2 + Real.log R :=\n      Real.log_mul (by norm_num : (2 : \u211d) \u2260 0) (by linarith [hRpos] : R \u2260 0)\n    have h3 := log_two_le_one\n    linarith [h1, h2, h3, hlogR]\n  have hR21 : R / (2 * R - 1) \u2264 1 := by\n    rw [div_le_one (by linarith [hRpos] : (0 : \u211d) < 2 * R - 1)]\n    linarith [hRpos]\n  have hA0 := A0count_pos.le\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  have hbound : 17 * R / 6 * (16 * A0count * Real.log (2 * R - 1) / (2 * R - 1))\n      \u2264 91 * A0count * Real.log R := by\n    have h1 : 17 * R / 6 * (16 * A0count * Real.log (2 * R - 1) / (2 * R - 1))\n        = (17 / 6) * 16 * A0count * (R / (2 * R - 1)) * Real.log (2 * R - 1) := by\n      ring\n    rw [h1]\n    have hlog21nn : (0 : \u211d) \u2264 Real.log (2 * R - 1) :=\n      Real.log_nonneg (by linarith [hRpos])\n    have h2 : (17 / 6 : \u211d) * 16 * A0count * (R / (2 * R - 1)) * Real.log (2 * R - 1)\n        \u2264 (17 / 6) * 16 * A0count * 1 * (2 * Real.log R) :=\n      mul_le_mul\n        (mul_le_mul_of_nonneg_left hR21\n          (mul_nonneg (by norm_num : (0 : \u211d) \u2264 17 / 6 * 16) hA0))\n        hlog2R hlog21nn\n        (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 17 / 6 * 16) hA0) one_pos.le)\n    calc (17 / 6 : \u211d) * 16 * A0count * (R / (2 * R - 1)) * Real.log (2 * R - 1)\n        \u2264 (17 / 6) * 16 * A0count * 1 * (2 * Real.log R) := h2\n      _ = (272 / 3) * A0count * Real.log R := by ring\n      _ \u2264 91 * A0count * Real.log R := by\n          apply mul_le_mul_of_nonneg_right _ hlogRnn\n          apply mul_le_mul_of_nonneg_right _ hA0\n          norm_num\n  calc \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n        (if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016)\n      \u2264 17 * R / 6 * \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, tailTerm (2 * R - 1) \u03c1 := htsum\n    _ \u2264 17 * R / 6 * (16 * A0count * Real.log (2 * R - 1) / (2 * R - 1)) :=\n        mul_le_mul_of_nonneg_left htail (by positivity)\n    _ \u2264 91 * A0count * Real.log R := hbound\n\n/-- **The one tsum split**: \u2016seriesFun s\u2016 \u2264 the finite part over\n{\u2016\u03c1\u2016 < 2R+1} + the if-zeroed tail. -/\nlemma seriesFun_norm_le_split {s : \u2102} {R : \u211d} :\n    \u2016seriesFun s\u2016\n      \u2264 \u2211 \u03c1 \u2208 circleZeros R, \u2016seriesTerm s \u03c1\u2016\n        + \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n          (if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016) := by\n  have h1 : \u2016seriesFun s\u2016\n      \u2264 \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, \u2016seriesTerm s \u03c1\u2016 :=\n    norm_tsum_le_tsum_norm (seriesSummable s).norm\n  have h2 := tsum_split_finset (seriesSummable s).norm (circleZeros R)\n  calc \u2016seriesFun s\u2016\n      \u2264 \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, \u2016seriesTerm s \u03c1\u2016 := h1\n    _ = \u2211 \u03c1 \u2208 circleZeros R, \u2016seriesTerm s \u03c1\u2016\n          + \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n            (if \u03c1 \u2208 circleZeros R then (0 : \u211d) else \u2016seriesTerm s \u03c1\u2016) := h2\n\n/-! ## 7. The dyadic-family machine and the low shell (5e-v-b chunk 3c)\n\n`half_le_log_two`, `Nat.log_floor_two_le` (J := Nat.log 2 \u230aR\u230b\u208a \u2264\n2\u00b7log R), `log_three_le_two_log` (log(3x+5) \u2264 2\u00b7log R for 0 \u2264 x \u2264 3R).\n`dyadic_family_le`: the generic dyadic-shell bound \u2014 with\nj(\u03c1) := Nat.log 2 \u230ad \u03c1\u230b\u208a valued in Ico 1 (J+1) on FS, per-fiber count\n\u2264 cnt j, and per-element term bound g \u03c1 \u2264 C\u2081\u00b7m/2^{j(\u03c1)}, the FS-sum of\ng is \u2264 \u03a3_{j \u2208 Ico 1 (J+1)} (C\u2081/2^j)\u00b7cnt j. `shell_low`: the low shell\n(\u2016\u03c1\u2016 \u2264 3) \u2264 2\u00b7lowZeroConst. -/\n\n/-- 1/2 \u2264 log 2 (log 4 = 2 log 2 and 4 \u2265 e). -/\nlemma half_le_log_two : (1 : \u211d) / 2 \u2264 Real.log 2 := by\n  have h1 : Real.log 4 = 2 * Real.log 2 := by\n    rw [show (4 : \u211d) = 2 ^ 2 by norm_num, Real.log_pow]\n    push_cast\n    ring\n  have h2 : (1 : \u211d) \u2264 Real.log 4 := by\n    rw [Real.le_log_iff_exp_le (by norm_num : (0 : \u211d) < 4)]\n    have h := Real.exp_one_lt_d9.le\n    linarith\n  linarith [h1, h2]\n\n/-- J := Nat.log 2 \u230aR\u230b\u208a satisfies J \u2264 2\u00b7log R for R \u2265 16002\n(2^J \u2264 \u230aR\u230b\u208a \u2264 R \u27f9 J\u00b7log 2 \u2264 log R; log 2 \u2265 1/2). -/\nlemma Nat.log_floor_two_le {R : \u211d} (hR : (16002 : \u211d) \u2264 R) :\n    (Nat.log 2 \u230aR\u230b\u208a : \u211d) \u2264 2 * Real.log R := by\n  have hfl : \u230aR\u230b\u208a \u2260 0 := by\n    rw [Ne, Nat.floor_eq_zero]\n    push Not\n    linarith\n  have h1 : (2 : \u211d) ^ Nat.log 2 \u230aR\u230b\u208a \u2264 R := by\n    have h2 := Nat.pow_log_le_self 2 hfl\n    have h3 : ((2 ^ Nat.log 2 \u230aR\u230b\u208a : \u2115) : \u211d) \u2264 (\u230aR\u230b\u208a : \u211d) := by exact_mod_cast h2\n    have h4 : (\u230aR\u230b\u208a : \u211d) \u2264 R := Nat.floor_le (by linarith [hR])\n    have h5 : ((2 ^ Nat.log 2 \u230aR\u230b\u208a : \u2115) : \u211d) = (2 : \u211d) ^ Nat.log 2 \u230aR\u230b\u208a := by\n      push_cast\n      ring\n    rw [h5] at h3\n    linarith [h3, h4]\n  have h2 : (Nat.log 2 \u230aR\u230b\u208a : \u211d) * Real.log 2 \u2264 Real.log R := by\n    have h3 : Real.log ((2 : \u211d) ^ Nat.log 2 \u230aR\u230b\u208a) \u2264 Real.log R :=\n      Real.log_le_log (by positivity) h1\n    rw [Real.log_pow] at h3\n    exact h3\n  have h3 := half_le_log_two\n  have h4 : (0 : \u211d) \u2264 (Nat.log 2 \u230aR\u230b\u208a : \u211d) := Nat.cast_nonneg _\n  nlinarith [h2, h3, h4]\n\n/-- For 0 \u2264 x \u2264 3R with R \u2265 16002: log(3x+5) \u2264 2\u00b7log R. -/\nlemma log_three_le_two_log {R x : \u211d} (hR : (16002 : \u211d) \u2264 R)\n    (hx0 : (0 : \u211d) \u2264 x) (hx : x \u2264 3 * R) :\n    Real.log (3 * x + 5) \u2264 2 * Real.log R := by\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have h1 : Real.log (3 * x + 5) \u2264 Real.log (10 * R) := by\n    apply Real.log_le_log (by linarith [hx0, hR])\n    linarith [hx, hR]\n  have h2 : Real.log (10 * R) = Real.log 10 + Real.log R :=\n    Real.log_mul (by norm_num : (10 : \u211d) \u2260 0) (by linarith [hR] : R \u2260 0)\n  have h3 : Real.log 10 \u2264 Real.log R := Real.log_le_log (by norm_num) (by linarith [hR])\n  linarith [h1, h2, h3]\n\n/-- **The generic dyadic-family bound.** With j(\u03c1) := Nat.log 2 \u230ad \u03c1\u230b\u208a\nvalued in Ico 1 (J+1) on FS, per-fiber multiplicity count \u2264 cnt j, and\nper-element term bound g \u03c1 \u2264 C\u2081\u00b7m/2^{j(\u03c1)}, the FS-sum of g is at most\n\u03a3_{j \u2208 Ico 1 (J+1)} (C\u2081/2^j)\u00b7cnt j. -/\nlemma dyadic_family_le (FS : Finset {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n    (d : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u211d) (J : \u2115)\n    (g : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u211d) (C\u2081 : \u211d) (cnt : \u2115 \u2192 \u211d)\n    (hC1 : (0 : \u211d) \u2264 C\u2081)\n    (hdj : \u2200 \u03c1 \u2208 FS, 1 \u2264 Nat.log 2 \u230ad \u03c1\u230b\u208a \u2227 Nat.log 2 \u230ad \u03c1\u230b\u208a \u2264 J)\n    (hterm : \u2200 \u03c1 \u2208 FS, g \u03c1\n      \u2264 C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a))\n    (hcount : \u2200 j : \u2115,\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d) \u2264 cnt j) :\n    \u2211 \u03c1 \u2208 FS, g \u03c1 \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), (C\u2081 / (2 : \u211d) ^ j) * cnt j := by\n  classical\n  have h1 : \u2211 \u03c1 \u2208 FS, g \u03c1\n      \u2264 \u2211 \u03c1 \u2208 FS, C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a) :=\n    Finset.sum_le_sum (fun \u03c1 h\u03c1 => hterm \u03c1 h\u03c1)\n  have hmaps : \u2200 \u03c1 \u2208 FS, Nat.log 2 \u230ad \u03c1\u230b\u208a \u2208 Finset.Ico 1 (J + 1) := by\n    intro \u03c1 h\u03c1\n    rw [Finset.mem_Ico]\n    have h1' := (hdj \u03c1 h\u03c1).1\n    have h2' := (hdj \u03c1 h\u03c1).2\n    exact \u27e8h1', by omega\u27e9\n  have h2 : \u2211 \u03c1 \u2208 FS, C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a)\n      = \u2211 j \u2208 Finset.Ico 1 (J + 1),\n        \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j),\n          C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a) :=\n    (Finset.sum_fiberwise_of_maps_to hmaps\n      (fun \u03c1 => C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a))).symm\n  have h3 : \u2200 j \u2208 Finset.Ico 1 (J + 1),\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j),\n        C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a)\n      = (C\u2081 / (2 : \u211d) ^ j) *\n        \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d) := by\n    intro j hj\n    have hterm' : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j),\n        C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a)\n        = (C\u2081 / (2 : \u211d) ^ j) * (zeroMult (\u03c1 : \u2102) : \u211d) := by\n      intro \u03c1 h\u03c1\n      rw [Finset.mem_filter] at h\u03c1\n      rw [h\u03c1.2]\n      ring\n    rw [Finset.sum_congr rfl hterm', Finset.mul_sum]\n  have h4 : \u2200 j \u2208 Finset.Ico 1 (J + 1),\n      (C\u2081 / (2 : \u211d) ^ j) *\n          \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d)\n        \u2264 (C\u2081 / (2 : \u211d) ^ j) * cnt j :=\n    fun j _ => mul_le_mul_of_nonneg_left (hcount j)\n      (div_nonneg hC1 (by positivity))\n  calc \u2211 \u03c1 \u2208 FS, g \u03c1\n      \u2264 \u2211 \u03c1 \u2208 FS, C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a) := h1\n    _ = \u2211 j \u2208 Finset.Ico 1 (J + 1),\n          \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j),\n            C\u2081 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230ad \u03c1\u230b\u208a) := h2\n    _ = \u2211 j \u2208 Finset.Ico 1 (J + 1),\n          (C\u2081 / (2 : \u211d) ^ j) *\n            \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 => Nat.log 2 \u230ad \u03c1\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d) :=\n        Finset.sum_congr rfl h3\n    _ \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), (C\u2081 / (2 : \u211d) ^ j) * cnt j :=\n        Finset.sum_le_sum h4\n\n/-- **The low shell** (\u2016\u03c1\u2016 \u2264 3): at most 2\u00b7lowZeroConst. -/\nlemma shell_low {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s)\n    (hR : (16002 : \u211d) \u2264 R) :\n    \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3), \u2016seriesTerm s \u03c1\u2016\n      \u2264 2 * lowZeroConst := by\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hterm : \u2200 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3),\n      \u2016seriesTerm s \u03c1\u2016\n        \u2264 2 * ((zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016)) := by\n    intro \u03c1 h\u03c1\n    rw [Finset.mem_filter] at h\u03c1\n    have h\u03c13 : \u2016(\u03c1 : \u2102)\u2016 \u2264 3 := h\u03c1.2\n    have h0 : (\u03c1 : \u2102) \u2260 0 := by\n      intro h\n      have hre := \u03c1.2.2.1\n      rw [h] at hre\n      simp at hre\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := norm_pos_iff.mpr h0\n    have hsr : R - \u2016(\u03c1 : \u2102)\u2016 \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n      have h := abs_norm_sub_norm_le s (\u03c1 : \u2102)\n      rw [hs, abs_of_nonneg (by linarith [hR, h\u03c13] : (0 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016)] at h\n      exact h\n    have hsr3 : (R - 3 : \u211d) \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr, h\u03c13]\n    have hsrpos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr3, hR]\n    have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n    rw [hid]\n    have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016) \u2264 R / (\u2016(\u03c1 : \u2102)\u2016 * (R - 3)) := by\n      apply div_le_div_of_nonneg_left hRpos.le (mul_pos h\u03c1pos (by linarith [hR]))\n      exact mul_le_mul_of_nonneg_left hsr3 h\u03c1pos.le\n    have h2 : R / (\u2016(\u03c1 : \u2102)\u2016 * (R - 3)) = (R / (R - 3)) * (1 / \u2016(\u03c1 : \u2102)\u2016) := by\n      field_simp\n    have h3 : R / (R - 3) \u2264 2 := by\n      rw [div_le_iff\u2080 (by linarith [hR] : (0 : \u211d) < R - 3)]\n      linarith [hR]\n    have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n    calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n        \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * (R - 3))) :=\n          mul_le_mul_of_nonneg_left h1 hm\n      _ = (zeroMult (\u03c1 : \u2102) : \u211d) * ((R / (R - 3)) * (1 / \u2016(\u03c1 : \u2102)\u2016)) := by rw [h2]\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (2 * (1 / \u2016(\u03c1 : \u2102)\u2016)) := by\n          apply mul_le_mul_of_nonneg_left _ hm\n          apply mul_le_mul_of_nonneg_right h3\n          exact div_nonneg one_pos.le h\u03c1pos.le\n      _ = 2 * ((zeroMult (\u03c1 : \u2102) : \u211d) / \u2016(\u03c1 : \u2102)\u2016) := by ring\n      _ \u2264 2 * ((zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016)) := by\n          apply mul_le_mul_of_nonneg_left _ (by norm_num : (0 : \u211d) \u2264 2)\n          have h4 : (zeroMult (\u03c1 : \u2102) : \u211d) / \u2016(\u03c1 : \u2102)\u2016\n              \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016) := by\n            rw [mul_add, mul_one, mul_one_div]\n            have h5 : (zeroMult (\u03c1 : \u2102) : \u211d) / \u2016(\u03c1 : \u2102)\u2016\n                \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) + (zeroMult (\u03c1 : \u2102) : \u211d) / \u2016(\u03c1 : \u2102)\u2016 := by\n              linarith [hm]\n            exact h5\n          exact h4\n  calc \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3), \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3),\n          2 * ((zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016)) :=\n        Finset.sum_le_sum hterm\n    _ = 2 * \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3),\n          (zeroMult (\u03c1 : \u2102) : \u211d) * (1 + 1 / \u2016(\u03c1 : \u2102)\u2016) := by\n        rw [Finset.mul_sum]\n    _ \u2264 2 * lowZeroConst := by\n        apply mul_le_mul_of_nonneg_left _ (by norm_num : (0 : \u211d) \u2264 2)\n        rw [lowZeroConst]\n        apply Finset.sum_le_sum_of_subset_of_nonneg\n        \u00b7 intro \u03c1 h\u03c1\n          rw [Finset.mem_filter] at h\u03c1\n          have h\u03c13 : \u2016(\u03c1 : \u2102)\u2016 \u2264 3 := h\u03c1.2\n          have hmem : \u03c1 \u2208 lowZeros := by\n            rw [lowZeros, Set.Finite.mem_toFinset]\n            exact h\u03c13\n          exact hmem\n        \u00b7 intro \u03c1 _ _\n          exact mul_nonneg (Nat.cast_nonneg _)\n            (add_nonneg one_pos.le (div_nonneg one_pos.le (norm_nonneg _)))\n\n/-! ## 8. The three dyadic shells (5e-v-b chunk 3c-ii)\n\n`two_pow_log_floor_le`: (2:\u211d)^J \u2264 R. `shell_inlo` (3 < \u2016\u03c1\u2016 \u2264 R/2),\n`shell_inhi` (R/2 < \u2016\u03c1\u2016 \u2264 R\u22122), `shell_up` (R+2 \u2264 \u2016\u03c1\u2016 within the\nfinite part): dyadic in \u2016\u03c1\u2016 / R\u2212\u2016\u03c1\u2016 / \u2016\u03c1\u2016\u2212R respectively, per-fiber\ncount via the brick, uniform log bound \u2264 2\u00b7log R. Each \u2264\n60/60/30\u00b7A\u2080\u00b7(log R)\u00b2. -/\n\n/-- (2:\u211d)^J \u2264 R for J = Nat.log 2 \u230aR\u230b\u208a, R \u2265 16002. -/\nlemma two_pow_log_floor_le {R : \u211d} (hR : (16002 : \u211d) \u2264 R) :\n    (2 : \u211d) ^ (Nat.log 2 \u230aR\u230b\u208a) \u2264 R := by\n  have hfl : \u230aR\u230b\u208a \u2260 0 := by\n    rw [Ne, Nat.floor_eq_zero]\n    push Not\n    linarith\n  have h2 := Nat.pow_log_le_self 2 hfl\n  have h3 : ((2 ^ Nat.log 2 \u230aR\u230b\u208a : \u2115) : \u211d) \u2264 (\u230aR\u230b\u208a : \u211d) := by exact_mod_cast h2\n  have h4 : (\u230aR\u230b\u208a : \u211d) \u2264 R := Nat.floor_le (by linarith [hR])\n  have h5 : ((2 ^ Nat.log 2 \u230aR\u230b\u208a : \u2115) : \u211d) = (2 : \u211d) ^ Nat.log 2 \u230aR\u230b\u208a := by\n    push_cast\n    ring\n  rw [h5] at h3\n  linarith [h3, h4]\n\n/-- **The inner-low shell** (3 < \u2016\u03c1\u2016 \u2264 R/2): \u2264 60\u00b7A\u2080\u00b7(log R)\u00b2. -/\nlemma shell_inlo {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s)\n    (hR : (16002 : \u211d) \u2264 R) :\n    \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2), \u2016seriesTerm s \u03c1\u2016\n      \u2264 60 * A0count * (Real.log R) ^ 2 := by\n  classical\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  set J := Nat.log 2 \u230aR\u230b\u208a with hJ\n  have hJle : (J : \u211d) \u2264 2 * Real.log R := Nat.log_floor_two_le hR\n  have h2JR : (2 : \u211d) ^ J \u2264 R := two_pow_log_floor_le hR\n  set FS := (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n    \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) with hFS\n  have hdj : \u2200 \u03c1 \u2208 FS, 1 \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2227 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2264 J := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c13, h\u03c1R2\u27e9 := h\u03c1\n    have h\u03c13' : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c13\n    have hfl3 : (3 : \u2115) \u2264 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a := by\n      rw [Nat.le_floor_iff (norm_nonneg _)]\n      exact_mod_cast h\u03c13'.le\n    have h1 : (1 : \u2115) \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a := by\n      have h2 := Nat.log_mono_right (b := 2) hfl3\n      have h3 : Nat.log 2 3 = 1 := by decide\n      rw [h3] at h2\n      exact h2\n    have h2 : Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2264 J := by\n      apply Nat.log_mono_right (b := 2)\n      apply Nat.floor_mono\n      linarith [h\u03c1R2, hR]\n    exact \u27e8h1, h2\u27e9\n  have hterm : \u2200 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 2 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c13, h\u03c1R2\u27e9 := h\u03c1\n    have h\u03c13' : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c13\n    have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a) \u2264 \u2016(\u03c1 : \u2102)\u2016 := by\n      have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2260 0 := by\n        rw [Ne, Nat.floor_eq_zero]\n        push Not\n        linarith [h\u03c13']\n      have h1 := Nat.pow_log_le_self 2 hfl\n      have h2 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) := by\n        exact_mod_cast h1\n      have h3 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u2115) : \u211d)\n          = (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n        push_cast\n        ring\n      rw [h3] at h2\n      have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := Nat.floor_le (norm_nonneg _)\n      linarith [h2, h4]\n    have hsr : R / 2 \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n      have h := abs_norm_sub_norm_le s (\u03c1 : \u2102)\n      rw [hs, abs_of_nonneg (by linarith [hR, h\u03c1R2] : (0 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016)] at h\n      linarith [h, h\u03c1R2]\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c13']\n    have hsrpos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr, hR]\n    have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n    rw [hid]\n    have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n    have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016) \u2264 R / (\u2016(\u03c1 : \u2102)\u2016 * (R / 2)) := by\n      apply div_le_div_of_nonneg_left hRpos.le (mul_pos h\u03c1pos (by linarith [hR]))\n      exact mul_le_mul_of_nonneg_left hsr h\u03c1pos.le\n    have h2 : R / (\u2016(\u03c1 : \u2102)\u2016 * (R / 2)) = 2 / \u2016(\u03c1 : \u2102)\u2016 := by\n      field_simp\n    have h3 : (2 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 \u2264 2 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 2) (by positivity)\n      exact hpowle\n    calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n        \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * (R / 2))) :=\n          mul_le_mul_of_nonneg_left h1 hm\n      _ = (zeroMult (\u03c1 : \u2102) : \u211d) * (2 / \u2016(\u03c1 : \u2102)\u2016) := by rw [h2]\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (2 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a)) :=\n          mul_le_mul_of_nonneg_left h3 hm\n      _ = 2 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by ring\n  have hcount : \u2200 j : \u2115,\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) := by\n    intro j\n    by_cases hj : j \u2208 Finset.Ico 1 (J + 1)\n    \u00b7 rw [Finset.mem_Ico] at hj\n      have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n        have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n          pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n        linarith [h1]\n      have hM1 : (1 : \u211d) \u2264 max ((2 : \u211d) ^ j - 1) ((2 : \u211d) ^ j - 1) := by\n        rw [max_self]\n        linarith [hj2]\n      have hMb : max ((2 : \u211d) ^ j - 1) ((2 : \u211d) ^ j - 1) \u2264 (2 : \u211d) ^ (j + 1) := by\n        rw [max_self]\n        have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        linarith [hj2]\n      have hsub : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n            Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j),\n          (2 : \u211d) ^ j - 1 \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 (2 : \u211d) ^ (j + 1) \u2227\n            (2 : \u211d) ^ j - 1 \u2264 |(\u03c1 : \u2102).im| := by\n        intro \u03c1 h\u03c1\n        rw [Finset.mem_filter] at h\u03c1\n        obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n        have hpowle : (2 : \u211d) ^ j \u2264 \u2016(\u03c1 : \u2102)\u2016 := by\n          have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2260 0 := by\n            rw [Ne, Nat.floor_eq_zero]\n            push Not\n            rw [hFS, Finset.mem_filter] at h\u03c1F\n            have h\u03c13' : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1F.2.1\n            linarith [h\u03c13']\n          have h1 := Nat.pow_log_le_self 2 hfl\n          rw [h\u03c1j] at h1\n          have h2 : ((2 ^ j : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) := by exact_mod_cast h1\n          have h3 : ((2 ^ j : \u2115) : \u211d) = (2 : \u211d) ^ j := by push_cast; ring\n          rw [h3] at h2\n          have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := Nat.floor_le (norm_nonneg _)\n          linarith [h2, h4]\n        have hpowup : \u2016(\u03c1 : \u2102)\u2016 < (2 : \u211d) ^ (j + 1) := by\n          have h1 : \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a < 2 ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1) :=\n            Nat.lt_pow_succ_log_self (by norm_num) _\n          rw [h\u03c1j] at h1\n          have h2 : \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1 \u2264 2 ^ (j + 1) := h1\n          have h3 : \u2016(\u03c1 : \u2102)\u2016 < (\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n          have h4 : ((\u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (j + 1) : \u2115) : \u211d) := by\n            exact_mod_cast h2\n          have h5 : ((2 ^ (j + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (j + 1) := by push_cast; ring\n          rw [h5] at h4\n          push_cast at h4\n          linarith [h3, h4]\n        have him1 := abs_im_ge_norm_sub_one \u03c1\n        have him2 : |(\u03c1 : \u2102).im| \u2264 \u2016(\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n        exact \u27e8by linarith [him1, hpowle], by linarith [him2, hpowup],\n          by linarith [him1, hpowle]\u27e9\n      have hbrick := sum_zeroMult_le_of_im_band\n        (FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j))\n        hM1 hMb hsub\n      have hab : (2 : \u211d) ^ (j + 1) - ((2 : \u211d) ^ j - 1) + 2 = (2 : \u211d) ^ j + 3 := by\n        have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        linarith [h1]\n      have hmax : max |(2 : \u211d) ^ j - 1| |(2 : \u211d) ^ (j + 1)| = (2 : \u211d) ^ (j + 1) := by\n        have h1 : |(2 : \u211d) ^ (j + 1)| = (2 : \u211d) ^ (j + 1) := abs_of_nonneg (by positivity)\n        have h2 : |(2 : \u211d) ^ j - 1| = (2 : \u211d) ^ j - 1 := abs_of_nonneg (by linarith [hj2])\n        rw [h1, h2]\n        have h3 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        have h4 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n        exact max_eq_right (by linarith [h3, h4])\n      rw [hab, hmax] at hbrick\n      exact hbrick\n    \u00b7 have hempty : FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j) = \u2205 := by\n        apply Finset.eq_empty_iff_forall_notMem.mpr\n        intro \u03c1 h\u03c1\n        rw [Finset.mem_filter] at h\u03c1\n        obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n        have hdj\u03c1 := hdj \u03c1 h\u03c1F\n        rw [h\u03c1j] at hdj\u03c1\n        rw [Finset.mem_Ico] at hj\n        omega\n      rw [hempty, Finset.sum_empty]\n      have h1 : (0 : \u211d) \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) := by\n        apply Real.log_nonneg\n        have h2 : (0 : \u211d) < (2 : \u211d) ^ (j + 1) := by positivity\n        linarith [h2]\n      exact mul_nonneg (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le) (by positivity)) h1\n  -- the closed-form per-shell bound\n  have hper : \u2200 j \u2208 Finset.Ico 1 (J + 1),\n      (2 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) *\n        Real.log (3 * (2 : \u211d) ^ (j + 1) + 5))\n      \u2264 30 * A0count * Real.log R := by\n    intro j hj\n    rw [Finset.mem_Ico] at hj\n    have h2j0 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n    have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n      have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n        pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n      linarith [h1]\n    have hlogle : Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) \u2264 2 * Real.log R := by\n      apply log_three_le_two_log hR (by positivity)\n      have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n      have h2 : (2 : \u211d) ^ j \u2264 (2 : \u211d) ^ J := pow_le_pow_right\u2080 (by norm_num) (by omega : j \u2264 J)\n      nlinarith [h1, h2, h2JR, hR]\n    have hA0 := A0count_pos.le\n    have h1 : (2 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) *\n          Real.log (3 * (2 : \u211d) ^ (j + 1) + 5))\n        = 6 * A0count * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) * (1 + 3 / (2 : \u211d) ^ j) := by\n      field_simp\n      ring\n    rw [h1]\n    have h2 : 3 / (2 : \u211d) ^ j \u2264 3 / 2 := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 3) (by norm_num) hj2\n    have hlognn : (0 : \u211d) \u2264 Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) := by\n      apply Real.log_nonneg\n      have h3 : (0 : \u211d) < (2 : \u211d) ^ (j + 1) := by positivity\n      linarith [h3]\n    have h3 : (6 : \u211d) * A0count * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5)\n        \u2264 6 * A0count * (2 * Real.log R) :=\n      mul_le_mul_of_nonneg_left hlogle (mul_nonneg (by norm_num) hA0)\n    have h4 : (0 : \u211d) \u2264 1 + 3 / (2 : \u211d) ^ j := by\n      have h5 : (0 : \u211d) \u2264 3 / (2 : \u211d) ^ j := div_nonneg (by norm_num) h2j0.le\n      linarith [h5]\n    have h5 : (1 : \u211d) + 3 / (2 : \u211d) ^ j \u2264 5 / 2 := by linarith [h2]\n    have h6 : (6 : \u211d) * A0count * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5) * (1 + 3 / (2 : \u211d) ^ j)\n        \u2264 (6 * A0count * (2 * Real.log R)) * (5 / 2) :=\n      mul_le_mul h3 h5 h4\n        (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 6) hA0)\n          (mul_nonneg (by norm_num : (0 : \u211d) \u2264 2) hlogRnn))\n    have h7 : (6 : \u211d) * A0count * (2 * Real.log R) * (5 / 2) = 30 * A0count * Real.log R := by\n      ring\n    rw [h7] at h6\n    exact h6\n  -- assembly via dyadic_family_le\n  have hmain := dyadic_family_le FS (fun \u03c1 => \u2016(\u03c1 : \u2102)\u2016) J\n    (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016) 2\n    (fun j => 3 * A0count * ((2 : \u211d) ^ j + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5))\n    (by norm_num) hdj hterm hcount\n  calc \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), (2 / (2 : \u211d) ^ j) *\n          (3 * A0count * ((2 : \u211d) ^ j + 3) * Real.log (3 * (2 : \u211d) ^ (j + 1) + 5)) := hmain\n    _ \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), 30 * A0count * Real.log R := Finset.sum_le_sum hper\n    _ = (J : \u211d) * (30 * A0count * Real.log R) := by\n        rw [Finset.sum_const, Nat.card_Ico, Nat.add_sub_cancel, nsmul_eq_mul]\n    _ \u2264 60 * A0count * (Real.log R) ^ 2 := by\n        have hA0 := A0count_pos.le\n        have h1 : (J : \u211d) * (30 * A0count * Real.log R)\n            \u2264 (2 * Real.log R) * (30 * A0count * Real.log R) :=\n          mul_le_mul_of_nonneg_right hJle\n            (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 30) hA0) hlogRnn)\n        have h2 : (2 * Real.log R) * (30 * A0count * Real.log R)\n            = 60 * A0count * (Real.log R) ^ 2 := by ring\n        rw [h2] at h1\n        exact h1\n\n/-! ## 8b. The inner-high and upper shells -/\n\n/-- **The inner-high shell** (R/2 < \u2016\u03c1\u2016 \u2264 R\u22122): \u2264 60\u00b7A\u2080\u00b7(log R)\u00b2.\nDyadic in d := R\u2212\u2016\u03c1\u2016 \u2208 [2, R/2). -/\nlemma shell_inhi {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s)\n    (hR : (16002 : \u211d) \u2264 R) :\n    \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2), \u2016seriesTerm s \u03c1\u2016\n      \u2264 60 * A0count * (Real.log R) ^ 2 := by\n  classical\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  set J := Nat.log 2 \u230aR\u230b\u208a with hJ\n  have hJle : (J : \u211d) \u2264 2 * Real.log R := Nat.log_floor_two_le hR\n  have h2JR : (2 : \u211d) ^ J \u2264 R := two_pow_log_floor_le hR\n  set FS := (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n    \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) with hFS\n  have hdj : \u2200 \u03c1 \u2208 FS,\n      1 \u2264 Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2227 Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2264 J := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c1R2, h\u03c1Rm2\u27e9 := h\u03c1\n    have hd2 : (2 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1Rm2]\n    have hfl2 : (2 : \u2115) \u2264 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a := by\n      rw [Nat.le_floor_iff (by linarith [hd2] : (0 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016)]\n      exact_mod_cast hd2\n    have h1 : (1 : \u2115) \u2264 Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a := by\n      have h2 := Nat.log_mono_right (b := 2) hfl2\n      have h3 : Nat.log 2 2 = 1 := by decide\n      rw [h3] at h2\n      exact h2\n    have h2 : Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2264 J := by\n      apply Nat.log_mono_right (b := 2)\n      apply Nat.floor_mono\n      have hnn : (0 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := norm_nonneg _\n      linarith [hnn]\n    exact \u27e8h1, h2\u27e9\n  have hterm : \u2200 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 2 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c1R2, h\u03c1Rm2\u27e9 := h\u03c1\n    have h\u03c1R2' : (R / 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1R2\n    have hd2 : (2 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1Rm2]\n    have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by\n      have hfl : \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2260 0 := by\n        rw [Ne, Nat.floor_eq_zero]\n        push Not\n        linarith [hd2]\n      have h1 := Nat.pow_log_le_self 2 hfl\n      have h2 : ((2 ^ Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u2115) : \u211d) \u2264 (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) := by\n        exact_mod_cast h1\n      have h3 : ((2 ^ Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u2115) : \u211d)\n          = (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n        push_cast\n        ring\n      rw [h3] at h2\n      have h4 : (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 :=\n        Nat.floor_le (by linarith [hd2])\n      linarith [h2, h4]\n    have hsr : R - \u2016(\u03c1 : \u2102)\u2016 \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n      have h := abs_norm_sub_norm_le s (\u03c1 : \u2102)\n      rw [hs, abs_of_nonneg (by linarith [hd2] : (0 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016)] at h\n      exact h\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1R2', hR]\n    have hsrpos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr, hd2]\n    have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n    rw [hid]\n    have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n    have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016)\n        \u2264 R / (\u2016(\u03c1 : \u2102)\u2016 * (R - \u2016(\u03c1 : \u2102)\u2016)) := by\n      apply div_le_div_of_nonneg_left hRpos.le (mul_pos h\u03c1pos (by linarith [hd2]))\n      exact mul_le_mul_of_nonneg_left hsr h\u03c1pos.le\n    have h2 : R / (\u2016(\u03c1 : \u2102)\u2016 * (R - \u2016(\u03c1 : \u2102)\u2016)) \u2264 2 / (R - \u2016(\u03c1 : \u2102)\u2016) := by\n      have h5 : R \u2264 2 * \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1R2']\n      have h2a : R / \u2016(\u03c1 : \u2102)\u2016 \u2264 2 := by\n        rw [div_le_iff\u2080 h\u03c1pos]\n        linarith [h5]\n      rw [show R / (\u2016(\u03c1 : \u2102)\u2016 * (R - \u2016(\u03c1 : \u2102)\u2016))\n          = (R / \u2016(\u03c1 : \u2102)\u2016) / (R - \u2016(\u03c1 : \u2102)\u2016) from by rw [div_div]]\n      exact div_le_div_of_nonneg_right h2a (by linarith [hd2] : (0 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016)\n    have h3 : (2 : \u211d) / (R - \u2016(\u03c1 : \u2102)\u2016) \u2264 2 / (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 2) (by positivity)\n      exact hpowle\n    calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n        \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * (R - \u2016(\u03c1 : \u2102)\u2016))) :=\n          mul_le_mul_of_nonneg_left h1 hm\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (2 / (R - \u2016(\u03c1 : \u2102)\u2016)) :=\n          mul_le_mul_of_nonneg_left h2 hm\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (2 / (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a)) :=\n          mul_le_mul_of_nonneg_left h3 hm\n      _ = 2 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a) := by ring\n  have hcount : \u2200 j : \u2115,\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) := by\n    intro j\n    have hRHSnn : (0 : \u211d) \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) :=\n      mul_nonneg (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n        (by positivity)) (mul_nonneg (by norm_num : (0 : \u211d) \u2264 2) hlogRnn)\n    by_cases hj : j \u2208 Finset.Ico 1 (J + 1)\n    \u00b7 rw [Finset.mem_Ico] at hj\n      by_cases hbig : R / 2 \u2264 (2 : \u211d) ^ j\n      \u00b7 -- the fiber is empty: d \u2265 2^j \u2265 R/2 contradicts d < R/2\n        have hempty : FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n            Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j) = \u2205 := by\n          apply Finset.eq_empty_iff_forall_notMem.mpr\n          intro \u03c1 h\u03c1\n          rw [Finset.mem_filter] at h\u03c1\n          obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n          rw [hFS, Finset.mem_filter] at h\u03c1F\n          obtain \u27e8-, h\u03c1R2, h\u03c1Rm2\u27e9 := h\u03c1F\n          have h\u03c1R2' : (R / 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1R2\n          have hd2 : (2 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1Rm2]\n          have hpowle : (2 : \u211d) ^ j \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by\n            have hfl : \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2260 0 := by\n              rw [Ne, Nat.floor_eq_zero]\n              push Not\n              linarith [hd2]\n            have h1 := Nat.pow_log_le_self 2 hfl\n            rw [h\u03c1j] at h1\n            have h2 : ((2 ^ j : \u2115) : \u211d) \u2264 (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) := by exact_mod_cast h1\n            have h3 : ((2 ^ j : \u2115) : \u211d) = (2 : \u211d) ^ j := by push_cast; ring\n            rw [h3] at h2\n            have h4 : (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 :=\n              Nat.floor_le (by linarith [hd2])\n            linarith [h2, h4]\n          linarith [hpowle, hbig, h\u03c1R2']\n        rw [hempty, Finset.sum_empty]\n        exact hRHSnn\n      \u00b7 push Not at hbig\n        have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n          have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n            pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n          linarith [h1]\n        have hM1 : (1 : \u211d) \u2264 max (R - (2 : \u211d) ^ (j + 1) - 1) (R / 2 - 1) := by\n          have h1 : (1 : \u211d) \u2264 R / 2 - 1 := by linarith [hR]\n          exact le_trans h1 (le_max_right _ _)\n        have hMb : max (R - (2 : \u211d) ^ (j + 1) - 1) (R / 2 - 1) \u2264 R - (2 : \u211d) ^ j := by\n          apply max_le_iff.mpr\n          constructor\n          \u00b7 have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n            have h2 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n            linarith [h1, h2]\n          \u00b7 linarith [hbig]\n        have hsub : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n              Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j),\n            R - (2 : \u211d) ^ (j + 1) - 1 \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 R - (2 : \u211d) ^ j \u2227\n              R / 2 - 1 \u2264 |(\u03c1 : \u2102).im| := by\n          intro \u03c1 h\u03c1\n          rw [Finset.mem_filter] at h\u03c1\n          obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n          rw [hFS, Finset.mem_filter] at h\u03c1F\n          obtain \u27e8-, h\u03c1R2, h\u03c1Rm2\u27e9 := h\u03c1F\n          have h\u03c1R2' : (R / 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1R2\n          have hd2 : (2 : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1Rm2]\n          have hpowle : (2 : \u211d) ^ j \u2264 R - \u2016(\u03c1 : \u2102)\u2016 := by\n            have hfl : \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a \u2260 0 := by\n              rw [Ne, Nat.floor_eq_zero]\n              push Not\n              linarith [hd2]\n            have h1 := Nat.pow_log_le_self 2 hfl\n            rw [h\u03c1j] at h1\n            have h2 : ((2 ^ j : \u2115) : \u211d) \u2264 (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) := by exact_mod_cast h1\n            have h3 : ((2 ^ j : \u2115) : \u211d) = (2 : \u211d) ^ j := by push_cast; ring\n            rw [h3] at h2\n            have h4 : (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) \u2264 R - \u2016(\u03c1 : \u2102)\u2016 :=\n              Nat.floor_le (by linarith [hd2])\n            linarith [h2, h4]\n          have hpowup : R - \u2016(\u03c1 : \u2102)\u2016 < (2 : \u211d) ^ (j + 1) := by\n            have h1 : \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a < 2 ^ (Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1) :=\n              Nat.lt_pow_succ_log_self (by norm_num) _\n            rw [h\u03c1j] at h1\n            have h2 : \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1 \u2264 2 ^ (j + 1) := h1\n            have h3 : R - \u2016(\u03c1 : \u2102)\u2016 < (\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n            have h4 : ((\u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (j + 1) : \u2115) : \u211d) := by\n              exact_mod_cast h2\n            have h5 : ((2 ^ (j + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (j + 1) := by push_cast; ring\n            rw [h5] at h4\n            push_cast at h4\n            linarith [h3, h4]\n          have him1 := abs_im_ge_norm_sub_one \u03c1\n          have him2 : |(\u03c1 : \u2102).im| \u2264 \u2016(\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n          exact \u27e8by linarith [him1, hpowup], by linarith [him2, hpowle],\n            by linarith [him1, h\u03c1R2']\u27e9\n        have hbrick := sum_zeroMult_le_of_im_band\n          (FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n            Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j)) hM1 hMb hsub\n        have hab : R - (2 : \u211d) ^ j - (R - (2 : \u211d) ^ (j + 1) - 1) + 2 = (2 : \u211d) ^ j + 3 := by\n          have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n          linarith [h1]\n        rw [hab] at hbrick\n        -- the log bound: max|a||b| \u2264 3R\n        have hmaxle : max |R - (2 : \u211d) ^ (j + 1) - 1| |R - (2 : \u211d) ^ j| \u2264 3 * R := by\n          have h1 : |R - (2 : \u211d) ^ j| = R - (2 : \u211d) ^ j := by\n            apply abs_of_nonneg\n            have h2 : (2 : \u211d) ^ j \u2264 (2 : \u211d) ^ J :=\n              pow_le_pow_right\u2080 (by norm_num) (by omega : j \u2264 J)\n            linarith [h2, h2JR, hbig]\n          have h2 : |R - (2 : \u211d) ^ (j + 1) - 1| \u2264 3 * R := by\n            have h3 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n            have h4 : (2 : \u211d) ^ j \u2264 (2 : \u211d) ^ J :=\n              pow_le_pow_right\u2080 (by norm_num) (by omega : j \u2264 J)\n            have h5 : R - (2 : \u211d) ^ (j + 1) - 1 \u2264 R := by\n              have h6 : (0 : \u211d) < (2 : \u211d) ^ (j + 1) := by positivity\n              linarith [h6]\n            have h6 : (2 : \u211d) ^ (j + 1) - 1 \u2264 2 * R + 1 := by\n              nlinarith [h3, h4, h2JR, hR]\n            rw [abs_le]\n            constructor <;> linarith [h5, h6, hR]\n          have h3 : |R - (2 : \u211d) ^ j| \u2264 3 * R := by\n            rw [h1]\n            have h4 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n            linarith [h4, hR]\n          exact max_le h2 h3\n        have hlogle : Real.log (3 * max |R - (2 : \u211d) ^ (j + 1) - 1| |R - (2 : \u211d) ^ j| + 5)\n            \u2264 2 * Real.log R :=\n          log_three_le_two_log hR (le_trans (abs_nonneg _) (le_max_left _ _)) hmaxle\n        exact hbrick.trans (mul_le_mul_of_nonneg_left hlogle\n          (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n            (by positivity)))\n    \u00b7 have hempty : FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230aR - \u2016(\u03c1 : \u2102)\u2016\u230b\u208a = j) = \u2205 := by\n        apply Finset.eq_empty_iff_forall_notMem.mpr\n        intro \u03c1 h\u03c1\n        rw [Finset.mem_filter] at h\u03c1\n        obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n        have hdj\u03c1 := hdj \u03c1 h\u03c1F\n        rw [h\u03c1j] at hdj\u03c1\n        rw [Finset.mem_Ico] at hj\n        omega\n      rw [hempty, Finset.sum_empty]\n      exact hRHSnn\n  -- the closed-form per-shell bound\n  have hper : \u2200 j \u2208 Finset.Ico 1 (J + 1),\n      (2 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n      \u2264 30 * A0count * Real.log R := by\n    intro j hj\n    rw [Finset.mem_Ico] at hj\n    have h2j0 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n    have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n      have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n        pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n      linarith [h1]\n    have hA0 := A0count_pos.le\n    have h1 : (2 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n        = 12 * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j) := by\n      field_simp\n      ring\n    rw [h1]\n    have h2 : 3 / (2 : \u211d) ^ j \u2264 3 / 2 := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 3) (by norm_num) hj2\n    have h3 : (0 : \u211d) \u2264 1 + 3 / (2 : \u211d) ^ j := by\n      have h4 : (0 : \u211d) \u2264 3 / (2 : \u211d) ^ j := div_nonneg (by norm_num) h2j0.le\n      linarith [h4]\n    have h4 : (1 : \u211d) + 3 / (2 : \u211d) ^ j \u2264 5 / 2 := by linarith [h2]\n    have h5 : (12 : \u211d) * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j)\n        \u2264 (12 * A0count * Real.log R) * (5 / 2) :=\n      mul_le_mul_of_nonneg_left h4\n        (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 12) hA0) hlogRnn)\n    have h6 : (12 : \u211d) * A0count * Real.log R * (5 / 2) = 30 * A0count * Real.log R := by\n      ring\n    rw [h6] at h5\n    exact h5\n  -- assembly via dyadic_family_le\n  have hmain := dyadic_family_le FS (fun \u03c1 => R - \u2016(\u03c1 : \u2102)\u2016) J\n    (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016) 2\n    (fun j => 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n    (by norm_num) hdj hterm hcount\n  calc \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), (2 / (2 : \u211d) ^ j) *\n          (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R)) := hmain\n    _ \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1), 30 * A0count * Real.log R := Finset.sum_le_sum hper\n    _ = (J : \u211d) * (30 * A0count * Real.log R) := by\n        rw [Finset.sum_const, Nat.card_Ico, Nat.add_sub_cancel, nsmul_eq_mul]\n    _ \u2264 60 * A0count * (Real.log R) ^ 2 := by\n        have hA0 := A0count_pos.le\n        have h1 : (J : \u211d) * (30 * A0count * Real.log R)\n            \u2264 (2 * Real.log R) * (30 * A0count * Real.log R) :=\n          mul_le_mul_of_nonneg_right hJle\n            (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 30) hA0) hlogRnn)\n        have h2 : (2 * Real.log R) * (30 * A0count * Real.log R)\n            = 60 * A0count * (Real.log R) ^ 2 := by ring\n        rw [h2] at h1\n        exact h1\n\n/-- **The upper shell** (R+2 \u2264 \u2016\u03c1\u2016, within the finite part): \u2264\n45\u00b7A\u2080\u00b7(log R)\u00b2. Dyadic in u := \u2016\u03c1\u2016\u2212R \u2208 [2, R+1); the dyadic class can\nreach J+1 (\u230au\u230b\u208a can be \u230aR\u230b\u208a+1), so the shell count is J+1 \u2264 3\u00b7log R. -/\nlemma shell_up {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s)\n    (hR : (16002 : \u211d) \u2264 R) :\n    \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2), \u2016seriesTerm s \u03c1\u2016\n      \u2264 45 * A0count * (Real.log R) ^ 2 := by\n  classical\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  set J := Nat.log 2 \u230aR\u230b\u208a with hJ\n  have hJle : (J : \u211d) \u2264 2 * Real.log R := Nat.log_floor_two_le hR\n  have h2JR : (2 : \u211d) ^ J \u2264 R := two_pow_log_floor_le hR\n  set FS := (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n    \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2) with hFS\n  have hdj : \u2200 \u03c1 \u2208 FS,\n      1 \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2227 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2264 J + 1 := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1\n    have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n    have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n    have h\u03c1up : \u2016(\u03c1 : \u2102)\u2016 < 2 * R + 1 := by\n      rw [mem_circleZeros] at h\u03c1circ\n      exact h\u03c1circ\n    have hfl2 : (2 : \u2115) \u2264 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by\n      rw [Nat.le_floor_iff (by linarith [hu2] : (0 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R)]\n      exact_mod_cast hu2\n    have h1 : (1 : \u2115) \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by\n      have h2 := Nat.log_mono_right (b := 2) hfl2\n      have h3 : Nat.log 2 2 = 1 := by decide\n      rw [h3] at h2\n      exact h2\n    have h2 : Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2264 J + 1 := by\n      have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n        have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n          rw [Ne, Nat.floor_eq_zero]\n          push Not\n          linarith [hu2]\n        have h1 := Nat.pow_log_le_self 2 hfl\n        have h2 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by\n          exact_mod_cast h1\n        have h3 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d)\n            = (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n          push_cast\n          ring\n        rw [h3] at h2\n        have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n          Nat.floor_le (by linarith [hu2])\n        linarith [h2, h4]\n      have h2J1 : R < (2 : \u211d) ^ (J + 1) := by\n        have h1 : \u230aR\u230b\u208a < 2 ^ (J + 1) := Nat.lt_pow_succ_log_self (by norm_num) _\n        have h2 : R < (\u230aR\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n        have h5 : (\u230aR\u230b\u208a : \u211d) + 1 \u2264 (2 : \u211d) ^ (J + 1) := by\n          have h6 : ((\u230aR\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (J + 1) : \u2115) : \u211d) := by exact_mod_cast h1\n          have h7 : ((2 ^ (J + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (J + 1) := by push_cast; ring\n          rw [h7] at h6\n          push_cast at h6\n          linarith [h6]\n        linarith [h2, h5]\n      by_contra hcon\n      push Not at hcon\n      have h55 : J + 2 \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by omega\n      have h66 : (2 : \u211d) ^ (J + 2) \u2264 (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) :=\n        pow_le_pow_right\u2080 (by norm_num) h55\n      have h77 : (2 : \u211d) ^ (J + 2) = 2 * (2 : \u211d) ^ (J + 1) := by rw [pow_succ']\n      linarith [hpowle, h\u03c1up, h2J1, h66, h77, hR]\n    exact \u27e8h1, h2\u27e9\n  have hterm : \u2200 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 1 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1\n    have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n    have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n    have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n      have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n        rw [Ne, Nat.floor_eq_zero]\n        push Not\n        linarith [hu2]\n      have h1 := Nat.pow_log_le_self 2 hfl\n      have h2 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by\n        exact_mod_cast h1\n      have h3 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d)\n          = (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n        push_cast\n        ring\n      rw [h3] at h2\n      have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n        Nat.floor_le (by linarith [hu2])\n      linarith [h2, h4]\n    have hsr : \u2016(\u03c1 : \u2102)\u2016 - R \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n      have h := abs_norm_sub_norm_le s (\u03c1 : \u2102)\n      rw [hs, abs_of_nonpos (by linarith [h\u03c1R2', hR] : R - \u2016(\u03c1 : \u2102)\u2016 \u2264 0)] at h\n      have h1 : -(R - \u2016(\u03c1 : \u2102)\u2016) = \u2016(\u03c1 : \u2102)\u2016 - R := by ring\n      rw [h1] at h\n      exact h\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1R2', hR]\n    have hsrpos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr, hu2]\n    have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n    rw [hid]\n    have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n    have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016)\n        \u2264 R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R)) := by\n      apply div_le_div_of_nonneg_left hRpos.le (mul_pos h\u03c1pos (by linarith [hu2]))\n      exact mul_le_mul_of_nonneg_left hsr h\u03c1pos.le\n    have h2a : R / \u2016(\u03c1 : \u2102)\u2016 \u2264 1 := by\n      rw [div_le_iff\u2080 h\u03c1pos]\n      linarith [h\u03c1R2', hR]\n    have h2 : R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R)) \u2264 1 / (\u2016(\u03c1 : \u2102)\u2016 - R) := by\n      rw [show R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R))\n          = (R / \u2016(\u03c1 : \u2102)\u2016) / (\u2016(\u03c1 : \u2102)\u2016 - R) from by rw [div_div]]\n      exact div_le_div_of_nonneg_right h2a (by linarith [hu2] : (0 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R)\n    have h3 : (1 : \u211d) / (\u2016(\u03c1 : \u2102)\u2016 - R) \u2264 1 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 1) (by positivity)\n      exact hpowle\n    calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n        \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R))) :=\n          mul_le_mul_of_nonneg_left h1 hm\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / (\u2016(\u03c1 : \u2102)\u2016 - R)) :=\n          mul_le_mul_of_nonneg_left h2 hm\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a)) :=\n          mul_le_mul_of_nonneg_left h3 hm\n      _ = 1 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by ring\n  have hcount : \u2200 j : \u2115,\n      \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) := by\n    intro j\n    have hRHSnn : (0 : \u211d) \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) :=\n      mul_nonneg (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n        (by positivity)) (mul_nonneg (by norm_num : (0 : \u211d) \u2264 2) hlogRnn)\n    by_cases hj : j \u2208 Finset.Ico 1 (J + 1 + 1)\n    \u00b7 rw [Finset.mem_Ico] at hj\n      have hM1 : (1 : \u211d) \u2264 max (R + (2 : \u211d) ^ j - 1) (R + 1) := by\n        have h1 : (1 : \u211d) \u2264 R + 1 := by linarith [hR]\n        exact le_trans h1 (le_max_right _ _)\n      have hMb : max (R + (2 : \u211d) ^ j - 1) (R + 1) \u2264 R + (2 : \u211d) ^ (j + 1) := by\n        apply max_le_iff.mpr\n        constructor\n        \u00b7 have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n          have h2 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n          linarith [h1, h2]\n        \u00b7 have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n          have h2 : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n          linarith [h1, h2]\n      have hsub : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n            Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j),\n          R + (2 : \u211d) ^ j - 1 \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 R + (2 : \u211d) ^ (j + 1) \u2227\n            R + 1 \u2264 |(\u03c1 : \u2102).im| := by\n        intro \u03c1 h\u03c1\n        rw [Finset.mem_filter] at h\u03c1\n        obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n        rw [hFS, Finset.mem_filter] at h\u03c1F\n        obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1F\n        have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n        have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n        have hpowle : (2 : \u211d) ^ j \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n          have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n            rw [Ne, Nat.floor_eq_zero]\n            push Not\n            linarith [hu2]\n          have h1 := Nat.pow_log_le_self 2 hfl\n          rw [h\u03c1j] at h1\n          have h2 : ((2 ^ j : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by exact_mod_cast h1\n          have h3 : ((2 ^ j : \u2115) : \u211d) = (2 : \u211d) ^ j := by push_cast; ring\n          rw [h3] at h2\n          have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n            Nat.floor_le (by linarith [hu2])\n          linarith [h2, h4]\n        have hpowup : \u2016(\u03c1 : \u2102)\u2016 - R < (2 : \u211d) ^ (j + 1) := by\n          have h1 : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a < 2 ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1) :=\n            Nat.lt_pow_succ_log_self (by norm_num) _\n          rw [h\u03c1j] at h1\n          have h2 : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1 \u2264 2 ^ (j + 1) := h1\n          have h3 : \u2016(\u03c1 : \u2102)\u2016 - R < (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n          have h4 : ((\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (j + 1) : \u2115) : \u211d) := by\n            exact_mod_cast h2\n          have h5 : ((2 ^ (j + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (j + 1) := by push_cast; ring\n          rw [h5] at h4\n          push_cast at h4\n          linarith [h3, h4]\n        have him1 := abs_im_ge_norm_sub_one \u03c1\n        have him2 : |(\u03c1 : \u2102).im| \u2264 \u2016(\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n        exact \u27e8by linarith [him1, hpowle], by linarith [him2, hpowup],\n          by linarith [him1, h\u03c1R2', hR]\u27e9\n      have hbrick := sum_zeroMult_le_of_im_band\n        (FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j)) hM1 hMb hsub\n      have hab : R + (2 : \u211d) ^ (j + 1) - (R + (2 : \u211d) ^ j - 1) + 2 = (2 : \u211d) ^ j + 3 := by\n        have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        linarith [h1]\n      rw [hab] at hbrick\n      -- the log bound: max|a||b| = b \u2264 5R \u27f9 log(3b+5) \u2264 log(16R) \u2264 2L\n      have h2j4R : (2 : \u211d) ^ (j + 1) \u2264 4 * R := by\n        have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        have h2 : (2 : \u211d) ^ j \u2264 (2 : \u211d) ^ (J + 1) :=\n          pow_le_pow_right\u2080 (by norm_num) (by omega : j \u2264 J + 1)\n        have h3 : (2 : \u211d) ^ (J + 1) = 2 * (2 : \u211d) ^ J := by rw [pow_succ']\n        nlinarith [h1, h2, h3, h2JR, hR]\n      have hb5 : R + (2 : \u211d) ^ (j + 1) \u2264 5 * R := by linarith [h2j4R, hR]\n      have hmaxb : max |R + (2 : \u211d) ^ j - 1| |R + (2 : \u211d) ^ (j + 1)| = R + (2 : \u211d) ^ (j + 1) := by\n        have h1 : |R + (2 : \u211d) ^ (j + 1)| = R + (2 : \u211d) ^ (j + 1) :=\n          abs_of_nonneg (by positivity)\n        have h2 : |R + (2 : \u211d) ^ j - 1| = R + (2 : \u211d) ^ j - 1 := by\n          apply abs_of_nonneg\n          have h3 : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n          linarith [h3, hR]\n        rw [h1, h2]\n        have h3 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n        have h4 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n        exact max_eq_right (by linarith [h3, h4, hR])\n      have hlogle : Real.log (3 * max |R + (2 : \u211d) ^ j - 1| |R + (2 : \u211d) ^ (j + 1)| + 5)\n          \u2264 2 * Real.log R := by\n        rw [hmaxb]\n        have h1 : Real.log (3 * (R + (2 : \u211d) ^ (j + 1)) + 5) \u2264 Real.log (16 * R) := by\n          apply Real.log_le_log (by positivity)\n          linarith [hb5, hR]\n        have h2 : Real.log (16 * R) = Real.log 16 + Real.log R :=\n          Real.log_mul (by norm_num : (16 : \u211d) \u2260 0) (by linarith [hR] : R \u2260 0)\n        have h3 : Real.log 16 = 4 * Real.log 2 := by\n          rw [show (16 : \u211d) = 2 ^ 4 by norm_num, Real.log_pow]\n          push_cast\n          ring\n        have h4 := log_two_le_one\n        linarith [h1, h2, h3, h4, hlogR]\n      exact hbrick.trans (mul_le_mul_of_nonneg_left hlogle\n        (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n          (by positivity)))\n    \u00b7 have hempty : FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j) = \u2205 := by\n        apply Finset.eq_empty_iff_forall_notMem.mpr\n        intro \u03c1 h\u03c1\n        rw [Finset.mem_filter] at h\u03c1\n        obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n        have hdj\u03c1 := hdj \u03c1 h\u03c1F\n        rw [h\u03c1j] at hdj\u03c1\n        rw [Finset.mem_Ico] at hj\n        omega\n      rw [hempty, Finset.sum_empty]\n      exact hRHSnn\n  -- the closed-form per-shell bound\n  have hper : \u2200 j \u2208 Finset.Ico 1 (J + 1 + 1),\n      (1 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n      \u2264 15 * A0count * Real.log R := by\n    intro j hj\n    rw [Finset.mem_Ico] at hj\n    have h2j0 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n    have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n      have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n        pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n      linarith [h1]\n    have hA0 := A0count_pos.le\n    have h1 : (1 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n        = 6 * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j) := by\n      field_simp\n      ring\n    rw [h1]\n    have h2 : 3 / (2 : \u211d) ^ j \u2264 3 / 2 := by\n      apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 3) (by norm_num) hj2\n    have h3 : (0 : \u211d) \u2264 1 + 3 / (2 : \u211d) ^ j := by\n      have h4 : (0 : \u211d) \u2264 3 / (2 : \u211d) ^ j := div_nonneg (by norm_num) h2j0.le\n      linarith [h4]\n    have h4 : (1 : \u211d) + 3 / (2 : \u211d) ^ j \u2264 5 / 2 := by linarith [h2]\n    have h5 : (6 : \u211d) * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j)\n        \u2264 (6 * A0count * Real.log R) * (5 / 2) :=\n      mul_le_mul_of_nonneg_left h4\n        (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 6) hA0) hlogRnn)\n    have h6 : (6 : \u211d) * A0count * Real.log R * (5 / 2) = 15 * A0count * Real.log R := by\n      ring\n    rw [h6] at h5\n    exact h5\n  -- assembly via dyadic_family_le (J' := J+1)\n  have hmain := dyadic_family_le FS (fun \u03c1 => \u2016(\u03c1 : \u2102)\u2016 - R) (J + 1)\n    (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016) 1\n    (fun j => 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n    (by norm_num) hdj hterm hcount\n  calc \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1 + 1), (1 / (2 : \u211d) ^ j) *\n          (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R)) := hmain\n    _ \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1 + 1), 15 * A0count * Real.log R := Finset.sum_le_sum hper\n    _ = ((J + 1 : \u2115) : \u211d) * (15 * A0count * Real.log R) := by\n        rw [Finset.sum_const, Nat.card_Ico, Nat.add_sub_cancel, nsmul_eq_mul]\n    _ \u2264 45 * A0count * (Real.log R) ^ 2 := by\n        have hA0 := A0count_pos.le\n        have hJ1 : ((J + 1 : \u2115) : \u211d) \u2264 3 * Real.log R := by\n          have h1 : ((J + 1 : \u2115) : \u211d) = (J : \u211d) + 1 := by push_cast; ring\n          linarith [hJle, hlogR]\n        have h1 : ((J + 1 : \u2115) : \u211d) * (15 * A0count * Real.log R)\n            \u2264 (3 * Real.log R) * (15 * A0count * Real.log R) :=\n          mul_le_mul_of_nonneg_right hJ1\n            (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 15) hA0) hlogRnn)\n        have h2 : (3 * Real.log R) * (15 * A0count * Real.log R)\n            = 45 * A0count * (Real.log R) ^ 2 := by ring\n        rw [h2] at h1\n        exact h1\n\n/-! ## 9. The critical shell and the assembly (5e-v-b chunk 3c-iii)\n\n`norm_circle_sub_abs_im_le`: on \u2016s\u2016 = R, R\u2212|im s| = re\u00b2/(R+|im|) \u2264 B/R\nwhen re\u00b2 \u2264 B. `shell_crit`: the critical annulus (R\u22122 < \u2016\u03c1\u2016 < R+2) \u2014\nthe \u03b3-gap arc analysis: |re s| \u2264 \u221a13 \u27f9 |t| within 13/R of R \u27f9\n|t\u2212\u03b3| \u2265 1/(32\u00b7\u0108\u2080) (the \u03b3-gap + threshold); |re s| > \u221a13 \u27f9\n\u2016s\u2212\u03c1\u2016 \u2265 \u221a13\u22121 \u2265 2. Uniform separation \u2016s\u2212\u03c1\u2016 \u2265 1/(32\u00b7\u0108\u2080), term \u2264\n64\u00b7\u0108\u2080\u00b7m, single-window count 42\u00b7A\u2080\u00b7log R \u27f9 \u2264 2688\u00b7\u0108\u2080\u00b7A\u2080\u00b7log R.\n`seriesFun_norm_le_gapCircle`: the assembly. -/\n\n/-- On the circle \u2016s\u2016 = R: R \u2212 |im s| = re\u00b2/(R+|im s|) \u2264 B/R when\nre\u00b2 \u2264 B. -/\nlemma norm_circle_sub_abs_im_le {s : \u2102} {R B : \u211d} (hs : \u2016s\u2016 = R) (hR0 : (0 : \u211d) < R)\n    (hre : s.re ^ 2 \u2264 B) : R - |s.im| \u2264 B / R := by\n  have hnormSq : \u2016s\u2016 ^ 2 = s.re ^ 2 + s.im ^ 2 := by\n    rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n    ring\n  have ht2 : |s.im| ^ 2 = R ^ 2 - s.re ^ 2 := by\n    have h1 : s.im ^ 2 = R ^ 2 - s.re ^ 2 := by\n      have h2 : s.re ^ 2 + s.im ^ 2 = R ^ 2 := by rw [\u2190 hnormSq, hs]\n      linarith\n    rw [sq_abs]\n    linarith [h1]\n  have hRt : R - |s.im| = s.re ^ 2 / (R + |s.im|) := by\n    have hne : R + |s.im| \u2260 0 := by positivity\n    field_simp\n    have h1 : (R - |s.im|) * (R + |s.im|) = R ^ 2 - |s.im| ^ 2 := by ring\n    rw [h1, ht2]\n    ring\n  rw [hRt]\n  have h1 : s.re ^ 2 / (R + |s.im|) \u2264 s.re ^ 2 / R := by\n    apply div_le_div_of_nonneg_left (sq_nonneg _) hR0\n    have h2 : (0 : \u211d) \u2264 |s.im| := abs_nonneg _\n    linarith\n  have h3 : s.re ^ 2 / R \u2264 B / R := div_le_div_of_nonneg_right hre hR0.le\n  exact h1.trans h3\n\n/-- **The critical shell** (R\u22122 < \u2016\u03c1\u2016 < R+2): \u2264 2688\u00b7\u0108\u2080\u00b7A\u2080\u00b7log R. -/\nlemma shell_crit {k : \u2115} (hk : 4000 \u2264 k) {R : \u211d} (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s) :\n    \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 < R + 2), \u2016seriesTerm s \u03c1\u2016\n      \u2264 2688 * C0hat (4 * (k : \u211d) + 9 / 2) * A0count * Real.log R := by\n  classical\n  have hth := gapCircle_threshold hk\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hR : (16002 : \u211d) \u2264 R := by\n    have hkR : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n      have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n      linarith\n    linarith [hRlo]\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  have h\u0108pos : (0 : \u211d) < C0hat (4 * (k : \u211d) + 9 / 2) := by linarith [h\u01082]\n  set FS := (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n    \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 < R + 2) with hFS\n  -- the uniform separation 1/(32\u0108\u2080) \u2264 \u2016s\u2212\u03c1\u2016 on the critical shell\n  have hsep : \u2200 \u03c1 \u2208 FS, 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n    intro \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c1Rm2, h\u03c1Rp2\u27e9 := h\u03c1\n    have h\u03c1Rm2' : (R - 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1Rm2\n    -- |\u03b3| \u2265 \u2016\u03c1\u2016\u22121 \u2265 R\u22123; the \u03b3-gap for |\u03b3| near R (conj if \u03b3 < 0)\n    have h\u03b3R : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |(|(\u03c1 : \u2102).im|) - R| := by\n      rcases le_or_gt 0 (\u03c1 : \u2102).im with h\u03b3 | h\u03b3\n      \u00b7 have hgap' := hgap (\u03c1 : \u2102) \u03c1.2\n        rw [\u2190 abs_of_nonneg h\u03b3] at hgap'\n        rcases hgap' with h | h\n        \u00b7 exact h\n        \u00b7 have h1 : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 1 := by\n            rw [div_le_one (by positivity : (0 : \u211d) < 16 * C0hat (4 * (k : \u211d) + 9 / 2))]\n            linarith [h\u01082]\n          exact h1.trans h\n      \u00b7 have hconj := hgap ((starRingEnd \u2102) (\u03c1 : \u2102)) (isNontrivialZero_conj \u03c1.2)\n        rw [Complex.conj_im, \u2190 abs_of_neg h\u03b3] at hconj\n        rcases hconj with h | h\n        \u00b7 exact h\n        \u00b7 have h1 : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 1 := by\n            rw [div_le_one (by positivity : (0 : \u211d) < 16 * C0hat (4 * (k : \u211d) + 9 / 2))]\n            linarith [h\u01082]\n          exact h1.trans h\n    by_cases hre13 : s.re ^ 2 \u2264 13\n    \u00b7 -- the strip arcs: |t| within 13/R of R, |t\u2212\u03b3| \u2265 1/(32\u0108\u2080)\n      have hRt : R - |s.im| \u2264 13 / R :=\n        norm_circle_sub_abs_im_le hs hRpos hre13\n      have ht_le : |s.im| \u2264 R := by\n        have h := abs_im_le_norm s\n        rw [hs] at h\n        exact h\n      have h1 : |(|s.im| - |(\u03c1 : \u2102).im|)| \u2264 |s.im - (\u03c1 : \u2102).im| :=\n        abs_abs_sub_abs_le_abs_sub _ _\n      have h2 : |(|(\u03c1 : \u2102).im| - R)| \u2264 |(|(\u03c1 : \u2102).im| - |s.im|)| + |(|s.im| - R)| :=\n        abs_sub_le _ _ _\n      have h3 : |(|(\u03c1 : \u2102).im| - |s.im|)| = |(|s.im| - |(\u03c1 : \u2102).im|)| := abs_sub_comm _ _\n      have h4 : |(|s.im| - R)| = R - |s.im| := by\n        rw [abs_of_nonpos (by linarith [ht_le] : |s.im| - R \u2264 0)]\n        ring\n      -- the threshold: 13/R \u2264 1/(32\u0108\u2080)\n      have hthr : 13 / R \u2264 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) := by\n        rw [div_le_div_iff\u2080 hRpos (by positivity : (0 : \u211d) < 32 * C0hat (4 * (k : \u211d) + 9 / 2))]\n        have h1 : 13 * (32 * C0hat (4 * (k : \u211d) + 9 / 2))\n            = 416 * C0hat (4 * (k : \u211d) + 9 / 2) := by ring\n        rw [h1]\n        linarith [hth, hRlo]\n      have hP2Q : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2))\n          = 2 * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2))) := by\n        have hne : C0hat (4 * (k : \u211d) + 9 / 2) \u2260 0 := h\u0108pos.ne'\n        field_simp [hne]\n        ring\n      have hb1 : |(|(\u03c1 : \u2102).im| - R)| - (R - |s.im|) \u2264 |s.im - (\u03c1 : \u2102).im| := by\n        linarith [h1, h2, h3, h4]\n      have h5 : 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |s.im - (\u03c1 : \u2102).im| := by\n        linarith [h\u03b3R, hRt, hthr, hb1, hP2Q]\n      have h6 : (s - (\u03c1 : \u2102)).im = s.im - (\u03c1 : \u2102).im := Complex.sub_im _ _\n      have h7 : |(s - (\u03c1 : \u2102)).im| \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n      rw [h6] at h7\n      linarith [h5, h7]\n    \u00b7 -- the near-axis arcs: |re s| > \u221a13 \u27f9 \u2016s\u2212\u03c1\u2016 \u2265 \u221a13\u22121 \u2265 2\n      push Not at hre13\n      have hsqrt : Real.sqrt 13 < |s.re| := by\n        rw [Real.sqrt_lt (by norm_num : (0 : \u211d) \u2264 13) (abs_nonneg _)]\n        rw [sq_abs]\n        exact hre13\n      have h3le : (3 : \u211d) \u2264 Real.sqrt 13 := by\n        rw [show (3 : \u211d) = Real.sqrt (3 ^ 2) from (Real.sqrt_sq (by norm_num)).symm]\n        exact Real.sqrt_le_sqrt (by norm_num : (3 : \u211d) ^ 2 \u2264 13)\n      have h1 : |s.re| - |(\u03c1 : \u2102).re| \u2264 |s.re - (\u03c1 : \u2102).re| := abs_sub_abs_le_abs_sub _ _\n      have hre\u03c1 : |(\u03c1 : \u2102).re| \u2264 1 := by\n        rw [abs_le]\n        exact \u27e8by linarith [\u03c1.2.2.1], by linarith [\u03c1.2.2.2]\u27e9\n      have h2 : (2 : \u211d) < |s.re - (\u03c1 : \u2102).re| := by linarith [hsqrt, h3le, h1, hre\u03c1]\n      have h3 : (s - (\u03c1 : \u2102)).re = s.re - (\u03c1 : \u2102).re := Complex.sub_re _ _\n      have h4 : |(s - (\u03c1 : \u2102)).re| \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := abs_re_le_norm _\n      rw [h3] at h4\n      have h5 : 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 2 := by\n        rw [div_le_iff\u2080 (by positivity : (0 : \u211d) < 32 * C0hat (4 * (k : \u211d) + 9 / 2))]\n        linarith [h\u01082]\n      linarith [h2, h4, h5]\n  -- the per-element term bound g \u03c1 \u2264 64\u00b7\u0108\u2080\u00b7m\n  have hterm : \u2200 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 64 * C0hat (4 * (k : \u211d) + 9 / 2) * (zeroMult (\u03c1 : \u2102) : \u211d) := by\n    intro \u03c1 h\u03c1\n    have hsep\u03c1 := hsep \u03c1 h\u03c1\n    rw [hFS, Finset.mem_filter] at h\u03c1\n    obtain \u27e8-, h\u03c1Rm2, h\u03c1Rp2\u27e9 := h\u03c1\n    have h\u03c1Rm2' : (R - 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1Rm2\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := by linarith [hR]\n    have hsep\u03c1pos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by\n      have h1 : (0 : \u211d) < 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) := by positivity\n      linarith [hsep\u03c1, h1]\n    have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n    rw [hid]\n    have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n    have hden : (R - 2) * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)))\n        \u2264 \u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016 :=\n      mul_le_mul h\u03c1Rm2'.le hsep\u03c1\n        (div_nonneg one_pos.le (mul_nonneg (by norm_num : (0 : \u211d) \u2264 32) h\u0108pos.le))\n        (by linarith [hR])\n    have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016)\n        \u2264 R / ((R - 2) * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)))) := by\n      apply div_le_div_of_nonneg_left hRpos.le\n        (mul_pos (by linarith [hR] : (0 : \u211d) < R - 2)\n          (div_pos one_pos (mul_pos (by norm_num : (0 : \u211d) < 32) h\u0108pos)))\n      exact hden\n    have h2 : R / ((R - 2) * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2))))\n        = 32 * C0hat (4 * (k : \u211d) + 9 / 2) * (R / (R - 2)) := by\n      field_simp\n    have h3 : R / (R - 2) \u2264 2 := by\n      rw [div_le_iff\u2080 (by linarith [hR] : (0 : \u211d) < R - 2)]\n      linarith [hR]\n    calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n        \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) *\n            (R / ((R - 2) * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2))))) :=\n          mul_le_mul_of_nonneg_left h1 hm\n      _ = (zeroMult (\u03c1 : \u2102) : \u211d) * (32 * C0hat (4 * (k : \u211d) + 9 / 2) * (R / (R - 2))) := by\n          rw [h2]\n      _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (32 * C0hat (4 * (k : \u211d) + 9 / 2) * 2) := by\n          apply mul_le_mul_of_nonneg_left _ hm\n          exact mul_le_mul_of_nonneg_left h3\n            (mul_nonneg (by norm_num : (0 : \u211d) \u2264 32) h\u0108pos.le)\n      _ = 64 * C0hat (4 * (k : \u211d) + 9 / 2) * (zeroMult (\u03c1 : \u2102) : \u211d) := by ring\n  -- the single-window count\n  have hcount : \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d)\n      \u2264 3 * A0count * 7 * (2 * Real.log R) := by\n    have hM1 : (1 : \u211d) \u2264 max (R - 3) (R - 3) := by rw [max_self]; linarith [hR]\n    have hMb : max (R - 3) (R - 3) \u2264 R + 2 := by rw [max_self]; linarith [hR]\n    have hsub : \u2200 \u03c1 \u2208 FS,\n        R - 3 \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 R + 2 \u2227 R - 3 \u2264 |(\u03c1 : \u2102).im| := by\n      intro \u03c1 h\u03c1\n      rw [hFS, Finset.mem_filter] at h\u03c1\n      obtain \u27e8-, h\u03c1Rm2, h\u03c1Rp2\u27e9 := h\u03c1\n      have h\u03c1Rm2' : (R - 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_not_ge h\u03c1Rm2\n      have him1 := abs_im_ge_norm_sub_one \u03c1\n      have him2 : |(\u03c1 : \u2102).im| \u2264 \u2016(\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n      exact \u27e8by linarith [him1, h\u03c1Rm2'], by linarith [him2, h\u03c1Rp2],\n        by linarith [him1, h\u03c1Rm2']\u27e9\n    have hbrick := sum_zeroMult_le_of_im_band FS hM1 hMb hsub\n    have hab : R + 2 - (R - 3) + 2 = 7 := by ring\n    have hmax : max |R - 3| |R + 2| = R + 2 := by\n      rw [abs_of_nonneg (by linarith [hR] : (0 : \u211d) \u2264 R - 3),\n        abs_of_nonneg (by linarith [hR] : (0 : \u211d) \u2264 R + 2)]\n      exact max_eq_right (by linarith [hR])\n    rw [hab, hmax] at hbrick\n    have hlogle : Real.log (3 * (R + 2) + 5) \u2264 2 * Real.log R := by\n      have h1 : Real.log (3 * (R + 2) + 5) \u2264 Real.log (4 * R) := by\n        apply Real.log_le_log (by linarith [hRpos])\n        linarith [hR]\n      have h2 : Real.log (4 * R) = Real.log 4 + Real.log R :=\n        Real.log_mul (by norm_num : (4 : \u211d) \u2260 0) (by linarith [hR] : R \u2260 0)\n      have h3 : Real.log 4 = 2 * Real.log 2 := by\n        rw [show (4 : \u211d) = 2 ^ 2 by norm_num, Real.log_pow]\n        push_cast\n        ring\n      have h4 := log_two_le_one\n      linarith [h1, h2, h3, h4, hlogR]\n    exact hbrick.trans (mul_le_mul_of_nonneg_left hlogle\n      (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n        (by norm_num : (0 : \u211d) \u2264 7)))\n  -- assemble\n  have hsum : \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 \u03c1 \u2208 FS, 64 * C0hat (4 * (k : \u211d) + 9 / 2) * (zeroMult (\u03c1 : \u2102) : \u211d) :=\n    Finset.sum_le_sum hterm\n  have hfact : \u2211 \u03c1 \u2208 FS, 64 * C0hat (4 * (k : \u211d) + 9 / 2) * (zeroMult (\u03c1 : \u2102) : \u211d)\n      = (64 * C0hat (4 * (k : \u211d) + 9 / 2)) * \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d) := by\n    rw [Finset.mul_sum]\n  have hfin : (64 : \u211d) * C0hat (4 * (k : \u211d) + 9 / 2) * (3 * A0count * 7 * (2 * Real.log R))\n      = 2688 * C0hat (4 * (k : \u211d) + 9 / 2) * A0count * Real.log R := by ring\n  calc \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n      \u2264 \u2211 \u03c1 \u2208 FS, 64 * C0hat (4 * (k : \u211d) + 9 / 2) * (zeroMult (\u03c1 : \u2102) : \u211d) := hsum\n    _ = (64 * C0hat (4 * (k : \u211d) + 9 / 2)) * \u2211 \u03c1 \u2208 FS, (zeroMult (\u03c1 : \u2102) : \u211d) := hfact\n    _ \u2264 (64 * C0hat (4 * (k : \u211d) + 9 / 2)) * (3 * A0count * 7 * (2 * Real.log R)) :=\n        mul_le_mul_of_nonneg_left hcount\n          (mul_nonneg (by norm_num : (0 : \u211d) \u2264 64) h\u0108pos.le)\n    _ = 2688 * C0hat (4 * (k : \u211d) + 9 / 2) * A0count * Real.log R := hfin\n\n/-- **The series circle bound** (ii\u2032-5e-v-b chunk 3 capstone): on the\n\u03b3-gap circle |s| = R (k \u2265 4000), \u2016seriesFun s\u2016 \u2264 2\u00b7lowZeroConst +\n2900\u00b7A\u2080\u00b7\u0108\u2080(4k+9/2)\u00b7(log R)\u00b2. The ONE tsum split at {\u2016\u03c1\u2016 < 2R+1}, the\nfive-way shell partition of the finite part (iterated filter splits;\nthe redundant \u00acq1/\u00acq2 conjuncts dropped via the range implications),\nthe shell bounds (low 2\u00b7lowZeroConst; inlo/inhi 60\u00b7A\u2080L\u00b2; crit\n2688\u00b7\u0108\u2080A\u2080L; up 45\u00b7A\u2080L\u00b2), and the far tail \u2264 91\u00b7A\u2080L. -/\ntheorem seriesFun_norm_le_gapCircle {k : \u2115} (hk : 4000 \u2264 k)\n    {R : \u211d} (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) :\n    \u2016seriesFun s\u2016 \u2264 2 * lowZeroConst +\n      2900 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n  classical\n  have hsz : \u00ac IsNontrivialZero s :=\n    not_isNontrivialZero_on_gapCircle hk hRlo hgap hs\n  have hR : (16002 : \u211d) \u2264 R := by\n    have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n    linarith [hRlo]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hA0 := A0count_pos.le\n  -- the shell bounds and the tail\n  have hsh1 := shell_low hs hsz hR\n  have hsh2 := shell_inlo hs hsz hR\n  have hsh3 := shell_inhi hs hsz hR\n  have hsh4 := shell_crit hk hRlo hgap hs hsz\n  have hsh5 := shell_up hs hsz hR\n  have htail := series_tail_le hs hR\n  have hsplit0 := seriesFun_norm_le_split (s := s) (R := R)\n  -- the partition identity (iterated filter splits)\n  have hsplit1 := Finset.sum_filter_add_sum_filter_not (circleZeros R)\n    (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 3) (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016)\n  have hsplit2 := Finset.sum_filter_add_sum_filter_not\n    ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3))\n    (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016)\n  have hff2 : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3)).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) := Finset.filter_filter _ _ _\n  rw [hff2] at hsplit2\n  have hff2' : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3)).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) := Finset.filter_filter _ _ _\n  rw [hff2'] at hsplit2\n  have hsplit3 := Finset.sum_filter_add_sum_filter_not\n    ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2))\n    (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016)\n  have hff3 : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2)).filter\n        (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) :=\n    Finset.filter_filter _ _ _\n  rw [hff3] at hsplit3\n  have hff3' : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2)).filter\n        (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) :=\n    Finset.filter_filter _ _ _\n  rw [hff3'] at hsplit3\n  have hsplit4 := Finset.sum_filter_add_sum_filter_not\n    ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2))\n    (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 < R + 2) (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016)\n  have hff4 : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2)).filter\n        (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u2016(\u03c1 : \u2102)\u2016 < R + 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          ((\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) \u2227 \u2016(\u03c1 : \u2102)\u2016 < R + 2) :=\n    Finset.filter_filter _ _ _\n  rw [hff4] at hsplit4\n  have hff4' : ((circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2)).filter\n        (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          ((\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2) :=\n    Finset.filter_filter _ _ _\n  rw [hff4'] at hsplit4\n  -- the three congruences dropping the redundant conjuncts\n  have hc3 : (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        (\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) := by\n    ext \u03c1\n    simp only [Finset.mem_filter]\n    constructor\n    \u00b7 rintro \u27e8hF, \u27e8-, h2\u27e9, h3\u27e9\n      exact \u27e8hF, h2, h3\u27e9\n    \u00b7 rintro \u27e8hF, h2, h3\u27e9\n      refine \u27e8hF, \u27e8\u27e8?_, h2\u27e9, h3\u27e9\u27e9\n      exact not_le_of_gt (by linarith [lt_of_not_ge h2, hR] : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n  rw [hc3] at hsplit3\n  have hc4 : (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        ((\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) \u2227 \u2016(\u03c1 : \u2102)\u2016 < R + 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2 \u2227 \u2016(\u03c1 : \u2102)\u2016 < R + 2) := by\n    ext \u03c1\n    simp only [Finset.mem_filter]\n    constructor\n    \u00b7 rintro \u27e8hF, \u27e8-, h3\u27e9, h4\u27e9\n      exact \u27e8hF, h3, h4\u27e9\n    \u00b7 rintro \u27e8hF, h3, h4\u27e9\n      refine \u27e8hF, \u27e8\u27e8?_, ?_\u27e9, h3\u27e9, h4\u27e9\n      \u00b7 exact not_le_of_gt (by linarith [lt_of_not_ge h3, hR] : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n      \u00b7 exact not_le_of_gt (by linarith [lt_of_not_ge h3, hR] : (R / 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n  rw [hc4] at hsplit4\n  have hc5 : (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        ((\u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 3 \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R / 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 \u2264 R - 2) \u2227 \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2)\n      = (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n          \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2) := by\n    ext \u03c1\n    simp only [Finset.mem_filter]\n    constructor\n    \u00b7 rintro \u27e8hF, -, h4\u27e9\n      exact \u27e8hF, h4\u27e9\n    \u00b7 rintro \u27e8hF, h4\u27e9\n      refine \u27e8hF, \u27e8\u27e8?_, ?_\u27e9, ?_\u27e9, h4\u27e9\n      \u00b7 exact not_le_of_gt (by linarith [le_of_not_gt h4, hR] : (3 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n      \u00b7 exact not_le_of_gt (by linarith [le_of_not_gt h4, hR] : (R / 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n      \u00b7 exact not_le_of_gt (by linarith [le_of_not_gt h4, hR] : (R - 2 : \u211d) < \u2016(\u03c1 : \u2102)\u2016)\n  rw [hc5] at hsplit4\n  -- the final absorption: 165A\u2080L\u00b2 + 2688\u0108A\u2080L + 91A\u2080L \u2264 2900A\u2080\u0108L\u00b2\n  have hL2 : Real.log R \u2264 (Real.log R) ^ 2 := by nlinarith [hlogR]\n  have hnn1 : (0 : \u211d) \u2264 A0count * (Real.log R) ^ 2 := mul_nonneg hA0 (pow_two_nonneg _)\n  have hnn2 : (0 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) * A0count :=\n    mul_nonneg (by linarith [h\u01082]) hA0\n  have hfin : 2 * lowZeroConst + ((60 * A0count * (Real.log R) ^ 2 +\n        (60 * A0count * (Real.log R) ^ 2 + (2688 * C0hat (4 * (k : \u211d) + 9 / 2) * A0count *\n          Real.log R + 45 * A0count * (Real.log R) ^ 2))) + 91 * A0count * Real.log R)\n      \u2264 2 * lowZeroConst + 2900 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n    nlinarith [h\u01082, hlogR, hA0, hL2, hnn1, hnn2, lowZeroConst_nonneg]\n  linarith [hsplit0, hsplit1, hsplit2, hsplit3, hsplit4, hsh1, hsh2, hsh3, hsh4, hsh5,\n    htail, hfin]\n\n/-! ## 10. The (G) formula at real non-pole points + the standalone\nseparation (5e-v-c-i)\n\n`differentiableAt_Gamma\u211d_of_not_neg_nat` / `logDeriv_Gamma\u211d_eq_of_not_neg_nat`:\nthe \u0393R logDeriv formula logDeriv \u0393R s\u2080 = \u2212(log \u03c0)/2 + \u00bd\u03c8(s\u2080/2) at ANY\ns\u2080 with s\u2080/2 off the \u0393 poles \u2014 the im \u2260 0 hypothesis of 5e-ii's\n`logDeriv_Gamma\u211d_eq` was only used for pole-avoidance, and the direct\n`logDeriv_mul` computation (digamma := logDeriv \u0393 by definition) works\neverywhere. This discharges the real point s = \u2212R of the left\nnear-axis arc (no continuity argument needed).\n\n`gapCircle_sep`: the shell_crit arc analysis as a standalone statement\nfor ALL nontrivial zeros (the shell range was only used for the term\nbound, not the separation). `nearZeros_count_le`: the near-window\nmult-count \u2264 3\u00b7A\u2080\u00b7log(3\u00b7max|t\u22121||t+1|+5) for |t| \u2265 10 (single\nzerosIn(t\u22121, t+1] window \u2014 |t| \u2265 10 makes all ordinates same-sign).\n`gapCircle_sep_of_mem_nearZeros`: the separation for nearZeros\n(\u2016\u03c1\u2016 > R\u22122: gapCircle_sep; else \u2016s\u2212\u03c1\u2016 \u2265 2). -/\n\n/-- \u0393R differentiable at any s with s/2 off the \u0393 poles (the\npole-avoidance form of `differentiableAt_Gamma\u211d_of_im_ne_zero'`). -/\ntheorem differentiableAt_Gamma\u211d_of_not_neg_nat {s : \u2102}\n    (hs : \u2200 m : \u2115, s / 2 \u2260 -(m : \u2102)) :\n    DifferentiableAt \u2102 Complex.Gamma\u211d s := by\n  have h1 : DifferentiableAt \u2102 (fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2)) s := by\n    refine DifferentiableAt.const_cpow ?_ (Or.inl (by exact_mod_cast Real.pi_ne_zero))\n    exact (differentiableAt_id.neg).div_const 2\n  have h2 : DifferentiableAt \u2102 (fun z : \u2102 => Complex.Gamma (z / 2)) s :=\n    (Complex.differentiableAt_Gamma _ hs).comp s (differentiableAt_id.div_const 2)\n  have hdef : Complex.Gamma\u211d = fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2) * Complex.Gamma (z / 2) :=\n    funext Complex.Gamma\u211d_def\n  rw [hdef]; exact h1.mul h2\n\n/-- **The (G) formula at any non-pole point** (incl. real points):\nlogDeriv \u0393R s\u2080 = \u2212(log \u03c0)/2 + \u00bd\u03c8(s\u2080/2). Via `logDeriv_mul` on\nGamma\u211d_def: the \u03c0^(\u2212s/2) factor contributes \u2212(log \u03c0)/2 and the \u0393(s/2)\nfactor \u00bd\u03c8(s\u2080/2) (digamma := logDeriv \u0393 by definition). -/\ntheorem logDeriv_Gamma\u211d_eq_of_not_neg_nat {s\u2080 : \u2102}\n    (hs : \u2200 m : \u2115, s\u2080 / 2 \u2260 -(m : \u2102)) :\n    logDeriv Complex.Gamma\u211d s\u2080\n      = -(Real.log Real.pi : \u2102) / 2 + (1 / 2 : \u2102) * Complex.digamma (s\u2080 / 2) := by\n  have hdef : Complex.Gamma\u211d = fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2) * Complex.Gamma (z / 2) :=\n    funext Complex.Gamma\u211d_def\n  rw [hdef]\n  have h1 : DifferentiableAt \u2102 (fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2)) s\u2080 := by\n    refine DifferentiableAt.const_cpow ?_ (Or.inl (by exact_mod_cast Real.pi_ne_zero))\n    exact (differentiableAt_id.neg).div_const 2\n  have h2 : DifferentiableAt \u2102 (fun z : \u2102 => Complex.Gamma (z / 2)) s\u2080 :=\n    (Complex.differentiableAt_Gamma _ hs).comp s\u2080 (differentiableAt_id.div_const 2)\n  have hne1 : (Real.pi : \u2102) ^ (-s\u2080 / 2) \u2260 0 :=\n    Complex.cpow_ne_zero_iff.mpr (Or.inl (by exact_mod_cast Real.pi_ne_zero))\n  have hne2 : Complex.Gamma (s\u2080 / 2) \u2260 0 := Complex.Gamma_ne_zero hs\n  rw [logDeriv_mul (f := fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2))\n    (g := fun z : \u2102 => Complex.Gamma (z / 2)) _ hne1 hne2 h1 h2]\n  have hf1 : logDeriv (fun z : \u2102 => (Real.pi : \u2102) ^ (-z / 2)) s\u2080\n      = -(Real.log Real.pi : \u2102) / 2 := by\n    rw [logDeriv_apply]\n    have hbase : HasDerivAt (fun z : \u2102 => -z / 2) (-(1 : \u2102) / 2) s\u2080 :=\n      (hasDerivAt_id' s\u2080).neg.div_const 2\n    have hder := hbase.const_cpow (Or.inl (by exact_mod_cast Real.pi_ne_zero :\n      (Real.pi : \u2102) \u2260 0))\n    rw [hder.deriv]\n    field_simp [hne1]\n    rw [\u2190 Complex.ofReal_log Real.pi_nonneg]\n  have hf2 : logDeriv (fun z : \u2102 => Complex.Gamma (z / 2)) s\u2080\n      = (1 / 2 : \u2102) * Complex.digamma (s\u2080 / 2) := by\n    rw [logDeriv_apply]\n    have hder : deriv (fun z : \u2102 => Complex.Gamma (z / 2)) s\u2080\n        = deriv Complex.Gamma (s\u2080 / 2) * (1 / 2) := by\n      have h1 : deriv (Complex.Gamma \u2218 fun z : \u2102 => z / 2) s\u2080\n          = deriv Complex.Gamma (s\u2080 / 2) * deriv (fun z : \u2102 => z / 2) s\u2080 :=\n        deriv_comp _ (Complex.differentiableAt_Gamma _ hs) (differentiableAt_id.div_const 2)\n      have h2 : deriv (fun z : \u2102 => z / 2) s\u2080 = 1 / 2 :=\n        ((hasDerivAt_id' s\u2080).div_const 2).deriv\n      have h3 : deriv (fun z : \u2102 => Complex.Gamma (z / 2)) s\u2080\n          = deriv (Complex.Gamma \u2218 fun z : \u2102 => z / 2) s\u2080 := rfl\n      rw [h3, h1, h2]\n    rw [hder]\n    have hdig : deriv Complex.Gamma (s\u2080 / 2)\n        = Complex.digamma (s\u2080 / 2) * Complex.Gamma (s\u2080 / 2) := by\n      rw [Complex.digamma_def, logDeriv_apply]\n      field_simp [hne2]\n    rw [hdig]\n    field_simp [hne2]\n  rw [hf1, hf2]\n\n/-- **The \u03b3-gap separation, standalone**: for k \u2265 4000, R with the\ngap-circle properties, \u2016s\u2016 = R, every nontrivial zero \u03c1 satisfies\n\u2016s\u2212\u03c1\u2016 \u2265 1/(32\u00b7\u0108\u2080). (The shell_crit arc analysis: strip arcs |t\u2212\u03b3| \u2265\n1/(32\u0108\u2080) via the \u03b3-gap \u2014 applied to conj \u03c1 for \u03b3 < 0 \u2014 + the\nthreshold; near-axis arcs \u2016s\u2212\u03c1\u2016 \u2265 \u221a13\u22121.) -/\ntheorem gapCircle_sep {k : \u2115} (hk : 4000 \u2264 k) {R : \u211d} (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) {\u03c1 : \u2102} (h\u03c1 : IsNontrivialZero \u03c1) :\n    1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 \u2016s - \u03c1\u2016 := by\n  have hth := gapCircle_threshold hk\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hR : (16002 : \u211d) \u2264 R := by\n    have hkR : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n      have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n      linarith\n    linarith [hRlo]\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have h\u0108pos : (0 : \u211d) < C0hat (4 * (k : \u211d) + 9 / 2) := by linarith [h\u01082]\n  have h\u03b3R : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |(|\u03c1.im|) - R| := by\n    rcases le_or_gt 0 \u03c1.im with h\u03b3 | h\u03b3\n    \u00b7 have hgap' := hgap \u03c1 h\u03c1\n      rw [\u2190 abs_of_nonneg h\u03b3] at hgap'\n      rcases hgap' with h | h\n      \u00b7 exact h\n      \u00b7 have h1 : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 1 := by\n          rw [div_le_one (by positivity : (0 : \u211d) < 16 * C0hat (4 * (k : \u211d) + 9 / 2))]\n          linarith [h\u01082]\n        exact h1.trans h\n    \u00b7 have hconj := hgap ((starRingEnd \u2102) \u03c1) (isNontrivialZero_conj h\u03c1)\n      rw [Complex.conj_im, \u2190 abs_of_neg h\u03b3] at hconj\n      rcases hconj with h | h\n      \u00b7 exact h\n      \u00b7 have h1 : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 1 := by\n          rw [div_le_one (by positivity : (0 : \u211d) < 16 * C0hat (4 * (k : \u211d) + 9 / 2))]\n          linarith [h\u01082]\n        exact h1.trans h\n  by_cases hre13 : s.re ^ 2 \u2264 13\n  \u00b7 -- strip arcs\n    have hRt : R - |s.im| \u2264 13 / R :=\n      norm_circle_sub_abs_im_le hs hRpos hre13\n    have ht_le : |s.im| \u2264 R := by\n      have h := abs_im_le_norm s\n      rw [hs] at h\n      exact h\n    have h1 : |(|s.im| - |\u03c1.im|)| \u2264 |s.im - \u03c1.im| :=\n      abs_abs_sub_abs_le_abs_sub _ _\n    have h2 : |(|\u03c1.im| - R)| \u2264 |(|\u03c1.im| - |s.im|)| + |(|s.im| - R)| :=\n      abs_sub_le _ _ _\n    have h3 : |(|\u03c1.im| - |s.im|)| = |(|s.im| - |\u03c1.im|)| := abs_sub_comm _ _\n    have h4 : |(|s.im| - R)| = R - |s.im| := by\n      rw [abs_of_nonpos (by linarith [ht_le] : |s.im| - R \u2264 0)]\n      ring\n    have hthr : 13 / R \u2264 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) := by\n      rw [div_le_div_iff\u2080 hRpos (by positivity : (0 : \u211d) < 32 * C0hat (4 * (k : \u211d) + 9 / 2))]\n      have h1 : 13 * (32 * C0hat (4 * (k : \u211d) + 9 / 2))\n          = 416 * C0hat (4 * (k : \u211d) + 9 / 2) := by ring\n      rw [h1]\n      linarith [hth, hRlo]\n    have hP2Q : 1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2))\n        = 2 * (1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2))) := by\n      have hne : C0hat (4 * (k : \u211d) + 9 / 2) \u2260 0 := h\u0108pos.ne'\n      field_simp [hne]\n      ring\n    have hb1 : |(|\u03c1.im| - R)| - (R - |s.im|) \u2264 |s.im - \u03c1.im| := by\n      linarith [h1, h2, h3, h4]\n    have h5 : 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |s.im - \u03c1.im| := by\n      linarith [h\u03b3R, hRt, hthr, hb1, hP2Q]\n    have h6 : (s - \u03c1).im = s.im - \u03c1.im := Complex.sub_im _ _\n    have h7 : |(s - \u03c1).im| \u2264 \u2016s - \u03c1\u2016 := abs_im_le_norm _\n    rw [h6] at h7\n    linarith [h5, h7]\n  \u00b7 -- near-axis arcs\n    push Not at hre13\n    have hsqrt : Real.sqrt 13 < |s.re| := by\n      rw [Real.sqrt_lt (by norm_num : (0 : \u211d) \u2264 13) (abs_nonneg _)]\n      rw [sq_abs]\n      exact hre13\n    have h3le : (3 : \u211d) \u2264 Real.sqrt 13 := by\n      rw [show (3 : \u211d) = Real.sqrt (3 ^ 2) from (Real.sqrt_sq (by norm_num)).symm]\n      exact Real.sqrt_le_sqrt (by norm_num : (3 : \u211d) ^ 2 \u2264 13)\n    have h1 : |s.re| - |\u03c1.re| \u2264 |s.re - \u03c1.re| := abs_sub_abs_le_abs_sub _ _\n    have hre\u03c1 : |\u03c1.re| \u2264 1 := by\n      rw [abs_le]\n      exact \u27e8by linarith [h\u03c1.2.1], by linarith [h\u03c1.2.2]\u27e9\n    have h2 : (2 : \u211d) < |s.re - \u03c1.re| := by linarith [hsqrt, h3le, h1, hre\u03c1]\n    have h3 : (s - \u03c1).re = s.re - \u03c1.re := Complex.sub_re _ _\n    have h4 : |(s - \u03c1).re| \u2264 \u2016s - \u03c1\u2016 := abs_re_le_norm _\n    rw [h3] at h4\n    have h5 : 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 2 := by\n      rw [div_le_iff\u2080 (by positivity : (0 : \u211d) < 32 * C0hat (4 * (k : \u211d) + 9 / 2))]\n      linarith [h\u01082]\n    linarith [h2, h4, h5]\n\n/-- **The near-window count**: the multiplicity sum over nearZeros t is\n\u2264 3\u00b7A\u2080\u00b7log(3\u00b7max|t\u22121||t+1|+5) (the single zerosIn(t\u22121, t+1] window \u2014\nzerosIn counts by ordinate, sign irrelevant). -/\nlemma nearZeros_count_le {t : \u211d} :\n    \u2211 \u03c1 \u2208 nearZeros t, (zeroMult \u03c1 : \u211d)\n      \u2264 3 * A0count * Real.log (3 * max |t - 1| |t + 1| + 5) := by\n  have hsub : nearZeros t \u2286 (Zeta23.zerosIn_finite (t - 1) (t + 1)).toFinset := by\n    intro \u03c1 h\u03c1\n    rw [mem_nearZeros] at h\u03c1\n    obtain \u27e8h\u03c1d, h\u03c1t\u27e9 := h\u03c1\n    rw [Set.Finite.mem_toFinset]\n    refine \u27e8zeroDisc_isNontrivial h\u03c1d, ?_, ?_\u27e9\n    \u00b7 have h1 : -1 < \u03c1.im - t := (abs_lt.mp h\u03c1t).1\n      linarith\n    \u00b7 have h2 : \u03c1.im - t < 1 := (abs_lt.mp h\u03c1t).2\n      linarith\n  calc \u2211 \u03c1 \u2208 nearZeros t, (zeroMult \u03c1 : \u211d)\n      \u2264 \u2211 \u03c1 \u2208 (Zeta23.zerosIn_finite (t - 1) (t + 1)).toFinset, (zeroMult \u03c1 : \u211d) :=\n        Finset.sum_le_sum_of_subset_of_nonneg hsub (fun z _ _ => Nat.cast_nonneg _)\n    _ = (Zeta23.Ncount (t - 1) (t + 1) : \u211d) := by\n        rw [Zeta23.Ncount,\n          finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite _ _), Nat.cast_sum]\n    _ \u2264 A0count * 3 * Real.log (3 * max |t - 1| |t + 1| + 5) := by\n        have h1 := Ncount_le_of_interval_gen (a := t - 1) (b := t + 1) (by linarith)\n        have h2 : t + 1 - (t - 1) + 1 = 3 := by ring\n        rw [h2] at h1\n        exact h1\n    _ = 3 * A0count * Real.log (3 * max |t - 1| |t + 1| + 5) := by ring\n\n/-- **The separation for nearZeros**: for \u03c1 \u2208 nearZeros (s.im) on the\ngap circle, \u2016s\u2212\u03c1\u2016 \u2265 1/(32\u00b7\u0108\u2080) (\u2016\u03c1\u2016 > R\u22122: gapCircle_sep; else\n\u2016s\u2212\u03c1\u2016 \u2265 R\u2212\u2016\u03c1\u2016 \u2265 2). -/\ntheorem gapCircle_sep_of_mem_nearZeros {k : \u2115} (hk : 4000 \u2264 k)\n    {R : \u211d} (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) {\u03c1 : \u2102} (h\u03c1 : \u03c1 \u2208 nearZeros (s.im)) :\n    1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 \u2016s - \u03c1\u2016 := by\n  have h\u03c1nt : IsNontrivialZero \u03c1 := zeroDisc_isNontrivial (mem_nearZeros.mp h\u03c1).1\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  by_cases hn : R - 2 < \u2016\u03c1\u2016\n  \u00b7 exact gapCircle_sep hk hRlo hgap hs h\u03c1nt\n  \u00b7 push Not at hn\n    have hR : (16002 : \u211d) \u2264 R := by\n      have hkR : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n        have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n        linarith\n      linarith [hRlo]\n    have h1 : (2 : \u211d) \u2264 \u2016s - \u03c1\u2016 := by\n      have h2 := abs_norm_sub_norm_le s \u03c1\n      rw [hs, abs_of_nonneg (by linarith [hn, hR] : (0 : \u211d) \u2264 R - \u2016\u03c1\u2016)] at h2\n      linarith [h2, hn]\n    have h3 : 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 2 := by\n      rw [div_le_iff\u2080 (by positivity : (0 : \u211d) < 32 * C0hat (4 * (k : \u211d) + 9 / 2))]\n      linarith [h\u01082]\n    exact h3.trans h1\n\n/-! ## 11. The digamma bounds and the elementary terms (5e-v-c-ii)\n\n`digamma_right_le`: re w \u2265 1.75 \u27f9 \u2016\u03c8(w)\u2016 \u2264 48 + 23\u00b7log(2+\u2016w\u2016)\n(sub-log for |im| \u2265 5; 5e-ii (B) for re \u2265 2; 5e-ii (A) with c = 1\nelse). `digamma_circle_le`: on the gap circle, \u2016\u03c8(s/2)\u2016 \u2264\n62 + 23\u00b7log(2+R/2) UNIFORMLY (strip arcs: sub-log; re(s/2) \u2265 1.75:\nright_le; the left near-axis: 5e-ii (A) with c = 1/8 from the\n\u2124-clearance dist(R/2,\u2124) \u2265 1/4 \u2014 the R+re s = im\u00b2/(R\u2212re s) identity\navoids square roots). Small elems: \u20161/s\u2016, \u20161/(s\u22121)\u2016, \u2016(log \u03c0)/2\u2016. -/\n\n/-- The right-halfplane digamma bound: re w \u2265 1.75 \u27f9\n\u2016\u03c8(w)\u2016 \u2264 48 + 23\u00b7log(2+\u2016w\u2016). -/\nlemma digamma_right_le {w : \u2102} (hwre : (1.75 : \u211d) \u2264 w.re) :\n    \u2016Complex.digamma w\u2016 \u2264 48 + 23 * Real.log (2 + \u2016w\u2016) := by\n  have hlog2w_nn : (0 : \u211d) \u2264 Real.log (2 + \u2016w\u2016) :=\n    Real.log_nonneg (by linarith [norm_nonneg w] : (1 : \u211d) \u2264 2 + \u2016w\u2016)\n  rcases le_or_gt (5 : \u211d) |w.im| with him | him\n  \u00b7 -- the Stirling-flavoured sub-log bound\n    have h1 := norm_digamma_sub_log_le_of_two_le_abs_im (by linarith [him] : (2 : \u211d) \u2264 |w.im|)\n    have hwnorm : (1 : \u211d) \u2264 \u2016w\u2016 := by\n      have h2 := Complex.abs_re_le_norm w\n      rw [abs_of_nonneg (by linarith [hwre])] at h2\n      linarith [hwre, h2]\n    have h2 := norm_log_le_of_one_le hwnorm\n    have hlogle : Real.log \u2016w\u2016 \u2264 Real.log (2 + \u2016w\u2016) :=\n      Real.log_le_log (by linarith [hwnorm] : (0 : \u211d) < \u2016w\u2016)\n        (by linarith [norm_nonneg w])\n    have hpi : Real.pi \u2264 45 := by have h := Real.pi_lt_d2; linarith\n    calc \u2016Complex.digamma w\u2016\n        = \u2016(Complex.digamma w - Complex.log w) + Complex.log w\u2016 := by rw [sub_add_cancel]\n      _ \u2264 \u2016Complex.digamma w - Complex.log w\u2016 + \u2016Complex.log w\u2016 := norm_add_le _ _\n      _ \u2264 3 + (Real.log \u2016w\u2016 + Real.pi) := add_le_add h1 h2\n      _ \u2264 48 + 23 * Real.log (2 + \u2016w\u2016) := by linarith [hlogle, hpi, hlog2w_nn]\n  \u00b7 by_cases hwre2 : (2 : \u211d) \u2264 w.re\n    \u00b7 -- 5e-ii (B)\n      have h1 := norm_digamma_le_of_two_le_re hwre2 (by linarith [him])\n      linarith [h1, hlog2w_nn]\n    \u00b7 -- 5e-ii (A) with c = 1\n      push Not at hwre2\n      have hdist : \u2200 m : \u2115, (1 : \u211d) \u2264 \u2016w + (m : \u2102)\u2016 := by\n        intro m\n        have h1 : \u2016w + (m : \u2102)\u2016 \u2265 |(w + (m : \u2102)).re| := Complex.abs_re_le_norm _\n        have h2 : (w + (m : \u2102)).re = w.re + (m : \u211d) := by\n          rw [Complex.add_re, Complex.natCast_re]\n        rw [h2] at h1\n        have h3 : (0 : \u211d) \u2264 (m : \u211d) := Nat.cast_nonneg _\n        have h4 : |w.re + (m : \u211d)| = w.re + (m : \u211d) := abs_of_nonneg (by linarith [hwre, h3])\n        linarith [hwre, h1, h3, h4]\n      have h1 := norm_digamma_le_of_dist_nat (show (0 : \u211d) < 1 by norm_num)\n        (by linarith [hwre2] : w.re \u2264 2) hdist\n      have h2 : (46 : \u211d) + 2 / 1 = 48 := by norm_num\n      rw [h2] at h1\n      exact h1\n\n/-- **The uniform digamma bound on the gap circle**: \u2016\u03c8(s/2)\u2016 \u2264\n62 + 23\u00b7log(2+R/2). -/\nlemma digamma_circle_le {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R)\n    (hgapInt : \u2200 m : \u2124, 1 / 4 \u2264 |R / 2 - (m : \u211d)|) (hR : (16002 : \u211d) \u2264 R) :\n    \u2016Complex.digamma (s / 2)\u2016 \u2264 62 + 23 * Real.log (2 + R / 2) := by\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hsnorm : \u2016s / 2\u2016 = R / 2 := by\n    rw [norm_div, hs]\n    have h1 : \u2016(2 : \u2102)\u2016 = 2 := by\n      rw [show (2 : \u2102) = ((2 : \u211d) : \u2102) by push_cast; ring, Complex.norm_real]\n      norm_num\n    rw [h1]\n  have hre : (s / 2).re = s.re / 2 := by simp\n  have hlog_nn : (0 : \u211d) \u2264 Real.log (2 + R / 2) :=\n    Real.log_nonneg (by linarith [hRpos] : (1 : \u211d) \u2264 2 + R / 2)\n  have him2 : (s / 2).im = s.im / 2 := by simp\n  rcases le_or_gt (5 : \u211d) |(s / 2).im| with him | him\n  \u00b7 -- strip arcs: the sub-log bound\n    have h1 := norm_digamma_sub_log_le_of_two_le_abs_im (by linarith [him] :\n      (2 : \u211d) \u2264 |(s / 2).im|)\n    have hwnorm : (1 : \u211d) \u2264 \u2016s / 2\u2016 := by rw [hsnorm]; linarith [hR]\n    have h2 := norm_log_le_of_one_le hwnorm\n    have hlogle : Real.log (R / 2) \u2264 Real.log (2 + R / 2) :=\n      Real.log_le_log (by linarith [hRpos] : (0 : \u211d) < R / 2) (by linarith [hRpos])\n    have hpi : Real.pi \u2264 45 := by have h := Real.pi_lt_d2; linarith\n    rw [hsnorm] at h2\n    calc \u2016Complex.digamma (s / 2)\u2016\n        = \u2016(Complex.digamma (s / 2) - Complex.log (s / 2)) + Complex.log (s / 2)\u2016 := by\n          rw [sub_add_cancel]\n      _ \u2264 \u2016Complex.digamma (s / 2) - Complex.log (s / 2)\u2016 + \u2016Complex.log (s / 2)\u2016 :=\n          norm_add_le _ _\n      _ \u2264 3 + (Real.log (R / 2) + Real.pi) := add_le_add h1 h2\n      _ \u2264 62 + 23 * Real.log (2 + R / 2) := by linarith [hlogle, hpi, hlog_nn]\n  \u00b7 by_cases hre2 : (1.75 : \u211d) \u2264 (s / 2).re\n    \u00b7 -- the right bound (48 \u2264 62)\n      have h1 := digamma_right_le hre2\n      rw [hsnorm] at h1\n      linarith [h1, hlog_nn]\n    \u00b7 -- the left near-axis: 5e-ii (A) with c = 1/8\n      push Not at hre2\n      have him10 : |s.im| < 10 := by\n        rw [him2] at him\n        have h1 : |s.im / 2| = |s.im| / 2 := by\n          rw [abs_div, abs_of_nonneg (by norm_num : (0 : \u211d) \u2264 2)]\n        linarith [him, h1]\n      -- (re s)\u00b2 = R\u00b2 \u2212 (im s)\u00b2 > R\u00b2\u2212100 \u27f9 |re s| > R\u2212100/R\n      have hnormSq : \u2016s\u2016 ^ 2 = s.re ^ 2 + s.im ^ 2 := by\n        rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n        ring\n      have himsq : s.im ^ 2 < 100 := by\n        have h1 : s.im ^ 2 = |s.im| ^ 2 := (sq_abs s.im).symm\n        rw [h1]\n        nlinarith [him10, abs_nonneg s.im]\n      have hre2sq : s.re ^ 2 = R ^ 2 - s.im ^ 2 := by\n        have h1 : s.re ^ 2 + s.im ^ 2 = R ^ 2 := by rw [\u2190 hnormSq, hs]\n        linarith\n      have hRmin : R - |s.re| < 100 / R := by\n        have h9 : |s.re| \u2264 R := by\n          have h10 := abs_re_le_norm s\n          rw [hs] at h10\n          exact h10\n        have h1 : (R - |s.re|) * (R + |s.re|) = s.im ^ 2 := by\n          have h2 : (R - |s.re|) * (R + |s.re|) = R ^ 2 - |s.re| ^ 2 := by ring\n          rw [h2, sq_abs]\n          linarith [hre2sq]\n        have h3 : (R - |s.re|) * (R + |s.re|) < 100 := by linarith [h1, himsq]\n        have h5 : (R - |s.re|) * R \u2264 (R - |s.re|) * (R + |s.re|) :=\n          mul_le_mul_of_nonneg_left (by linarith [abs_nonneg s.re] : R \u2264 R + |s.re|)\n            (by linarith [h9] : (0 : \u211d) \u2264 R - |s.re|)\n        have h6 : (R - |s.re|) * R < 100 := by linarith [h3, h5]\n        exact (lt_div_iff\u2080 hRpos).mpr (show (R - |s.re|) * R < 100 from h6)\n      -- re(s/2) + R/2 \u2208 [0, 50/R)\n      have hre_neg : (s / 2).re < 0 := by\n        have h14 : (100 : \u211d) / R < 1 := by\n          rw [div_lt_one hRpos]\n          linarith [hR]\n        have h15 : s.re < 0 := by\n          by_contra hcon\n          push Not at hcon\n          have h17 : |s.re| = s.re := abs_of_nonneg hcon\n          have h18 : R - s.re < 100 / R := by rw [\u2190 h17]; exact hRmin\n          rw [hre] at hre2\n          linarith [h18, hR, h14, hre2]\n        rw [hre]\n        linarith [h15]\n      -- the distance bound\n      have hdist : \u2200 m : \u2115, (1 / 8 : \u211d) \u2264 \u2016(s / 2) + (m : \u2102)\u2016 := by\n        intro m\n        have h1 : \u2016(s / 2) + (m : \u2102)\u2016 \u2265 |((s / 2) + (m : \u2102)).re| := Complex.abs_re_le_norm _\n        have h2 : ((s / 2) + (m : \u2102)).re = s.re / 2 + (m : \u211d) := by\n          rw [Complex.add_re, hre, Complex.natCast_re]\n        rw [h2] at h1\n        -- (re s)/2 + R/2 \u2208 [0, 50/R)\n        have hge : (0 : \u211d) \u2264 s.re / 2 + R / 2 := by\n          have h9 : |s.re| \u2264 R := by\n            have h10 := abs_re_le_norm s\n            rw [hs] at h10\n            exact h10\n          have h11 : -R \u2264 s.re := by\n            have h12 := abs_le.mp (show |s.re| \u2264 R from h9)\n            linarith [h12.1]\n          linarith [h11]\n        have hlt : s.re / 2 + R / 2 < 50 / R := by\n          have h15 : s.re < 0 := by\n            have h16 := hre_neg\n            rw [hre] at h16\n            linarith [h16]\n          have h19 : R + s.re < 100 / R := by\n            have h20 : |s.re| = -s.re := abs_of_neg h15\n            have h21 : R - (-s.re) < 100 / R := by rw [\u2190 h20]; exact hRmin\n            linarith [h21]\n          have h22 : s.re / 2 + R / 2 = (R + s.re) / 2 := by ring\n          have h23 : (50 : \u211d) / R = 100 / R / 2 := by field_simp; ring\n          rw [h22, h23]\n          linarith [h19]\n        -- |x + m| \u2265 |m \u2212 R/2| \u2212 (x + R/2) \u2265 1/4 \u2212 50/R \u2265 1/8\n        have hgap' := hgapInt (m : \u2124)\n        have hcast : ((m : \u2124) : \u211d) = (m : \u211d) := by push_cast; ring\n        rw [hcast] at hgap'\n        have h4 : |(m : \u211d) - R / 2| - (s.re / 2 + R / 2) \u2264 |s.re / 2 + (m : \u211d)| := by\n          have h7 := abs_sub_abs_le_abs_sub ((m : \u211d) - R / 2) (-(s.re / 2 + R / 2))\n          rw [abs_neg, sub_neg_eq_add] at h7\n          have h5 : (m : \u211d) - R / 2 + (s.re / 2 + R / 2) = s.re / 2 + (m : \u211d) := by ring\n          rw [h5] at h7\n          have h8 : |s.re / 2 + R / 2| = s.re / 2 + R / 2 := abs_of_nonneg hge\n          linarith [h7, h8]\n        have h50 : (50 : \u211d) / R \u2264 1 / 8 := by\n          rw [div_le_iff\u2080 hRpos]\n          linarith [hR]\n        have h9 : |R / 2 - (m : \u211d)| = |(m : \u211d) - R / 2| := abs_sub_comm _ _\n        linarith [h1, h4, hgap', h9, hlt, h50]\n      have hwre2 : (s / 2).re \u2264 2 := by linarith [hre_neg]\n      have h1 := norm_digamma_le_of_dist_nat (show (0 : \u211d) < 1 / 8 by norm_num)\n        hwre2 hdist\n      have h2 : (46 : \u211d) + 2 / (1 / 8) = 62 := by norm_num\n      rw [h2, hsnorm] at h1\n      exact h1\n\n/-- \u20161/s\u2016 \u2264 1 on \u2016s\u2016 = R \u2265 1. -/\nlemma norm_one_div_le_of_norm_eq {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hR : (1 : \u211d) \u2264 R) :\n    \u2016(1 : \u2102) / s\u2016 \u2264 1 := by\n  rw [norm_div, norm_one, hs]\n  exact div_le_one_of_le\u2080 hR (by linarith [hR] : (0 : \u211d) \u2264 R)\n\n/-- \u20161/(s\u22121)\u2016 \u2264 1 on \u2016s\u2016 = R \u2265 2 (\u2016s\u22121\u2016 \u2265 R\u22121 \u2265 1). -/\nlemma norm_one_div_sub_one_le_of_norm_eq {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R)\n    (hR : (2 : \u211d) \u2264 R) : \u2016(1 : \u2102) / (s - 1)\u2016 \u2264 1 := by\n  have hnorm : (1 : \u211d) \u2264 \u2016s - 1\u2016 := by\n    have h := abs_norm_sub_norm_le s (1 : \u2102)\n    rw [hs, norm_one, abs_of_nonneg (by linarith [hR] : (0 : \u211d) \u2264 R - 1)] at h\n    linarith [h, hR]\n  rw [norm_div, norm_one]\n  exact div_le_one_of_le\u2080 hnorm (norm_nonneg _)\n\n/-- log \u03c0 \u2264 2 (\u03c0 < 3.15 \u2264 e\u00b2). -/\nlemma log_pi_le_two : Real.log Real.pi \u2264 2 := by\n  rw [show (2 : \u211d) = Real.log (Real.exp 2) by rw [Real.log_exp]]\n  apply Real.log_le_log Real.pi_pos\n  have h1 : Real.exp 2 = (Real.exp 1) ^ 2 := by\n    rw [\u2190 Real.exp_nat_mul]; norm_num\n  have h2 : (2.7 : \u211d) \u2264 Real.exp 1 := by\n    have h := Real.exp_one_gt_d9; linarith\n  have h3 : (2.7 : \u211d) ^ 2 \u2264 (Real.exp 1) ^ 2 :=\n    pow_le_pow_left\u2080 (by norm_num) h2 2\n  have h4 := Real.pi_lt_d2\n  have h5 : Real.pi \u2264 (2.7 : \u211d) ^ 2 := by\n    have h6 : (2.7 : \u211d) ^ 2 = 7.29 := by norm_num\n    linarith [h4, h6]\n  linarith [h1, h3, h5]\n\n/-- \u2016(log \u03c0 : \u2102)/2\u2016 \u2264 1. -/\nlemma norm_logPi_div_two_le : \u2016(Real.log Real.pi : \u2102) / 2\u2016 \u2264 1 := by\n  have hpos : (0 : \u211d) < Real.log Real.pi :=\n    Real.log_pos (by linarith [Real.pi_gt_three] : (1 : \u211d) < Real.pi)\n  have hle := log_pi_le_two\n  rw [norm_div]\n  have h1 : \u2016(Real.log Real.pi : \u2102)\u2016 = Real.log Real.pi := by\n    rw [show ((Real.log Real.pi : \u2102)) = ((Real.log Real.pi : \u211d) : \u2102) from rfl,\n      Complex.norm_real, Real.norm_eq_abs, abs_of_pos hpos]\n  rw [h1]\n  have h2 : \u2016(2 : \u2102)\u2016 = 2 := by\n    rw [show (2 : \u2102) = ((2 : \u211d) : \u2102) by push_cast; ring, Complex.norm_real]\n    norm_num\n  rw [h2]\n  linarith [hle]\n\n/-! ## 12. The logDeriv circle bound and the Fexpr assembly (5e-v-c-iii)\n\n`logDeriv_circle_le`: three regions \u2014 (i) re s \u2265 2: the Dirichlet\nbound; (ii) re s \u2208 [\u22125/2, 2] (automatically |im s| \u2265 10): the 5c/5d\ncapstones + the near sum \u2264 32\u00b7\u0108\u2080\u00b7(near count); (iii) re s < \u22125/2: the\nFE identity `logDeriv_zeta_fe` + Dirichlet at 1\u2212s + the \u0393R bracket\nvia `logDeriv_Gamma\u211d_eq_of_not_neg_nat` (which also discharges the\nreal point s = \u2212R). Uniform:\n\u2016logDeriv \u03b6 s\u2016 \u2264 dirichletC2 + 200000\u00b7(log R)\u00b2 + 300\u00b7A\u2080\u00b7\u0108\u2080\u00b7(log R)\u00b2.\n\n`Fexpr_circle_le`: \u2016Fexpr s\u2016 \u2264 2\u00b7lowZeroConst + dirichletC2 +\n400000\u00b7A\u2080\u00b7\u0108\u2080(R+2)\u00b7(log R)\u00b2. -/\n\n/-- **The logDeriv bound on the gap circle.** -/\ntheorem logDeriv_circle_le {k : \u2115} (hk : 4000 \u2264 k) {R : \u211d}\n    (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    (hgapInt : \u2200 m : \u2124, 1 / 4 \u2264 |R / 2 - (m : \u211d)|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s) :\n    \u2016logDeriv riemannZeta s\u2016 \u2264 dirichletC2 +\n      200000 * (Real.log R) ^ 2 +\n      300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n  classical\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hR : (16002 : \u211d) \u2264 R := by\n    have hkR : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n      have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n      linarith\n    linarith [hRlo]\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  have hA0 := A0count_pos.le\n  have h\u0108pos : (0 : \u211d) < C0hat (4 * (k : \u211d) + 9 / 2) := by linarith [h\u01082]\n  have hnnR : (0 : \u211d) \u2264 200000 * (Real.log R) ^ 2 +\n      300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n    apply add_nonneg (mul_nonneg (by norm_num) (pow_two_nonneg _))\n    exact mul_nonneg (mul_nonneg (mul_nonneg (by norm_num) hA0) h\u0108pos.le)\n      (pow_two_nonneg _)\n  -- \u03b6 s \u2260 0 on the whole circle\n  have h\u03b6s : riemannZeta s \u2260 0 := by\n    intro h\n    rcases zeta_zero_classification h with hn | h0 | \u27e8n, hn, h2n\u27e9\n    \u00b7 exact hsz hn\n    \u00b7 rw [h0, norm_zero] at hs\n      linarith [hs, hR]\n    \u00b7 -- s = \u22122n: R = \u2016s\u2016 = 2n; n \u2265 2: R/2 = n \u2208 \u2124 contradicts the\n      -- \u2124-clearance; n = 1: R = 2 contradicts R \u2265 16002\n      have hnorm : \u2016s\u2016 = 2 * (n : \u211d) := by\n        rw [h2n, norm_mul]\n        have h1 : \u2016(-2 : \u2102)\u2016 = 2 := by\n          rw [show (-2 : \u2102) = ((-2 : \u211d) : \u2102) by push_cast; ring, Complex.norm_real]\n          norm_num\n        rw [h1, Complex.norm_natCast]\n      rw [hs] at hnorm\n      have hnn : (1 : \u211d) \u2264 (n : \u211d) := by exact_mod_cast hn\n      by_cases hn2 : n = 1\n      \u00b7 rw [hn2] at hnorm\n        push_cast at hnorm\n        linarith [hnorm, hR]\n      \u00b7 have hn3 : 2 \u2264 n := by omega\n        have hR2n : R / 2 = (n : \u211d) := by\n          have h4 : (2 : \u211d) \u2264 (n : \u211d) := by exact_mod_cast hn3\n          linarith [hnorm]\n        have hgap' := hgapInt (n : \u2124)\n        have hcast : ((n : \u2124) : \u211d) = (n : \u211d) := by push_cast; ring\n        rw [hcast, \u2190 hR2n] at hgap'\n        rw [show R / 2 - R / 2 = (0 : \u211d) by ring, abs_zero] at hgap'\n        norm_num at hgap'\n  -- the three regions\n  by_cases hreg1 : 2 \u2264 s.re\n  \u00b7 -- (i) the Dirichlet bound\n    have h1 := norm_logDeriv_zeta_le_dirichlet hreg1\n    linarith [h1, hnnR, dirichletC2_nonneg]\n  \u00b7 push Not at hreg1\n    by_cases hreg2 : -5 / 2 \u2264 s.re\n    \u00b7 -- (ii) the capstones + the near sum\n      have ht10 : (10 : \u211d) \u2264 |s.im| := by\n        have hre25 : s.re ^ 2 \u2264 25 / 4 := by\n          have h1 : -5 / 2 \u2264 s.re \u2227 s.re \u2264 2 := \u27e8hreg2, hreg1.le\u27e9\n          nlinarith [sq_nonneg s.re]\n        have hRt : R - |s.im| \u2264 (25 / 4) / R :=\n          norm_circle_sub_abs_im_le hs hRpos hre25\n        have h1 : (25 / 4 : \u211d) / R \u2264 1 := by\n          rw [div_le_one hRpos]\n          linarith [hR]\n        have ht_le : |s.im| \u2264 R := by\n          have h := abs_im_le_norm s\n          rw [hs] at h\n          exact h\n        linarith [hRt, h1, ht_le, hR]\n      -- the near sum\n      have hnear : \u2016\u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016\n          \u2264 32 * C0hat (4 * (k : \u211d) + 9 / 2) * (3 * A0count) *\n            Real.log (3 * max |s.im - 1| |s.im + 1| + 5) := by\n        calc \u2016\u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016\n            \u2264 \u2211 \u03c1 \u2208 nearZeros s.im, \u2016(zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016 := norm_sum_le _ _\n          _ = \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u211d) / \u2016s - \u03c1\u2016 := by\n              apply Finset.sum_congr rfl\n              intro \u03c1 h\u03c1\n              rw [norm_div, RCLike.norm_natCast]\n          _ \u2264 \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u211d) * (32 * C0hat (4 * (k : \u211d) + 9 / 2)) := by\n              apply Finset.sum_le_sum\n              intro \u03c1 h\u03c1\n              have hsep := gapCircle_sep_of_mem_nearZeros hk hRlo hgap hs h\u03c1\n              rw [show (zeroMult \u03c1 : \u211d) / \u2016s - \u03c1\u2016 = (zeroMult \u03c1 : \u211d) * (1 / \u2016s - \u03c1\u2016) from by ring]\n              apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n              have h1 : (0 : \u211d) < 1 / (32 * C0hat (4 * (k : \u211d) + 9 / 2)) := by positivity\n              exact (one_div_le_one_div_of_le h1 hsep).trans_eq (one_div_one_div _)\n          _ = (32 * C0hat (4 * (k : \u211d) + 9 / 2)) * \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u211d) := by\n              rw [\u2190 Finset.sum_congr rfl (g := fun \u03c1 => (zeroMult \u03c1 : \u211d) *\n                (32 * C0hat (4 * (k : \u211d) + 9 / 2))) (fun \u03c1 h\u03c1 => mul_comm _ _), Finset.mul_sum]\n          _ \u2264 (32 * C0hat (4 * (k : \u211d) + 9 / 2)) *\n                (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5)) :=\n              mul_le_mul_of_nonneg_left nearZeros_count_le (by positivity)\n      have hlogmax : Real.log (3 * max |s.im - 1| |s.im + 1| + 5) \u2264 2 * Real.log R := by\n        have hmax : max |s.im - 1| |s.im + 1| \u2264 |s.im| + 1 := by\n          apply max_le_iff.mpr\n          constructor\n          \u00b7 have h4 : s.im - 1 = s.im + (-1 : \u211d) := by ring\n            rw [h4]\n            have h := abs_add_le s.im (-1 : \u211d)\n            rwa [abs_neg, abs_one] at h\n          \u00b7 have h := abs_add_le s.im (1 : \u211d)\n            rwa [abs_one] at h\n        have ht_le : |s.im| \u2264 R := by\n          have h := abs_im_le_norm s\n          rw [hs] at h\n          exact h\n        have h1 : Real.log (3 * max |s.im - 1| |s.im + 1| + 5) \u2264 Real.log (3 * (|s.im| + 1) + 5) := by\n          apply Real.log_le_log (by positivity)\n          have h4 : 3 * max |s.im - 1| |s.im + 1| \u2264 3 * (|s.im| + 1) :=\n            mul_le_mul_of_nonneg_left hmax (by norm_num : (0 : \u211d) \u2264 3)\n          linarith [h4]\n        have h2 : Real.log (3 * (|s.im| + 1) + 5) \u2264 Real.log (4 * R) := by\n          apply Real.log_le_log (by linarith [abs_nonneg s.im, hRpos])\n          linarith [ht_le, hR]\n        have h3 : Real.log (4 * R) = Real.log 4 + Real.log R :=\n          Real.log_mul (by norm_num : (4 : \u211d) \u2260 0) (by linarith [hRpos] : R \u2260 0)\n        have h4 : Real.log 4 \u2264 Real.log R :=\n          Real.log_le_log (by norm_num) (by linarith [hR])\n        linarith [h1, h2, h3, h4]\n      -- the capstone difference\n      have hcap : \u2016logDeriv riemannZeta s - \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016\n          \u2264 200000 * (Real.log |s.im|) ^ 2 := by\n        by_cases hhalf : (1 : \u211d) / 2 \u2264 s.re\n        \u00b7 exact logDeriv_riemannZeta_sub_nearZeros_le (t := s.im) ht10 rfl hhalf\n            (by linarith [hreg1] : s.re \u2264 7 / 2) h\u03b6s\n        \u00b7 push Not at hhalf\n          exact logDeriv_riemannZeta_sub_nearZeros_le_left (t := s.im) ht10 rfl hreg2\n            (by linarith [hhalf] : s.re \u2264 1 / 2) h\u03b6s\n      have hlogt : (Real.log |s.im|) ^ 2 \u2264 (Real.log R) ^ 2 := by\n        have ht_le : |s.im| \u2264 R := by\n          have h := abs_im_le_norm s\n          rw [hs] at h\n          exact h\n        have h1 : Real.log |s.im| \u2264 Real.log R :=\n          Real.log_le_log (by linarith [ht10] : (0 : \u211d) < |s.im|) ht_le\n        have h2 : (0 : \u211d) \u2264 Real.log |s.im| :=\n          Real.log_nonneg (by linarith [ht10] : (1 : \u211d) \u2264 |s.im|)\n        exact pow_le_pow_left\u2080 h2 h1 2\n      calc \u2016logDeriv riemannZeta s\u2016\n          = \u2016(logDeriv riemannZeta s - \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1))\n              + \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016 := by\n            rw [sub_add_cancel]\n        _ \u2264 \u2016logDeriv riemannZeta s - \u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016\n              + \u2016\u2211 \u03c1 \u2208 nearZeros s.im, (zeroMult \u03c1 : \u2102) / (s - \u03c1)\u2016 :=\n            norm_add_le _ _\n        _ \u2264 200000 * (Real.log |s.im|) ^ 2 +\n              32 * C0hat (4 * (k : \u211d) + 9 / 2) *\n                (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5)) :=\n            add_le_add hcap hnear\n        _ \u2264 dirichletC2 + 200000 * (Real.log R) ^ 2 +\n              300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n            have h1 : 32 * C0hat (4 * (k : \u211d) + 9 / 2) *\n                  (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5))\n                \u2264 192 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n              have h2 := mul_le_mul_of_nonneg_left hlogmax\n                (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 32) h\u0108pos.le)\n                  (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) hA0))\n              have h3 : 32 * C0hat (4 * (k : \u211d) + 9 / 2) * (3 * A0count) * (2 * Real.log R)\n                  = 192 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * Real.log R := by ring\n              have h4 : 192 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * Real.log R\n                  \u2264 192 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n                apply mul_le_mul_of_nonneg_left _ (mul_nonneg (mul_nonneg (by norm_num) hA0) h\u0108pos.le)\n                nlinarith [hlogR, hlogRnn]\n              rw [h3] at h2\n              exact h2.trans h4\n            have h5 : 192 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2\n                \u2264 300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n              apply mul_le_mul_of_nonneg_right _ (pow_two_nonneg _)\n              apply mul_le_mul_of_nonneg_right _ h\u0108pos.le\n              apply mul_le_mul_of_nonneg_right _ hA0\n              norm_num\n            nlinarith [hlogt, h1, h5, hlogRnn, dirichletC2_nonneg, pow_two_nonneg (Real.log R)]\n    \u00b7 -- (iii) the FE route\n      push Not at hreg2\n      -- pole-avoidance for s/2\n      have hpoles : \u2200 m : \u2115, s / 2 \u2260 -(m : \u2102) := by\n        intro m hm\n        by_cases him : s.im = 0\n        \u00b7 -- s real: s = \u2212R, then R/2 = m contradicts the \u2124-clearance\n          have hsR : s = (-R : \u211d) := by\n            have hnormSq : \u2016s\u2016 ^ 2 = s.re ^ 2 + s.im ^ 2 := by\n              rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n              ring\n            have h1 : s.re ^ 2 + s.im ^ 2 = R ^ 2 := by rw [\u2190 hnormSq, hs]\n            rw [him] at h1\n            have h2 : s.re ^ 2 = R ^ 2 := by linarith [h1, sq_nonneg s.re]\n            have h4 : s.re = -R := by\n              have h5 : (s.re - R) * (s.re + R) = 0 := by\n                have h7 : s.re ^ 2 - R ^ 2 = (s.re - R) * (s.re + R) := by ring\n                rw [\u2190 h7]\n                linarith [h2]\n              rcases mul_eq_zero.mp h5 with h8 | h8\n              \u00b7 have h9 : s.re = R := by linarith [h8]\n                linarith [h9, hreg2]\n              \u00b7 linarith [h8]\n            apply Complex.ext_iff.mpr\n            rw [h4, him]\n            simp\n          rw [hsR] at hm\n          have hm2 : (m : \u211d) = R / 2 := by\n            have h1 : ((-(R : \u211d)) : \u2102) / 2 = -(m : \u2102) := hm\n            have h2 : ((-(R : \u211d)) : \u2102) / 2 = ((-R / 2 : \u211d) : \u2102) := by push_cast; ring\n            rw [h2] at h1\n            have h4 : ((-R / 2 : \u211d) : \u2102) = -(m : \u2102) := h1\n            have h5 : (-R / 2 : \u211d) = -(m : \u211d) := by exact_mod_cast h4\n            linarith [h5]\n          have hgap' := hgapInt (m : \u2124)\n          have hcast : ((m : \u2124) : \u211d) = (m : \u211d) := by push_cast; ring\n          rw [hcast, hm2] at hgap'\n          rw [show R / 2 - R / 2 = (0 : \u211d) by ring, abs_zero] at hgap'\n          norm_num at hgap'\n        \u00b7 exact hm (by\n            have h1 : (s / 2).im \u2260 0 := by\n              have h2 : (s / 2).im = s.im / 2 := by simp\n              rw [h2]\n              exact div_ne_zero him (two_ne_zero : (2 : \u211d) \u2260 0)\n            have h3 : (-(m : \u2102)).im = 0 := by\n              rw [Complex.neg_im, Complex.natCast_im]\n            have h4 : (s / 2).im = (-(m : \u2102)).im := congrArg Complex.im hm\n            rw [h3] at h4\n            exact h1 h4)\n      -- the FE identity\n      have hG : Complex.Gamma\u211d s \u2260 0 := by\n        rw [ne_eq, Complex.Gamma\u211d_eq_zero_iff]\n        rintro \u27e8m, hm\u27e9\n        have h1 : s / 2 = -(m : \u2102) := by\n          rw [hm]\n          ring\n        exact hpoles m h1\n      have hG1 : Complex.Gamma\u211d (1 - s) \u2260 0 := by\n        rw [ne_eq, Complex.Gamma\u211d_eq_zero_iff]\n        rintro \u27e8m, hm\u27e9\n        have h2 : (1 - s) / 2 = -(m : \u2102) := by\n          rw [hm]\n          ring\n        have hre : ((1 - s) / 2).re = -(m : \u211d) := by\n          have h3 := congrArg Complex.re h2\n          rw [Complex.neg_re, Complex.natCast_re] at h3\n          have h4 : ((1 - s) / 2).re = (1 - s.re) / 2 := by simp [Complex.div_re]\n          rw [h4] at h3\n          exact h3\n        have hpos : (0 : \u211d) < ((1 - s) / 2).re := by\n          have h1 : ((1 - s) / 2).re = (1 - s.re) / 2 := by simp [Complex.div_re]\n          rw [h1]\n          linarith [hreg2]\n        rw [hre] at hpos\n        have hmn : (0 : \u211d) \u2264 (m : \u211d) := Nat.cast_nonneg _\n        linarith [hpos, hmn]\n      have h\u03b61 : riemannZeta (1 - s) \u2260 0 := by\n        apply riemannZeta_ne_zero_of_one_le_re\n        \u00b7 have h1 : (1 - s).re = 1 - s.re := by simp\n          rw [h1]\n          linarith [hreg2]\n        \u00b7 intro h\n          have h2 : (1 - s) = 1 \u2192 s = 0 := by\n            intro h3\n            have h4 : 1 - s = 1 := h3\n            have h5 : 1 - s + s = 1 + s := by rw [h4]\n            rw [sub_add_cancel] at h5\n            have h6 : 1 = 1 + s := h5\n            have h7 : 1 - 1 = (1 + s) - 1 := by rw [h6]\n            rw [sub_self, add_sub_cancel_left] at h7\n            exact h7.symm\n          exact absurd (h2 h) (fun h6 => by rw [h6, norm_zero] at hs; linarith [hs, hR])\n      have hs0' : s \u2260 0 := fun h => by rw [h, norm_zero] at hs; linarith [hs, hR]\n      have hs1' : s \u2260 1 := fun h => by\n        have h1 : s.re = 1 := by rw [h]; simp\n        linarith [h1, hreg2]\n      have h1s0' : (1 : \u2102) - s \u2260 0 := fun h => by\n        have h2 : (1 - s) = 0 \u2192 s = 1 := by\n          intro h3\n          have h4 : 1 - s = 0 := h3\n          have h5 : 1 - s + s = 0 + s := by rw [h4]\n          rw [sub_add_cancel, zero_add] at h5\n          exact h5.symm\n        exact absurd (h2 h) hs1'\n      have h1s1' : (1 : \u2102) - s \u2260 1 := fun h => by\n        have h2 : (1 - s) = 1 \u2192 s = 0 := by\n          intro h3\n          have h4 : 1 - s = 1 := h3\n          have h5 : 1 - s + s = 1 + s := by rw [h4]\n          rw [sub_add_cancel] at h5\n          have h6 : 1 = 1 + s := h5\n          have h7 : 1 - 1 = (1 + s) - 1 := by rw [h6]\n          rw [sub_self, add_sub_cancel_left] at h7\n          exact h7.symm\n        exact absurd (h2 h) hs0'\n      have hd1' : DifferentiableAt \u2102 Complex.Gamma\u211d (1 - s) :=\n        differentiableAt_Gamma\u211d_of_not_neg_nat (fun m hm => by\n          have hre : ((1 - s) / 2).re = (1 - s.re) / 2 := by simp [Complex.div_re]\n          have h1 : (0 : \u211d) < ((1 - s) / 2).re := by rw [hre]; linarith [hreg2]\n          have h2 : (-(m : \u2102)).re = -(m : \u211d) := by\n            rw [Complex.neg_re, Complex.natCast_re]\n          have h3 := congrArg Complex.re hm\n          rw [hre, h2] at h3\n          have hmn : (0 : \u211d) \u2264 (m : \u211d) := Nat.cast_nonneg _\n          linarith [h1, h3, hmn])\n      have hfe := logDeriv_zeta_fe hs0' hs1' hG h\u03b6s\n        (differentiableAt_Gamma\u211d_of_not_neg_nat hpoles)\n        h1s0' h1s1' hG1 h\u03b61 hd1'\n      -- the bracket bound\n      have hbr1 : logDeriv Complex.Gamma\u211d s\n          = -(Real.log Real.pi : \u2102) / 2 + (1 / 2 : \u2102) * Complex.digamma (s / 2) :=\n        logDeriv_Gamma\u211d_eq_of_not_neg_nat hpoles\n      have hbr2 : logDeriv Complex.Gamma\u211d (1 - s)\n          = -(Real.log Real.pi : \u2102) / 2 + (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2) :=\n        logDeriv_Gamma\u211d_eq_of_not_neg_nat (fun m hm => by\n          have hre : ((1 - s) / 2).re = (1 - s.re) / 2 := by simp [Complex.div_re]\n          have h1 : (0 : \u211d) < ((1 - s) / 2).re := by rw [hre]; linarith [hreg2]\n          have h2 : (-(m : \u2102)).re = -(m : \u211d) := by\n            rw [Complex.neg_re, Complex.natCast_re]\n          have h3 := congrArg Complex.re hm\n          rw [hre, h2] at h3\n          have hmn : (0 : \u211d) \u2264 (m : \u211d) := Nat.cast_nonneg _\n          linarith [h1, h3, hmn])\n      have h\u03c81 : \u2016Complex.digamma (s / 2)\u2016 \u2264 62 + 23 * Real.log (2 + R / 2) :=\n        digamma_circle_le hs hgapInt hR\n      have h\u03c82 : \u2016Complex.digamma ((1 - s) / 2)\u2016 \u2264 48 + 23 * Real.log R := by\n        have hre : ((1 - s) / 2).re = (1 - s.re) / 2 := by simp [Complex.div_re]\n        have h1 : (1.75 : \u211d) \u2264 ((1 - s) / 2).re := by rw [hre]; linarith [hreg2]\n        have h2 := digamma_right_le h1\n        have hnorm : \u2016(1 - s) / 2\u2016 = \u20161 - s\u2016 / 2 := by\n          rw [norm_div]\n          have h3 : \u2016(2 : \u2102)\u2016 = 2 := by\n            rw [show (2 : \u2102) = ((2 : \u211d) : \u2102) by push_cast; ring, Complex.norm_real]\n            norm_num\n          rw [h3]\n        have hnorm1s : \u20161 - s\u2016 \u2264 1 + R := by\n          calc \u20161 - s\u2016 \u2264 \u2016(1 : \u2102)\u2016 + \u2016s\u2016 := norm_sub_le _ _\n            _ = 1 + R := by rw [norm_one, hs]\n        have hlogle : Real.log (2 + \u2016(1 - s) / 2\u2016) \u2264 Real.log R := by\n          apply Real.log_le_log (by positivity)\n          rw [hnorm]\n          linarith [hnorm1s, hR]\n        have hlog2w_nn : (0 : \u211d) \u2264 Real.log (2 + \u2016(1 - s) / 2\u2016) := by\n          apply Real.log_nonneg\n          have h3 : (0 : \u211d) \u2264 \u2016(1 - s) / 2\u2016 := norm_nonneg _\n          linarith [h3]\n        linarith [h2, hlogle, hlog2w_nn, hlogRnn]\n      -- assemble case (iii)\n      have hld1 : \u2016logDeriv riemannZeta (1 - s)\u2016 \u2264 dirichletC2 := by\n        apply norm_logDeriv_zeta_le_dirichlet\n        have h1 : (1 - s).re = 1 - s.re := by simp\n        rw [h1]\n        linarith [hreg2]\n      rw [hfe]\n      have hstep1 : \u2016-logDeriv riemannZeta (1 - s)\n          - (logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s))\u2016\n          \u2264 \u2016logDeriv riemannZeta (1 - s)\u2016 +\n            \u2016logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s)\u2016 := by\n        calc \u2016-logDeriv riemannZeta (1 - s)\n              - (logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s))\u2016\n            \u2264 \u2016-logDeriv riemannZeta (1 - s)\u2016 +\n              \u2016logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s)\u2016 :=\n            norm_sub_le _ _\n        _ = \u2016logDeriv riemannZeta (1 - s)\u2016 +\n              \u2016logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s)\u2016 := by\n            rw [norm_neg]\n      have hbracket : \u2016logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s)\u2016\n          \u2264 2 + (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2 := by\n        rw [hbr1, hbr2]\n        have h1 : -(Real.log Real.pi : \u2102) / 2 + (1 / 2 : \u2102) * Complex.digamma (s / 2) +\n              (-(Real.log Real.pi : \u2102) / 2 + (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2))\n            = -(Real.log Real.pi : \u2102) +\n              ((1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2)) := by ring\n        rw [h1]\n        calc \u2016-(Real.log Real.pi : \u2102) +\n              ((1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2))\u2016\n            \u2264 \u2016(Real.log Real.pi : \u2102)\u2016 +\n              \u2016(1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2)\u2016 := by\n              have h2 := norm_add_le (-(Real.log Real.pi : \u2102))\n                ((1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                  (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2))\n              rw [norm_neg] at h2\n              exact h2\n          _ \u2264 2 + ((62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2) := by\n              have hlogpi : \u2016(Real.log Real.pi : \u2102)\u2016 \u2264 2 := by\n                have h1 := log_pi_le_two\n                have hpos : (0 : \u211d) < Real.log Real.pi :=\n                  Real.log_pos (by linarith [Real.pi_gt_three] : (1 : \u211d) < Real.pi)\n                rw [show ((Real.log Real.pi : \u2102)) = ((Real.log Real.pi : \u211d) : \u2102) from rfl,\n                  Complex.norm_real, Real.norm_eq_abs, abs_of_pos hpos]\n                exact h1\n              have h\u03c8 : \u2016(1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                    (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2)\u2016\n                  \u2264 (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2 := by\n                calc \u2016(1 / 2 : \u2102) * Complex.digamma (s / 2) +\n                      (1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2)\u2016\n                    \u2264 \u2016(1 / 2 : \u2102) * Complex.digamma (s / 2)\u2016 +\n                      \u2016(1 / 2 : \u2102) * Complex.digamma ((1 - s) / 2)\u2016 := norm_add_le _ _\n                  _ = \u2016Complex.digamma (s / 2)\u2016 / 2 + \u2016Complex.digamma ((1 - s) / 2)\u2016 / 2 := by\n                      have h1 : \u2016(1 / 2 : \u2102)\u2016 = 1 / 2 := by\n                        rw [show (1 / 2 : \u2102) = ((1 / 2 : \u211d) : \u2102) by push_cast; ring,\n                          Complex.norm_real]\n                        norm_num\n                      rw [norm_mul, h1, norm_mul, h1]\n                      ring\n                  _ \u2264 (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2 := by\n                      have h1 := div_le_div_of_nonneg_right h\u03c81 (by norm_num : (0 : \u211d) \u2264 2)\n                      have h2 := div_le_div_of_nonneg_right h\u03c82 (by norm_num : (0 : \u211d) \u2264 2)\n                      have h3 : \u2016Complex.digamma (s / 2)\u2016 / 2\n                          \u2264 (62 + 23 * Real.log (2 + R / 2)) / 2 := h1\n                      have h4 : \u2016Complex.digamma ((1 - s) / 2)\u2016 / 2\n                          \u2264 (48 + 23 * Real.log R) / 2 := h2\n                      linarith [h3, h4]\n              linarith [hlogpi, h\u03c8]\n          _ = 2 + (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2 := by ring\n      have hlog2R : Real.log (2 + R / 2) \u2264 Real.log R := by\n        apply Real.log_le_log (by linarith [hRpos] : (0 : \u211d) < 2 + R / 2)\n        linarith [hR]\n      calc \u2016-logDeriv riemannZeta (1 - s)\n            - (logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s))\u2016\n          \u2264 \u2016logDeriv riemannZeta (1 - s)\u2016 +\n            \u2016logDeriv Complex.Gamma\u211d s + logDeriv Complex.Gamma\u211d (1 - s)\u2016 := hstep1\n        _ \u2264 dirichletC2 + (2 + (62 + 23 * Real.log (2 + R / 2)) / 2 +\n            (48 + 23 * Real.log R) / 2) := add_le_add hld1 hbracket\n        _ \u2264 dirichletC2 + 200000 * (Real.log R) ^ 2 +\n            300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n            have h1 : 2 + (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2\n                \u2264 100 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n              have h2 : 2 + (62 + 23 * Real.log (2 + R / 2)) / 2 + (48 + 23 * Real.log R) / 2\n                  \u2264 57 + 23 * Real.log R := by\n                have h3 := div_le_div_of_nonneg_right hlog2R (by norm_num : (0 : \u211d) \u2264 2)\n                have h4 : (0 : \u211d) \u2264 Real.log (2 + R / 2) :=\n                  Real.log_nonneg (by linarith [hRpos] : (1 : \u211d) \u2264 2 + R / 2)\n                linarith [h3, h4, hlogRnn]\n              have h4 : (57 : \u211d) + 23 * Real.log R\n                  \u2264 100 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2 := by\n                have h5 : (2 : \u211d) \u2264 A0count * C0hat (4 * (k : \u211d) + 9 / 2) :=\n                  le_trans h\u01082 (mul_le_mul_of_nonneg_left (by linarith [h\u01082] :\n                    (1 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2)) hA0)\n                have h6 : (81 : \u211d) \u2264 (Real.log R) ^ 2 := by nlinarith [hlogR, hlogRnn]\n                nlinarith [h5, h6, hA0, h\u0108pos, hlogRnn]\n              linarith [h2, h4]\n            nlinarith [h1, hnnR, dirichletC2_nonneg]\n\n/-- **The Fexpr circle bound**: \u2016Fexpr s\u2016 \u2264 2\u00b7lowZeroConst +\ndirichletC2 + 400000\u00b7A\u2080\u00b7\u0108\u2080(R+2)\u00b7(log R)\u00b2. -/\ntheorem Fexpr_circle_le {k : \u2115} (hk : 4000 \u2264 k) {R : \u211d}\n    (hRlo : 4 * (k : \u211d) + 5 / 2 \u2264 R) (hRhi : R \u2264 4 * (k : \u211d) + 3)\n    (hgap : \u2200 \u03c1 : \u2102, IsNontrivialZero \u03c1 \u2192\n      1 / (16 * C0hat (4 * (k : \u211d) + 9 / 2)) \u2264 |\u03c1.im - R| \u2228 1 \u2264 |\u03c1.im - R|)\n    (hgapInt : \u2200 m : \u2124, 1 / 4 \u2264 |R / 2 - (m : \u211d)|)\n    {s : \u2102} (hs : \u2016s\u2016 = R) :\n    \u2016Fexpr s\u2016 \u2264 2 * lowZeroConst + dirichletC2 +\n      400000 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n  classical\n  have hsz : \u00ac IsNontrivialZero s :=\n    not_isNontrivialZero_on_gapCircle hk hRlo hgap hs\n  have h\u01082 : (2 : \u211d) \u2264 C0hat (4 * (k : \u211d) + 9 / 2) := two_le_C0hat (by\n    have hkR : (1 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast (by omega : 1 \u2264 k)\n    linarith)\n  have hR : (16002 : \u211d) \u2264 R := by\n    have hkR : (16000 : \u211d) \u2264 4 * (k : \u211d) := by\n      have h1 : (4000 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n      linarith\n    linarith [hRlo]\n  have hRpos : (0 : \u211d) < R := by linarith [hR]\n  have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n  have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n  have hA0 := A0count_pos.le\n  have h\u0108R2 : C0hat (4 * (k : \u211d) + 9 / 2) \u2264 C0hat (R + 2) :=\n    C0hat_mono (by linarith [hRlo] : (1 : \u211d) \u2264 4 * (k : \u211d) + 9 / 2)\n      (by linarith [hRlo] : 4 * (k : \u211d) + 9 / 2 \u2264 R + 2)\n  have h\u0108R2pos : (0 : \u211d) < C0hat (R + 2) := by linarith [h\u01082, h\u0108R2]\n  -- the pieces\n  have hser := seriesFun_norm_le_gapCircle hk hRlo hgap hs\n  have hld := logDeriv_circle_le hk hRlo hgap hgapInt hs hsz\n  have h\u03c8 := digamma_circle_le hs hgapInt hR\n  have h1s := norm_one_div_le_of_norm_eq hs (by linarith [hR] : (1 : \u211d) \u2264 R)\n  have h1s1 := norm_one_div_sub_one_le_of_norm_eq hs (by linarith [hR] : (2 : \u211d) \u2264 R)\n  have hlogpi := norm_logPi_div_two_le\n  -- the norm chain: Fexpr = logDeriv \u03b6 \u2212 seriesFun + 1/s + 1/(s\u22121) \u2212 (log \u03c0)/2 + \u03c8(s/2)/2\n  have hchain : \u2016Fexpr s\u2016 \u2264 \u2016logDeriv riemannZeta s\u2016 + \u2016seriesFun s\u2016 +\n      \u2016(1 : \u2102) / s\u2016 + \u2016(1 : \u2102) / (s - 1)\u2016 + \u2016(Real.log Real.pi : \u2102) / 2\u2016 +\n      \u2016Complex.digamma (s / 2) / 2\u2016 := by\n    rw [Fexpr]\n    calc \u2016logDeriv riemannZeta s - seriesFun s + 1 / s + 1 / (s - 1)\n          - (Real.log Real.pi : \u2102) / 2 + Complex.digamma (s / 2) / 2\u2016\n        \u2264 \u2016logDeriv riemannZeta s - seriesFun s + 1 / s + 1 / (s - 1)\n            - (Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016 :=\n          norm_add_le _ _\n      _ \u2264 \u2016logDeriv riemannZeta s - seriesFun s + 1 / s + 1 / (s - 1)\u2016\n            + \u2016(Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016 :=\n          add_le_add_right (norm_sub_le _ _) _\n      _ \u2264 \u2016logDeriv riemannZeta s - seriesFun s + 1 / s\u2016 + \u2016(1 : \u2102) / (s - 1)\u2016\n            + \u2016(Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016 :=\n          add_le_add_right (add_le_add_right (norm_add_le _ _) _) _\n      _ \u2264 \u2016logDeriv riemannZeta s - seriesFun s\u2016 + \u2016(1 : \u2102) / s\u2016 + \u2016(1 : \u2102) / (s - 1)\u2016\n            + \u2016(Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016 :=\n          add_le_add_right (add_le_add_right (add_le_add_right (norm_add_le _ _) _) _) _\n      _ \u2264 \u2016logDeriv riemannZeta s\u2016 + \u2016seriesFun s\u2016 + \u2016(1 : \u2102) / s\u2016 + \u2016(1 : \u2102) / (s - 1)\u2016\n            + \u2016(Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016 := by\n          apply add_le_add_right\n          apply add_le_add_right\n          apply add_le_add_right\n          apply add_le_add_right\n          exact norm_sub_le _ _\n  -- the \u03c8 term: \u2016\u03c8(s/2)/2\u2016 = \u2016\u03c8(s/2)\u2016/2\n  have h\u03c8norm : \u2016Complex.digamma (s / 2) / 2\u2016 = \u2016Complex.digamma (s / 2)\u2016 / 2 := by\n    rw [norm_div]\n    have h1 : \u2016(2 : \u2102)\u2016 = 2 := by\n      rw [show (2 : \u2102) = ((2 : \u211d) : \u2102) by push_cast; ring, Complex.norm_real]\n      norm_num\n    rw [h1]\n  -- assemble\n  have hbig : \u2016logDeriv riemannZeta s\u2016 + \u2016seriesFun s\u2016 + \u2016(1 : \u2102) / s\u2016 +\n      \u2016(1 : \u2102) / (s - 1)\u2016 + \u2016(Real.log Real.pi : \u2102) / 2\u2016 + \u2016Complex.digamma (s / 2) / 2\u2016\n      \u2264 2 * lowZeroConst + dirichletC2 +\n        400000 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n    have hser2 : \u2016seriesFun s\u2016 \u2264 2 * lowZeroConst +\n        2900 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n      have h1 : 2900 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2\n          \u2264 2900 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 :=\n        mul_le_mul_of_nonneg_right\n          (mul_le_mul_of_nonneg_left h\u0108R2 hA0) (pow_two_nonneg _)\n      linarith [hser, h1]\n    have hld2 : \u2016logDeriv riemannZeta s\u2016 \u2264 dirichletC2 + 200000 * (Real.log R) ^ 2 +\n        300 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n      have h1 : 300 * A0count * C0hat (4 * (k : \u211d) + 9 / 2) * (Real.log R) ^ 2\n          \u2264 300 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 :=\n        mul_le_mul_of_nonneg_right\n          (mul_le_mul_of_nonneg_left h\u0108R2 hA0) (pow_two_nonneg _)\n      linarith [hld, h1]\n    have h\u03c82 : \u2016Complex.digamma (s / 2) / 2\u2016 \u2264 31 + 12 * Real.log R := by\n      rw [h\u03c8norm]\n      have hlog2R : Real.log (2 + R / 2) \u2264 Real.log R := by\n        apply Real.log_le_log (by linarith [hRpos] : (0 : \u211d) < 2 + R / 2)\n        linarith [hR]\n      have h1 : (62 + 23 * Real.log (2 + R / 2)) / 2\n          \u2264 (62 + 23 * Real.log R) / 2 :=\n        div_le_div_of_nonneg_right (add_le_add_left\n          (mul_le_mul_of_nonneg_left hlog2R (by norm_num : (0 : \u211d) \u2264 23)) _) (by norm_num)\n      have h2 := div_le_div_of_nonneg_right h\u03c8 (by norm_num : (0 : \u211d) \u2264 2)\n      linarith [h1, h2, hlogRnn]\n    have h1 : 2900 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 +\n        (200000 * (Real.log R) ^ 2 + 300 * A0count * C0hat (R + 2) * (Real.log R) ^ 2) +\n        ((31 + 12 * Real.log R) + 2)\n        \u2264 400000 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n      have h2 : (2 : \u211d) \u2264 A0count * C0hat (R + 2) :=\n        le_trans h\u01082 (le_trans h\u0108R2 (le_refl _))\n      have h3 : (81 : \u211d) \u2264 (Real.log R) ^ 2 := by nlinarith [hlogR, hlogRnn]\n      have h4 : (1 : \u211d) \u2264 A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n        nlinarith [h2, h3, hA0, h\u0108R2pos]\n      have h5 : 200000 * (Real.log R) ^ 2\n          \u2264 100000 * A0count * C0hat (R + 2) * (Real.log R) ^ 2 := by\n        have h6 : (2 : \u211d) \u2264 A0count * C0hat (R + 2) := h2\n        nlinarith [h6, pow_two_nonneg (Real.log R)]\n      nlinarith [h5, h4, h2, h3, hlogRnn, hA0, h\u0108R2pos]\n    linarith [hser2, hld2, h\u03c82, h1s, h1s1, hlogpi, h1, lowZeroConst_nonneg,\n      dirichletC2_nonneg]\n  exact hchain.trans hbig\n\nend NguyenRH1\n\nend\n",
  "structuredPatch": [
    {
      "oldStart": 3469,
      "oldLines": 6,
      "newStart": 3469,
      "newLines": 8,
      "lines": [
        "           _ \u2264 (32 * C0hat (4 * (k : \u211d) + 9 / 2)) *",
        "                 (3 * A0count * Real.log (3 * max |s.im - 1| |s.im + 1| + 5)) :=",
        "               mul_le_mul_of_nonneg_left nearZeros_count_le (by positivity)",
        "+          _ = 32 * C0hat (4 * (k : \u211d) + 9 / 2) * (3 * A0count) *",
        "+                Real.log (3 * max |s.im - 1| |s.im + 1| + 5) := by ring",
        "       have hlogmax : Real.log (3 * max |s.im - 1| |s.im + 1| + 5) \u2264 2 * Real.log R := by",
        "         have hmax : max |s.im - 1| |s.im + 1| \u2264 |s.im| + 1 := by",
        "           apply max_le_iff.mpr"
      ]
    }
  ],
  "userModified": false,
  "replaceAll": false
}
raw content_json (database row)
[{"type":"thinking","thinking":"1. **1099: simp no progress** — hder's `simp only [Pi.mul_apply] at h` — remove it; then `exact h` — if exact fails on the Pi form, convert. Try removing simp and keeping exact h.\n\n2. **1124: linarith failed (hb2x)**: goal a✝ : iimB²*x + iimB < 9.9809 with h1 : 1.9218*4.4721 ≤ iimB²*x and hblo : 1.3862943606 ≤ iimB. Need: iimB²*x + iimB ≥ 1.9218*4.4721 + 1.3862943606 = 8.59462 + 1.38629 = 9.98091 ≥ 9.9809 ✓. linarith: 1.9218*4.4721 — linarith computes this as a CONSTANT? linarith can evaluate 1.9218*4.4721 = 8.594618...: then iimB²*x + iimB ≥ 8.5946... + 1.3862943... = 9.98091 ≥ 9.9809 ✓ should work — unless linarith can't multiply the two decimal CONSTANTS?? It can (constant folding). Hmm — nlinarith [hblo] was my code: `nlinarith [hblo]` — the error says plain \"linarith failed\" (nlinarith calls linarith first?). The h1 coefficient 1.9218*4.4721 — linarith treats as product of two literals ✓ folds. Then needs iimB ≥ 1.3862943606: hblo ✓. 8.5946+1.3862943 = 9.98092 — wait precisely: 1.9218*4.4721 = 8.5945818: +1.3862943606 = 9.9808762 < 9.9809!!! My margin collapsed: 9.9808762 < 9.9809 ✗. Recompute: 1.9218 × 4.4721: 1.9218×4 = 7.6872; 1.9218×0.4721 = 0.90728...: 1.9218×0.4 = 0.76872; 1.9218×0.0721 = 0.13856; total 0.90728; sum = 8.59448. +1.3862943606 = 9.98078 < 9.9809 ✗✗. So my 9.9809 is too tight. Use 9.9807: then hbig: 0.8862943606*9.9807 = 8.84604 ≥ 8.8460?? compute: 0.8862943606*9.9807 = 8.84584...: 0.8862943606*9.9807: 0.8862943606*10 = 8.862943606; minus 0.8862943606*0.0193 = 0.017105; = 8.845838. So use hb2x ≥ 9.9807, hbig: 8.8458 ≤ a*(...): and final need: b² − a(b²x+b) ≤ 0 ⟸ b² ≤ 1.92182 ≤ 8.8458 ✓ margin huge ✓. Set constants: hb2x : 9.9807 ≤ ...; hbig : (8.8458:ℝ) ≤ ...\n\nAlso 1125:51 unsolved — the calc's second step: mul_le_mul ha hb2x (by norm_num) hapos.le — hb2x had wrong constant ✓ same fix.\n\n3. Also check hb2lo nlinarith [hblo] worked (1.9218 ≤ iimB² ✓ passed).","signature":""},{"type":"text","text":"The constant 9.9809 is too tight (actual: 9.98078). Loosening to 9.9807 / 8.8458, and removing the no-progress simp."},{"type":"tool_use","id":"Edit_215","name":"Edit","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiSkeleton.lean","old_string":"    rw [e] at h\n    simp only [Pi.mul_apply] at h\n    exact h\n  apply antitoneOn_of_deriv_nonpos (convex_Ici _)","new_string":"    rw [e] at h\n    exact h\n  apply antitoneOn_of_deriv_nonpos (convex_Ici _)"},"extra_content":null}]