← Session 21 — Tier ii′ planning + launch: close SfBoundProp in Lean (D-064)
thinking (4252 chars)
The additive version: `summable_of_hasFiniteSupport (h : HasFiniteSupport f) : Summable f` — but note the `[L.HasSupport]` constraint in the multipliable version... it's about summability to a value L? Hmm — actually `summable_of_hasFiniteSupport` requires the target to have a `HasSupport` instance? Looking at Weierstrass usage: `summable_of_hasFiniteSupport ((Set.finite_singleton l₀).subset (by simp))` — takes a Set.Finite proof of support-containment. `HasFiniteSupport f` is a structure: `(Set.finite (Function.support f))`-wrapper? `Function.HasFiniteSupport f := (Function.support f).Finite`. The lemma signature: `summable_of_hasFiniteSupport (h : HasFiniteSupport f) : Summable f` probably (with the [L.HasSupport] for the L-valued version — the deprecated alias suggests the plain version exists).
Simpler alternative — avoid finite-support entirely: use `Summable.of_norm_bounded` with the dominator D' = fam + (finite-support modification)... The cleanest alternative: `Summable.of_norm_bounded` where D covers ALL points with the if-then-else; prove `Summable D` via: D = fam + E with E finite support — still needs finite-support summability. Alternative standard trick: `summable_of_norm_bounded'`...
Actually simplest: avoid the issue by making the dominator the SUM of the always-valid bound: for points with ‖ρ‖ < 2n, bound ‖liSummand n ρ‖ by a CONSTANT C(n) valid on the whole subtype (if such exists — does ‖liSummand‖ have a uniform bound on ALL zeros? ‖liSummand n ρ‖ = mult·|Re f(ρ)| and |Re f| ≤ |f| ≤ 1 + |1−1/ρ|ⁿ: for small ρ (e.g. ρ → 0?) — no: nontrivial zeros have |ρ| ≥ ... hmm, zeros with tiny |ρ|? The strip zeros: the smallest |γ| is 14.134 — but proving a lower bound on the first zero in Lean requires the numerical zero-free result (not available). HOWEVER: ρ.re ∈ (0,1) and ρ.im = γ with NO lower bound available... wait — actually is there a cheap bound? |1−1/ρ| with ρ = σ+iγ: |1/ρ| = 1/|ρ|: for γ → 0 with σ ∈ (0,1): |ρ| could be small ONLY IF there were zeros near the real axis — those don't exist (ζ(x) < 0 for x ∈ (0,1) real — the eta argument) — but PROVING that is work. However — we don't need a uniform bound on ALL zeros: the dominator on the finite ball can use per-point values ‖liSummand n ρ‖ (that's what the if-then-else does) — the finite-support issue is intrinsic. So use summable_of_hasFiniteSupport with the finite ball set. `Function.HasFiniteSupport f` — the structure: `def Function.HasFiniteSupport (f : α → β) : Prop := (Function.support f).Finite`? And `summable_of_hasFiniteSupport` — from the deprecated alias line: `summable_of_finite_support := summable_of_hasFiniteSupport` ✓ so `summable_of_hasFiniteSupport` exists and takes the finite-support proof. The Weierstrass usage `summable_of_hasFiniteSupport ((Set.finite_singleton l₀).subset (by simp))` — takes `Set.Finite.subset` proof — so the argument is `(h : (Function.support f).Finite)` or a HasFiniteSupport wrapper — `.subset` produces Set.Finite — so the argument is a Set.Finite proof of something. Good enough: I'll construct `Function.HasFiniteSupport E` via its definition `(Function.support E).Finite`.
Let me check HasFiniteSupport def quickly... I'll just write `(Function.support E).Finite` and use it — if the lemma wants the wrapper, it's defeq.
Also `Set.Finite.of_finite_image` ✓ exists.
Now write the final block. Also remember the deprecated alias note: the non-deprecated name is `summable_of_hasFiniteSupport`.
One more consideration for `hbase`: `(WeilEF.zero_sum_inv_sq zetaSeam).mul_left ((9/2)*(n:ℝ)^2)` — `.mul_left` on Summable: `Summable.mul_left (a : α) (hf : Summable f) : Summable (fun i => a * f i)` — signature order: `Summable.mul_left (a) (hf)` or `hf.mul_left a`? As dot notation `hf.mul_left a` ✓ standard.
And the hbase family form: (9/2)n² * (mult/(1+normSq)) — matches D's if-branch `(9/2)*n^2*(zeroMult ρ : ℝ)/(1+normSq...)` — I wrote D's branch as `(9 / 2) * n ^ 2 * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))` — elaborates as ((9/2)*n²*mult)/(1+normSq) vs hbase's (9/2)n²*(mult/(1+normSq)) — equal by ring (div_eq_mul_inv, mul assoc). In the funext for D = fam + E I'll handle with field_simp/ring.
Let me now write the whole final block and append to Scratch.lean.
All API names confirmed. Appending the summability assembly to Scratch.
tool: Bash
input
{
"command": "cat >> /d/Python/Quantum/research/lean/NguyenRH1/Scratch.lean << 'EOF'\n\n/-! ### The comparison 1 + \u2016\u03b3_\u03c1\u2016\u00b2 \u2264 (9/4)\u2016\u03c1\u2016\u00b2 and the dominator -/\n\n/-- For re z \u2208 [0,1] and 2n \u2264 \u2016z\u2016 (n \u2265 1): 1 + \u2016\u03b3_z\u2016\u00b2 \u2264 (9/4)\u00b7\u2016z\u2016\u00b2. -/\nlemma normSq_gammaOf_le_mul_norm_sq {n : \u2115} (hn : 1 \u2264 n) {z : \u2102}\n (hzre0 : 0 \u2264 z.re) (hzre1 : z.re \u2264 1) (hz : 2 * n \u2264 \u2016z\u2016) :\n 1 + Complex.normSq (gammaOf z) \u2264 9 / 4 * \u2016z\u2016 ^ 2 := by\n have hn0 : (0 : \u211d) < n := by exact_mod_cast hn\n have hz2 : \u2016z\u2016 ^ 2 = z.re ^ 2 + z.im ^ 2 := by\n rw [\u2190 Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n ring\n have hz4 : 4 * n ^ 2 \u2264 \u2016z\u2016 ^ 2 := by\n have h := pow_le_pow_left\u2080 (by positivity : (0:\u211d) \u2264 2 * n) hz 2\n nlinarith [h]\n have hre2 : z.re ^ 2 \u2264 1 := by nlinarith [hzre0, hzre1]\n have him : 1 \u2264 z.im ^ 2 := by nlinarith [hz2, hz4, hre2]\n have hgam : Complex.normSq (gammaOf z) = z.im ^ 2 + (1 / 2 - z.re) ^ 2 := by\n rw [Complex.normSq_apply, WeilEF.gammaOf_re, WeilEF.gammaOf_im]\n ring\n rw [hgam, hz2]\n nlinarith [hzre0, hzre1, him, sq_nonneg (1 / 2 - z.re), sq_nonneg z.re]\n\n/-- Norm of the paired summand: mult\u00b7|Re f(\u03c1)|. -/\nlemma liSummand_norm (n : \u2115) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1}) :\n \u2016liSummand n \u03c1\u2016 = (zeroMult \u03c1 : \u211d) * |(1 - (1 - 1 / (\u03c1 : \u2102)) ^ n).re| := by\n rw [liSummand_eq n \u03c1, norm_mul, RCLike.norm_natCast, RCLike.norm_ofReal]\n\n/-- The main bound: for 2n \u2264 \u2016\u03c1\u2016, \u2016liSummand n \u03c1\u2016 \u2264 (9/2)n\u00b2\u00b7mult/(1+\u2016\u03b3_\u03c1\u2016\u00b2). -/\nlemma liSummand_norm_le {n : \u2115} (hn : 1 \u2264 n) (\u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1})\n (h\u03c1 : (2 : \u211d) * n \u2264 \u2016(\u03c1 : \u2102)\u2016) :\n \u2016liSummand n \u03c1\u2016 \u2264\n (9 / 2) * n ^ 2 * (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))) := by\n have hz := \u03c1.2\n have hre0 : 0 \u2264 (\u03c1 : \u2102).re := hz.2.1.le\n have hre1 : (\u03c1 : \u2102).re \u2264 1 := hz.2.2.le\n have hcore := re_li_summand_le hn hre0 hre1 h\u03c1\n have hcomp := normSq_gammaOf_le_mul_norm_sq hn hre0 hre1 h\u03c1\n have hnpos : (0 : \u211d) < n := by exact_mod_cast hn\n have hz0 : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := lt_of_lt_of_le (by positivity) h\u03c1\n have hg0 : (0 : \u211d) < 1 + Complex.normSq (gammaOf (\u03c1 : \u2102)) := by\n have h := Complex.normSq_nonneg (gammaOf (\u03c1 : \u2102))\n linarith\n have key : (zeroMult \u03c1 : \u211d) * (2 * n ^ 2 / \u2016(\u03c1 : \u2102)\u2016 ^ 2)\n \u2264 (9 / 2) * n ^ 2 * (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf (\u03c1 : \u2102))) := by\n rw [le_div_iff\u2080 hg0]\n have hbound : (zeroMult \u03c1 : \u211d) * (2 * n ^ 2 / \u2016(\u03c1 : \u2102)\u2016 ^ 2) *\n (1 + Complex.normSq (gammaOf (\u03c1 : \u2102)))\n \u2264 (zeroMult \u03c1 : \u211d) * (2 * n ^ 2 / \u2016(\u03c1 : \u2102)\u2016 ^ 2) * ((9 / 4) * \u2016(\u03c1 : \u2102)\u2016 ^ 2) :=\n mul_le_mul_of_nonneg_left hcomp (by positivity)\n exact hbound.trans (by field_simp; ring)\n rw [liSummand_norm]\n exact (mul_le_mul_of_nonneg_left hcore (Nat.cast_nonneg _)).trans key\n\n/-- The paired Li summand is absolutely summable over the nontrivial zeros.\nUses Zeta23's `WeilEF.zero_sum_inv_sq` (\u03a3 mult/(1+\u2016\u03b3_\u03c1\u2016\u00b2) < \u221e, proved) via\nthe tail bound of `liSummand_norm_le`; the ball {\u2016\u03c1\u2016 < 2n} contributes a\nfinite set (Mathlib `IsCompact.inter_riemannZetaZeros_finite`). -/\ntheorem liSummable (n : \u2115) : Summable (liSummand n) := by\n rcases Nat.eq_zero_or_pos n with h0 | hn\n \u00b7 subst h0\n have h : liSummand 0 = fun _ => (0 : \u2102) := by\n funext \u03c1\n simp [liSummand]\n rw [h]\n exact summable_zero\n \u00b7 -- the base summable family (Zeta23, proved)\n have hbase : Summable (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n (9 / 2) * (n : \u211d) ^ 2 * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1)))) := by\n have h := (WeilEF.zero_sum_inv_sq zetaSeam).mul_left ((9 / 2) * (n : \u211d) ^ 2)\n exact h\n -- the dominator\n set D : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} \u2192 \u211d := fun \u03c1 =>\n if (2 : \u211d) * n \u2264 \u2016(\u03c1 : \u2102)\u2016 then\n (9 / 2) * n ^ 2 * (zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1))\n else \u2016liSummand n \u03c1\u2016 with hDdef\n -- the correction E = D \u2212 base has finite support\n have hfin : {\u03c1 : {\u03c1 // IsNontrivialZero \u03c1} | \u00ac ((2 : \u211d) * n \u2264 \u2016(\u03c1 : \u2102)\u2016)}.Finite := by\n have hcomp : IsCompact (Metric.closedBall (0 : \u2102) (2 * n)) :=\n isCompact_closedBall _ _\n have hzeros : (Metric.closedBall (0 : \u2102) (2 * n)) \u2229 {\u03c1 : \u2102 | IsNontrivialZero \u03c1}\n \u2286 (Metric.closedBall (0 : \u2102) (2 * n)) \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) * n \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 // IsNontrivialZero \u03c1} =>\n D \u03c1 - (9 / 2) * (n : \u211d) ^ 2 * ((zeroMult \u03c1 : \u211d) /\n (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) * n \u2264 \u2016(\u03c1 : \u2102)\u2016 := not_not.mp hball\n simp only [D, if_pos hball', sub_self]\n have hD : Summable D := by\n have hsum := hbase.add hE\n have heq : (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n (9 / 2) * (n : \u211d) ^ 2 * ((zeroMult \u03c1 : \u211d) / (1 + Complex.normSq (gammaOf \u03c1))) +\n (D \u03c1 - (9 / 2) * (n : \u211d) ^ 2 * ((zeroMult \u03c1 : \u211d) /\n (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) * n \u2264 \u2016(\u03c1 : \u2102)\u2016\n \u00b7 simp only [D, if_pos h\u03c1]\n exact liSummand_norm_le hn \u03c1 h\u03c1\n \u00b7 simp only [D, if_neg h\u03c1, le_refl]\nEOF\ncd /d/Python/Quantum/research/lean/NguyenRH1 && export PATH=\"$HOME/.elan/bin:$PATH\" && lake env lean Scratch.lean 2>&1 | head -40",
"description": "Append summability assembly and check",
"timeout": 420000
}
raw content_json (database row)
[{"type":"thinking","thinking":"The additive version: `summable_of_hasFiniteSupport (h : HasFiniteSupport f) : Summable f` — but note the `[L.HasSupport]` constraint in the multipliable version... it's about summability to a value L? Hmm — actually `summable_of_hasFiniteSupport` requires the target to have a `HasSupport` instance? Looking at Weierstrass usage: `summable_of_hasFiniteSupport ((Set.finite_singleton l₀).subset (by simp))` — takes a Set.Finite proof of support-containment. `HasFiniteSupport f` is a structure: `(Set.finite (Function.support f))`-wrapper? `Function.HasFiniteSupport f := (Function.support f).Finite`. The lemma signature: `summable_of_hasFiniteSupport (h : HasFiniteSupport f) : Summable f` probably (with the [L.HasSupport] for the L-valued version — the deprecated alias suggests the plain version exists). \n\nSimpler alternative — avoid finite-support entirely: use `Summable.of_norm_bounded` with the dominator D' = fam + (finite-support modification)... The cleanest alternative: `Summable.of_norm_bounded` where D covers ALL points with the if-then-else; prove `Summable D` via: D = fam + E with E finite support — still needs finite-support summability. Alternative standard trick: `summable_of_norm_bounded'`... \n\nActually simplest: avoid the issue by making the dominator the SUM of the always-valid bound: for points with ‖ρ‖ < 2n, bound ‖liSummand n ρ‖ by a CONSTANT C(n) valid on the whole subtype (if such exists — does ‖liSummand‖ have a uniform bound on ALL zeros? ‖liSummand n ρ‖ = mult·|Re f(ρ)| and |Re f| ≤ |f| ≤ 1 + |1−1/ρ|ⁿ: for small ρ (e.g. ρ → 0?) — no: nontrivial zeros have |ρ| ≥ ... hmm, zeros with tiny |ρ|? The strip zeros: the smallest |γ| is 14.134 — but proving a lower bound on the first zero in Lean requires the numerical zero-free result (not available). HOWEVER: ρ.re ∈ (0,1) and ρ.im = γ with NO lower bound available... wait — actually is there a cheap bound? |1−1/ρ| with ρ = σ+iγ: |1/ρ| = 1/|ρ|: for γ → 0 with σ ∈ (0,1): |ρ| could be small ONLY IF there were zeros near the real axis — those don't exist (ζ(x) < 0 for x ∈ (0,1) real — the eta argument) — but PROVING that is work. However — we don't need a uniform bound on ALL zeros: the dominator on the finite ball can use per-point values ‖liSummand n ρ‖ (that's what the if-then-else does) — the finite-support issue is intrinsic. So use summable_of_hasFiniteSupport with the finite ball set. `Function.HasFiniteSupport f` — the structure: `def Function.HasFiniteSupport (f : α → β) : Prop := (Function.support f).Finite`? And `summable_of_hasFiniteSupport` — from the deprecated alias line: `summable_of_finite_support := summable_of_hasFiniteSupport` ✓ so `summable_of_hasFiniteSupport` exists and takes the finite-support proof. The Weierstrass usage `summable_of_hasFiniteSupport ((Set.finite_singleton l₀).subset (by simp))` — takes `Set.Finite.subset` proof — so the argument is `(h : (Function.support f).Finite)` or a HasFiniteSupport wrapper — `.subset` produces Set.Finite — so the argument is a Set.Finite proof of something. Good enough: I'll construct `Function.HasFiniteSupport E` via its definition `(Function.support E).Finite`.\n\nLet me check HasFiniteSupport def quickly... I'll just write `(Function.support E).Finite` and use it — if the lemma wants the wrapper, it's defeq.\n\nAlso `Set.Finite.of_finite_image` ✓ exists.\n\nNow write the final block. Also remember the deprecated alias note: the non-deprecated name is `summable_of_hasFiniteSupport`.\n\nOne more consideration for `hbase`: `(WeilEF.zero_sum_inv_sq zetaSeam).mul_left ((9/2)*(n:ℝ)^2)` — `.mul_left` on Summable: `Summable.mul_left (a : α) (hf : Summable f) : Summable (fun i => a * f i)` — signature order: `Summable.mul_left (a) (hf)` or `hf.mul_left a`? As dot notation `hf.mul_left a` ✓ standard.\n\nAnd the hbase family form: (9/2)n² * (mult/(1+normSq)) — matches D's if-branch `(9/2)*n^2*(zeroMult ρ : ℝ)/(1+normSq...)` — I wrote D's branch as `(9 / 2) * n ^ 2 * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))` — elaborates as ((9/2)*n²*mult)/(1+normSq) vs hbase's (9/2)n²*(mult/(1+normSq)) — equal by ring (div_eq_mul_inv, mul assoc). In the funext for D = fam + E I'll handle with field_simp/ring.\n\nLet me now write the whole final block and append to Scratch.lean.","signature":""},{"type":"text","text":"All API names confirmed. Appending the summability assembly to Scratch."},{"type":"tool_use","id":"Bash_140","name":"Bash","input":{"command":"cat >> /d/Python/Quantum/research/lean/NguyenRH1/Scratch.lean << 'EOF'\n\n/-! ### The comparison 1 + ‖γ_ρ‖² ≤ (9/4)‖ρ‖² and the dominator -/\n\n/-- For re z ∈ [0,1] and 2n ≤ ‖z‖ (n ≥ 1): 1 + ‖γ_z‖² ≤ (9/4)·‖z‖². -/\nlemma normSq_gammaOf_le_mul_norm_sq {n : ℕ} (hn : 1 ≤ n) {z : ℂ}\n (hzre0 : 0 ≤ z.re) (hzre1 : z.re ≤ 1) (hz : 2 * n ≤ ‖z‖) :\n 1 + Complex.normSq (gammaOf z) ≤ 9 / 4 * ‖z‖ ^ 2 := by\n have hn0 : (0 : ℝ) < n := by exact_mod_cast hn\n have hz2 : ‖z‖ ^ 2 = z.re ^ 2 + z.im ^ 2 := by\n rw [← Complex.normSq_eq_norm_sq, Complex.normSq_apply]\n ring\n have hz4 : 4 * n ^ 2 ≤ ‖z‖ ^ 2 := by\n have h := pow_le_pow_left₀ (by positivity : (0:ℝ) ≤ 2 * n) hz 2\n nlinarith [h]\n have hre2 : z.re ^ 2 ≤ 1 := by nlinarith [hzre0, hzre1]\n have him : 1 ≤ z.im ^ 2 := by nlinarith [hz2, hz4, hre2]\n have hgam : Complex.normSq (gammaOf z) = z.im ^ 2 + (1 / 2 - z.re) ^ 2 := by\n rw [Complex.normSq_apply, WeilEF.gammaOf_re, WeilEF.gammaOf_im]\n ring\n rw [hgam, hz2]\n nlinarith [hzre0, hzre1, him, sq_nonneg (1 / 2 - z.re), sq_nonneg z.re]\n\n/-- Norm of the paired summand: mult·|Re f(ρ)|. -/\nlemma liSummand_norm (n : ℕ) (ρ : {ρ : ℂ // IsNontrivialZero ρ}) :\n ‖liSummand n ρ‖ = (zeroMult ρ : ℝ) * |(1 - (1 - 1 / (ρ : ℂ)) ^ n).re| := by\n rw [liSummand_eq n ρ, norm_mul, RCLike.norm_natCast, RCLike.norm_ofReal]\n\n/-- The main bound: for 2n ≤ ‖ρ‖, ‖liSummand n ρ‖ ≤ (9/2)n²·mult/(1+‖γ_ρ‖²). -/\nlemma liSummand_norm_le {n : ℕ} (hn : 1 ≤ n) (ρ : {ρ : ℂ // IsNontrivialZero ρ})\n (hρ : (2 : ℝ) * n ≤ ‖(ρ : ℂ)‖) :\n ‖liSummand n ρ‖ ≤\n (9 / 2) * n ^ 2 * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ))) := by\n have hz := ρ.2\n have hre0 : 0 ≤ (ρ : ℂ).re := hz.2.1.le\n have hre1 : (ρ : ℂ).re ≤ 1 := hz.2.2.le\n have hcore := re_li_summand_le hn hre0 hre1 hρ\n have hcomp := normSq_gammaOf_le_mul_norm_sq hn hre0 hre1 hρ\n have hnpos : (0 : ℝ) < n := by exact_mod_cast hn\n have hz0 : (0 : ℝ) < ‖(ρ : ℂ)‖ := lt_of_lt_of_le (by positivity) hρ\n have hg0 : (0 : ℝ) < 1 + Complex.normSq (gammaOf (ρ : ℂ)) := by\n have h := Complex.normSq_nonneg (gammaOf (ρ : ℂ))\n linarith\n have key : (zeroMult ρ : ℝ) * (2 * n ^ 2 / ‖(ρ : ℂ)‖ ^ 2)\n ≤ (9 / 2) * n ^ 2 * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf (ρ : ℂ))) := by\n rw [le_div_iff₀ hg0]\n have hbound : (zeroMult ρ : ℝ) * (2 * n ^ 2 / ‖(ρ : ℂ)‖ ^ 2) *\n (1 + Complex.normSq (gammaOf (ρ : ℂ)))\n ≤ (zeroMult ρ : ℝ) * (2 * n ^ 2 / ‖(ρ : ℂ)‖ ^ 2) * ((9 / 4) * ‖(ρ : ℂ)‖ ^ 2) :=\n mul_le_mul_of_nonneg_left hcomp (by positivity)\n exact hbound.trans (by field_simp; ring)\n rw [liSummand_norm]\n exact (mul_le_mul_of_nonneg_left hcore (Nat.cast_nonneg _)).trans key\n\n/-- The paired Li summand is absolutely summable over the nontrivial zeros.\nUses Zeta23's `WeilEF.zero_sum_inv_sq` (Σ mult/(1+‖γ_ρ‖²) < ∞, proved) via\nthe tail bound of `liSummand_norm_le`; the ball {‖ρ‖ < 2n} contributes a\nfinite set (Mathlib `IsCompact.inter_riemannZetaZeros_finite`). -/\ntheorem liSummable (n : ℕ) : Summable (liSummand n) := by\n rcases Nat.eq_zero_or_pos n with h0 | hn\n · subst h0\n have h : liSummand 0 = fun _ => (0 : ℂ) := by\n funext ρ\n simp [liSummand]\n rw [h]\n exact summable_zero\n · -- the base summable family (Zeta23, proved)\n have hbase : Summable (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n (9 / 2) * (n : ℝ) ^ 2 * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ)))) := by\n have h := (WeilEF.zero_sum_inv_sq zetaSeam).mul_left ((9 / 2) * (n : ℝ) ^ 2)\n exact h\n -- the dominator\n set D : {ρ : ℂ // IsNontrivialZero ρ} → ℝ := fun ρ =>\n if (2 : ℝ) * n ≤ ‖(ρ : ℂ)‖ then\n (9 / 2) * n ^ 2 * (zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))\n else ‖liSummand n ρ‖ with hDdef\n -- the correction E = D − base has finite support\n have hfin : {ρ : {ρ // IsNontrivialZero ρ} | ¬ ((2 : ℝ) * n ≤ ‖(ρ : ℂ)‖)}.Finite := by\n have hcomp : IsCompact (Metric.closedBall (0 : ℂ) (2 * n)) :=\n isCompact_closedBall _ _\n have hzeros : (Metric.closedBall (0 : ℂ) (2 * n)) ∩ {ρ : ℂ | IsNontrivialZero ρ}\n ⊆ (Metric.closedBall (0 : ℂ) (2 * n)) ∩ 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 : ℝ) * n ≤ ‖(ρ : ℂ)‖)}).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 / 2) * (n : ℝ) ^ 2 * ((zeroMult ρ : ℝ) /\n (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 : ℝ) * n ≤ ‖(ρ : ℂ)‖ := not_not.mp hball\n simp only [D, if_pos hball', sub_self]\n have hD : Summable D := by\n have hsum := hbase.add hE\n have heq : (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n (9 / 2) * (n : ℝ) ^ 2 * ((zeroMult ρ : ℝ) / (1 + Complex.normSq (gammaOf ρ))) +\n (D ρ - (9 / 2) * (n : ℝ) ^ 2 * ((zeroMult ρ : ℝ) /\n (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 ≤ ‖(ρ : ℂ)‖\n · simp only [D, if_pos hρ]\n exact liSummand_norm_le hn ρ hρ\n · simp only [D, if_neg hρ, le_refl]\nEOF\ncd /d/Python/Quantum/research/lean/NguyenRH1 && export PATH=\"$HOME/.elan/bin:$PATH\" && lake env lean Scratch.lean 2>&1 | head -40","description":"Append summability assembly and check","timeout":420000},"extra_content":null}]