Current task: —

← Session 32 — ii′-3b start: capstone axiom audit + moments

#1861 assistant 2026-08-24 23:54:41.270 UTC · 1910→21048 tok open ⤢
thinking (37464 chars)
The ContDiffAt pattern: AnalyticAt → .contDiffAt. For my zpow term: AnalyticAt (fun t => (t + c)^{−1})? Via analyticAt_const.div (analyticAt_id.add analyticAt_const) hs — for (t+c)^{(−1:ℤ)} — write as 1/(t+c): the zpow_neg_one conversion. So: ```lean have hF1 : ContDiffAt ℂ j (fun t : ℂ => (t + -(ρ : ℂ)) ^ (-1 : ℤ)) s := by have h2 : AnalyticAt ℂ (fun t : ℂ => t + -(ρ : ℂ)) s := analyticAt_id.add analyticAt_const have h3 : AnalyticAt ℂ (fun t : ℂ => 1 / (t + -(ρ : ℂ))) s := analyticAt_const.div h2 hs' have e : (fun t : ℂ => (t + -(ρ : ℂ)) ^ (-1 : ℤ)) = fun t => 1 / (t + -(ρ : ℂ)) := by funext t rw [zpow_neg_one, one_div] rw [e] exact h3.contDiffAt ``` Hmm — wait, zpow_neg_one : a^{−1} = a⁻¹; one_div : 1/a = a⁻¹: so (t+c)^{−1} = (t+c)⁻¹ = 1/(t+c): rw [zpow_neg_one] gives (t+c)⁻¹; goal RHS 1/(t+c): one_div says 1/(t+c) = (t+c)⁻¹: after rw [zpow_neg_one] the goal is (t+c)⁻¹ = 1/(t+c) — close by rw [one_div] (turns RHS into ⁻¹ ✓) or rfl (1/a and a⁻¹ are defeq — HDiv.hDiv 1 a vs Inv.inv a — not syntactically equal but defeq via one_div? they're NOT defeq — 1/a = 1 * a⁻¹? no: instDiv: a/b = a * b⁻¹: so 1/a = 1 * a⁻¹ — defeq to a⁻¹ by one_mul ✓ rfl-check might work; the rw [zpow_neg_one, one_div] makes both sides a⁻¹ ✓ safe). Now §5 main lemma — the M-test on ball(0, δ/2). The SummableLocallyUniformlyOn_of_locally_bounded signature from LiDigamma:720-722: ```lean apply SummableLocallyUniformlyOn_of_locally_bounded dpsiDomain_isOpen intro K hK hKc refine ⟨bound, summable_bound, fun m s hs => ?_⟩ ``` where hK : K ⊆ domain, hKc : IsCompact K, hs : s ∈ K. So it wants: for every compact K ⊆ u, a summable bound valid on K. My domain u := Metric.ball 0 (δ/2); K ⊆ u ⟹ ∀ s ∈ K, ‖s‖ < δ/2. The bound family for the j-th derivative family: u_j ρ := mult·j!·2^{j+1}·δ^{1−j}·... — wait it must be a REAL summable family: u_j ρ := (j ! : ℝ) * 2^{j+1} * δ^{1-j}?? δ^{1−j} with j ≥ 1 — δ < 1 maybe; δ^{1−j} = δ^{-(j−1)}: as (1/δ)^{j−1}. Let me define: u ρ := ((j ! : ℝ) * 2 ^ (j + 1) * (1 / δ) ^ (j - 1)) * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2)? — from my earlier estimate: term ≤ mult·j!·2^{j+1}·‖ρ‖^{−2}·δ^{1−j} where δ^{1−j} = (1/δ)^{j−1} ✓ (j ≥ 1). So C_j := j!·2^{j+1}·(1/δ)^{j−1}, u ρ := C_j·(mult/‖ρ‖²) — summable via summable_mult_div_norm_sq.mul_left ✓. Per-term bound for s ∈ K: ‖iteratedDerivWithin j (seriesTerm · ρ) u s‖ = ‖iteratedDeriv j (seriesTerm · ρ) s‖ (Within_of_isOpen isOpen_ball (hK hs)) = ‖mult·(−1)^j j! (s−ρ)^{−j−1}‖ = mult·j!·‖s−ρ‖^{−(j+1)} [norm computations] ≤ mult·j!·2^{j+1}·‖ρ‖^{−(j+1)} [‖s−ρ‖ ≥ ‖ρ‖/2] ≤ mult·j!·2^{j+1}·‖ρ‖^{−2}·(1/δ)^{j−1} [‖ρ‖^{−(j−1)} ≤ (1/δ)^{j−1}... wait: ‖ρ‖^{−(j+1)} = ‖ρ‖^{−2}·‖ρ‖^{−(j−1)} ≤ ‖ρ‖^{−2}·δ^{−(j−1)} ✓ since ‖ρ‖ ≥ δ]. Norm of the closed form: ‖mult·(−1)^j·j!·(s−ρ)^{−j−1}‖ = mult·1·j!·‖s−ρ‖^{−(j+1)}: norm_mul chain: ‖(−1:ℂ)^j‖ = 1 (the LiDigamma:736-738 hsign pattern ✓); RCLike.norm_natCast for j!; norm_zpow + the exponent rewrite (−(j:ℤ)−1 = −((j+1:ℕ):ℤ), zpow_neg, zpow_natCast) → ‖s−ρ‖^{j+1}⁻¹ (the LiDigamma:740 pattern ✓ exactly clone). The steps: ```lean lemma seriesTerm_deriv_summableLocallyUniformlyOn (j : ℕ) (hj : 1 ≤ j) {δ : ℝ} (hδ : 0 < δ) (hball : ∀ ρ : {ρ : ℂ // IsNontrivialZero ρ}, (ρ : ℂ) ∉ Metric.ball 0 δ) : SummableLocallyUniformlyOn (fun ρ => iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2))) (Metric.ball 0 (δ / 2)) := by apply SummableLocallyUniformlyOn_of_locally_bounded isOpen_ball intro K hK hKc set C : ℝ := (j ! : ℝ) * 2 ^ (j + 1) * (1 / δ) ^ (j - 1) with hC refine ⟨fun ρ => C * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2), summable_mult_div_norm_sq.mul_left C, fun ρ s hs => ?_⟩ have hsu : s ∈ Metric.ball (0 : ℂ) (δ / 2) := hK hs have hsnorm : ‖s‖ < δ / 2 := by rw [Metric.mem_ball, dist_zero_right] at hsu exact hsu have hρδ : δ ≤ ‖(ρ : ℂ)‖ := by by_contra h exact hball ρ (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge h) have hρpos : (0 : ℝ) < ‖(ρ : ℂ)‖ := lt_of_lt_of_le hδ hρδ have hsρ : s - (ρ : ℂ) ≠ 0 := by intro h rw [h] at hsnorm?? hmm: s = ρ ⟹ ‖ρ‖ < δ/2 contradicts δ ≤ ‖ρ‖: have : (ρ:ℂ) = s := sub_eq_zero.mp h ▸ ... -- s − ρ = 0 ⟹ s = ρ: sub_eq_zero.mp h : s = ρ rw [sub_eq_zero.mp h] at hsnorm linarith [hρδ, hsnorm] rw [iteratedDerivWithin_of_isOpen isOpen_ball hsu, iteratedDeriv_seriesTerm j hj ρ hsρ] -- norm of the closed form rw [norm_mul, norm_mul] have hsign : ‖(-1 : ℂ) ^ j‖ = 1 := by have h7 : ‖((-1 : ℂ))‖ = 1 := by rw [norm_neg, norm_one] rw [norm_pow, h7, one_pow] rw [RCLike.norm_natCast, hsign, one_mul, norm_zpow] rw [show (-(j : ℤ) - 1 : ℤ) = -(((j + 1 : ℕ) : ℤ)) by push_cast; ring, zpow_neg, zpow_natCast] -- goal: mult * (j! * (‖s−ρ‖^{j+1})⁻¹) ≤ C * (mult/‖ρ‖²) have hnormsρ : ‖(ρ : ℂ)‖ / 2 ≤ ‖s - (ρ : ℂ)‖ := by have h1 : ‖(ρ : ℂ)‖ - ‖s‖ ≤ ‖s - (ρ : ℂ)‖ := by have := norm_sub_norm_le (ρ : ℂ) s -- ‖ρ‖ − ‖s‖ ≤ ‖ρ − s‖ rw [norm_sub_rev] at this?? — norm_sub_rev : ‖a − b‖ = ‖b − a‖ ... have h2 : ‖(ρ : ℂ)‖ / 2 ≤ ‖(ρ : ℂ)‖ - ‖s‖ := by have : ‖s‖ ≤ ‖(ρ : ℂ)‖ / 2 := by linarith [hsnorm, hρδ] linarith [norm_nonneg s] exact h2.trans h1 -- assemble have hfact : (1 : ℝ) ≤ j ! := Nat.one_le_cast.mpr (Nat.one_le_iff_ne_zero.mpr (Nat.factorial_ne_zero j))?? -- for absorbing: mult·j!·(‖s−ρ‖^{j+1})⁻¹ ≤ mult·j!·(‖ρ‖/2)^{j+1}⁻¹·... calc (zeroMult ρ : ℝ) * ((j ! : ℝ) * (‖s - (ρ : ℂ)‖ ^ (j + 1))⁻¹) ≤ (zeroMult ρ : ℝ) * ((j ! : ℝ) * ((‖(ρ : ℂ)‖ / 2) ^ (j + 1))⁻¹) := by apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _) apply mul_le_mul_of_nonneg_left _ (by positivity : (0:ℝ) ≤ (j ! : ℝ)) exact inv_le_inv₀ (pow_pos (by positivity... ) ...) hmm inv direction: ‖s−ρ‖ ≥ ‖ρ‖/2 ⟹ (‖s−ρ‖^{j+1})⁻¹ ≤ ((‖ρ‖/2)^{j+1})⁻¹: `inv_le_inv₀ (ha : 0 < a) (hab : a ≤ b) : b⁻¹ ≤ a⁻¹`? signature: inv_le_inv₀ : 0 < a → a ≤ b → b⁻¹ ≤ a⁻¹ ✓ I think. With a = (‖ρ‖/2)^{j+1}, b = ‖s−ρ‖^{j+1}: pow_le_pow_left₀ (by linarith : 0 ≤ ‖ρ‖/2) hnormsρ (j+1) : a ≤ b ✓; pow_pos (by linarith : 0 < ‖ρ‖/2) : 0 < a ✓. _ = (zeroMult ρ : ℝ) * ((j ! : ℝ) * (2 / ‖(ρ : ℂ)‖) ^ (j + 1)) := by rw [div_pow, inv_div??] — ((‖ρ‖/2)^{j+1})⁻¹ = (2/‖ρ‖)^{j+1}: inv_div: (a/b)⁻¹ = b/a: ((‖ρ‖/2)^{j+1})⁻¹ = ((‖ρ‖/2)⁻¹)^{j+1} (inv_pow) = (2/‖ρ‖)^{j+1} (inv_div : (a/b)⁻¹ = b/a ✓). rw [inv_pow, inv_div] _ ≤ (zeroMult ρ : ℝ) * ((j ! : ℝ) * ((2 ^ (j + 1)) * ((1 / δ) ^ (j - 1)) * (1 / ‖(ρ : ℂ)‖ ^ 2))) := by apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _) apply mul_le_mul_of_nonneg_left _ (by positivity) -- (2/‖ρ‖)^{j+1} = 2^{j+1}/‖ρ‖^{j+1} = 2^{j+1}·(1/‖ρ‖²)·(1/‖ρ‖^{j−1}) ≤ 2^{j+1}·(1/‖ρ‖²)·(1/δ)^{j−1} rw [div_pow] rw [show (2 : ℝ) ^ (j + 1) / ‖(ρ : ℂ)‖ ^ (j + 1) = 2 ^ (j + 1) * (1 / ‖(ρ : ℂ)‖ ^ 2) * (1 / ‖(ρ : ℂ)‖ ^ (j - 1)) by rw [one_div_mul_one_div?? ...] — algebra: 1/‖ρ‖^{j+1} = (1/‖ρ‖²)(1/‖ρ‖^{j−1}): pow: ‖ρ‖^{j+1} = ‖ρ‖²·‖ρ‖^{j−1}: pow: j+1 = 2+(j−1) (j ≥ 1: Nat... careful: j − 1 for j : ℕ, j ≥ 1: j − 1 + 2 = j + 1 ✓ omega. rw [← pow_add]; congr: omega] apply mul_le_mul_of_nonneg_left _ (by positivity : (0:ℝ) ≤ 2^(j+1)) apply mul_le_mul_of_nonneg_left _ (by positivity) exact one_div_le_one_div_of_le (pow_pos hδ (j-1)) (pow_le_pow_left₀ hδ.le hρδ (j-1)) _ = C * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2) := by rw [hC] ring ``` The last ring: C·(mult/‖ρ‖²) = j!·2^{j+1}·(1/δ)^{j−1}·mult/‖ρ‖² vs mult·(j!·(2^{j+1}·((1/δ)^{j−1}·(1/‖ρ‖²)))) — ring ✓ (division forms: ·(1/‖ρ‖²) vs /‖ρ‖² — ring handles). pow: j+1 = 2+(j−1): `have : j + 1 = 2 + (j - 1) := by omega` then rw [← pow_add, this]. ✓ Wait — one_detail: the goal after the Within/global/zpow rewrites: the term form. iteratedDeriv_seriesTerm gives: mult·((−1)^j·j!·(s−ρ)^{−j−1}) — after norm_mul ×2: ‖mult‖·‖(−1)^j‖·‖j!‖·‖(s−ρ)^{−j−1}‖ — hmm the bracket is ((−1)^j * j! * (s−ρ)^z): norm_mul twice: ‖(−1)^j‖·‖j!·(s−ρ)^z‖ → then need another norm_mul for j!·(s−ρ)^z. LiDigamma did: rw [norm_mul, norm_mul] on mult·((−1)^k·k!·z) — the outer split: mult · (X) and X = (−1)^k · (k! · z)?: their closed form: -((-1))^k * k! * z parses as ((−(−1)^k)·k!)·z: norm_mul, norm_mul: ‖−(−1)^k‖·‖k!·z‖ → ‖−(−1)^k‖·(‖k!‖·‖z‖)?? norm_mul on ‖k!·z‖... they did rw [norm_mul, norm_mul] then hsign rw then one_mul, RCLike.norm_natCast, norm_zpow — sequence at 735-739: `rw [norm_mul, norm_mul]; rw [hsign, one_mul, RCLike.norm_natCast, norm_zpow]` — so after two norm_mul: ‖−(−1)^k‖ · (‖↑k!‖ · ‖z‖)?? — norm_mul twice: ‖a·b·c‖ = ‖a‖·‖b·c‖ = ‖a‖·(‖b‖·‖c‖) ✓. Their a = −(−1)^k (hsign: ‖−(−1)^k‖ = 1), b = k! (natCast), c = z. Mine: a = (−1)^j (hsign), b = j!, c = z — and the OUTER mult·(closed form): seriesTerm's value mult·(X): one more norm_mul: total three. My plan wrote rw [norm_mul, norm_mul] — need one more for the outer mult: order: mult·((−1)^j·j!·z): norm_mul → ‖mult‖·‖(−1)^j·j!·z‖; norm_mul → ‖mult‖·(‖(−1)^j‖·‖j!·z‖); norm_mul → ‖mult‖·(‖(−1)^j‖·(‖j!‖·‖z‖)). So THREE norm_mul. Then RCLike.norm_natCast on ‖(zeroMult ρ:ℂ)‖ = mult (ℝ) ✓, hsign, one_mul, RCLike.norm_natCast on j!, norm_zpow on z. Write rw [norm_mul, norm_mul, norm_mul, RCLike.norm_natCast, hsign, one_mul, RCLike.norm_natCast, norm_zpow] — careful RCLike.norm_natCast might rewrite both casts at once (rw rewrites first match only? rw rewrites ALL matches of the first unifier — banked gotcha "rw first-unifier-only"... RCLike.norm_natCast : ‖(↑n)‖ = ↑n — two instances (zeroMult and j!): rw rewrites all occurrences matching the first found pattern... first unifier: probably zeroMult; need it twice for j!. Use simp only [RCLike.norm_natCast] to rewrite all ✓ or rw twice. Then the show-exponent rewrite + zpow_neg + zpow_natCast (clone LiDigamma:740) → c-part becomes (‖s−ρ‖^{j+1})⁻¹. Goal: mult·(1·(j!·(‖s−ρ‖^{j+1})⁻¹)) ≤ C·(mult/‖ρ‖²) — after one_mul. Then the calc. In the calc I assumed the goal form mult·(j!·(‖s−ρ‖^{j+1})⁻¹) ≤ ... — write the calc's first line to match (with 1· removed — include `one_mul` to clean). norm_sub_norm_le: ‖a‖ − ‖b‖ ≤ ‖a − b‖: `norm_sub_norm_le (a b) : ‖a‖ - ‖b‖ ≤ ‖a - b‖` ✓ exists. With norm_sub_rev : ‖a − b‖ = ‖b − a‖ ✓. So ‖ρ‖ − ‖s‖ ≤ ‖ρ − s‖ = ‖s − ρ‖ ✓. inv_le_inv₀ signature: `inv_le_inv₀ (ha : 0 < a) (h : a ≤ b) : b⁻¹ ≤ a⁻¹` — hmm in current Mathlib: inv_le_inv₀ : a ≤ b → 0 < a → b⁻¹ ≤ a⁻¹?? arg order uncertain. Alternative: `one_div_le_one_div_of_le (ha : 0 < a) (h : a ≤ b) : 1/b ≤ 1/a` ✓ (session-033 confirmed "one_div_le_one_div_of_le takes the small side's positivity first" ✓). Use that with 1/x forms instead of ⁻¹ — the zpow_neg gives (‖s−ρ‖^{j+1})⁻¹ — convert ⁻¹ to 1/x: `inv_eq_one_div : a⁻¹ = 1/a` ✓. rw [inv_eq_one_div] then one_div_le_one_div_of_le. Hmm wait — actually simpler: skip the inv form: from the calc, rewrite ((‖ρ‖/2)^{j+1})⁻¹ → 1/(‖ρ‖/2)^{j+1}, use one_div_le_one_div_of_le directly. And ((‖ρ‖/2)^{j+1}) → (2/‖ρ‖)^{j+1}: one_div_div: 1/(a/b) = b/a: (‖ρ‖/2)^{j+1} = ‖ρ‖^{j+1}/2^{j+1}: 1/(that) = 2^{j+1}/‖ρ‖^{j+1} — maybe cleaner to go through: (2/‖ρ‖)^{j+1} = 2^{j+1}/‖ρ‖^{j+1} (div_pow) ✓ as planned. OK. Then the main termwise lemma: ```lean lemma iteratedDeriv_seriesFun_zero (j : ℕ) (hj : 1 ≤ j) : iteratedDeriv j seriesFun 0 = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ j * (j ! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(j : ℤ) - 1)) := by obtain ⟨δ, hδ, hball⟩ := exists_ball_avoid_nontrivialZeros 0 not_isNontrivialZero_zero have hmem : (0 : ℂ) ∈ Metric.ball (0 : ℂ) (δ / 2) := by rw [Metric.mem_ball, dist_zero_right, norm_zero] exact half_pos hδ have hmain : iteratedDerivWithin j seriesFun (Metric.ball 0 (δ / 2)) 0 = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2)) 0 := by rw [iteratedDerivWithin_tsum j isOpen_ball hmem (fun s _ => seriesSummable s) (fun j' hj'1 _ => seriesTerm_deriv_summableLocallyUniformlyOn j' hj'1 hδ hball) ?_] · intro ρ j' r hjm hr -- differentiability side condition, clone LiDigamma:759-785 rcases Nat.eq_zero_or_pos j' with hj0 | hj0 · subst hj0 rw [iteratedDerivWithin_zero] -- seriesTerm differentiable in s at r (r − ρ ≠ 0 since r ∈ ball) have hrρ : r - (ρ : ℂ) ≠ 0 := by intro h have hrn : ‖r‖ < δ / 2 := by rw [Metric.mem_ball, dist_zero_right] at hr exact hr have hρδ : δ ≤ ‖(ρ : ℂ)‖ := by by_contra hc exact hball ρ (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge hc) rw [sub_eq_zero.mp h] at hrn linarith rw [seriesTerm] apply DifferentiableAt.const_mul apply DifferentiableAt.add · exact (differentiableAt_const (1 : ℂ)).div (differentiableAt_id.sub differentiableAt_const) hrρ · exact differentiableAt_const _ · have h5 : (fun t => iteratedDerivWithin j' (fun z => seriesTerm z ρ) (Metric.ball 0 (δ/2)) t) =ᶠ[𝓝 r] fun t => (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ j' * (j' ! : ℂ) * (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1)) := by filter_upwards [isOpen_ball.mem_nhds hr] with t ht have htρ : t - (ρ : ℂ) ≠ 0 := ... rw [iteratedDerivWithin_of_isOpen isOpen_ball ht, iteratedDeriv_seriesTerm j' hj0 ρ htρ] apply h5.differentiableAt_iff.mpr -- the closed form is differentiable (zpow, r − ρ ≠ 0) have hrρ : r - (ρ : ℂ) ≠ 0 := ... apply DifferentiableAt.const_mul apply DifferentiableAt.const_mul -- (t−ρ)^{−j'−1} differentiable have h4 : DifferentiableAt ℂ (fun t : ℂ => t - (ρ : ℂ)) r := differentiableAt_id.sub differentiableAt_const exact ((hasDerivAt_zpow (-(j' : ℤ) - 1) (r - (ρ : ℂ)) (Or.inl hrρ)).differentiableAt).comp r h4 -- ↑ but the ∘ defeq bridge needed: ((fun x => x^z) ∘ fun t => t−ρ) = fun t => (t−ρ)^z := rfl -- convert Within → global rw [← iteratedDerivWithin_of_isOpen isOpen_ball hmem] rw [hmain] apply tsum_congr intro ρ have h0ρ : (0 : ℂ) - (ρ : ℂ) ≠ 0 := by intro h have : (ρ:ℂ) = 0 := by have := congrArg Neg.neg h; simpa using this have h2 := ρ.2.2.1 rw [this, Complex.zero_re] at h2 exact lt_irrefl 0 h2 rw [iteratedDerivWithin_of_isOpen isOpen_ball hmem, iteratedDeriv_seriesTerm j hj ρ h0ρ] ``` Notes: - iteratedDerivWithin_tsum's conclusion: iteratedDerivWithin k (∑' f) u x = ∑' n, iteratedDerivWithin k (f n) u x — with seriesFun = ∑' seriesTerm ✓ — rw [iteratedDerivWithin_tsum ...] rewrites the LHS; but the hypothesis-side goals: the pattern from LiDigamma:752-755: `rw [iteratedDerivWithin_tsum k dpsiDomain_isOpen dpsiDomain_half (fun s hs => ...) (fun j hj1 _ => ...) ?_]` — the last ?_ is the differentiability condition, discharged after with the two bullets (· apply tsum_congr ... wait no — in LiDigamma, after the rw there were TWO goals: the main (tsum_congr per-term) and ?_ (differentiability). They structured: ```lean rw [iteratedDerivWithin_tsum k ... ?_] · apply tsum_congr intro m exact iteratedDerivWithin_dpsiTermC ... · intro n j r hjm hr ... ``` So the rw generates: goal1 = the resulting equation (needs tsum_congr), goal2 = the differentiability side condition. I'll mirror: rw [...]; · tsum_congr per-term (within→global→seriesTerm closed form); · the differentiability intro. Hmm wait — in my hmain I wrote the equation directly as the target with the per-term Within forms — so after rw [iteratedDerivWithin_tsum ...], the goal becomes ∑' ρ, iteratedDerivWithin j (seriesTerm · ρ) u 0 = ∑' ρ, iteratedDerivWithin j (seriesTerm · ρ) u 0 (rfl) — no. Let me restructure hmain to produce EXACTLY the tsum-lemma's output, then do the per-term conversion separately: ```lean have hmain : iteratedDerivWithin j seriesFun (Metric.ball 0 (δ / 2)) 0 = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2)) 0 := by rw [seriesFun] rw [iteratedDerivWithin_tsum j isOpen_ball hmem (fun s _ => seriesSummable s) (fun j' hj'1 _ => seriesTerm_deriv_summableLocallyUniformlyOn j' hj'1 hδ hball) ?_] · intro ρ j' r hjm hr (differentiability side condition) ``` Wait — does the rw [iteratedDerivWithin_tsum] leave the tsum_congr goal? In LiDigamma the target was the VALUE equation (they needed the per-term closed form at 1/2, hence the first bullet). For hmain, the target is EXACTLY the tsum-lemma's conclusion shape — after rw, goal closes by rfl?? No — rw [iteratedDerivWithin_tsum ...] rewrites instances of the LHS pattern (iteratedDerivWithin k (∑' f) u x) in the goal — the goal IS that equation; the rw rewrites the LHS to the RHS form, leaving `∑' ... = ∑' ...` rfl — closed automatically by rw ✓ plus the side-condition goal remains. But the ?_ placeholder in the rw args: supplying ?_ as the last arg means the side condition becomes a NEW goal instead of being unified — with two goals: (1) rfl-closed main? Actually with ?_ in the rw, after rewriting the main goal is closed; the ?_ goal is the side condition. Order of goals: the ?_ comes as a new goal. So: ```lean rw [iteratedDerivWithin_tsum j isOpen_ball hmem ... ?_] intro ρ j' r hjm hr (discharge) ``` But careful — if the main goal closes by rfl during rw, the remaining goal is the side condition ✓. Hmm — but does `seriesFun` need unfolding first? seriesFun 0 vs ∑' seriesTerm: the tsum-lemma's LHS pattern: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) — goal's function is seriesFun (a def) — the pattern fun s => ∑' ρ, seriesTerm s ρ vs seriesFun — rw needs syntactic match: unfold seriesFun first: rw [seriesFun] — but seriesFun is a def — rw [seriesFun] (the Fexpr-pattern ✓ works). BUT it rewrites seriesFun EVERYWHERE including inside hmem?? no — hmem is a hypothesis, rw [seriesFun] only at goal ✓. Goal after: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) u 0 = ... ✓ then the tsum-rw matches. Wait — actually does iteratedDerivWithin_tsum's LHS have the form with the LAMBDA (fun s => ∑' n, f n s)? The lemma: iteratedDerivWithin k (fun x => ∑' n, f n x) u x = ∑' n, iteratedDerivWithin k (f n) u x presumably. After rw [seriesFun], goal LHS: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) (ball) 0 ✓ matches. Then final: ```lean rw [← iteratedDerivWithin_of_isOpen isOpen_ball hmem, hmain] apply tsum_congr intro ρ rw [iteratedDerivWithin_of_isOpen isOpen_ball hmem, iteratedDeriv_seriesTerm j hj ρ h0ρ] ``` ✓ (with h0ρ proved before). Side-condition (j' = 0 case): after rw [iteratedDerivWithin_zero]: goal DifferentiableAt ℂ (fun s => seriesTerm s ρ) r — rw [seriesTerm]: function fun s => mult·(1/(s−ρ) + 1/ρ): DifferentiableAt.const_mul _ (hr-diff): DifferentiableAt (fun s => 1/(s−ρ) + 1/ρ) r: .add of: (differentiableAt_const 1).div (differentiableAt_id.sub differentiableAt_const) hrρ + differentiableAt_const ✓. Then const_mul needs DifferentiableAt of the inner: `DifferentiableAt.const_mul (hg : DifferentiableAt g x) (c) : DifferentiableAt (fun x => c * g x) x`? signature: DifferentiableAt.const_mul (hd : DifferentiableAt 𝕜 f x) (c : 𝔸')?? Hmm — for ℂ: `DifferentiableAt.const_mul (hf : DifferentiableAt 𝕜 f x) (c : 𝕜) : DifferentiableAt 𝕜 (fun x => c * f x) x`? arg order — from LiDigamma:785: `exact (differentiableAt_const _).mul h6` — they used .mul with the const on the LEFT: (differentiableAt_const _).mul h6 : DifferentiableAt (fun r => const · h6-fun) ✓ — const_mul via mul with const first ✓. My term mult·(X): (differentiableAt_const (zeroMult ρ : ℂ)).mul hX ✓ same pattern. For the j' ≥ 1 case: h5 eventuallyEq — the closed-form differentiability: const_mul·const_mul·zpow-comp: ((hasDerivAt_zpow ...).differentiableAt).comp r h4 — produces DifferentiableAt ((fun x => x^z) ∘ (fun t => t−ρ)) r — vs needed (fun t => (t−ρ)^z): the rfl bridge (LiDigamma:781-783 pattern ✓): ```lean have h6 : DifferentiableAt ℂ (fun t : ℂ => (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1)) r := by have h7 := ((hasDerivAt_zpow (-(j' : ℤ) - 1) (r - (ρ : ℂ)) (Or.inl hrρ)).differentiableAt).comp r h4 have heq : ((fun x : ℂ => x ^ (-(j' : ℤ) - 1)) ∘ fun t : ℂ => t - (ρ : ℂ)) = fun t : ℂ => (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1) := rfl rw [heq] at h7 exact h7 exact (differentiableAt_const _).mul ((differentiableAt_const _).mul h6) ``` ✓ clone. - htρ/hrρ for r, t ∈ ball: ‖t‖ < δ/2, ‖ρ‖ ≥ δ ⟹ t − ρ ≠ 0 (as shown: if t = ρ then ‖ρ‖ < δ/2 < δ ✗). §6 capstone: ```lean /-! ## 6. The capstone -/ /-- gFun agrees with B + seriesFun on a full neighbourhood of 0. -/ lemma gFun_eventuallyEq_zero (hZC : ZeroCountProp) : gFun =ᶠ[𝓝 0] (fun s => momentB hZC + seriesFun s) := by -- from the punctured version + the value at 0 have hp : ∀ᶠ s in 𝓝[≠] (0 : ℂ), gFun s = momentB hZC + seriesFun s := by filter_upwards [good_eventually_zero, self_mem_nhdsWithin] with s ⟨hζ, h1, hn⟩ h0 exact gFun_eq_momentB hZC hζ h0 h1 hn -- upgrade: 𝓝 0 = 𝓝[≠] 0 ⊔ pure 0 ... ``` For the upgrade — look for the lemma: `Filter.EventuallyEq.insert`? Hmm. There's: `nhdsWithin_union`? The clean one: `Filter.EventuallyEq.of_nhdsWithin_punctured`? Let me think of the standard: (𝓝[≠] a) and f a = g a gives f =ᶠ[𝓝 a] g: prove via: 𝓝 a = 𝓝[{a}ᶜ] a ⊔ 𝓝[{a}] a?? Hmm. Standard lemma: `eventually_nhdsWithin_iff`? The insert fact: {a} ∈ 𝓝 a... Write manually: ```lean rw [Filter.EventuallyEq] at hp ⊢ rw [eventually_nhds_iff] -- ?? does eventually_nhds_iff exist: (∀ᶠ x in 𝓝 a, p x) ↔ p a ∨ ∀ᶠ x in 𝓝[≠] a, p x — hmm name... ``` Mathlib: `eventually_nhdsWithin_iff` is about s. For nhds: there IS `Filter.eventually_nhds_iff_eventually_nhdsWithin`? not sure. There's `eventually_nhds_iff` : (∀ᶠ x in 𝓝 a, p x) ↔ ∀ ε > 0... no that's metric. Robust manual: use Metric.eventually_nhds_iff_ball both ways: ```lean rw [Metric.eventually_nhdsWithin_iff_ball?? no... ``` Alternative — the punctured-to-full upgrade: ```lean have h0 : gFun 0 = momentB hZC + seriesFun 0 := by rw [gFun_zero hZC, seriesFun_zero, add_zero] -- ∀ᶠ s in 𝓝 0: use that 𝓝[≠] 0 ≤ 𝓝 0 and {0}ᶜ ∪ {0}: filter_upwards [hp.filter_mono (nhdsWithin_le_nhds?? wrong direction]... ``` Hmm: hp : ∀ᶠ s in 𝓝[≠] 0, P s. Want ∀ᶠ s in 𝓝 0, P' s where P' accounts for s = 0. Trick: ∀ᶠ s in 𝓝 0, s ∈ {0}ᶜ → P s?? Use: eventually_nhdsWithin_iff : (∀ᶠ x in 𝓝[s] a, p x) ↔ ∀ᶠ x in 𝓝 a, x ∈ s → p x: hp ↔ ∀ᶠ s in 𝓝 0, s ≠ 0 → P s. Then filter_upwards [that] with s hs: cases s = 0: if s = 0 use h0; else hs h. So: ```lean rw [eventually_nhdsWithin_iff] at hp filter_upwards [hp] with s hs by_cases h : s = 0 · subst h exact h0 · exact hs h ``` eventually_nhdsWithin_iff : (∀ᶠ x in 𝓝[s] a, p x) ↔ ∀ᶠ x in 𝓝 a, x ∈ s → p x ✓ exists (I'm fairly confident). With s = {0}ᶜ: 𝓝[{0}ᶜ] 0 = 𝓝[≠] 0 — is hp stated with 𝓝[≠]? 𝓝[≠] a is notation for 𝓝[{a}ᶜ] a ✓ same. ✓ Then: ```lean theorem sigmaP_eq_neg_iteratedDeriv_gFun_div (hZC : ZeroCountProp) {k : ℕ} (hk : 1 ≤ k) : sigmaP k = -(iteratedDeriv (k - 1) gFun 0) / ((k - 1)! : ℂ) := by rcases Nat.lt_or_ge k 2 with hk1 | hk2 · have hk1' : k = 1 := by omega subst hk1' rw [Nat.sub_self, iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one] exact sigmaP_one_eq_neg_gFun_zero hZC · -- k ≥ 2 have hcong := iteratedDeriv_congr_of_eventuallyEq (gFun_eventuallyEq_zero hZC) (k - 1) rw [hcong] -- iteratedDeriv (k−1) (B + seriesFun) 0 = iteratedDeriv (k−1) seriesFun 0 have hcf : ContDiffAt ℂ (k - 1 : ℕ∞)?? ... ``` Hmm — iteratedDeriv_add's ContDiffAt requirement: `iteratedDeriv_add (hf : ContDiffAt 𝕜 n f x) (hg : ContDiffAt 𝕜 n g x)` — with n : ℕ (the same n as the iteratedDeriv order). The LiDigamma usage: `iteratedDeriv_add hcf hcg` with hcf : ContDiffAt ℂ k ... — k : ℕ (the order) — ContDiffAt ℂ k — the k coerces to ℕ∞ ✓ (ContDiffAt takes ℕ∞). So: ```lean have hcf : ContDiffAt ℂ (k - 1 : ℕ) (fun _ : ℂ => momentB hZC) 0 := contDiff_const.contDiffAt have hcg : ContDiffAt ℂ (k - 1 : ℕ) seriesFun 0 := (seriesFun_analyticAt not_isNontrivialZero_zero).contDiffAt rw [iteratedDeriv_add hcf hcg, iteratedDeriv_const, if_neg (by omega : k - 1 ≠ 0), zero_add] ``` Hmm — ContDiffAt ℂ (k−1 : ℕ) — the coercion: ContDiffAt's smoothness parameter type ℕ∞ (WithTop ℕ∞?): in current Mathlib ContDiffAt 𝕜 (n : ℕ∞)?? — actually `ContDiffAt 𝕜 n` with n : ℕ∞ = WithTop ℕ∞? — plain ℕ works via coercion: LiDigamma:695 wrote ContDiffAt ℂ k with k : ℕ ✓ (coercion inserted). For k−1 : write (k - 1 : ℕ) — the iteratedDeriv (k−1) has k−1 : ℕ — the coercion matches automatically. AnalyticAt.contDiffAt : AnalyticAt ℂ f x → ContDiffAt ℂ n f x? — signature: `AnalyticAt.contDiffAt (h : AnalyticAt ℂ f x) : ContDiffAt ℂ n f x`? — for ANY n (analytic ⟹ C^∞) ✓ I believe `AnalyticAt.contDiffAt` exists (analyticAt.contDiff? hmm). LiDigamma:701: `exact h3.neg.contDiffAt` — AnalyticAt.neg then .contDiffAt ✓ — so AnalyticAt.contDiffAt exists ✓ and the n is implicit/inferred ✓. Then: ```lean -- = ∑' ρ, mult·(−1)^{k−1}(k−1)!·(0−ρ)^{−k} = −(k−1)!·sigmaP k rw [iteratedDeriv_seriesFun_zero (k - 1) (by omega)] -- exponent: −(k−1:ℤ)−1 = −(k:ℤ) have hexp : (-(k - 1 : ℤ) - 1 : ℤ) = -(k : ℤ) := by have : ((k : ℤ) - 1 : ℤ) = ((k - 1 : ℕ) : ℤ) := by rw [Int.ofNat_sub (by omega : 1 ≤ k)] ... push_cast [this]... ``` Hmm — careful: (k − 1 : ℤ) with k : ℕ: the iteratedDeriv_seriesFun_zero's exponent is −(j:ℤ)−1 with j := k−1 (ℕ sub!): −((k−1:ℕ):ℤ)−1. Want = −(k:ℤ): ((k−1:ℕ):ℤ) = (k:ℤ)−1 (Int.ofNat_sub hk : ((k−1:ℕ):ℤ) = (k:ℤ)−1 ✓ `Int.ofNat_sub (h : m ≤ n) : (↑(n − m) : ℤ) = ↑n − ↑m` ✓). So −((k−1:ℕ):ℤ)−1 = −((k:ℤ)−1)−1 = −(k:ℤ) ✓: ```lean have hexp : (-(((k - 1 : ℕ) : ℤ)) - 1 : ℤ) = -(k : ℤ) := by rw [Int.ofNat_sub hk] push_cast ring ``` push_cast for the (↑k : ℤ) forms... ((k:ℤ)−1) — fine: rw [Int.ofNat_sub hk]: goal -(↑k − 1) − 1 = -↑k: ring ✓ (no push_cast needed). Then per-term evaluation at 0: ```lean -- ∑' ρ, mult·((−1)^{k−1}(k−1)!·(0−ρ)^{−(k:ℤ)}) = −(k−1)!·sigmaP k have heval : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(k - 1 : ℤ) - 1))) = -(((k - 1)! : ℂ)) * sigmaP k := by rw [hexp] -- per-term: mult·((−1)^{k−1}(k−1)!·(0−ρ)^{−k}) = −(k−1)!·mult·(1/ρ)^k have hper : ∀ ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(k : ℤ))) = -(((k - 1)! : ℂ)) * ((zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k) := by intro ρ have hρ0 : (ρ : ℂ) ≠ 0 := ... -- (0−ρ)^{−k} = (−ρ)^{−k} = (−1)^k·(ρ^k)⁻¹·... have e1 : ((0 : ℂ) - (ρ : ℂ)) ^ (-(k : ℤ)) = (-1 : ℂ) ^ k * (1 / (ρ : ℂ)) ^ k := by rw [zero_sub] -- (−ρ)^{(−k:ℤ)} = ((−ρ)^k)⁻¹ = ((−1)^k ρ^k)⁻¹ = (−1)^k (ρ^k)⁻¹ = (−1)^k (1/ρ)^k rw [zpow_neg, zpow_natCast, neg_pow] rw [mul_inv] -- ((−1)^k)⁻¹·(ρ^k)⁻¹ = (−1)^k·(ρ^k)⁻¹: ((−1)^k)⁻¹ = (−1)^k have h2 : ((-1 : ℂ) ^ k)⁻¹ = (-1 : ℂ) ^ k := by apply inv_eq_of_mul_eq_one_right rw [← pow_add, ← two_mul] -- (−1)^{2k} = 1: Even: even (2k): Even.neg_one_pow?? have : ((-1 : ℂ) ^ 2) ^ k = 1 := by rw [show (-1 : ℂ) ^ 2 = 1 by ring] exact one_pow k rwa [← pow_mul, mul_comm 2 k, pow_mul] at this?? rw [h2, ← mul_pow, one_div] -- (−1)^k·(ρ^k)⁻¹ vs (−1)^k·(1/ρ)^k: (1/ρ)^k = (ρ^k)⁻¹: one_div_pow?? inv_pow: (ρ⁻¹)^k = (ρ^k)⁻¹; 1/ρ = ρ⁻¹: one_div... congr 1 rw [one_div, ← inv_pow] rw [e1] -- mult·((−1)^{k−1}(k−1)!·((−1)^k·(1/ρ)^k)) = −(k−1)!·mult·(1/ρ)^k have hsign : (-1 : ℂ) ^ (k - 1) * (-1 : ℂ) ^ k = -1 := by rw [← pow_add] -- (−1)^{k−1+k} = (−1)^{2k−1} = −1 have h2 : k - 1 + k = 2 * k - 1 := by omega rw [h2] -- (−1)^{2k−1} = (−1)^{2k}/(−1) = 1/(−1) = −1: pow_sub?? for ℕ: 2k−1: use: 2k−1 = 2(k−1)+1: have h3 : 2 * k - 1 = 2 * (k - 1) + 1 := by omega rw [h3, pow_add] have h4 : (-1 : ℂ) ^ (2 * (k - 1)) = 1 := by rw [pow_mul, show (-1 : ℂ) ^ 2 = 1 by ring] exact one_pow _ rw [h4, one_mul] -- (−1)^1 = −1 exact pow_one _ -- assemble: mult·((−1)^{k−1}·(k−1)!·((−1)^k·w)) = −(k−1)!·mult·w calc (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((-1 : ℂ) ^ k * (1 / (ρ : ℂ)) ^ k)) = ((zeroMult ρ : ℂ) * ((k - 1)! : ℂ) * (1 / (ρ : ℂ)) ^ k) * ((-1 : ℂ) ^ (k - 1) * (-1 : ℂ) ^ k) := by ring _ = ((zeroMult ρ : ℂ) * ((k - 1)! : ℂ) * (1 / (ρ : ℂ)) ^ k) * (-1) := by rw [hsign] _ = -(((k - 1)! : ℂ)) * ((zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k) := by ring rw [tsum_congr hper, ← sigmaP_eq_unpaired hk2] -- ∑' ρ, −(k−1)!·(mult·(1/ρ)^k) = −(k−1)!·∑' ... : tsum_mul_left rw [tsum_mul_left] ``` Careful: hper's RHS: −(k−1)!·(mult·(1/ρ)^k) — the unpaired family: mult·(1/ρ)^k: ∑' ρ, −(k−1)!·(mult·(1/ρ)^k) = −(k−1)!·∑' mult·(1/ρ)^k (tsum_mul_left ✓) = −(k−1)!·sigmaP k (sigmaP_eq_unpaired hk2 ✓). zpow manipulations: ((0:ℂ)−ρ)^(−k:ℤ): zero_sub → (−ρ)^(−k:ℤ); zpow_neg : a^{−n} = (a^n)⁻¹ ✓ `zpow_neg (a) (n : ℤ) : a ^ (-n) = (a ^ n)⁻¹`; zpow_natCast : a^{(n:ℤ)} = a^n ✓. So (−ρ)^{(−(k:ℤ))} → wait the exponent is −(k:ℤ) where k : ℕ cast — zpow_neg needs the exponent literally as −x: −(k:ℤ) = −((k:ℕ):ℤ): pattern a ^ (-x) with x := (k:ℤ) ✓. → ((−ρ)^(k:ℤ))⁻¹ → zpow_natCast → ((−ρ)^k)⁻¹ → neg_pow : (−a)^n = (−1)^n·a^n ✓ `neg_pow (a) (n : ℕ)` — used LiSwaps:106 ✓. → ((−1)^k·ρ^k)⁻¹ → mul_inv : (a·b)⁻¹ = a⁻¹·b⁻¹ ✓. → (−1)^k⁻¹·(ρ^k)⁻¹: h2: ((−1)^k)⁻¹ = (−1)^k via inv_eq_of_mul_eq_one_right : a·b = 1 → a⁻¹ = b: with a := (−1)^k, b := (−1)^k: need (−1)^k·(−1)^k = 1: ← pow_add: (−1)^{k+k}: k+k = 2k: ← two_mul: then (−1)^{2k}: pow_mul: ((−1)²)^k = 1^k = 1: ```lean have h2 : ((-1 : ℂ) ^ k)⁻¹ = (-1 : ℂ) ^ k := by apply inv_eq_of_mul_eq_one_right rw [← pow_add, ← two_mul, pow_mul] rw [show (-1 : ℂ) ^ 2 = 1 by ring] exact one_pow k ``` inv_eq_of_mul_eq_one_right : a * b = 1 → a⁻¹ = b ✓ exists (session-033-ish? `inv_eq_of_mul_eq_one_right` ✓ I'm fairly confident; else `inv_eq_of_mul_eq_one_left`). The a here is (−1)^k (the thing being inverted) and b = (−1)^k: goal a·b = 1 ✓. Then: (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k: (1/ρ)^k = (ρ^k)⁻¹: `one_div_pow`? or inv_pow: (ρ⁻¹)^k = (ρ^k)⁻¹ ✓ `inv_pow (a) (n)`; 1/ρ = ρ⁻¹: one_div. So congr 1; rw [one_div, ← inv_pow] — goal (−1)^k·(ρ^k)⁻¹ = (−1)^k·(ρ⁻¹)^k?? wait — my e1's RHS is (−1)^k·(1/ρ)^k: after rw [h2] on LHS: (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k: congr 1 → (ρ^k)⁻¹ = (1/ρ)^k: rw [one_div]: (ρ^k)⁻¹ = (ρ⁻¹)^k: ← inv_pow ✓. Hold on — e1's statement: ((0:ℂ)−ρ)^(−k:ℤ) = (−1)^k·(1/ρ)^k. Let me re-derive: (−ρ)^{−k} = ((−ρ)^k)⁻¹ = ((−1)^k·ρ^k)⁻¹ = ((−1)^k)⁻¹·(ρ^k)⁻¹ = (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k ✓ (since (1/ρ)^k = 1/ρ^k = (ρ^k)⁻¹ ✓). Hmm — and zpow_neg signature: `zpow_neg (a : α) (n : ℤ) : a ^ (-n) = (a ^ n)⁻¹` ✓ exists. zpow_natCast : `zpow_natCast (a : α) (n : ℕ) : a ^ (n : ℤ) = a ^ n` ✓. hsign: (−1)^{k−1}·(−1)^k = −1: ← pow_add: (−1)^{(k−1)+k}: k−1+k = 2k−1 (omega, k ≥ 2 — hmm Nat: k−1+k with k ≥ 2 ✓ omega): then 2k−1 = 2(k−1)+1 (omega k ≥ 2 ✓): pow_add: (−1)^{2(k−1)}·(−1)^1: h4: (−1)^{2(k−1)} = ((−1)²)^{k−1} = 1: pow_mul : a^{m·n} = (a^m)^n ✓ `pow_mul (a) (m n) : a ^ (m * n) = (a ^ m) ^ n`. 2·(k−1) — pow_mul with m = 2, n = k−1 ✓. one_mul; pow_one ✓. pow_add : a^{m+n} = a^m·a^n ✓. The final capstone assembly: ```lean rw [heval] -- goal: sigmaP k = −(−(k−1)!·sigmaP k)/(k−1)! -- = sigmaP k: field have hfact : ((k - 1)! : ℂ) ≠ 0 := by rw [Ne, Nat.cast_eq_zero] exact Nat.factorial_ne_zero (k - 1) field_simp [hfact] ring ``` goal after heval: sigmaP k = −(−(k−1)!·sigmaP k)/((k−1)!) : field_simp [hfact]; ring ✓ (−(−X)/Y = X/Y = ... : −(−(k−1)!·σ)/(k−1)! = σ·((k−1)!/(k−1)!) = σ ✓ ring after clearing). Hmm wait — the goal after rw [hcong, ..., heval]: sigmaP k = -(iteratedDeriv...)/... where the iteratedDeriv was rewritten to the tsum and then heval replaced the tsum with −(k−1)!·sigmaP k — the rw chain: hcong rewrites iteratedDeriv (k−1) gFun 0 → iteratedDeriv (k−1) (B+seriesFun) 0 ✓; then iteratedDeriv_add etc rewrite; iteratedDeriv_seriesFun_zero rewrites iteratedDeriv (k−1) seriesFun 0 → the tsum ✓; heval is a standalone — rw [heval] rewrites the tsum → −(k−1)!·sigmaP k ✓. Goal: sigmaP k = −(−(k−1)!·sigmaP k)/(k−1)! ✓ field_simp+ring. One concern — the rw [hcong]: hcong : iteratedDeriv (k−1) gFun 0 = iteratedDeriv (k−1) (fun s => B + seriesFun s) 0 — iteratedDeriv_congr_of_eventuallyEq (h : f =ᶠ[𝓝 x] g) (n) : iteratedDeriv n f x = iteratedDeriv n g x ✓ (LiDigamma:568). ✓ And iteratedDeriv_add's function form: fun s => B + seriesFun s — the lemma iteratedDeriv_add (hf : ContDiffAt 𝕜 n f x) (hg : ContDiffAt 𝕜 n g x) : iteratedDeriv n (f + g) x = ...?? or pointwise fun x => f x + g x? From LiDigamma:702 the rw worked on their lambda with pointwise mix (1/(m+1) + −(1/(s+m+1)))?? They had heq-rewritten to a Pi.add form: line 688-693: `(fun s => dpsiTermC s m) = (fun s => 1/...) + fun s => -(1/...)` — note the FIRST is a bare function and `+ fun s => ...` — so it's HAdd of functions with a lambda — mixed. iteratedDeriv_add hcf hcg rewrote iteratedDeriv k ((fun s => 1/...) + fun s => ...) — so the lemma's LHS is iteratedDeriv n (f + g) x with Pi.add? or the pointwise lambda? Their form: (fun s => ...) + fun s => ... — that IS Pi.add (HAdd.hAdd of two functions). So iteratedDeriv_add : iteratedDeriv n (f + g) x = iteratedDeriv n f x + iteratedDeriv n g x with Pi.add ✓. My function: fun s => B + seriesFun s — LAMBDA with pointwise add — NOT syntactically (fun _ => B) + seriesFun. The rw [iteratedDeriv_add hcf hcg] would need the goal's function to match (f + g): MISMATCH. Fix: bridge: have : (fun s => momentB hZC + seriesFun s) = (fun _ : ℂ => momentB hZC) + seriesFun := by funext s; rfl?? — Pi.add_apply: ((f+g) s = f s + g s) rfl ✓ so funext s; rfl works? (fun _ => B) + seriesFun applied at s = B + seriesFun s ✓ rfl. So: ```lean have eadd : (fun s => momentB hZC + seriesFun s) = (fun _ : ℂ => momentB hZC) + seriesFun := by funext s rfl rw [eadd, iteratedDeriv_add hcf hcg, ...] ``` ✓ (the Pi.add_apply gotcha again). Similarly iteratedDeriv_const : iteratedDeriv n (fun _ => c) x = if n = 0 then c else 0 — from LiDigamma:703 `rw [iteratedDeriv_const, if_neg (by omega : k ≠ 0)]` ✓. OK — also `sigmaP_one_eq_neg_gFun_zero` and the k=1 branch: after subst hk1' (k := 1): goal sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/((1−1)!:ℂ): rw [Nat.sub_self?? 1−1 = 0: `Nat.sub_self 1 : 1 − 1 = 0`? hmm Nat.sub_self : n − n = 0 ✓; but the term is (1 − 1 : ℕ) — reduces to 0 definitionally — `show sigmaP 1 = -(iteratedDeriv 0 gFun 0)/((0)!:ℂ)`?? Nat subtraction 1−1 computes ✓ — simp [iteratedDeriv_zero]: simplest: `simp only [Nat.sub_self?..., iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one]`— Nat.sub_self needs the literal n − n form: (1 − 1) — simp only [Nat.sub_self] might not fire on numerals (1 − 1 is OfNat−OfNat — simp would compute via Nat.reduceSub? just use `norm_num`?? risky on the goal shape. Alternative: change k−1 to 0 via `show`: sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/...: `conv_rhs => rw [show (1 : ℕ) - 1 = 0 from rfl]`?? 1−1 = 0 is rfl ✓ (Nat sub computes). So: `show sigmaP 1 = -(iteratedDeriv 0 gFun 0) / ((0)! : ℂ)` — is the goal defeq? (1−1) ≡ 0 ✓ defeq: `show` with defeq target ✓ should work. Then rw [iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one] → sigmaP 1 = −gFun 0 ✓ exact sigmaP_one_eq_neg_gFun_zero hZC. Hmm — (0)! vs Nat.factorial 0 — the goal's form: ((1 - 1)! : ℂ) — after show: ((0)!:ℂ) — Nat.factorial 0 = 1: rw [Nat.factorial_zero]?? Nat.factorial_zero : (0)! = 1 ✓ then Nat.cast_one, div_one ✓. Wait — actually there's subtlety: after `subst hk1'`, k is replaced by 1 everywhere: goal sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/(((1−1))!:ℂ). `show sigmaP 1 = -(iteratedDeriv 0 gFun 0) / ((0)! : ℂ)`: defeq check: (1−1:ℕ) ≡ 0 ✓, ((1−1)!:ℂ) ≡ ((0)!:ℂ) ✓ — should pass. Alright — write §4–§6 now. It's a lot; let me write carefully. Also need in §4: hρ0/h1ρ helpers — reuse the ones from seriesFun_one (write once as private-ish lemmas? They're used repeatedly: ρ ≠ 0, 1−ρ ≠ 0, ‖ρ‖ > 0, ‖1−ρ‖ > 0). Make small lemmas: ```lean lemma nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (ρ : ℂ) ≠ 0 := by intro h0 have h2 := ρ.2.2.1 rw [h0, Complex.zero_re] at h2 exact lt_irrefl 0 h2 lemma one_sub_nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (1 : ℂ) - (ρ : ℂ) ≠ 0 := by intro h have h3 : (1 : ℂ) = (ρ : ℂ) := sub_eq_zero.mp h have h4 := ρ.2.2.2 rw [← h3, Complex.one_re] at h4 exact lt_irrefl 1 h4 lemma norm_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) < ‖(ρ : ℂ)‖ := norm_pos_iff.mpr (nontrivialZero_ne_zero ρ) lemma norm_one_sub_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) < ‖(1 : ℂ) - (ρ : ℂ)‖ := norm_pos_iff.mpr (one_sub_nontrivialZero_ne_zero ρ) ``` ✓ (norm_pos_iff : 0 < ‖x‖ ↔ x ≠ 0 ✓). Let me write the whole §4–§6 block now, appending before `end NguyenRH1`. This is big — I'll write it in two Write/Edit operations (§4, then §5+§6).
Patterns confirmed. Writing §4 (summability budget + k=1 rearrangement) now.
tool: Edit
input
{
  "file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiMoments.lean",
  "old_string": "end NguyenRH1",
  "new_string": "/-! ## 4. The summability budget and the k = 1 rearrangement -/\n\nlemma nontrivialZero_ne_zero (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : (\u03c1 : \u2102) \u2260 0 := by\n  intro h0\n  have h2 := \u03c1.2.2.1\n  rw [h0, Complex.zero_re] at h2\n  exact lt_irrefl 0 h2\n\nlemma one_sub_nontrivialZero_ne_zero (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    (1 : \u2102) - (\u03c1 : \u2102) \u2260 0 := by\n  intro h\n  have h3 : (1 : \u2102) = (\u03c1 : \u2102) := sub_eq_zero.mp h\n  have h4 := \u03c1.2.2.2\n  rw [\u2190 h3, Complex.one_re] at h4\n  exact lt_irrefl 1 h4\n\nlemma norm_nontrivialZero_pos (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 :=\n  norm_pos_iff.mpr (nontrivialZero_ne_zero \u03c1)\n\nlemma norm_one_sub_nontrivialZero_pos (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    (0 : \u211d) < \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 :=\n  norm_pos_iff.mpr (one_sub_nontrivialZero_ne_zero \u03c1)\n\n/-- **Master summability**: \u03a3 mult/\u2016\u03c1\u2016\u00b2 over the zeros (the ii\u2032-2\nfinite-ball + (9/4)-comparison skeleton). -/\nlemma summable_mult_div_norm_sq :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => (zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2) := by\n  have hbase : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (9 / 4) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1)))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left (9 / 4)\n  set D : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u211d := fun \u03c1 =>\n    if (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 then\n      (9 / 4) * (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1))\n    else (zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2 with hDdef\n  have hfin : {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | \u00ac ((2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016)}.Finite := by\n    have hcomp : IsCompact (Metric.closedBall (0 : \u2102) 2) := isCompact_closedBall _ _\n    have hzeros : (Metric.closedBall (0 : \u2102) 2) \u2229 {\u03c1 : \u2102 | IsNontrivialZero \u03c1}\n        \u2286 (Metric.closedBall (0 : \u2102) 2) \u2229 riemannZetaZeros := by\n      intro z hz\n      exact \u27e8hz.1, hz.2.1\u27e9\n    have hfin2 := (hcomp.inter_riemannZetaZeros_finite).subset hzeros\n    have himg : (Subtype.val '' {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} |\n        \u00ac ((2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016)}).Finite := by\n      apply hfin2.subset\n      rintro z \u27e8\u03c1, h\u03c1, rfl\u27e9\n      refine \u27e8?_, \u03c1.2\u27e9\n      simp only [Metric.mem_closedBall, dist_zero_right]\n      exact le_of_lt (lt_of_not_ge h\u03c1)\n    exact Set.Finite.of_finite_image himg (Subtype.val_injective.injOn)\n  have hE : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      D \u03c1 - (9 / 4) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1)))) := by\n    apply summable_of_hasFiniteSupport\n    apply hfin.subset\n    intro \u03c1 h\u03c1\n    simp only [Function.mem_support, ne_eq] at h\u03c1\n    by_contra hball\n    apply h\u03c1\n    have hball' : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := not_not.mp hball\n    simp only [D, if_pos hball']\n    ring\n  have hD : Summable D := by\n    have hsum := hbase.add hE\n    have heq : (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n        (9 / 4) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1))) +\n          (D \u03c1 - (9 / 4) * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1))))) = D := by\n      funext \u03c1\n      ring\n    rw [heq] at hsum\n    exact hsum\n  refine Summable.of_norm_bounded hD (fun \u03c1 => ?_)\n  by_cases h\u03c1 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016\n  \u00b7 simp only [D, if_pos h\u03c1]\n    have hz := \u03c1.2\n    have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_lt_of_le (by norm_num) h\u03c1\n    have hgpos : (0 : \u211d) < 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) := by\n      have hnn := Complex.normSq_nonneg (gammaOf (\u03c1 : \u2102))\n      linarith\n    have hcomp : 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) \u2264 9 / 4 * \u2016(\u03c1 : \u2102)\u2016 ^ 2 :=\n      normSq_gammaOf_le_mul_norm_sq (n := 1) le_rfl hz.2.1.le hz.2.2.le (by simpa using h\u03c1)\n    have key : (zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2 \u2264\n        (9 / 4) * (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1)) := by\n      rw [div_le_div_iff\u2080 (pow_pos h\u03c1pos 2) hgpos]\n      calc (zeroMult \u03c1 : \u211d) * (1 + Complex.normSq (gammaOf \u03c1))\n          \u2264 (zeroMult \u03c1 : \u211d) * (9 / 4 * \u2016(\u03c1 : \u2102)\u2016 ^ 2) :=\n            mul_le_mul_of_nonneg_left hcomp (Nat.cast_nonneg _)\n        _ = (9 / 4 * (zeroMult \u03c1 : \u211d)) * \u2016(\u03c1 : \u2102)\u2016 ^ 2 := by ring\n    rw [Real.norm_of_nonneg (by positivity)]\n    exact key\n  \u00b7 simp only [D, if_neg h\u03c1]\n    rw [Real.norm_of_nonneg (by positivity)]\n\n/-- The avoiding-ball lower bound: every zero has \u03b4 \u2264 \u2016\u03c1\u2016. -/\nlemma exists_norm_lower_bound :\n    \u2203 \u03b4 : \u211d, 0 < \u03b4 \u2227 \u2200 \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, \u03b4 \u2264 \u2016(\u03c1 : \u2102)\u2016 := by\n  obtain \u27e8\u03b4, h\u03b4, hball\u27e9 := exists_ball_avoid_nontrivialZeros 0 not_isNontrivialZero_zero\n  refine \u27e8\u03b4, h\u03b4, fun \u03c1 => ?_\u27e9\n  by_contra h\n  exact hball \u03c1 (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge h)\n\n/-- \u03a3 mult\u00b7\u03c1^{\u2212k} is absolutely summable for k \u2265 2. -/\nlemma summable_mult_inv_pow {k : \u2115} (hk : 2 \u2264 k) :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} => (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102)) ^ k) := by\n  obtain \u27e8m, rfl\u27e9 := Nat.exists_eq_add_of_le hk\n  obtain \u27e8\u03b4, h\u03b4, h\u03b4le\u27e9 := exists_norm_lower_bound\n  apply Summable.of_norm_bounded (summable_mult_div_norm_sq.mul_left ((1 / \u03b4) ^ m))\n  intro \u03c1\n  have h\u03c1\u03b4 := h\u03b4le \u03c1\n  have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_lt_of_le h\u03b4 h\u03c1\u03b4\n  rw [norm_mul, norm_pow, norm_div, norm_one, RCLike.norm_natCast, div_pow, one_pow]\n  calc (zeroMult \u03c1 : \u211d) * (1 / \u2016(\u03c1 : \u2102)\u2016 ^ (2 + m))\n      = (zeroMult \u03c1 : \u211d) * ((1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2) * (1 / \u2016(\u03c1 : \u2102)\u2016 ^ m)) := by\n        rw [pow_add, \u2190 one_div_mul_one_div]\n    _ \u2264 (zeroMult \u03c1 : \u211d) * ((1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2) * (1 / \u03b4 ^ m)) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : \u211d) \u2264 1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2)\n        exact one_div_le_one_div_of_le (pow_pos h\u03b4 m) (pow_le_pow_left\u2080 h\u03b4.le h\u03c1\u03b4 m)\n    _ = (1 / \u03b4) ^ m * ((zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2) := by\n        rw [div_pow, one_pow]\n        ring\n\n/-- The conjugation reindex: \u03a3 mult\u00b7\u03c1\u0304^{\u2212k} = \u03a3 mult\u00b7\u03c1^{\u2212k}. -/\nlemma tsum_mult_inv_pow_conj (k : \u2115) :\n    (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102))) ^ k) =\n      \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102)) ^ k := by\n  have h := Equiv.tsum_eq conjZeroEquiv\n    (fun \u03c3 : {\u03c3 : \u2102 // IsNontrivialZero \u03c3} => (zeroMult \u03c3 : \u2102) * (1 / (\u03c3 : \u2102)) ^ k)\n  rw [\u2190 h]\n  apply tsum_congr\n  intro \u03c1\n  have e1 : ((conjZeroEquiv \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2102) = (starRingEnd \u2102) (\u03c1 : \u2102) :=\n    rfl\n  rw [e1, zeroMult_conj \u03c1.2]\n\n/-- The conj-summability transfer. -/\nlemma summable_mult_inv_pow_conj {k : \u2115} (hk : 2 \u2264 k) :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102))) ^ k) := by\n  have e : (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102))) ^ k) =\n      fun \u03c1 => (fun \u03c3 : {\u03c3 : \u2102 // IsNontrivialZero \u03c3} => (zeroMult \u03c3 : \u2102) * (1 / (\u03c3 : \u2102)) ^ k)\n        (conjZeroEquiv \u03c1) := by\n    funext \u03c1\n    have e1 : ((conjZeroEquiv \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2102) = (starRingEnd \u2102) (\u03c1 : \u2102) :=\n      rfl\n    rw [e1, zeroMult_conj \u03c1.2]\n  rw [e]\n  exact (Equiv.summable_iff conjZeroEquiv _).mpr (summable_mult_inv_pow hk)\n\n/-- **The unpaired form** (k \u2265 2): the paired sum collapses to the\nunpaired sum by conj-invariance: sigmaP k = \u00bd(S + S) = S. -/\nlemma sigmaP_eq_unpaired {k : \u2115} (hk : 2 \u2264 k) :\n    sigmaP k = \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}, (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102)) ^ k := by\n  have hs1 := summable_mult_inv_pow hk\n  have hs2 := summable_mult_inv_pow_conj hk\n  have step : \u2211' \u03c1, sigmaSlice k \u03c1 = \u2211' \u03c1, (1 / 2 : \u2102) *\n      ((zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102)) ^ k +\n        (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102))) ^ k) := by\n    apply tsum_congr\n    intro \u03c1\n    rw [sigmaSlice]\n    ring\n  rw [sigmaP, step, tsum_mul_left, tsum_add hs1 hs2, tsum_mult_inv_pow_conj k]\n  ring\n\n/-- The reflected master summability: \u03a3 mult/\u20161\u2212\u03c1\u2016\u00b2 (reindex transfer). -/\nlemma summable_mult_div_norm_sq_one_sub :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u211d) / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) := by\n  have e : (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u211d) / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) =\n      fun \u03c1 => (fun \u03c3 : {\u03c3 : \u2102 // IsNontrivialZero \u03c3} => (zeroMult \u03c3 : \u211d) / \u2016(\u03c3 : \u2102)\u2016 ^ 2)\n        (oneSubZeroEquiv \u03c1) := by\n    funext \u03c1\n    have e1 : ((oneSubZeroEquiv \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2102) = 1 - (\u03c1 : \u2102) := rfl\n    rw [e1, zeroMult_one_sub \u03c1.2.2.1 \u03c1.2.2.2]\n  rw [e]\n  exact (Equiv.summable_iff oneSubZeroEquiv _).mpr summable_mult_div_norm_sq\n\n/-- The AM-GM bound: mult/(\u2016\u03c1\u2016\u20161\u2212\u03c1\u2016) \u2264 \u00bd(mult/\u2016\u03c1\u2016\u00b2 + mult/\u20161\u2212\u03c1\u2016\u00b2). -/\nlemma mult_div_norm_mul_norm_le (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n    (zeroMult \u03c1 : \u211d) / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) \u2264\n      (1 / 2) * ((zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2 +\n        (zeroMult \u03c1 : \u211d) / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) := by\n  have h\u03c10 := norm_nontrivialZero_pos \u03c1\n  have h1\u03c10 := norm_one_sub_nontrivialZero_pos \u03c1\n  have key : 2 / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) \u2264\n      1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2 + 1 / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2 := by\n    have h1 : (0 : \u211d) \u2264 (1 / \u2016(\u03c1 : \u2102)\u2016 - 1 / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) ^ 2 := sq_nonneg _\n    have hexp : (1 / \u2016(\u03c1 : \u2102)\u2016 - 1 / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) ^ 2 =\n        1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2 - 2 / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) +\n          1 / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2 := by\n      rw [sub_sq, div_pow, div_pow, one_pow, one_pow, one_div_mul_one_div, mul_one_div]\n    rw [hexp] at h1\n    linarith\n  calc (zeroMult \u03c1 : \u211d) / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016)\n      = (zeroMult \u03c1 : \u211d) / 2 * (2 / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016)) := by ring\n    _ \u2264 (zeroMult \u03c1 : \u211d) / 2 * (1 / \u2016(\u03c1 : \u2102)\u2016 ^ 2 + 1 / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) :=\n        mul_le_mul_of_nonneg_left key (div_nonneg (Nat.cast_nonneg _) (by norm_num))\n    _ = (1 / 2) * ((zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2 +\n        (zeroMult \u03c1 : \u211d) / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) := by ring\n\n/-- The mixed family \u03a3 mult/(\u03c1(1\u2212\u03c1)) is absolutely summable. -/\nlemma summable_mult_one_div_mul_one_sub :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / ((\u03c1 : \u2102) * (1 - (\u03c1 : \u2102))))) := by\n  have hsum := summable_mult_div_norm_sq.add summable_mult_div_norm_sq_one_sub\n  apply Summable.of_norm_bounded (hsum.mul_left (1 / 2))\n  intro \u03c1\n  rw [norm_mul, norm_div, norm_one, RCLike.norm_natCast, norm_mul]\n  exact mult_div_norm_mul_norm_le \u03c1\n\n/-- The V-family is absolutely summable (1/\u03c1\u0304 \u2212 1/(1\u2212\u03c1) = O(\u2016\u03c1\u2016\u207b\u00b9\u20161\u2212\u03c1\u2016\u207b\u00b9)). -/\nlemma summable_mult_vTerm :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102)) - 1 / (1 - (\u03c1 : \u2102)))) := by\n  have hsum := summable_mult_div_norm_sq.add summable_mult_div_norm_sq_one_sub\n  apply Summable.of_norm_bounded (hsum.mul_left (1 / 2))\n  intro \u03c1\n  have h\u03c10 := norm_nontrivialZero_pos \u03c1\n  have h1\u03c10 := norm_one_sub_nontrivialZero_pos \u03c1\n  have hconj : \u2016((starRingEnd \u2102) (\u03c1 : \u2102))\u2016 = \u2016(\u03c1 : \u2102)\u2016 := by\n    rw [starRingEnd_apply, Complex.norm_conj]\n  have hid : 1 / ((starRingEnd \u2102) (\u03c1 : \u2102)) - 1 / (1 - (\u03c1 : \u2102)) =\n      ((1 : \u2102) - (\u03c1 : \u2102) - (starRingEnd \u2102) (\u03c1 : \u2102)) /\n        (((starRingEnd \u2102) (\u03c1 : \u2102)) * (1 - (\u03c1 : \u2102))) := by\n    field_simp [ne_of_gt h\u03c10, ne_of_gt h1\u03c10]\n    ring\n  have hnum : \u2016(1 : \u2102) - (\u03c1 : \u2102) - (starRingEnd \u2102) (\u03c1 : \u2102)\u2016 \u2264 1 := by\n    have e : (1 : \u2102) - (\u03c1 : \u2102) - (starRingEnd \u2102) (\u03c1 : \u2102) = ((1 - 2 * (\u03c1 : \u2102).re : \u211d) : \u2102) := by\n      rw [sub_sub, Complex.add_conj]\n      push_cast\n      ring\n    rw [e, Complex.norm_real, Real.norm_eq_abs, abs_le]\n    have hre0 := \u03c1.2.2.1\n    have hre1 := \u03c1.2.2.2\n    constructor <;> linarith\n  rw [norm_mul, hid, norm_div, norm_mul, hconj, RCLike.norm_natCast]\n  calc (zeroMult \u03c1 : \u211d) * (\u2016(1 : \u2102) - (\u03c1 : \u2102) - (starRingEnd \u2102) (\u03c1 : \u2102)\u2016 /\n        (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016))\n      \u2264 (zeroMult \u03c1 : \u211d) * (1 / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016)) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        exact div_le_div_of_nonneg_right hnum\n          (mul_pos h\u03c10 h1\u03c10) |>.trans_eq (one_div _) |>.trans_eq' rfl\n    _ = (zeroMult \u03c1 : \u211d) / (\u2016(\u03c1 : \u2102)\u2016 * \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016) := by ring\n    _ \u2264 (1 / 2) * ((zeroMult \u03c1 : \u211d) / \u2016(\u03c1 : \u2102)\u2016 ^ 2 +\n          (zeroMult \u03c1 : \u211d) / \u2016(1 : \u2102) - (\u03c1 : \u2102)\u2016 ^ 2) := mult_div_norm_mul_norm_le \u03c1\n\n/-- **The V-sum vanishes**: the conj reindex gives V = W and the reflect\nreindex gives W = \u2212V. -/\nlemma vTerm_tsum_eq_zero :\n    (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102)) - 1 / (1 - (\u03c1 : \u2102)))) = 0 := by\n  set V := \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102)) - 1 / (1 - (\u03c1 : \u2102))) with hV\n  have h1 : V = \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) - 1 / (1 - (starRingEnd \u2102) (\u03c1 : \u2102))) := by\n    have h := Equiv.tsum_eq conjZeroEquiv (fun \u03c3 : {\u03c3 : \u2102 // IsNontrivialZero \u03c3} =>\n      (zeroMult \u03c3 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c3 : \u2102)) - 1 / (1 - (\u03c3 : \u2102))))\n    rw [hV, \u2190 h]\n    apply tsum_congr\n    intro \u03c1\n    have e1 : ((conjZeroEquiv \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2102) = (starRingEnd \u2102) (\u03c1 : \u2102) :=\n      rfl\n    rw [e1, zeroMult_conj \u03c1.2]\n    congr 1\n    simp [starRingEnd_apply]\n  have h2 : (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) - 1 / (1 - (starRingEnd \u2102) (\u03c1 : \u2102)))) = -V := by\n    have h := Equiv.tsum_eq oneSubZeroEquiv (fun \u03c3 : {\u03c3 : \u2102 // IsNontrivialZero \u03c3} =>\n      (zeroMult \u03c3 : \u2102) * (1 / (\u03c3 : \u2102) - 1 / (1 - (starRingEnd \u2102) (\u03c3 : \u2102))))\n    rw [\u2190 h]\n    rw [hV, \u2190 tsum_neg]\n    apply tsum_congr\n    intro \u03c1\n    have e1 : ((oneSubZeroEquiv \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) : \u2102) = 1 - (\u03c1 : \u2102) := rfl\n    rw [e1, zeroMult_one_sub \u03c1.2.2.1 \u03c1.2.2.2]\n    have e2 : (1 : \u2102) - (starRingEnd \u2102) (1 - (\u03c1 : \u2102)) = (starRingEnd \u2102) (\u03c1 : \u2102) := by\n      rw [map_sub, map_one, sub_sub_cancel]\n    rw [e2]\n    ring\n  have h3 : V = -V := h1.trans h2\n  exact eq_zero_of_neg_eq h3.symm\n\n/-- The first family (1/\u03c1 + 1/\u03c1\u0304) is summable (the sigmaSlice 1 form). -/\nlemma summable_mult_fst :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / ((starRingEnd \u2102) (\u03c1 : \u2102)))) := by\n  apply (sigmaSlice_summable 1 le_rfl).congr\n  intro \u03c1\n  rw [sigmaSlice, pow_one, pow_one]\n  ring\n\n/-- The second family (1/\u03c1 + 1/(1\u2212\u03c1)) is summable (the mixed form). -/\nlemma summable_mult_snd :\n    Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / (1 - (\u03c1 : \u2102)))) := by\n  apply summable_mult_one_div_mul_one_sub.congr\n  intro \u03c1\n  have h\u03c10 := nontrivialZero_ne_zero \u03c1\n  have h1\u03c1 := one_sub_nontrivialZero_ne_zero \u03c1\n  congr 1\n  field_simp [h\u03c10, h1\u03c1]\n  ring\n\n/-- **Twice \u03c3\u2081 is the mixed series**: 2\u00b7sigmaP 1 = \u03a3 mult/(\u03c1(1\u2212\u03c1)).\nThe two pairings differ by V = 0. -/\nlemma two_mul_sigmaP_one :\n    (2 : \u2102) * sigmaP 1 = \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / ((\u03c1 : \u2102) * (1 - (\u03c1 : \u2102)))) := by\n  have h1 : (2 : \u2102) * sigmaP 1 = \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / ((starRingEnd \u2102) (\u03c1 : \u2102))) := by\n    rw [sigmaP, \u2190 tsum_mul_left]\n    apply tsum_congr\n    intro \u03c1\n    rw [sigmaSlice, pow_one, pow_one]\n    ring\n  have h2 : (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / ((\u03c1 : \u2102) * (1 - (\u03c1 : \u2102))))) =\n      \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n        (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / (1 - (\u03c1 : \u2102))) := by\n    apply tsum_congr\n    intro \u03c1\n    have h\u03c10 := nontrivialZero_ne_zero \u03c1\n    have h1\u03c1 := one_sub_nontrivialZero_ne_zero \u03c1\n    congr 1\n    field_simp [h\u03c10, h1\u03c1]\n    ring\n  have h3 : (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / ((starRingEnd \u2102) (\u03c1 : \u2102)))) -\n        (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n          (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / (1 - (\u03c1 : \u2102)))) =\n      \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n        (zeroMult \u03c1 : \u2102) * (1 / ((starRingEnd \u2102) (\u03c1 : \u2102)) - 1 / (1 - (\u03c1 : \u2102))) := by\n    rw [\u2190 tsum_sub summable_mult_fst summable_mult_snd]\n    apply tsum_congr\n    intro \u03c1\n    ring\n  have hFst : (\u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n      (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / ((starRingEnd \u2102) (\u03c1 : \u2102)))) =\n      \u2211' \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1},\n        (zeroMult \u03c1 : \u2102) * (1 / (\u03c1 : \u2102) + 1 / (1 - (\u03c1 : \u2102))) :=\n    sub_eq_zero.mp (by rw [h3]; exact vTerm_tsum_eq_zero)\n  rw [h1, hFst, \u2190 h2]\n\n/-- **(M) at k = 1**: \u03c3\u2081 = \u2212gFun(0). Via 2\u03c3\u2081 = seriesFun(1) =\ngFun(1) \u2212 B = \u22122\u00b7gFun(0). -/\nlemma sigmaP_one_eq_neg_gFun_zero (hZC : ZeroCountProp) : sigmaP 1 = -gFun 0 := by\n  have h2 := two_mul_sigmaP_one\n  rw [\u2190 seriesFun_one] at h2\n  have hg1 := gFun_one hZC\n  have hg0 := gFun_zero hZC\n  have hfe := gFun_one_eq_neg\n  linear_combination (h2 - hg1 + hg0 + hfe) / 2\n\nend NguyenRH1"
}
raw content_json (database row)
[{"type":"thinking","thinking":"The ContDiffAt pattern: AnalyticAt → .contDiffAt. For my zpow term: AnalyticAt (fun t => (t + c)^{−1})? Via analyticAt_const.div (analyticAt_id.add analyticAt_const) hs — for (t+c)^{(−1:ℤ)} — write as 1/(t+c): the zpow_neg_one conversion. So:\n\n```lean\n  have hF1 : ContDiffAt ℂ j (fun t : ℂ => (t + -(ρ : ℂ)) ^ (-1 : ℤ)) s := by\n    have h2 : AnalyticAt ℂ (fun t : ℂ => t + -(ρ : ℂ)) s := analyticAt_id.add analyticAt_const\n    have h3 : AnalyticAt ℂ (fun t : ℂ => 1 / (t + -(ρ : ℂ))) s := analyticAt_const.div h2 hs'\n    have e : (fun t : ℂ => (t + -(ρ : ℂ)) ^ (-1 : ℤ)) = fun t => 1 / (t + -(ρ : ℂ)) := by\n      funext t\n      rw [zpow_neg_one, one_div]\n    rw [e]\n    exact h3.contDiffAt\n```\nHmm — wait, zpow_neg_one : a^{−1} = a⁻¹; one_div : 1/a = a⁻¹: so (t+c)^{−1} = (t+c)⁻¹ = 1/(t+c): rw [zpow_neg_one] gives (t+c)⁻¹; goal RHS 1/(t+c): one_div says 1/(t+c) = (t+c)⁻¹: after rw [zpow_neg_one] the goal is (t+c)⁻¹ = 1/(t+c) — close by rw [one_div] (turns RHS into ⁻¹ ✓) or rfl (1/a and a⁻¹ are defeq — HDiv.hDiv 1 a vs Inv.inv a — not syntactically equal but defeq via one_div? they're NOT defeq — 1/a = 1 * a⁻¹? no: instDiv: a/b = a * b⁻¹: so 1/a = 1 * a⁻¹ — defeq to a⁻¹ by one_mul ✓ rfl-check might work; the rw [zpow_neg_one, one_div] makes both sides a⁻¹ ✓ safe).\n\nNow §5 main lemma — the M-test on ball(0, δ/2). The SummableLocallyUniformlyOn_of_locally_bounded signature from LiDigamma:720-722: \n```lean\n  apply SummableLocallyUniformlyOn_of_locally_bounded dpsiDomain_isOpen\n  intro K hK hKc\n  refine ⟨bound, summable_bound, fun m s hs => ?_⟩\n```\nwhere hK : K ⊆ domain, hKc : IsCompact K, hs : s ∈ K. So it wants: for every compact K ⊆ u, a summable bound valid on K. My domain u := Metric.ball 0 (δ/2); K ⊆ u ⟹ ∀ s ∈ K, ‖s‖ < δ/2.\n\nThe bound family for the j-th derivative family: u_j ρ := mult·j!·2^{j+1}·δ^{1−j}·... — wait it must be a REAL summable family: u_j ρ := (j ! : ℝ) * 2^{j+1} * δ^{1-j}?? δ^{1−j} with j ≥ 1 — δ < 1 maybe; δ^{1−j} = δ^{-(j−1)}: as (1/δ)^{j−1}. Let me define: u ρ := ((j ! : ℝ) * 2 ^ (j + 1) * (1 / δ) ^ (j - 1)) * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2)? — from my earlier estimate: term ≤ mult·j!·2^{j+1}·‖ρ‖^{−2}·δ^{1−j} where δ^{1−j} = (1/δ)^{j−1} ✓ (j ≥ 1). So C_j := j!·2^{j+1}·(1/δ)^{j−1}, u ρ := C_j·(mult/‖ρ‖²) — summable via summable_mult_div_norm_sq.mul_left ✓.\n\nPer-term bound for s ∈ K:\n‖iteratedDerivWithin j (seriesTerm · ρ) u s‖ = ‖iteratedDeriv j (seriesTerm · ρ) s‖ (Within_of_isOpen isOpen_ball (hK hs)) = ‖mult·(−1)^j j! (s−ρ)^{−j−1}‖ = mult·j!·‖s−ρ‖^{−(j+1)} [norm computations] ≤ mult·j!·2^{j+1}·‖ρ‖^{−(j+1)} [‖s−ρ‖ ≥ ‖ρ‖/2] ≤ mult·j!·2^{j+1}·‖ρ‖^{−2}·(1/δ)^{j−1} [‖ρ‖^{−(j−1)} ≤ (1/δ)^{j−1}... wait: ‖ρ‖^{−(j+1)} = ‖ρ‖^{−2}·‖ρ‖^{−(j−1)} ≤ ‖ρ‖^{−2}·δ^{−(j−1)} ✓ since ‖ρ‖ ≥ δ].\n\nNorm of the closed form: ‖mult·(−1)^j·j!·(s−ρ)^{−j−1}‖ = mult·1·j!·‖s−ρ‖^{−(j+1)}: norm_mul chain: ‖(−1:ℂ)^j‖ = 1 (the LiDigamma:736-738 hsign pattern ✓); RCLike.norm_natCast for j!; norm_zpow + the exponent rewrite (−(j:ℤ)−1 = −((j+1:ℕ):ℤ), zpow_neg, zpow_natCast) → ‖s−ρ‖^{j+1}⁻¹ (the LiDigamma:740 pattern ✓ exactly clone).\n\nThe steps:\n```lean\nlemma seriesTerm_deriv_summableLocallyUniformlyOn (j : ℕ) (hj : 1 ≤ j)\n    {δ : ℝ} (hδ : 0 < δ) (hball : ∀ ρ : {ρ : ℂ // IsNontrivialZero ρ}, (ρ : ℂ) ∉ Metric.ball 0 δ) :\n    SummableLocallyUniformlyOn\n      (fun ρ => iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2)))\n      (Metric.ball 0 (δ / 2)) := by\n  apply SummableLocallyUniformlyOn_of_locally_bounded isOpen_ball\n  intro K hK hKc\n  set C : ℝ := (j ! : ℝ) * 2 ^ (j + 1) * (1 / δ) ^ (j - 1) with hC\n  refine ⟨fun ρ => C * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2),\n    summable_mult_div_norm_sq.mul_left C, fun ρ s hs => ?_⟩\n  have hsu : s ∈ Metric.ball (0 : ℂ) (δ / 2) := hK hs\n  have hsnorm : ‖s‖ < δ / 2 := by\n    rw [Metric.mem_ball, dist_zero_right] at hsu\n    exact hsu\n  have hρδ : δ ≤ ‖(ρ : ℂ)‖ := by\n    by_contra h\n    exact hball ρ (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge h)\n  have hρpos : (0 : ℝ) < ‖(ρ : ℂ)‖ := lt_of_lt_of_le hδ hρδ\n  have hsρ : s - (ρ : ℂ) ≠ 0 := by\n    intro h\n    rw [h] at hsnorm?? hmm: s = ρ ⟹ ‖ρ‖ < δ/2 contradicts δ ≤ ‖ρ‖:\n    have : (ρ:ℂ) = s := sub_eq_zero.mp h ▸ ... \n    -- s − ρ = 0 ⟹ s = ρ: sub_eq_zero.mp h : s = ρ\n    rw [sub_eq_zero.mp h] at hsnorm\n    linarith [hρδ, hsnorm]\n  rw [iteratedDerivWithin_of_isOpen isOpen_ball hsu, iteratedDeriv_seriesTerm j hj ρ hsρ]\n  -- norm of the closed form\n  rw [norm_mul, norm_mul]\n  have hsign : ‖(-1 : ℂ) ^ j‖ = 1 := by\n    have h7 : ‖((-1 : ℂ))‖ = 1 := by rw [norm_neg, norm_one]\n    rw [norm_pow, h7, one_pow]\n  rw [RCLike.norm_natCast, hsign, one_mul, norm_zpow]\n  rw [show (-(j : ℤ) - 1 : ℤ) = -(((j + 1 : ℕ) : ℤ)) by push_cast; ring, zpow_neg, zpow_natCast]\n  -- goal: mult * (j! * (‖s−ρ‖^{j+1})⁻¹) ≤ C * (mult/‖ρ‖²)\n  have hnormsρ : ‖(ρ : ℂ)‖ / 2 ≤ ‖s - (ρ : ℂ)‖ := by\n    have h1 : ‖(ρ : ℂ)‖ - ‖s‖ ≤ ‖s - (ρ : ℂ)‖ := by\n      have := norm_sub_norm_le (ρ : ℂ) s  -- ‖ρ‖ − ‖s‖ ≤ ‖ρ − s‖\n      rw [norm_sub_rev] at this?? — norm_sub_rev : ‖a − b‖ = ‖b − a‖\n      ...\n    have h2 : ‖(ρ : ℂ)‖ / 2 ≤ ‖(ρ : ℂ)‖ - ‖s‖ := by\n      have : ‖s‖ ≤ ‖(ρ : ℂ)‖ / 2 := by linarith [hsnorm, hρδ]\n      linarith [norm_nonneg s]\n    exact h2.trans h1\n  -- assemble\n  have hfact : (1 : ℝ) ≤ j ! := Nat.one_le_cast.mpr (Nat.one_le_iff_ne_zero.mpr (Nat.factorial_ne_zero j))?? \n    -- for absorbing: mult·j!·(‖s−ρ‖^{j+1})⁻¹ ≤ mult·j!·(‖ρ‖/2)^{j+1}⁻¹·...\n  calc (zeroMult ρ : ℝ) * ((j ! : ℝ) * (‖s - (ρ : ℂ)‖ ^ (j + 1))⁻¹)\n      ≤ (zeroMult ρ : ℝ) * ((j ! : ℝ) * ((‖(ρ : ℂ)‖ / 2) ^ (j + 1))⁻¹) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        apply mul_le_mul_of_nonneg_left _ (by positivity : (0:ℝ) ≤ (j ! : ℝ))\n        exact inv_le_inv₀ (pow_pos (by positivity... ) ...) hmm inv direction: ‖s−ρ‖ ≥ ‖ρ‖/2 ⟹ (‖s−ρ‖^{j+1})⁻¹ ≤ ((‖ρ‖/2)^{j+1})⁻¹: `inv_le_inv₀ (ha : 0 < a) (hab : a ≤ b) : b⁻¹ ≤ a⁻¹`? signature: inv_le_inv₀ : 0 < a → a ≤ b → b⁻¹ ≤ a⁻¹ ✓ I think. With a = (‖ρ‖/2)^{j+1}, b = ‖s−ρ‖^{j+1}: pow_le_pow_left₀ (by linarith : 0 ≤ ‖ρ‖/2) hnormsρ (j+1) : a ≤ b ✓; pow_pos (by linarith : 0 < ‖ρ‖/2) : 0 < a ✓.\n    _ = (zeroMult ρ : ℝ) * ((j ! : ℝ) * (2 / ‖(ρ : ℂ)‖) ^ (j + 1)) := by\n        rw [div_pow, inv_div??] — ((‖ρ‖/2)^{j+1})⁻¹ = (2/‖ρ‖)^{j+1}: inv_div: (a/b)⁻¹ = b/a: ((‖ρ‖/2)^{j+1})⁻¹ = ((‖ρ‖/2)⁻¹)^{j+1} (inv_pow) = (2/‖ρ‖)^{j+1} (inv_div : (a/b)⁻¹ = b/a ✓). rw [inv_pow, inv_div]\n    _ ≤ (zeroMult ρ : ℝ) * ((j ! : ℝ) * ((2 ^ (j + 1)) * ((1 / δ) ^ (j - 1)) * (1 / ‖(ρ : ℂ)‖ ^ 2))) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        apply mul_le_mul_of_nonneg_left _ (by positivity)\n        -- (2/‖ρ‖)^{j+1} = 2^{j+1}/‖ρ‖^{j+1} = 2^{j+1}·(1/‖ρ‖²)·(1/‖ρ‖^{j−1}) ≤ 2^{j+1}·(1/‖ρ‖²)·(1/δ)^{j−1}\n        rw [div_pow]\n        rw [show (2 : ℝ) ^ (j + 1) / ‖(ρ : ℂ)‖ ^ (j + 1) =\n            2 ^ (j + 1) * (1 / ‖(ρ : ℂ)‖ ^ 2) * (1 / ‖(ρ : ℂ)‖ ^ (j - 1)) by\n          rw [one_div_mul_one_div?? ...] — algebra: 1/‖ρ‖^{j+1} = (1/‖ρ‖²)(1/‖ρ‖^{j−1}): pow: ‖ρ‖^{j+1} = ‖ρ‖²·‖ρ‖^{j−1}: pow: j+1 = 2+(j−1) (j ≥ 1: Nat... careful: j − 1 for j : ℕ, j ≥ 1: j − 1 + 2 = j + 1 ✓ omega. rw [← pow_add]; congr: omega]\n        apply mul_le_mul_of_nonneg_left _ (by positivity : (0:ℝ) ≤ 2^(j+1))\n        apply mul_le_mul_of_nonneg_left _ (by positivity)\n        exact one_div_le_one_div_of_le (pow_pos hδ (j-1)) (pow_le_pow_left₀ hδ.le hρδ (j-1))\n    _ = C * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2) := by\n        rw [hC]\n        ring\n```\nThe last ring: C·(mult/‖ρ‖²) = j!·2^{j+1}·(1/δ)^{j−1}·mult/‖ρ‖² vs mult·(j!·(2^{j+1}·((1/δ)^{j−1}·(1/‖ρ‖²)))) — ring ✓ (division forms: ·(1/‖ρ‖²) vs /‖ρ‖² — ring handles).\n\npow: j+1 = 2+(j−1): `have : j + 1 = 2 + (j - 1) := by omega` then rw [← pow_add, this]. ✓\n\nWait — one_detail: the goal after the Within/global/zpow rewrites: the term form. iteratedDeriv_seriesTerm gives: mult·((−1)^j·j!·(s−ρ)^{−j−1}) — after norm_mul ×2: ‖mult‖·‖(−1)^j‖·‖j!‖·‖(s−ρ)^{−j−1}‖ — hmm the bracket is ((−1)^j * j! * (s−ρ)^z): norm_mul twice: ‖(−1)^j‖·‖j!·(s−ρ)^z‖ → then need another norm_mul for j!·(s−ρ)^z. LiDigamma did: rw [norm_mul, norm_mul] on mult·((−1)^k·k!·z) — the outer split: mult · (X) and X = (−1)^k · (k! · z)?: their closed form: -((-1))^k * k! * z parses as ((−(−1)^k)·k!)·z: norm_mul, norm_mul: ‖−(−1)^k‖·‖k!·z‖ → ‖−(−1)^k‖·(‖k!‖·‖z‖)?? norm_mul on ‖k!·z‖... they did rw [norm_mul, norm_mul] then hsign rw then one_mul, RCLike.norm_natCast, norm_zpow — sequence at 735-739: `rw [norm_mul, norm_mul]; rw [hsign, one_mul, RCLike.norm_natCast, norm_zpow]` — so after two norm_mul: ‖−(−1)^k‖ · (‖↑k!‖ · ‖z‖)?? — norm_mul twice: ‖a·b·c‖ = ‖a‖·‖b·c‖ = ‖a‖·(‖b‖·‖c‖) ✓. Their a = −(−1)^k (hsign: ‖−(−1)^k‖ = 1), b = k! (natCast), c = z. Mine: a = (−1)^j (hsign), b = j!, c = z — and the OUTER mult·(closed form): seriesTerm's value mult·(X): one more norm_mul: total three. My plan wrote rw [norm_mul, norm_mul] — need one more for the outer mult: order: mult·((−1)^j·j!·z): norm_mul → ‖mult‖·‖(−1)^j·j!·z‖; norm_mul → ‖mult‖·(‖(−1)^j‖·‖j!·z‖); norm_mul → ‖mult‖·(‖(−1)^j‖·(‖j!‖·‖z‖)). So THREE norm_mul. Then RCLike.norm_natCast on ‖(zeroMult ρ:ℂ)‖ = mult (ℝ) ✓, hsign, one_mul, RCLike.norm_natCast on j!, norm_zpow on z. Write rw [norm_mul, norm_mul, norm_mul, RCLike.norm_natCast, hsign, one_mul, RCLike.norm_natCast, norm_zpow] — careful RCLike.norm_natCast might rewrite both casts at once (rw rewrites first match only? rw rewrites ALL matches of the first unifier — banked gotcha \"rw first-unifier-only\"... RCLike.norm_natCast : ‖(↑n)‖ = ↑n — two instances (zeroMult and j!): rw rewrites all occurrences matching the first found pattern... first unifier: probably zeroMult; need it twice for j!. Use simp only [RCLike.norm_natCast] to rewrite all ✓ or rw twice.\n\nThen the show-exponent rewrite + zpow_neg + zpow_natCast (clone LiDigamma:740) → c-part becomes (‖s−ρ‖^{j+1})⁻¹. Goal: mult·(1·(j!·(‖s−ρ‖^{j+1})⁻¹)) ≤ C·(mult/‖ρ‖²) — after one_mul. Then the calc. In the calc I assumed the goal form mult·(j!·(‖s−ρ‖^{j+1})⁻¹) ≤ ... — write the calc's first line to match (with 1· removed — include `one_mul` to clean).\n\nnorm_sub_norm_le: ‖a‖ − ‖b‖ ≤ ‖a − b‖: `norm_sub_norm_le (a b) : ‖a‖ - ‖b‖ ≤ ‖a - b‖` ✓ exists. With norm_sub_rev : ‖a − b‖ = ‖b − a‖ ✓. So ‖ρ‖ − ‖s‖ ≤ ‖ρ − s‖ = ‖s − ρ‖ ✓.\n\ninv_le_inv₀ signature: `inv_le_inv₀ (ha : 0 < a) (h : a ≤ b) : b⁻¹ ≤ a⁻¹` — hmm in current Mathlib: inv_le_inv₀ : a ≤ b → 0 < a → b⁻¹ ≤ a⁻¹?? arg order uncertain. Alternative: `one_div_le_one_div_of_le (ha : 0 < a) (h : a ≤ b) : 1/b ≤ 1/a` ✓ (session-033 confirmed \"one_div_le_one_div_of_le takes the small side's positivity first\" ✓). Use that with 1/x forms instead of ⁻¹ — the zpow_neg gives (‖s−ρ‖^{j+1})⁻¹ — convert ⁻¹ to 1/x: `inv_eq_one_div : a⁻¹ = 1/a` ✓. rw [inv_eq_one_div] then one_div_le_one_div_of_le.\n\nHmm wait — actually simpler: skip the inv form: from the calc, rewrite ((‖ρ‖/2)^{j+1})⁻¹ → 1/(‖ρ‖/2)^{j+1}, use one_div_le_one_div_of_le directly. And ((‖ρ‖/2)^{j+1}) → (2/‖ρ‖)^{j+1}: one_div_div: 1/(a/b) = b/a: (‖ρ‖/2)^{j+1} = ‖ρ‖^{j+1}/2^{j+1}: 1/(that) = 2^{j+1}/‖ρ‖^{j+1} — maybe cleaner to go through: (2/‖ρ‖)^{j+1} = 2^{j+1}/‖ρ‖^{j+1} (div_pow) ✓ as planned.\n\nOK. Then the main termwise lemma:\n\n```lean\nlemma iteratedDeriv_seriesFun_zero (j : ℕ) (hj : 1 ≤ j) :\n    iteratedDeriv j seriesFun 0 =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) *\n        ((-1 : ℂ) ^ j * (j ! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(j : ℤ) - 1)) := by\n  obtain ⟨δ, hδ, hball⟩ := exists_ball_avoid_nontrivialZeros 0 not_isNontrivialZero_zero\n  have hmem : (0 : ℂ) ∈ Metric.ball (0 : ℂ) (δ / 2) := by\n    rw [Metric.mem_ball, dist_zero_right, norm_zero]\n    exact half_pos hδ\n  have hmain : iteratedDerivWithin j seriesFun (Metric.ball 0 (δ / 2)) 0 =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n        iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2)) 0 := by\n    rw [iteratedDerivWithin_tsum j isOpen_ball hmem\n      (fun s _ => seriesSummable s)\n      (fun j' hj'1 _ => seriesTerm_deriv_summableLocallyUniformlyOn j' hj'1 hδ hball)\n      ?_]\n    · intro ρ j' r hjm hr\n      -- differentiability side condition, clone LiDigamma:759-785\n      rcases Nat.eq_zero_or_pos j' with hj0 | hj0\n      · subst hj0\n        rw [iteratedDerivWithin_zero]\n        -- seriesTerm differentiable in s at r (r − ρ ≠ 0 since r ∈ ball)\n        have hrρ : r - (ρ : ℂ) ≠ 0 := by\n          intro h\n          have hrn : ‖r‖ < δ / 2 := by\n            rw [Metric.mem_ball, dist_zero_right] at hr\n            exact hr\n          have hρδ : δ ≤ ‖(ρ : ℂ)‖ := by\n            by_contra hc\n            exact hball ρ (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge hc)\n          rw [sub_eq_zero.mp h] at hrn\n          linarith\n        rw [seriesTerm]\n        apply DifferentiableAt.const_mul\n        apply DifferentiableAt.add\n        · exact (differentiableAt_const (1 : ℂ)).div (differentiableAt_id.sub differentiableAt_const) hrρ\n        · exact differentiableAt_const _\n      · have h5 : (fun t => iteratedDerivWithin j' (fun z => seriesTerm z ρ) (Metric.ball 0 (δ/2)) t) =ᶠ[𝓝 r]\n            fun t => (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ j' * (j' ! : ℂ) * (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1)) := by\n          filter_upwards [isOpen_ball.mem_nhds hr] with t ht\n          have htρ : t - (ρ : ℂ) ≠ 0 := ...\n          rw [iteratedDerivWithin_of_isOpen isOpen_ball ht, iteratedDeriv_seriesTerm j' hj0 ρ htρ]\n        apply h5.differentiableAt_iff.mpr\n        -- the closed form is differentiable (zpow, r − ρ ≠ 0)\n        have hrρ : r - (ρ : ℂ) ≠ 0 := ...\n        apply DifferentiableAt.const_mul\n        apply DifferentiableAt.const_mul\n        -- (t−ρ)^{−j'−1} differentiable\n        have h4 : DifferentiableAt ℂ (fun t : ℂ => t - (ρ : ℂ)) r :=\n          differentiableAt_id.sub differentiableAt_const\n        exact ((hasDerivAt_zpow (-(j' : ℤ) - 1) (r - (ρ : ℂ)) (Or.inl hrρ)).differentiableAt).comp r h4\n        -- ↑ but the ∘ defeq bridge needed: ((fun x => x^z) ∘ fun t => t−ρ) = fun t => (t−ρ)^z := rfl\n  -- convert Within → global\n  rw [← iteratedDerivWithin_of_isOpen isOpen_ball hmem]\n  rw [hmain]\n  apply tsum_congr\n  intro ρ\n  have h0ρ : (0 : ℂ) - (ρ : ℂ) ≠ 0 := by\n    intro h\n    have : (ρ:ℂ) = 0 := by have := congrArg Neg.neg h; simpa using this\n    have h2 := ρ.2.2.1\n    rw [this, Complex.zero_re] at h2\n    exact lt_irrefl 0 h2\n  rw [iteratedDerivWithin_of_isOpen isOpen_ball hmem, iteratedDeriv_seriesTerm j hj ρ h0ρ]\n```\nNotes:\n- iteratedDerivWithin_tsum's conclusion: iteratedDerivWithin k (∑' f) u x = ∑' n, iteratedDerivWithin k (f n) u x — with seriesFun = ∑' seriesTerm ✓ — rw [iteratedDerivWithin_tsum ...] rewrites the LHS; but the hypothesis-side goals: the pattern from LiDigamma:752-755: `rw [iteratedDerivWithin_tsum k dpsiDomain_isOpen dpsiDomain_half (fun s hs => ...) (fun j hj1 _ => ...) ?_]` — the last ?_ is the differentiability condition, discharged after with the two bullets (· apply tsum_congr ... wait no — in LiDigamma, after the rw there were TWO goals: the main (tsum_congr per-term) and ?_ (differentiability). They structured:\n```lean\n  rw [iteratedDerivWithin_tsum k ... ?_]\n  · apply tsum_congr\n    intro m\n    exact iteratedDerivWithin_dpsiTermC ...\n  · intro n j r hjm hr\n    ...\n```\nSo the rw generates: goal1 = the resulting equation (needs tsum_congr), goal2 = the differentiability side condition. I'll mirror: rw [...]; · tsum_congr per-term (within→global→seriesTerm closed form); · the differentiability intro.\n\nHmm wait — in my hmain I wrote the equation directly as the target with the per-term Within forms — so after rw [iteratedDerivWithin_tsum ...], the goal becomes ∑' ρ, iteratedDerivWithin j (seriesTerm · ρ) u 0 = ∑' ρ, iteratedDerivWithin j (seriesTerm · ρ) u 0 (rfl) — no. Let me restructure hmain to produce EXACTLY the tsum-lemma's output, then do the per-term conversion separately:\n\n```lean\n  have hmain : iteratedDerivWithin j seriesFun (Metric.ball 0 (δ / 2)) 0 =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n        iteratedDerivWithin j (fun s => seriesTerm s ρ) (Metric.ball 0 (δ / 2)) 0 := by\n    rw [seriesFun]\n    rw [iteratedDerivWithin_tsum j isOpen_ball hmem (fun s _ => seriesSummable s)\n      (fun j' hj'1 _ => seriesTerm_deriv_summableLocallyUniformlyOn j' hj'1 hδ hball) ?_]\n    · intro ρ j' r hjm hr\n      (differentiability side condition)\n```\nWait — does the rw [iteratedDerivWithin_tsum] leave the tsum_congr goal? In LiDigamma the target was the VALUE equation (they needed the per-term closed form at 1/2, hence the first bullet). For hmain, the target is EXACTLY the tsum-lemma's conclusion shape — after rw, goal closes by rfl?? No — rw [iteratedDerivWithin_tsum ...] rewrites instances of the LHS pattern (iteratedDerivWithin k (∑' f) u x) in the goal — the goal IS that equation; the rw rewrites the LHS to the RHS form, leaving `∑' ... = ∑' ...` rfl — closed automatically by rw ✓ plus the side-condition goal remains. But the ?_ placeholder in the rw args: supplying ?_ as the last arg means the side condition becomes a NEW goal instead of being unified — with two goals: (1) rfl-closed main? Actually with ?_ in the rw, after rewriting the main goal is closed; the ?_ goal is the side condition. Order of goals: the ?_ comes as a new goal. So:\n```lean\n    rw [iteratedDerivWithin_tsum j isOpen_ball hmem ... ?_]\n    intro ρ j' r hjm hr\n    (discharge)\n```\nBut careful — if the main goal closes by rfl during rw, the remaining goal is the side condition ✓. Hmm — but does `seriesFun` need unfolding first? seriesFun 0 vs ∑' seriesTerm: the tsum-lemma's LHS pattern: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) — goal's function is seriesFun (a def) — the pattern fun s => ∑' ρ, seriesTerm s ρ vs seriesFun — rw needs syntactic match: unfold seriesFun first: rw [seriesFun] — but seriesFun is a def — rw [seriesFun] (the Fexpr-pattern ✓ works). BUT it rewrites seriesFun EVERYWHERE including inside hmem?? no — hmem is a hypothesis, rw [seriesFun] only at goal ✓. Goal after: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) u 0 = ... ✓ then the tsum-rw matches.\n\nWait — actually does iteratedDerivWithin_tsum's LHS have the form with the LAMBDA (fun s => ∑' n, f n s)? The lemma: iteratedDerivWithin k (fun x => ∑' n, f n x) u x = ∑' n, iteratedDerivWithin k (f n) u x presumably. After rw [seriesFun], goal LHS: iteratedDerivWithin j (fun s => ∑' ρ, seriesTerm s ρ) (ball) 0 ✓ matches.\n\nThen final: \n```lean\n  rw [← iteratedDerivWithin_of_isOpen isOpen_ball hmem, hmain]\n  apply tsum_congr\n  intro ρ\n  rw [iteratedDerivWithin_of_isOpen isOpen_ball hmem, iteratedDeriv_seriesTerm j hj ρ h0ρ]\n```\n✓ (with h0ρ proved before).\n\nSide-condition (j' = 0 case): after rw [iteratedDerivWithin_zero]: goal DifferentiableAt ℂ (fun s => seriesTerm s ρ) r — rw [seriesTerm]: function fun s => mult·(1/(s−ρ) + 1/ρ): DifferentiableAt.const_mul _ (hr-diff): DifferentiableAt (fun s => 1/(s−ρ) + 1/ρ) r: .add of: (differentiableAt_const 1).div (differentiableAt_id.sub differentiableAt_const) hrρ + differentiableAt_const ✓. Then const_mul needs DifferentiableAt of the inner: `DifferentiableAt.const_mul (hg : DifferentiableAt g x) (c) : DifferentiableAt (fun x => c * g x) x`? signature: DifferentiableAt.const_mul (hd : DifferentiableAt 𝕜 f x) (c : 𝔸')?? Hmm — for ℂ: `DifferentiableAt.const_mul (hf : DifferentiableAt 𝕜 f x) (c : 𝕜) : DifferentiableAt 𝕜 (fun x => c * f x) x`? arg order — from LiDigamma:785: `exact (differentiableAt_const _).mul h6` — they used .mul with the const on the LEFT: (differentiableAt_const _).mul h6 : DifferentiableAt (fun r => const · h6-fun) ✓ — const_mul via mul with const first ✓. My term mult·(X): (differentiableAt_const (zeroMult ρ : ℂ)).mul hX ✓ same pattern.\n\nFor the j' ≥ 1 case: h5 eventuallyEq — the closed-form differentiability: const_mul·const_mul·zpow-comp: ((hasDerivAt_zpow ...).differentiableAt).comp r h4 — produces DifferentiableAt ((fun x => x^z) ∘ (fun t => t−ρ)) r — vs needed (fun t => (t−ρ)^z): the rfl bridge (LiDigamma:781-783 pattern ✓):\n```lean\n        have h6 : DifferentiableAt ℂ (fun t : ℂ => (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1)) r := by\n          have h7 := ((hasDerivAt_zpow (-(j' : ℤ) - 1) (r - (ρ : ℂ)) (Or.inl hrρ)).differentiableAt).comp r h4\n          have heq : ((fun x : ℂ => x ^ (-(j' : ℤ) - 1)) ∘ fun t : ℂ => t - (ρ : ℂ)) =\n              fun t : ℂ => (t - (ρ : ℂ)) ^ (-(j' : ℤ) - 1) := rfl\n          rw [heq] at h7\n          exact h7\n        exact (differentiableAt_const _).mul ((differentiableAt_const _).mul h6)\n```\n✓ clone.\n\n- htρ/hrρ for r, t ∈ ball: ‖t‖ < δ/2, ‖ρ‖ ≥ δ ⟹ t − ρ ≠ 0 (as shown: if t = ρ then ‖ρ‖ < δ/2 < δ ✗).\n\n§6 capstone:\n\n```lean\n/-! ## 6. The capstone -/\n\n/-- gFun agrees with B + seriesFun on a full neighbourhood of 0. -/\nlemma gFun_eventuallyEq_zero (hZC : ZeroCountProp) :\n    gFun =ᶠ[𝓝 0] (fun s => momentB hZC + seriesFun s) := by\n  -- from the punctured version + the value at 0\n  have hp : ∀ᶠ s in 𝓝[≠] (0 : ℂ), gFun s = momentB hZC + seriesFun s := by\n    filter_upwards [good_eventually_zero, self_mem_nhdsWithin] with s ⟨hζ, h1, hn⟩ h0\n    exact gFun_eq_momentB hZC hζ h0 h1 hn\n  -- upgrade: 𝓝 0 = 𝓝[≠] 0 ⊔ pure 0\n  ...\n```\nFor the upgrade — look for the lemma: `Filter.EventuallyEq.insert`? Hmm. There's: `nhdsWithin_union`? The clean one: `Filter.EventuallyEq.of_nhdsWithin_punctured`? Let me think of the standard: (𝓝[≠] a) and f a = g a gives f =ᶠ[𝓝 a] g: prove via: 𝓝 a = 𝓝[{a}ᶜ] a ⊔ 𝓝[{a}] a?? Hmm. Standard lemma: `eventually_nhdsWithin_iff`? The insert fact: {a} ∈ 𝓝 a... Write manually:\n```lean\n  rw [Filter.EventuallyEq] at hp ⊢\n  rw [eventually_nhds_iff]  -- ?? does eventually_nhds_iff exist: (∀ᶠ x in 𝓝 a, p x) ↔ p a ∨ ∀ᶠ x in 𝓝[≠] a, p x — hmm name...\n```\nMathlib: `eventually_nhdsWithin_iff` is about s. For nhds: there IS `Filter.eventually_nhds_iff_eventually_nhdsWithin`? not sure. There's `eventually_nhds_iff` : (∀ᶠ x in 𝓝 a, p x) ↔ ∀ ε > 0... no that's metric. \n\nRobust manual: use Metric.eventually_nhds_iff_ball both ways:\n```lean\n  rw [Metric.eventually_nhdsWithin_iff_ball?? no...\n```\nAlternative — the punctured-to-full upgrade: \n```lean\n  have h0 : gFun 0 = momentB hZC + seriesFun 0 := by\n    rw [gFun_zero hZC, seriesFun_zero, add_zero]\n  -- ∀ᶠ s in 𝓝 0: use that 𝓝[≠] 0 ≤ 𝓝 0 and {0}ᶜ ∪ {0}:\n  filter_upwards [hp.filter_mono (nhdsWithin_le_nhds?? wrong direction]...\n```\nHmm: hp : ∀ᶠ s in 𝓝[≠] 0, P s. Want ∀ᶠ s in 𝓝 0, P' s where P' accounts for s = 0. Trick: ∀ᶠ s in 𝓝 0, s ∈ {0}ᶜ → P s?? Use: eventually_nhdsWithin_iff : (∀ᶠ x in 𝓝[s] a, p x) ↔ ∀ᶠ x in 𝓝 a, x ∈ s → p x: hp ↔ ∀ᶠ s in 𝓝 0, s ≠ 0 → P s. Then filter_upwards [that] with s hs: cases s = 0: if s = 0 use h0; else hs h. So:\n```lean\n  rw [eventually_nhdsWithin_iff] at hp\n  filter_upwards [hp] with s hs\n  by_cases h : s = 0\n  · subst h\n    exact h0\n  · exact hs h\n```\neventually_nhdsWithin_iff : (∀ᶠ x in 𝓝[s] a, p x) ↔ ∀ᶠ x in 𝓝 a, x ∈ s → p x ✓ exists (I'm fairly confident). With s = {0}ᶜ: 𝓝[{0}ᶜ] 0 = 𝓝[≠] 0 — is hp stated with 𝓝[≠]? 𝓝[≠] a is notation for 𝓝[{a}ᶜ] a ✓ same. ✓\n\nThen:\n```lean\ntheorem sigmaP_eq_neg_iteratedDeriv_gFun_div (hZC : ZeroCountProp) {k : ℕ} (hk : 1 ≤ k) :\n    sigmaP k = -(iteratedDeriv (k - 1) gFun 0) / ((k - 1)! : ℂ) := by\n  rcases Nat.lt_or_ge k 2 with hk1 | hk2\n  · have hk1' : k = 1 := by omega\n    subst hk1'\n    rw [Nat.sub_self, iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one]\n    exact sigmaP_one_eq_neg_gFun_zero hZC\n  · -- k ≥ 2\n    have hcong := iteratedDeriv_congr_of_eventuallyEq (gFun_eventuallyEq_zero hZC) (k - 1)\n    rw [hcong]\n    -- iteratedDeriv (k−1) (B + seriesFun) 0 = iteratedDeriv (k−1) seriesFun 0\n    have hcf : ContDiffAt ℂ (k - 1 : ℕ∞)?? ...\n```\nHmm — iteratedDeriv_add's ContDiffAt requirement: `iteratedDeriv_add (hf : ContDiffAt 𝕜 n f x) (hg : ContDiffAt 𝕜 n g x)` — with n : ℕ (the same n as the iteratedDeriv order). The LiDigamma usage: `iteratedDeriv_add hcf hcg` with hcf : ContDiffAt ℂ k ... — k : ℕ (the order) — ContDiffAt ℂ k — the k coerces to ℕ∞ ✓ (ContDiffAt takes ℕ∞). So:\n```lean\n    have hcf : ContDiffAt ℂ (k - 1 : ℕ) (fun _ : ℂ => momentB hZC) 0 := contDiff_const.contDiffAt\n    have hcg : ContDiffAt ℂ (k - 1 : ℕ) seriesFun 0 :=\n      (seriesFun_analyticAt not_isNontrivialZero_zero).contDiffAt\n    rw [iteratedDeriv_add hcf hcg, iteratedDeriv_const, if_neg (by omega : k - 1 ≠ 0), zero_add]\n```\nHmm — ContDiffAt ℂ (k−1 : ℕ) — the coercion: ContDiffAt's smoothness parameter type ℕ∞ (WithTop ℕ∞?): in current Mathlib ContDiffAt 𝕜 (n : ℕ∞)?? — actually `ContDiffAt 𝕜 n` with n : ℕ∞ = WithTop ℕ∞? — plain ℕ works via coercion: LiDigamma:695 wrote ContDiffAt ℂ k with k : ℕ ✓ (coercion inserted). For k−1 : write (k - 1 : ℕ) — the iteratedDeriv (k−1) has k−1 : ℕ — the coercion matches automatically.\n\nAnalyticAt.contDiffAt : AnalyticAt ℂ f x → ContDiffAt ℂ n f x? — signature: `AnalyticAt.contDiffAt (h : AnalyticAt ℂ f x) : ContDiffAt ℂ n f x`? — for ANY n (analytic ⟹ C^∞) ✓ I believe `AnalyticAt.contDiffAt` exists (analyticAt.contDiff? hmm). LiDigamma:701: `exact h3.neg.contDiffAt` — AnalyticAt.neg then .contDiffAt ✓ — so AnalyticAt.contDiffAt exists ✓ and the n is implicit/inferred ✓.\n\nThen:\n```lean\n    -- = ∑' ρ, mult·(−1)^{k−1}(k−1)!·(0−ρ)^{−k} = −(k−1)!·sigmaP k\n    rw [iteratedDeriv_seriesFun_zero (k - 1) (by omega)]\n    -- exponent: −(k−1:ℤ)−1 = −(k:ℤ)\n    have hexp : (-(k - 1 : ℤ) - 1 : ℤ) = -(k : ℤ) := by\n      have : ((k : ℤ) - 1 : ℤ) = ((k - 1 : ℕ) : ℤ) := by\n        rw [Int.ofNat_sub (by omega : 1 ≤ k)]\n      ...\n      push_cast [this]... \n```\nHmm — careful: (k − 1 : ℤ) with k : ℕ: the iteratedDeriv_seriesFun_zero's exponent is −(j:ℤ)−1 with j := k−1 (ℕ sub!): −((k−1:ℕ):ℤ)−1. Want = −(k:ℤ): ((k−1:ℕ):ℤ) = (k:ℤ)−1 (Int.ofNat_sub hk : ((k−1:ℕ):ℤ) = (k:ℤ)−1 ✓ `Int.ofNat_sub (h : m ≤ n) : (↑(n − m) : ℤ) = ↑n − ↑m` ✓). So −((k−1:ℕ):ℤ)−1 = −((k:ℤ)−1)−1 = −(k:ℤ) ✓: \n```lean\n    have hexp : (-(((k - 1 : ℕ) : ℤ)) - 1 : ℤ) = -(k : ℤ) := by\n      rw [Int.ofNat_sub hk]\n      push_cast\n      ring\n```\npush_cast for the (↑k : ℤ) forms... ((k:ℤ)−1) — fine: rw [Int.ofNat_sub hk]: goal -(↑k − 1) − 1 = -↑k: ring ✓ (no push_cast needed).\n\nThen per-term evaluation at 0:\n```lean\n    -- ∑' ρ, mult·((−1)^{k−1}(k−1)!·(0−ρ)^{−(k:ℤ)}) = −(k−1)!·sigmaP k\n    have heval : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) *\n        ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(k - 1 : ℤ) - 1))) =\n        -(((k - 1)! : ℂ)) * sigmaP k := by\n      rw [hexp]\n      -- per-term: mult·((−1)^{k−1}(k−1)!·(0−ρ)^{−k}) = −(k−1)!·mult·(1/ρ)^k\n      have hper : ∀ ρ : {ρ : ℂ // IsNontrivialZero ρ},\n          (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((0 : ℂ) - (ρ : ℂ)) ^ (-(k : ℤ))) =\n          -(((k - 1)! : ℂ)) * ((zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k) := by\n        intro ρ\n        have hρ0 : (ρ : ℂ) ≠ 0 := ...\n        -- (0−ρ)^{−k} = (−ρ)^{−k} = (−1)^k·(ρ^k)⁻¹·... \n        have e1 : ((0 : ℂ) - (ρ : ℂ)) ^ (-(k : ℤ)) = (-1 : ℂ) ^ k * (1 / (ρ : ℂ)) ^ k := by\n          rw [zero_sub]\n          -- (−ρ)^{(−k:ℤ)} = ((−ρ)^k)⁻¹ = ((−1)^k ρ^k)⁻¹ = (−1)^k (ρ^k)⁻¹ = (−1)^k (1/ρ)^k\n          rw [zpow_neg, zpow_natCast, neg_pow]\n          rw [mul_inv]\n          -- ((−1)^k)⁻¹·(ρ^k)⁻¹ = (−1)^k·(ρ^k)⁻¹: ((−1)^k)⁻¹ = (−1)^k\n          have h2 : ((-1 : ℂ) ^ k)⁻¹ = (-1 : ℂ) ^ k := by\n            apply inv_eq_of_mul_eq_one_right\n            rw [← pow_add, ← two_mul]\n            -- (−1)^{2k} = 1: Even: even (2k): Even.neg_one_pow?? \n            have : ((-1 : ℂ) ^ 2) ^ k = 1 := by\n              rw [show (-1 : ℂ) ^ 2 = 1 by ring]\n              exact one_pow k\n            rwa [← pow_mul, mul_comm 2 k, pow_mul] at this?? \n          rw [h2, ← mul_pow, one_div]\n          -- (−1)^k·(ρ^k)⁻¹ vs (−1)^k·(1/ρ)^k: (1/ρ)^k = (ρ^k)⁻¹: one_div_pow?? inv_pow: (ρ⁻¹)^k = (ρ^k)⁻¹; 1/ρ = ρ⁻¹: one_div... \n          congr 1\n          rw [one_div, ← inv_pow]\n        rw [e1]\n        -- mult·((−1)^{k−1}(k−1)!·((−1)^k·(1/ρ)^k)) = −(k−1)!·mult·(1/ρ)^k\n        have hsign : (-1 : ℂ) ^ (k - 1) * (-1 : ℂ) ^ k = -1 := by\n          rw [← pow_add]\n          -- (−1)^{k−1+k} = (−1)^{2k−1} = −1\n          have h2 : k - 1 + k = 2 * k - 1 := by omega\n          rw [h2]\n          -- (−1)^{2k−1} = (−1)^{2k}/(−1) = 1/(−1) = −1: pow_sub?? for ℕ: 2k−1: use: 2k−1 = 2(k−1)+1: \n          have h3 : 2 * k - 1 = 2 * (k - 1) + 1 := by omega\n          rw [h3, pow_add]\n          have h4 : (-1 : ℂ) ^ (2 * (k - 1)) = 1 := by\n            rw [pow_mul, show (-1 : ℂ) ^ 2 = 1 by ring]\n            exact one_pow _\n          rw [h4, one_mul]\n          -- (−1)^1 = −1\n          exact pow_one _\n        -- assemble: mult·((−1)^{k−1}·(k−1)!·((−1)^k·w)) = −(k−1)!·mult·w\n        calc (zeroMult ρ : ℂ) * ((-1 : ℂ) ^ (k - 1) * ((k - 1)! : ℂ) * ((-1 : ℂ) ^ k * (1 / (ρ : ℂ)) ^ k))\n            = ((zeroMult ρ : ℂ) * ((k - 1)! : ℂ) * (1 / (ρ : ℂ)) ^ k) * ((-1 : ℂ) ^ (k - 1) * (-1 : ℂ) ^ k) := by ring\n          _ = ((zeroMult ρ : ℂ) * ((k - 1)! : ℂ) * (1 / (ρ : ℂ)) ^ k) * (-1) := by rw [hsign]\n          _ = -(((k - 1)! : ℂ)) * ((zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k) := by ring\n      rw [tsum_congr hper, ← sigmaP_eq_unpaired hk2]\n      -- ∑' ρ, −(k−1)!·(mult·(1/ρ)^k) = −(k−1)!·∑' ... : tsum_mul_left\n      rw [tsum_mul_left]\n```\nCareful: hper's RHS: −(k−1)!·(mult·(1/ρ)^k) — the unpaired family: mult·(1/ρ)^k: ∑' ρ, −(k−1)!·(mult·(1/ρ)^k) = −(k−1)!·∑' mult·(1/ρ)^k (tsum_mul_left ✓) = −(k−1)!·sigmaP k (sigmaP_eq_unpaired hk2 ✓).\n\nzpow manipulations: ((0:ℂ)−ρ)^(−k:ℤ): zero_sub → (−ρ)^(−k:ℤ); zpow_neg : a^{−n} = (a^n)⁻¹ ✓ `zpow_neg (a) (n : ℤ) : a ^ (-n) = (a ^ n)⁻¹`; zpow_natCast : a^{(n:ℤ)} = a^n ✓. So (−ρ)^{(−(k:ℤ))} → wait the exponent is −(k:ℤ) where k : ℕ cast — zpow_neg needs the exponent literally as −x: −(k:ℤ) = −((k:ℕ):ℤ): pattern a ^ (-x) with x := (k:ℤ) ✓. → ((−ρ)^(k:ℤ))⁻¹ → zpow_natCast → ((−ρ)^k)⁻¹ → neg_pow : (−a)^n = (−1)^n·a^n ✓ `neg_pow (a) (n : ℕ)` — used LiSwaps:106 ✓. → ((−1)^k·ρ^k)⁻¹ → mul_inv : (a·b)⁻¹ = a⁻¹·b⁻¹ ✓. → (−1)^k⁻¹·(ρ^k)⁻¹: h2: ((−1)^k)⁻¹ = (−1)^k via inv_eq_of_mul_eq_one_right : a·b = 1 → a⁻¹ = b: with a := (−1)^k, b := (−1)^k: need (−1)^k·(−1)^k = 1: ← pow_add: (−1)^{k+k}: k+k = 2k: ← two_mul: then (−1)^{2k}: pow_mul: ((−1)²)^k = 1^k = 1: \n```lean\n          have h2 : ((-1 : ℂ) ^ k)⁻¹ = (-1 : ℂ) ^ k := by\n            apply inv_eq_of_mul_eq_one_right\n            rw [← pow_add, ← two_mul, pow_mul]\n            rw [show (-1 : ℂ) ^ 2 = 1 by ring]\n            exact one_pow k\n```\ninv_eq_of_mul_eq_one_right : a * b = 1 → a⁻¹ = b ✓ exists (session-033-ish? `inv_eq_of_mul_eq_one_right` ✓ I'm fairly confident; else `inv_eq_of_mul_eq_one_left`). The a here is (−1)^k (the thing being inverted) and b = (−1)^k: goal a·b = 1 ✓.\n\nThen: (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k: (1/ρ)^k = (ρ^k)⁻¹: `one_div_pow`? or inv_pow: (ρ⁻¹)^k = (ρ^k)⁻¹ ✓ `inv_pow (a) (n)`; 1/ρ = ρ⁻¹: one_div. So congr 1; rw [one_div, ← inv_pow] — goal (−1)^k·(ρ^k)⁻¹ = (−1)^k·(ρ⁻¹)^k?? wait — my e1's RHS is (−1)^k·(1/ρ)^k: after rw [h2] on LHS: (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k: congr 1 → (ρ^k)⁻¹ = (1/ρ)^k: rw [one_div]: (ρ^k)⁻¹ = (ρ⁻¹)^k: ← inv_pow ✓.\n\nHold on — e1's statement: ((0:ℂ)−ρ)^(−k:ℤ) = (−1)^k·(1/ρ)^k. Let me re-derive: (−ρ)^{−k} = ((−ρ)^k)⁻¹ = ((−1)^k·ρ^k)⁻¹ = ((−1)^k)⁻¹·(ρ^k)⁻¹ = (−1)^k·(ρ^k)⁻¹ = (−1)^k·(1/ρ)^k ✓ (since (1/ρ)^k = 1/ρ^k = (ρ^k)⁻¹ ✓).\n\nHmm — and zpow_neg signature: `zpow_neg (a : α) (n : ℤ) : a ^ (-n) = (a ^ n)⁻¹` ✓ exists. zpow_natCast : `zpow_natCast (a : α) (n : ℕ) : a ^ (n : ℤ) = a ^ n` ✓.\n\nhsign: (−1)^{k−1}·(−1)^k = −1: ← pow_add: (−1)^{(k−1)+k}: k−1+k = 2k−1 (omega, k ≥ 2 — hmm Nat: k−1+k with k ≥ 2 ✓ omega): then 2k−1 = 2(k−1)+1 (omega k ≥ 2 ✓): pow_add: (−1)^{2(k−1)}·(−1)^1: h4: (−1)^{2(k−1)} = ((−1)²)^{k−1} = 1: pow_mul : a^{m·n} = (a^m)^n ✓ `pow_mul (a) (m n) : a ^ (m * n) = (a ^ m) ^ n`. 2·(k−1) — pow_mul with m = 2, n = k−1 ✓. one_mul; pow_one ✓.\n\npow_add : a^{m+n} = a^m·a^n ✓.\n\nThe final capstone assembly:\n```lean\n    rw [heval]  -- goal: sigmaP k = −(−(k−1)!·sigmaP k)/(k−1)!\n    -- = sigmaP k: field\n    have hfact : ((k - 1)! : ℂ) ≠ 0 := by\n      rw [Ne, Nat.cast_eq_zero]\n      exact Nat.factorial_ne_zero (k - 1)\n    field_simp [hfact]\n    ring\n```\ngoal after heval: sigmaP k = −(−(k−1)!·sigmaP k)/((k−1)!) : field_simp [hfact]; ring ✓ (−(−X)/Y = X/Y = ... : −(−(k−1)!·σ)/(k−1)! = σ·((k−1)!/(k−1)!) = σ ✓ ring after clearing).\n\nHmm wait — the goal after rw [hcong, ..., heval]: sigmaP k = -(iteratedDeriv...)/... where the iteratedDeriv was rewritten to the tsum and then heval replaced the tsum with −(k−1)!·sigmaP k — the rw chain: hcong rewrites iteratedDeriv (k−1) gFun 0 → iteratedDeriv (k−1) (B+seriesFun) 0 ✓; then iteratedDeriv_add etc rewrite; iteratedDeriv_seriesFun_zero rewrites iteratedDeriv (k−1) seriesFun 0 → the tsum ✓; heval is a standalone — rw [heval] rewrites the tsum → −(k−1)!·sigmaP k ✓. Goal: sigmaP k = −(−(k−1)!·sigmaP k)/(k−1)! ✓ field_simp+ring.\n\nOne concern — the rw [hcong]: hcong : iteratedDeriv (k−1) gFun 0 = iteratedDeriv (k−1) (fun s => B + seriesFun s) 0 — iteratedDeriv_congr_of_eventuallyEq (h : f =ᶠ[𝓝 x] g) (n) : iteratedDeriv n f x = iteratedDeriv n g x ✓ (LiDigamma:568). ✓\n\nAnd iteratedDeriv_add's function form: fun s => B + seriesFun s — the lemma iteratedDeriv_add (hf : ContDiffAt 𝕜 n f x) (hg : ContDiffAt 𝕜 n g x) : iteratedDeriv n (f + g) x = ...?? or pointwise fun x => f x + g x? From LiDigamma:702 the rw worked on their lambda with pointwise mix (1/(m+1) + −(1/(s+m+1)))?? They had heq-rewritten to a Pi.add form: line 688-693: `(fun s => dpsiTermC s m) = (fun s => 1/...) + fun s => -(1/...)` — note the FIRST is a bare function and `+ fun s => ...` — so it's HAdd of functions with a lambda — mixed. iteratedDeriv_add hcf hcg rewrote iteratedDeriv k ((fun s => 1/...) + fun s => ...) — so the lemma's LHS is iteratedDeriv n (f + g) x with Pi.add? or the pointwise lambda? Their form: (fun s => ...) + fun s => ... — that IS Pi.add (HAdd.hAdd of two functions). So iteratedDeriv_add : iteratedDeriv n (f + g) x = iteratedDeriv n f x + iteratedDeriv n g x with Pi.add ✓. My function: fun s => B + seriesFun s — LAMBDA with pointwise add — NOT syntactically (fun _ => B) + seriesFun. The rw [iteratedDeriv_add hcf hcg] would need the goal's function to match (f + g): MISMATCH. Fix: bridge: have : (fun s => momentB hZC + seriesFun s) = (fun _ : ℂ => momentB hZC) + seriesFun := by funext s; rfl?? — Pi.add_apply: ((f+g) s = f s + g s) rfl ✓ so funext s; rfl works? (fun _ => B) + seriesFun applied at s = B + seriesFun s ✓ rfl. So:\n```lean\n    have eadd : (fun s => momentB hZC + seriesFun s) = (fun _ : ℂ => momentB hZC) + seriesFun := by\n      funext s\n      rfl\n    rw [eadd, iteratedDeriv_add hcf hcg, ...]\n```\n✓ (the Pi.add_apply gotcha again).\n\nSimilarly iteratedDeriv_const : iteratedDeriv n (fun _ => c) x = if n = 0 then c else 0 — from LiDigamma:703 `rw [iteratedDeriv_const, if_neg (by omega : k ≠ 0)]` ✓.\n\nOK — also `sigmaP_one_eq_neg_gFun_zero` and the k=1 branch: after subst hk1' (k := 1): goal sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/((1−1)!:ℂ): rw [Nat.sub_self?? 1−1 = 0: `Nat.sub_self 1 : 1 − 1 = 0`? hmm Nat.sub_self : n − n = 0 ✓; but the term is (1 − 1 : ℕ) — reduces to 0 definitionally — `show sigmaP 1 = -(iteratedDeriv 0 gFun 0)/((0)!:ℂ)`?? Nat subtraction 1−1 computes ✓ — simp [iteratedDeriv_zero]: simplest: `simp only [Nat.sub_self?..., iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one]`— Nat.sub_self needs the literal n − n form: (1 − 1) — simp only [Nat.sub_self] might not fire on numerals (1 − 1 is OfNat−OfNat — simp would compute via Nat.reduceSub? just use `norm_num`?? risky on the goal shape. Alternative: change k−1 to 0 via `show`: sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/...: `conv_rhs => rw [show (1 : ℕ) - 1 = 0 from rfl]`?? 1−1 = 0 is rfl ✓ (Nat sub computes). So: `show sigmaP 1 = -(iteratedDeriv 0 gFun 0) / ((0)! : ℂ)` — is the goal defeq? (1−1) ≡ 0 ✓ defeq: `show` with defeq target ✓ should work. Then rw [iteratedDeriv_zero, Nat.factorial_zero, Nat.cast_one, div_one] → sigmaP 1 = −gFun 0 ✓ exact sigmaP_one_eq_neg_gFun_zero hZC.\n\nHmm — (0)! vs Nat.factorial 0 — the goal's form: ((1 - 1)! : ℂ) — after show: ((0)!:ℂ) — Nat.factorial 0 = 1: rw [Nat.factorial_zero]?? Nat.factorial_zero : (0)! = 1 ✓ then Nat.cast_one, div_one ✓.\n\nWait — actually there's subtlety: after `subst hk1'`, k is replaced by 1 everywhere: goal sigmaP 1 = −(iteratedDeriv (1−1) gFun 0)/(((1−1))!:ℂ). `show sigmaP 1 = -(iteratedDeriv 0 gFun 0) / ((0)! : ℂ)`: defeq check: (1−1:ℕ) ≡ 0 ✓, ((1−1)!:ℂ) ≡ ((0)!:ℂ) ✓ — should pass.\n\nAlright — write §4–§6 now. It's a lot; let me write carefully. Also need in §4: hρ0/h1ρ helpers — reuse the ones from seriesFun_one (write once as private-ish lemmas? They're used repeatedly: ρ ≠ 0, 1−ρ ≠ 0, ‖ρ‖ > 0, ‖1−ρ‖ > 0). Make small lemmas:\n\n```lean\nlemma nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (ρ : ℂ) ≠ 0 := by\n  intro h0\n  have h2 := ρ.2.2.1\n  rw [h0, Complex.zero_re] at h2\n  exact lt_irrefl 0 h2\n\nlemma one_sub_nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (1 : ℂ) - (ρ : ℂ) ≠ 0 := by\n  intro h\n  have h3 : (1 : ℂ) = (ρ : ℂ) := sub_eq_zero.mp h\n  have h4 := ρ.2.2.2\n  rw [← h3, Complex.one_re] at h4\n  exact lt_irrefl 1 h4\n\nlemma norm_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) < ‖(ρ : ℂ)‖ :=\n  norm_pos_iff.mpr (nontrivialZero_ne_zero ρ)\n\nlemma norm_one_sub_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    (0 : ℝ) < ‖(1 : ℂ) - (ρ : ℂ)‖ :=\n  norm_pos_iff.mpr (one_sub_nontrivialZero_ne_zero ρ)\n```\n✓ (norm_pos_iff : 0 < ‖x‖ ↔ x ≠ 0 ✓).\n\nLet me write the whole §4–§6 block now, appending before `end NguyenRH1`. This is big — I'll write it in two Write/Edit operations (§4, then §5+§6).","signature":""},{"type":"text","text":"Patterns confirmed. Writing §4 (summability budget + k=1 rearrangement) now."},{"type":"tool_use","id":"Edit_89","name":"Edit","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiMoments.lean","old_string":"end NguyenRH1","new_string":"/-! ## 4. The summability budget and the k = 1 rearrangement -/\n\nlemma nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (ρ : ℂ) ≠ 0 := by\n  intro h0\n  have h2 := ρ.2.2.1\n  rw [h0, Complex.zero_re] at h2\n  exact lt_irrefl 0 h2\n\nlemma one_sub_nontrivialZero_ne_zero (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    (1 : ℂ) - (ρ : ℂ) ≠ 0 := by\n  intro h\n  have h3 : (1 : ℂ) = (ρ : ℂ) := sub_eq_zero.mp h\n  have h4 := ρ.2.2.2\n  rw [← h3, Complex.one_re] at h4\n  exact lt_irrefl 1 h4\n\nlemma norm_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) : (0 : ℝ) < ‖(ρ : ℂ)‖ :=\n  norm_pos_iff.mpr (nontrivialZero_ne_zero ρ)\n\nlemma norm_one_sub_nontrivialZero_pos (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    (0 : ℝ) < ‖(1 : ℂ) - (ρ : ℂ)‖ :=\n  norm_pos_iff.mpr (one_sub_nontrivialZero_ne_zero ρ)\n\n/-- **Master summability**: Σ mult/‖ρ‖² over the zeros (the ii′-2\nfinite-ball + (9/4)-comparison skeleton). -/\nlemma summable_mult_div_norm_sq :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} => (zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2) := by\n  have hbase : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (9 / 4) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ)))) :=\n    (WeilEF.zero_sum_inv_sq zetaSeam).mul_left (9 / 4)\n  set D : {ρ : ℂ // IsNontrivialZero ρ} → ℝ := fun ρ =>\n    if (2 : ℝ) ≤ ‖(ρ : ℂ)‖ then\n      (9 / 4) * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))\n    else (zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2 with hDdef\n  have hfin : {ρ : {ρ // IsNontrivialZero ρ} | ¬ ((2 : ℝ) ≤ ‖(ρ : ℂ)‖)}.Finite := by\n    have hcomp : IsCompact (Metric.closedBall (0 : ℂ) 2) := isCompact_closedBall _ _\n    have hzeros : (Metric.closedBall (0 : ℂ) 2) ∩ {ρ : ℂ | IsNontrivialZero ρ}\n        ⊆ (Metric.closedBall (0 : ℂ) 2) ∩ riemannZetaZeros := by\n      intro z hz\n      exact ⟨hz.1, hz.2.1⟩\n    have hfin2 := (hcomp.inter_riemannZetaZeros_finite).subset hzeros\n    have himg : (Subtype.val '' {ρ : {ρ // IsNontrivialZero ρ} |\n        ¬ ((2 : ℝ) ≤ ‖(ρ : ℂ)‖)}).Finite := by\n      apply hfin2.subset\n      rintro z ⟨ρ, hρ, rfl⟩\n      refine ⟨?_, ρ.2⟩\n      simp only [Metric.mem_closedBall, dist_zero_right]\n      exact le_of_lt (lt_of_not_ge hρ)\n    exact Set.Finite.of_finite_image himg (Subtype.val_injective.injOn)\n  have hE : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      D ρ - (9 / 4) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ)))) := by\n    apply summable_of_hasFiniteSupport\n    apply hfin.subset\n    intro ρ hρ\n    simp only [Function.mem_support, ne_eq] at hρ\n    by_contra hball\n    apply hρ\n    have hball' : (2 : ℝ) ≤ ‖(ρ : ℂ)‖ := not_not.mp hball\n    simp only [D, if_pos hball']\n    ring\n  have hD : Summable D := by\n    have hsum := hbase.add hE\n    have heq : (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n        (9 / 4) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))) +\n          (D ρ - (9 / 4) * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))))) = D := by\n      funext ρ\n      ring\n    rw [heq] at hsum\n    exact hsum\n  refine Summable.of_norm_bounded hD (fun ρ => ?_)\n  by_cases hρ : (2 : ℝ) ≤ ‖(ρ : ℂ)‖\n  · simp only [D, if_pos hρ]\n    have hz := ρ.2\n    have hρpos : (0 : ℝ) < ‖(ρ : ℂ)‖ := lt_of_lt_of_le (by norm_num) hρ\n    have hgpos : (0 : ℝ) < 1 + Complex.normSq (gammaOf (ρ : ℂ)) := by\n      have hnn := Complex.normSq_nonneg (gammaOf (ρ : ℂ))\n      linarith\n    have hcomp : 1 + Complex.normSq (gammaOf (ρ : ℂ)) ≤ 9 / 4 * ‖(ρ : ℂ)‖ ^ 2 :=\n      normSq_gammaOf_le_mul_norm_sq (n := 1) le_rfl hz.2.1.le hz.2.2.le (by simpa using hρ)\n    have key : (zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2 ≤\n        (9 / 4) * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ)) := by\n      rw [div_le_div_iff₀ (pow_pos hρpos 2) hgpos]\n      calc (zeroMult ρ : ℝ) * (1 + Complex.normSq (gammaOf ρ))\n          ≤ (zeroMult ρ : ℝ) * (9 / 4 * ‖(ρ : ℂ)‖ ^ 2) :=\n            mul_le_mul_of_nonneg_left hcomp (Nat.cast_nonneg _)\n        _ = (9 / 4 * (zeroMult ρ : ℝ)) * ‖(ρ : ℂ)‖ ^ 2 := by ring\n    rw [Real.norm_of_nonneg (by positivity)]\n    exact key\n  · simp only [D, if_neg hρ]\n    rw [Real.norm_of_nonneg (by positivity)]\n\n/-- The avoiding-ball lower bound: every zero has δ ≤ ‖ρ‖. -/\nlemma exists_norm_lower_bound :\n    ∃ δ : ℝ, 0 < δ ∧ ∀ ρ : {ρ : ℂ // IsNontrivialZero ρ}, δ ≤ ‖(ρ : ℂ)‖ := by\n  obtain ⟨δ, hδ, hball⟩ := exists_ball_avoid_nontrivialZeros 0 not_isNontrivialZero_zero\n  refine ⟨δ, hδ, fun ρ => ?_⟩\n  by_contra h\n  exact hball ρ (by rw [Metric.mem_ball, dist_zero_right]; exact lt_of_not_ge h)\n\n/-- Σ mult·ρ^{−k} is absolutely summable for k ≥ 2. -/\nlemma summable_mult_inv_pow {k : ℕ} (hk : 2 ≤ k) :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} => (zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k) := by\n  obtain ⟨m, rfl⟩ := Nat.exists_eq_add_of_le hk\n  obtain ⟨δ, hδ, hδle⟩ := exists_norm_lower_bound\n  apply Summable.of_norm_bounded (summable_mult_div_norm_sq.mul_left ((1 / δ) ^ m))\n  intro ρ\n  have hρδ := hδle ρ\n  have hρpos : (0 : ℝ) < ‖(ρ : ℂ)‖ := lt_of_lt_of_le hδ hρδ\n  rw [norm_mul, norm_pow, norm_div, norm_one, RCLike.norm_natCast, div_pow, one_pow]\n  calc (zeroMult ρ : ℝ) * (1 / ‖(ρ : ℂ)‖ ^ (2 + m))\n      = (zeroMult ρ : ℝ) * ((1 / ‖(ρ : ℂ)‖ ^ 2) * (1 / ‖(ρ : ℂ)‖ ^ m)) := by\n        rw [pow_add, ← one_div_mul_one_div]\n    _ ≤ (zeroMult ρ : ℝ) * ((1 / ‖(ρ : ℂ)‖ ^ 2) * (1 / δ ^ m)) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        apply mul_le_mul_of_nonneg_left _ (by positivity : (0 : ℝ) ≤ 1 / ‖(ρ : ℂ)‖ ^ 2)\n        exact one_div_le_one_div_of_le (pow_pos hδ m) (pow_le_pow_left₀ hδ.le hρδ m)\n    _ = (1 / δ) ^ m * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2) := by\n        rw [div_pow, one_pow]\n        ring\n\n/-- The conjugation reindex: Σ mult·ρ̄^{−k} = Σ mult·ρ^{−k}. -/\nlemma tsum_mult_inv_pow_conj (k : ℕ) :\n    (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ))) ^ k) =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k := by\n  have h := Equiv.tsum_eq conjZeroEquiv\n    (fun σ : {σ : ℂ // IsNontrivialZero σ} => (zeroMult σ : ℂ) * (1 / (σ : ℂ)) ^ k)\n  rw [← h]\n  apply tsum_congr\n  intro ρ\n  have e1 : ((conjZeroEquiv ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℂ) = (starRingEnd ℂ) (ρ : ℂ) :=\n    rfl\n  rw [e1, zeroMult_conj ρ.2]\n\n/-- The conj-summability transfer. -/\nlemma summable_mult_inv_pow_conj {k : ℕ} (hk : 2 ≤ k) :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ))) ^ k) := by\n  have e : (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ))) ^ k) =\n      fun ρ => (fun σ : {σ : ℂ // IsNontrivialZero σ} => (zeroMult σ : ℂ) * (1 / (σ : ℂ)) ^ k)\n        (conjZeroEquiv ρ) := by\n    funext ρ\n    have e1 : ((conjZeroEquiv ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℂ) = (starRingEnd ℂ) (ρ : ℂ) :=\n      rfl\n    rw [e1, zeroMult_conj ρ.2]\n  rw [e]\n  exact (Equiv.summable_iff conjZeroEquiv _).mpr (summable_mult_inv_pow hk)\n\n/-- **The unpaired form** (k ≥ 2): the paired sum collapses to the\nunpaired sum by conj-invariance: sigmaP k = ½(S + S) = S. -/\nlemma sigmaP_eq_unpaired {k : ℕ} (hk : 2 ≤ k) :\n    sigmaP k = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, (zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k := by\n  have hs1 := summable_mult_inv_pow hk\n  have hs2 := summable_mult_inv_pow_conj hk\n  have step : ∑' ρ, sigmaSlice k ρ = ∑' ρ, (1 / 2 : ℂ) *\n      ((zeroMult ρ : ℂ) * (1 / (ρ : ℂ)) ^ k +\n        (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ))) ^ k) := by\n    apply tsum_congr\n    intro ρ\n    rw [sigmaSlice]\n    ring\n  rw [sigmaP, step, tsum_mul_left, tsum_add hs1 hs2, tsum_mult_inv_pow_conj k]\n  ring\n\n/-- The reflected master summability: Σ mult/‖1−ρ‖² (reindex transfer). -/\nlemma summable_mult_div_norm_sq_one_sub :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℝ) / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) := by\n  have e : (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℝ) / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) =\n      fun ρ => (fun σ : {σ : ℂ // IsNontrivialZero σ} => (zeroMult σ : ℝ) / ‖(σ : ℂ)‖ ^ 2)\n        (oneSubZeroEquiv ρ) := by\n    funext ρ\n    have e1 : ((oneSubZeroEquiv ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℂ) = 1 - (ρ : ℂ) := rfl\n    rw [e1, zeroMult_one_sub ρ.2.2.1 ρ.2.2.2]\n  rw [e]\n  exact (Equiv.summable_iff oneSubZeroEquiv _).mpr summable_mult_div_norm_sq\n\n/-- The AM-GM bound: mult/(‖ρ‖‖1−ρ‖) ≤ ½(mult/‖ρ‖² + mult/‖1−ρ‖²). -/\nlemma mult_div_norm_mul_norm_le (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n    (zeroMult ρ : ℝ) / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖) ≤\n      (1 / 2) * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2 +\n        (zeroMult ρ : ℝ) / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) := by\n  have hρ0 := norm_nontrivialZero_pos ρ\n  have h1ρ0 := norm_one_sub_nontrivialZero_pos ρ\n  have key : 2 / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖) ≤\n      1 / ‖(ρ : ℂ)‖ ^ 2 + 1 / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2 := by\n    have h1 : (0 : ℝ) ≤ (1 / ‖(ρ : ℂ)‖ - 1 / ‖(1 : ℂ) - (ρ : ℂ)‖) ^ 2 := sq_nonneg _\n    have hexp : (1 / ‖(ρ : ℂ)‖ - 1 / ‖(1 : ℂ) - (ρ : ℂ)‖) ^ 2 =\n        1 / ‖(ρ : ℂ)‖ ^ 2 - 2 / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖) +\n          1 / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2 := by\n      rw [sub_sq, div_pow, div_pow, one_pow, one_pow, one_div_mul_one_div, mul_one_div]\n    rw [hexp] at h1\n    linarith\n  calc (zeroMult ρ : ℝ) / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖)\n      = (zeroMult ρ : ℝ) / 2 * (2 / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖)) := by ring\n    _ ≤ (zeroMult ρ : ℝ) / 2 * (1 / ‖(ρ : ℂ)‖ ^ 2 + 1 / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) :=\n        mul_le_mul_of_nonneg_left key (div_nonneg (Nat.cast_nonneg _) (by norm_num))\n    _ = (1 / 2) * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2 +\n        (zeroMult ρ : ℝ) / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) := by ring\n\n/-- The mixed family Σ mult/(ρ(1−ρ)) is absolutely summable. -/\nlemma summable_mult_one_div_mul_one_sub :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / ((ρ : ℂ) * (1 - (ρ : ℂ))))) := by\n  have hsum := summable_mult_div_norm_sq.add summable_mult_div_norm_sq_one_sub\n  apply Summable.of_norm_bounded (hsum.mul_left (1 / 2))\n  intro ρ\n  rw [norm_mul, norm_div, norm_one, RCLike.norm_natCast, norm_mul]\n  exact mult_div_norm_mul_norm_le ρ\n\n/-- The V-family is absolutely summable (1/ρ̄ − 1/(1−ρ) = O(‖ρ‖⁻¹‖1−ρ‖⁻¹)). -/\nlemma summable_mult_vTerm :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ)) - 1 / (1 - (ρ : ℂ)))) := by\n  have hsum := summable_mult_div_norm_sq.add summable_mult_div_norm_sq_one_sub\n  apply Summable.of_norm_bounded (hsum.mul_left (1 / 2))\n  intro ρ\n  have hρ0 := norm_nontrivialZero_pos ρ\n  have h1ρ0 := norm_one_sub_nontrivialZero_pos ρ\n  have hconj : ‖((starRingEnd ℂ) (ρ : ℂ))‖ = ‖(ρ : ℂ)‖ := by\n    rw [starRingEnd_apply, Complex.norm_conj]\n  have hid : 1 / ((starRingEnd ℂ) (ρ : ℂ)) - 1 / (1 - (ρ : ℂ)) =\n      ((1 : ℂ) - (ρ : ℂ) - (starRingEnd ℂ) (ρ : ℂ)) /\n        (((starRingEnd ℂ) (ρ : ℂ)) * (1 - (ρ : ℂ))) := by\n    field_simp [ne_of_gt hρ0, ne_of_gt h1ρ0]\n    ring\n  have hnum : ‖(1 : ℂ) - (ρ : ℂ) - (starRingEnd ℂ) (ρ : ℂ)‖ ≤ 1 := by\n    have e : (1 : ℂ) - (ρ : ℂ) - (starRingEnd ℂ) (ρ : ℂ) = ((1 - 2 * (ρ : ℂ).re : ℝ) : ℂ) := by\n      rw [sub_sub, Complex.add_conj]\n      push_cast\n      ring\n    rw [e, Complex.norm_real, Real.norm_eq_abs, abs_le]\n    have hre0 := ρ.2.2.1\n    have hre1 := ρ.2.2.2\n    constructor <;> linarith\n  rw [norm_mul, hid, norm_div, norm_mul, hconj, RCLike.norm_natCast]\n  calc (zeroMult ρ : ℝ) * (‖(1 : ℂ) - (ρ : ℂ) - (starRingEnd ℂ) (ρ : ℂ)‖ /\n        (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖))\n      ≤ (zeroMult ρ : ℝ) * (1 / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖)) := by\n        apply mul_le_mul_of_nonneg_left _ (Nat.cast_nonneg _)\n        exact div_le_div_of_nonneg_right hnum\n          (mul_pos hρ0 h1ρ0) |>.trans_eq (one_div _) |>.trans_eq' rfl\n    _ = (zeroMult ρ : ℝ) / (‖(ρ : ℂ)‖ * ‖(1 : ℂ) - (ρ : ℂ)‖) := by ring\n    _ ≤ (1 / 2) * ((zeroMult ρ : ℝ) / ‖(ρ : ℂ)‖ ^ 2 +\n          (zeroMult ρ : ℝ) / ‖(1 : ℂ) - (ρ : ℂ)‖ ^ 2) := mult_div_norm_mul_norm_le ρ\n\n/-- **The V-sum vanishes**: the conj reindex gives V = W and the reflect\nreindex gives W = −V. -/\nlemma vTerm_tsum_eq_zero :\n    (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ)) - 1 / (1 - (ρ : ℂ)))) = 0 := by\n  set V := ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ)) - 1 / (1 - (ρ : ℂ))) with hV\n  have h1 : V = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) - 1 / (1 - (starRingEnd ℂ) (ρ : ℂ))) := by\n    have h := Equiv.tsum_eq conjZeroEquiv (fun σ : {σ : ℂ // IsNontrivialZero σ} =>\n      (zeroMult σ : ℂ) * (1 / ((starRingEnd ℂ) (σ : ℂ)) - 1 / (1 - (σ : ℂ))))\n    rw [hV, ← h]\n    apply tsum_congr\n    intro ρ\n    have e1 : ((conjZeroEquiv ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℂ) = (starRingEnd ℂ) (ρ : ℂ) :=\n      rfl\n    rw [e1, zeroMult_conj ρ.2]\n    congr 1\n    simp [starRingEnd_apply]\n  have h2 : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) - 1 / (1 - (starRingEnd ℂ) (ρ : ℂ)))) = -V := by\n    have h := Equiv.tsum_eq oneSubZeroEquiv (fun σ : {σ : ℂ // IsNontrivialZero σ} =>\n      (zeroMult σ : ℂ) * (1 / (σ : ℂ) - 1 / (1 - (starRingEnd ℂ) (σ : ℂ))))\n    rw [← h]\n    rw [hV, ← tsum_neg]\n    apply tsum_congr\n    intro ρ\n    have e1 : ((oneSubZeroEquiv ρ : {ρ : ℂ // IsNontrivialZero ρ}) : ℂ) = 1 - (ρ : ℂ) := rfl\n    rw [e1, zeroMult_one_sub ρ.2.2.1 ρ.2.2.2]\n    have e2 : (1 : ℂ) - (starRingEnd ℂ) (1 - (ρ : ℂ)) = (starRingEnd ℂ) (ρ : ℂ) := by\n      rw [map_sub, map_one, sub_sub_cancel]\n    rw [e2]\n    ring\n  have h3 : V = -V := h1.trans h2\n  exact eq_zero_of_neg_eq h3.symm\n\n/-- The first family (1/ρ + 1/ρ̄) is summable (the sigmaSlice 1 form). -/\nlemma summable_mult_fst :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / ((starRingEnd ℂ) (ρ : ℂ)))) := by\n  apply (sigmaSlice_summable 1 le_rfl).congr\n  intro ρ\n  rw [sigmaSlice, pow_one, pow_one]\n  ring\n\n/-- The second family (1/ρ + 1/(1−ρ)) is summable (the mixed form). -/\nlemma summable_mult_snd :\n    Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / (1 - (ρ : ℂ)))) := by\n  apply summable_mult_one_div_mul_one_sub.congr\n  intro ρ\n  have hρ0 := nontrivialZero_ne_zero ρ\n  have h1ρ := one_sub_nontrivialZero_ne_zero ρ\n  congr 1\n  field_simp [hρ0, h1ρ]\n  ring\n\n/-- **Twice σ₁ is the mixed series**: 2·sigmaP 1 = Σ mult/(ρ(1−ρ)).\nThe two pairings differ by V = 0. -/\nlemma two_mul_sigmaP_one :\n    (2 : ℂ) * sigmaP 1 = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / ((ρ : ℂ) * (1 - (ρ : ℂ)))) := by\n  have h1 : (2 : ℂ) * sigmaP 1 = ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / ((starRingEnd ℂ) (ρ : ℂ))) := by\n    rw [sigmaP, ← tsum_mul_left]\n    apply tsum_congr\n    intro ρ\n    rw [sigmaSlice, pow_one, pow_one]\n    ring\n  have h2 : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / ((ρ : ℂ) * (1 - (ρ : ℂ))))) =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n        (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / (1 - (ρ : ℂ))) := by\n    apply tsum_congr\n    intro ρ\n    have hρ0 := nontrivialZero_ne_zero ρ\n    have h1ρ := one_sub_nontrivialZero_ne_zero ρ\n    congr 1\n    field_simp [hρ0, h1ρ]\n    ring\n  have h3 : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / ((starRingEnd ℂ) (ρ : ℂ)))) -\n        (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n          (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / (1 - (ρ : ℂ)))) =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n        (zeroMult ρ : ℂ) * (1 / ((starRingEnd ℂ) (ρ : ℂ)) - 1 / (1 - (ρ : ℂ))) := by\n    rw [← tsum_sub summable_mult_fst summable_mult_snd]\n    apply tsum_congr\n    intro ρ\n    ring\n  have hFst : (∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n      (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / ((starRingEnd ℂ) (ρ : ℂ)))) =\n      ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ},\n        (zeroMult ρ : ℂ) * (1 / (ρ : ℂ) + 1 / (1 - (ρ : ℂ))) :=\n    sub_eq_zero.mp (by rw [h3]; exact vTerm_tsum_eq_zero)\n  rw [h1, hFst, ← h2]\n\n/-- **(M) at k = 1**: σ₁ = −gFun(0). Via 2σ₁ = seriesFun(1) =\ngFun(1) − B = −2·gFun(0). -/\nlemma sigmaP_one_eq_neg_gFun_zero (hZC : ZeroCountProp) : sigmaP 1 = -gFun 0 := by\n  have h2 := two_mul_sigmaP_one\n  rw [← seriesFun_one] at h2\n  have hg1 := gFun_one hZC\n  have hg0 := gFun_zero hZC\n  have hfe := gFun_one_eq_neg\n  linear_combination (h2 - hg1 + hg0 + hfe) / 2\n\nend NguyenRH1"},"extra_content":null}]