Current task: —

← Session 28 — ii′-5e: partial-fraction identity (zero series + F entire)

#1490 assistant 2026-08-23 14:58:02.341 UTC · 2418→1614 tok open ⤢
thinking (3484 chars)
The classification argument is all there: - `riemannZeta_ne_zero_of_one_le_re : 1 ≤ ρ.re → riemannZeta ρ ≠ 0` (Mathlib; note: used as `riemannZeta_ne_zero_of_one_le_re h h2` where h : ¬ ρ.re < 1 i.e. 1 ≤ ρ.re and h2 : ζ ρ = 0 — gives False; so signature `riemannZeta_ne_zero_of_one_le_re (h : 1 ≤ s.re) : riemannZeta s ≠ 0` — and it covers s = 1? "1 ≤ re" includes re = 1, s = 1: ζ 1 ≠ 0 (junk nonzero) ✓ apparently holds for all s with re ≥ 1 including s = 1!). - `Complex.Gammaℝ_eq_zero_iff : Gammaℝ s = 0 ↔ ∃ m : ℕ, s = -2 * m` ✓ (the "−(2*↑m)" gotcha from session 026). - `RvM.completedRiemannZeta_eq_Gammaℝ_mul (hρ0 : ρ ≠ 0) (hG : Gammaℝ ρ ≠ 0) : completedRiemannZeta ρ = Gammaℝ ρ * riemannZeta ρ` (Zeta23 RvM). - `RvM.completedRiemannZeta_eq_zero_iff : completedRiemannZeta s = 0 ↔ ...` — line 100: `.2.1` of the iff gives 0 < re: so `completedRiemannZeta_eq_zero_iff : Λ s = 0 ↔ (0 < s.re ∧ s.re < 1)`?? .2.1 : 0 < re... and absurd with not_lt.mpr h (h : re ≤ 0). So Λ s = 0 ↔ IsNontrivialZero-ish (0 < re ∧ re < 1)? .2.1 : 0 < re ✓. So Zeta23 has: completedRiemannZeta s = 0 ↔ 0 < re s ∧ re s < 1 presumably. - `riemannZeta_zero : riemannZeta 0 = -1/2` ✓ (Mathlib, used line 90/96). So the global classification: ζ s = 0 → IsNontrivialZero s ∨ s = 0 ∨ s = 1 ∨ ∃ n ≥ 1, s = −2n: ``` intro s hs rcases lt_trichotomy s.re 0 with h | h | h -- hmm need trichotomy with 0 and position vs 1 ``` Cleaner: by_cases re ≥ 1: riemannZeta_ne_zero_of_one_le_re — wait but if ζ s = 0 and re ≥ 1: contradiction directly (covers s = 1 too: ζ 1 ≠ 0 — wait, is that right? riemannZeta_ne_zero_of_one_le_re: 1 ≤ s.re → ζ s ≠ 0 — at s = 1: ζ 1 ≠ 0 ✓ so the "s = 1" disjunct is vacuous — can drop it? Keep for safety or drop — actually simpler statement: ζ s = 0 → IsNontrivialZero s ∨ s = 0 ∨ ∃ n ≥ 1, s = −2n. s=1: ζ 1 ≠ 0 so no need. Hmm but re ≥ 1 nonvanishing covers 1 ✓ drop it. By cases: - 1 ≤ re: absurd (riemannZeta_ne_zero_of_one_le_re). - 0 < re < 1: IsNontrivialZero ✓ (⟨hs, h0, h1⟩). - re ≤ 0: Gammaℝ s = 0 ∨ ≠ 0: - = 0: Gammaℝ_eq_zero_iff: s = −2·m: m = 0: s = 0 ✓ (middle disjunct); m ≥ 1: s = −2·m = −2·m: the third disjunct ∃ n ≥ 1, s = −2n: n := m: s = −2·↑m: need the form s = -(2 * ↑n) or -2*n cast details. From Gammaℝ_eq_zero_iff: s = -(2 * ↑m)? The LiDisc code: `rw [hn]; simp [neg_re, mul_re]` got re = −2n — so hn : ρ = -(2 * (n:ℂ))? or ρ = -2 * n? Let me match whatever Gammaℝ_eq_zero_iff gives: `∃ m : ℕ, s = -2 * m` presumably with casts. I'll adapt. - ≠ 0: s = 0? if s = 0: middle ✓. Else Λ s = ΓR s · ζ s = 0 (RvM eq) ⟹ completedRiemannZeta_eq_zero_iff ⟹ 0 < re — contra re ≤ 0 ✓. Let me check RvM.completedRiemannZeta_eq_zero_iff's exact statement. Also need for P3/P4/P5 splits: - `logDeriv_zetaA`: logDeriv zetaA at 1 analytic: zetaA_analyticAt_one + zetaA_one: AnalyticAt logDeriv: logDeriv f = deriv f / f: AnalyticAt.div (AnalyticAt.deriv zetaA_analyticAt_one) (by rw [zetaA_one]; norm_num : zetaA 1 ≠ 0) ✓. - Punctured identity at 1: logDeriv ζ s = logDeriv zetaA s − 1/(s−1) for s ≠ 1 near 1 with zetaA s ≠ 0, ζ s ≠ 0: logDeriv_mul of (w−1) and ζ: from zetaA_apply: zetaA s = (s−1)·ζ s: logDeriv zetaA s = logDeriv ((s−1)·ζ s) = logDeriv (s−1) + logDeriv ζ s = 1/(s−1) + logDeriv ζ s ✓ (logDeriv_mul (s−1 ≠ 0) (ζ s ≠ 0) (differentiable) (differentiable)). So logDeriv ζ s = logDeriv zetaA s − 1/(s−1) ✓. - For the digamma-series splits (0 and −2n), check Zeta23's DigammaSeries.digamma_series exact statement. LiDigamma line ~492 region. Let me read.
The classification pieces are all banked in LiDisc. Now the Zeta23 digamma series statement and `completedRiemannZeta_eq_zero_iff`.
tool: Bash
input
{
  "command": "cd D:/Python/Quantum/zeta-23-lean && sed -n '485,500p' Zeta23/GammaFacts/Series.lean && grep -n \"integerComplement\\|dpsiTerm\" Zeta23/GammaFacts/Series.lean | head -10 && echo === && grep -n \"completedRiemannZeta_eq_zero_iff\\|completedRiemannZeta_eq_Gamma\u211d_mul\" Zeta23/RvM/*.lean | head -5",
  "description": "Read digamma_series statement and RvM \u039b facts"
}
raw content_json (database row)
[{"type":"thinking","thinking":"The classification argument is all there:\n- `riemannZeta_ne_zero_of_one_le_re : 1 ≤ ρ.re → riemannZeta ρ ≠ 0` (Mathlib; note: used as `riemannZeta_ne_zero_of_one_le_re h h2` where h : ¬ ρ.re < 1 i.e. 1 ≤ ρ.re and h2 : ζ ρ = 0 — gives False; so signature `riemannZeta_ne_zero_of_one_le_re (h : 1 ≤ s.re) : riemannZeta s ≠ 0` — and it covers s = 1? \"1 ≤ re\" includes re = 1, s = 1: ζ 1 ≠ 0 (junk nonzero) ✓ apparently holds for all s with re ≥ 1 including s = 1!).\n- `Complex.Gammaℝ_eq_zero_iff : Gammaℝ s = 0 ↔ ∃ m : ℕ, s = -2 * m` ✓ (the \"−(2*↑m)\" gotcha from session 026).\n- `RvM.completedRiemannZeta_eq_Gammaℝ_mul (hρ0 : ρ ≠ 0) (hG : Gammaℝ ρ ≠ 0) : completedRiemannZeta ρ = Gammaℝ ρ * riemannZeta ρ` (Zeta23 RvM).\n- `RvM.completedRiemannZeta_eq_zero_iff : completedRiemannZeta s = 0 ↔ ...` — line 100: `.2.1` of the iff gives 0 < re: so `completedRiemannZeta_eq_zero_iff : Λ s = 0 ↔ (0 < s.re ∧ s.re < 1)`?? .2.1 : 0 < re... and absurd with not_lt.mpr h (h : re ≤ 0). So Λ s = 0 ↔ IsNontrivialZero-ish (0 < re ∧ re < 1)? .2.1 : 0 < re ✓. So Zeta23 has: completedRiemannZeta s = 0 ↔ 0 < re s ∧ re s < 1 presumably.\n- `riemannZeta_zero : riemannZeta 0 = -1/2` ✓ (Mathlib, used line 90/96).\n\nSo the global classification: ζ s = 0 → IsNontrivialZero s ∨ s = 0 ∨ s = 1 ∨ ∃ n ≥ 1, s = −2n:\n```\nintro s hs\nrcases lt_trichotomy s.re 0 with h | h | h  -- hmm need trichotomy with 0 and position vs 1\n```\nCleaner: by_cases re ≥ 1: riemannZeta_ne_zero_of_one_le_re — wait but if ζ s = 0 and re ≥ 1: contradiction directly (covers s = 1 too: ζ 1 ≠ 0 — wait, is that right? riemannZeta_ne_zero_of_one_le_re: 1 ≤ s.re → ζ s ≠ 0 — at s = 1: ζ 1 ≠ 0 ✓ so the \"s = 1\" disjunct is vacuous — can drop it? Keep for safety or drop — actually simpler statement: ζ s = 0 → IsNontrivialZero s ∨ s = 0 ∨ ∃ n ≥ 1, s = −2n. s=1: ζ 1 ≠ 0 so no need. Hmm but re ≥ 1 nonvanishing covers 1 ✓ drop it.\n\nBy cases:\n- 1 ≤ re: absurd (riemannZeta_ne_zero_of_one_le_re).\n- 0 < re < 1: IsNontrivialZero ✓ (⟨hs, h0, h1⟩).\n- re ≤ 0: Gammaℝ s = 0 ∨ ≠ 0:\n  - = 0: Gammaℝ_eq_zero_iff: s = −2·m: m = 0: s = 0 ✓ (middle disjunct); m ≥ 1: s = −2·m = −2·m: the third disjunct ∃ n ≥ 1, s = −2n: n := m: s = −2·↑m: need the form s = -(2 * ↑n) or -2*n cast details. From Gammaℝ_eq_zero_iff: s = -(2 * ↑m)? The LiDisc code: `rw [hn]; simp [neg_re, mul_re]` got re = −2n — so hn : ρ = -(2 * (n:ℂ))? or ρ = -2 * n? Let me match whatever Gammaℝ_eq_zero_iff gives: `∃ m : ℕ, s = -2 * m` presumably with casts. I'll adapt.\n  - ≠ 0: s = 0? if s = 0: middle ✓. Else Λ s = ΓR s · ζ s = 0 (RvM eq) ⟹ completedRiemannZeta_eq_zero_iff ⟹ 0 < re — contra re ≤ 0 ✓.\n\nLet me check RvM.completedRiemannZeta_eq_zero_iff's exact statement.\n\nAlso need for P3/P4/P5 splits:\n- `logDeriv_zetaA`: logDeriv zetaA at 1 analytic: zetaA_analyticAt_one + zetaA_one: AnalyticAt logDeriv: logDeriv f = deriv f / f: AnalyticAt.div (AnalyticAt.deriv zetaA_analyticAt_one) (by rw [zetaA_one]; norm_num : zetaA 1 ≠ 0) ✓.\n- Punctured identity at 1: logDeriv ζ s = logDeriv zetaA s − 1/(s−1) for s ≠ 1 near 1 with zetaA s ≠ 0, ζ s ≠ 0: logDeriv_mul of (w−1) and ζ: from zetaA_apply: zetaA s = (s−1)·ζ s: logDeriv zetaA s = logDeriv ((s−1)·ζ s) = logDeriv (s−1) + logDeriv ζ s = 1/(s−1) + logDeriv ζ s ✓ (logDeriv_mul (s−1 ≠ 0) (ζ s ≠ 0) (differentiable) (differentiable)). So logDeriv ζ s = logDeriv zetaA s − 1/(s−1) ✓.\n\n- For the digamma-series splits (0 and −2n), check Zeta23's DigammaSeries.digamma_series exact statement. LiDigamma line ~492 region. Let me read.","signature":""},{"type":"text","text":"The classification pieces are all banked in LiDisc. Now the Zeta23 digamma series statement and `completedRiemannZeta_eq_zero_iff`."},{"type":"tool_use","id":"Bash_105","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && sed -n '485,500p' Zeta23/GammaFacts/Series.lean && grep -n \"integerComplement\\|dpsiTerm\" Zeta23/GammaFacts/Series.lean | head -10 && echo === && grep -n \"completedRiemannZeta_eq_zero_iff\\|completedRiemannZeta_eq_Gammaℝ_mul\" Zeta23/RvM/*.lean | head -5","description":"Read digamma_series statement and RvM Λ facts"},"extra_content":null}]