Current task: —

← Session 29 — ii′-5e-v: circle bound (far-tail + series bounds)

#1640 assistant 2026-08-24 02:26:45.346 UTC · 1899→2152 tok open ⤢
thinking (5250 chars)
All present: - `Complex.Gammaℝ_eq_zero_iff : Gammaℝ s = 0 ↔ ∃ m : ℕ, s = -2 * (m : ℂ)` (used with rw at LiContour:492). - `Complex.Gamma_ne_zero (h : ∀ m : ℕ, s ≠ -(m : ℂ)) : Gamma s ≠ 0`. - `riemannZeta_ne_zero_of_one_le_re : 1 ≤ s.re → s ≠ 1 → riemannZeta s ≠ 0` (from LiDisc:73 usage: `riemannZeta_ne_zero_of_one_le_re h h2`). - `zeta_zero_classification {s} (hs : riemannZeta s = 0) : IsNontrivialZero s ∨ s = 0 ∨ ∃ n : ℕ, 1 ≤ n ∧ s = -2 * (n : ℂ)`. Now let me set up the todo list and start building c-i. I'll write §10 in LiCircleBound.lean. First block (c-i): 1. `differentiableAt_Gammaℝ_of_not_neg_nat`. 2. `logDeriv_Gammaℝ_eq_of_not_neg_nat`. 3. `gapCircle_sep` (standalone separation for ρ : ℂ). 4. `nearZeros_count_le`. 5. `gapCircle_sep_near` (the separation for ρ ∈ nearZeros (s.im) — any ‖ρ‖). For #3 (gapCircle_sep): the shell_crit hsep proof but for ρ : ℂ with IsNontrivialZero ρ. The proof used hgap on ρ or conj ρ (both ℂ-valued, fine), the arc analysis with t := s.im, γ := ρ.im. It also used ρ.re ∈ (0,1) (|re ρ| ≤ 1) for the near-axis case. Signature: ``` theorem gapCircle_sep {k : ℕ} (hk : 4000 ≤ k) {R : ℝ} (hRlo : 4 * (k : ℝ) + 5 / 2 ≤ R) (hgap : ∀ ρ : ℂ, IsNontrivialZero ρ → 1 / (16 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ |ρ.im - R| ∨ 1 ≤ |ρ.im - R|) {s : ℂ} (hs : ‖s‖ = R) {ρ : ℂ} (hρ : IsNontrivialZero ρ) (hρnorm : R - 2 < ‖ρ‖) : 1 / (32 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ ‖s - ρ‖ ``` Note: only need ‖ρ‖ > R−2 (the term bound used ‖ρ‖ > R−2 for the denominator, but the SEPARATION itself didn't use the shell range except... let me recheck hsep's proof: the strip-arc case: |t−γ| ≥ ||γ|−R| − 13/R — the hγR used hgap (any nontrivial zero) ✓ no norm range. The near-axis case: |s.re|−1 with |ρ.re| ≤ 1 ✓ no norm range. So the separation holds for ALL nontrivial ρ — no ‖ρ‖ range needed at all!! Interesting — so gapCircle_sep can drop hρnorm entirely. (In shell_crit the range was for the TERM bound, not the separation.) But careful — in shell_crit's hsep, hρRm2'/hρRp2 were obtained but... scanning my proof: hsep's strip case used only hgap + the arc bounds ✓; the near-axis case used hreρ : |ρ.re| ≤ 1 ✓. So no norm range — drop it. 5. `gapCircle_sep_near`: for ρ ∈ nearZeros (s.im) with the gap circle: 1/(32Ĉ₀) ≤ ‖s−ρ‖: ``` theorem gapCircle_sep_of_mem_nearZeros {k} (hk) {R} (hRlo) (hgap) {s : ℂ} (hs : ‖s‖ = R) {ρ : ℂ} (hρ : ρ ∈ nearZeros (s.im)) : 1 / (32 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ ‖s - ρ‖ := by -- ρ nontrivial from zeroDisc_isNontrivial by_cases hn : R - 2 < ‖ρ‖ · exact gapCircle_sep hk hRlo hgap hs (nontrivial) · -- ‖ρ‖ ≤ R−2: ‖s−ρ‖ ≥ R−‖ρ‖ ≥ 2 ≥ 1/(32Ĉ₀) push Not at hn have h1 : (2:ℝ) ≤ ‖s - ρ‖ := by have h2 := abs_norm_sub_norm_le s ρ rw [hs, abs_of_nonneg (by linarith [hn, hRlo...] : 0 ≤ R − ‖ρ‖)] at h2 linarith [h2, hn] have h3 : 1/(32*Ĉ₀) ≤ 2 := by (Ĉ₀ ≥ 2) exact h3.trans h1 ``` zeroDisc_isNontrivial — need the exact signature: from session 023/024: `zeroDisc_isNontrivial : ρ ∈ zeroDiscFinset t → IsNontrivialZero ρ`? Let me check. Also whether nearZeros membership gives it: nearZeros t := (zeroDiscFinset t).filter (· |im−t| < 1): mem_nearZeros gives ρ ∈ zeroDiscFinset t ∧ |ρ.im − t| < 1 ✓. 6. `nearZeros_count_le {t} (ht : 10 ≤ |t|) : ∑ ρ ∈ nearZeros t, (zeroMult ρ : ℝ) ≤ 3 * A0count * Real.log (3 * max |t-1| |t+1| + 5)`: ``` -- nearZeros t ⊆ (zerosIn (t−1) (t+1)).toFinset have hsub : nearZeros t ⊆ (Zeta23.zerosIn (t-1) (t+1)).toFinset := by intro ρ hρ rw [mem_nearZeros] at hρ obtain ⟨hρd, hρt⟩ := hρ rw [Set.Finite.mem_toFinset] refine ⟨zeroDisc_isNontrivial hρd, ?_, ?_⟩ · have h1 : t - 1 < ρ.im := by have := (abs_lt.mp hρt).1 -- −1 < ρ.im − t linarith exact h1 · have h2 : ρ.im ≤ t + 1 := by have := (abs_lt.mp hρt).2 -- ρ.im − t < 1 linarith exact h2 -- bridge to Ncount calc ∑ ρ ∈ nearZeros t, (zeroMult ρ : ℝ) ≤ ∑ ρ ∈ (zerosIn (t−1) (t+1)).toFinset, (zeroMult ρ : ℝ) := Finset.sum_le_sum_of_subset_of_nonneg hsub (fun z _ _ => Nat.cast_nonneg _) _ = (Zeta23.Ncount (t−1) (t+1) : ℝ) := by rw [Zeta23.Ncount, finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite _ _), Nat.cast_sum] _ ≤ A0count * 3 * Real.log (3 * max |t−1| |t+1| + 5) := by have h1 := Ncount_le_of_interval_gen (a := t−1) (b := t+1) (by linarith) have h2 : t + 1 - (t - 1) + 1 = 3 := by ring rw [h2] at h1 exact h1 _ = 3 * A0count * Real.log (3 * max |t−1| |t+1| + 5) := by ring ``` Hmm wait — zerosIn membership requires IsNontrivialZero ρ AND a < im ∧ im ≤ b — zerosIn's def: {ρ | IsNontrivialZero ρ ∧ a < im ∧ im ≤ b} ✓ refine ⟨nt, h1, h2⟩ — but is the finset's underlying set in that form? zerosIn_finite (a) (b) : (zerosIn a b).Finite: toFinset membership via Set.Finite.mem_toFinset ⟸ membership in the set ✓. Hmm — careful: zerosIn's set-builder: check Zeta23.Ncount def: Ncount a b := ∑ᶠ ρ ∈ zerosIn a b, zeroMult ρ — zerosIn a b := {ρ : ℂ | IsNontrivialZero ρ ∧ a < ρ.im ∧ ρ.im ≤ b} — the exact field order (from Ncount_add_of_le's proof: obtain ⟨hρ, ha, hc⟩ := hρc with hρ : IsNontrivialZero, ha : a < im, hc : im ≤ c ✓). Let me check zeroDisc_isNontrivial's signature.
Check `zeroDisc_isNontrivial`'s exact signature, then start building c-i.
tool: Grep ok
input
{
  "pattern": "zeroDisc_isNontrivial",
  "path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDisc.lean",
  "output_mode": "content",
  "-n": true,
  "-B": 2,
  "-A": 4,
  "head_limit": 20
}
result 2026-08-24 02:26:45Z → 2026-08-24 02:26:45Z
mode='content' num_files=0 filenames=[] content='54-`riemannZeta_ne_zero_of_one_le_re`; re ≤ 0 excluded by the FE since the\n55-disc avoids {−2n} and 0). -/\n56:theorem zeroDisc_isNontrivial {t : ℝ} {ρ : ℂ} (hρ : ρ ∈ zeroDiscFinset t) :\n57-    IsNontrivialZero ρ := by\n58-  have h2 := (mem_zeroDiscFinset.mp hρ).2\n59-  have hball := (mem_zeroDiscFinset.mp hρ).1\n60-  -- ρ ∈ closedBall (2+it) (5/2) ⟹ re ρ ∈ [−1/2, 9/2]\n--\n1000-  rw [mem_nearZeros] at hρ\n1001-  obtain ⟨hρdisc, hρim⟩ := hρ\n1002:  have hρnt : IsNontrivialZero ρ := zeroDisc_isNontrivial hρdisc\n1003-  have hρ0 : riemannZeta ρ = 0 := hρnt.1\n1004-  have hnorm1 : ‖ρ - discCenter t‖ ≤ Real.sqrt 5 := by\n1005-    have hsq : Complex.normSq (ρ - discCenter t) ≤ 5 := by\n1006-      rw [Complex.normSq_apply]' num_lines=15 num_matches=None applied_limit=None applied_offset=None
raw content_json (database row)
[{"type":"thinking","thinking":"All present:\n- `Complex.Gammaℝ_eq_zero_iff : Gammaℝ s = 0 ↔ ∃ m : ℕ, s = -2 * (m : ℂ)` (used with rw at LiContour:492).\n- `Complex.Gamma_ne_zero (h : ∀ m : ℕ, s ≠ -(m : ℂ)) : Gamma s ≠ 0`.\n- `riemannZeta_ne_zero_of_one_le_re : 1 ≤ s.re → s ≠ 1 → riemannZeta s ≠ 0` (from LiDisc:73 usage: `riemannZeta_ne_zero_of_one_le_re h h2`).\n- `zeta_zero_classification {s} (hs : riemannZeta s = 0) : IsNontrivialZero s ∨ s = 0 ∨ ∃ n : ℕ, 1 ≤ n ∧ s = -2 * (n : ℂ)`.\n\nNow let me set up the todo list and start building c-i. I'll write §10 in LiCircleBound.lean.\n\nFirst block (c-i):\n1. `differentiableAt_Gammaℝ_of_not_neg_nat`.\n2. `logDeriv_Gammaℝ_eq_of_not_neg_nat`.\n3. `gapCircle_sep` (standalone separation for ρ : ℂ).\n4. `nearZeros_count_le`.\n5. `gapCircle_sep_near` (the separation for ρ ∈ nearZeros (s.im) — any ‖ρ‖).\n\nFor #3 (gapCircle_sep): the shell_crit hsep proof but for ρ : ℂ with IsNontrivialZero ρ. The proof used hgap on ρ or conj ρ (both ℂ-valued, fine), the arc analysis with t := s.im, γ := ρ.im. It also used ρ.re ∈ (0,1) (|re ρ| ≤ 1) for the near-axis case. Signature:\n\n```\ntheorem gapCircle_sep {k : ℕ} (hk : 4000 ≤ k) {R : ℝ} (hRlo : 4 * (k : ℝ) + 5 / 2 ≤ R)\n    (hgap : ∀ ρ : ℂ, IsNontrivialZero ρ →\n      1 / (16 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ |ρ.im - R| ∨ 1 ≤ |ρ.im - R|)\n    {s : ℂ} (hs : ‖s‖ = R) {ρ : ℂ} (hρ : IsNontrivialZero ρ)\n    (hρnorm : R - 2 < ‖ρ‖) :\n    1 / (32 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ ‖s - ρ‖\n```\nNote: only need ‖ρ‖ > R−2 (the term bound used ‖ρ‖ > R−2 for the denominator, but the SEPARATION itself didn't use the shell range except... let me recheck hsep's proof: the strip-arc case: |t−γ| ≥ ||γ|−R| − 13/R — the hγR used hgap (any nontrivial zero) ✓ no norm range. The near-axis case: |s.re|−1 with |ρ.re| ≤ 1 ✓ no norm range. So the separation holds for ALL nontrivial ρ — no ‖ρ‖ range needed at all!! Interesting — so gapCircle_sep can drop hρnorm entirely. (In shell_crit the range was for the TERM bound, not the separation.) But careful — in shell_crit's hsep, hρRm2'/hρRp2 were obtained but... scanning my proof: hsep's strip case used only hgap + the arc bounds ✓; the near-axis case used hreρ : |ρ.re| ≤ 1 ✓. So no norm range — drop it.\n\n5. `gapCircle_sep_near`: for ρ ∈ nearZeros (s.im) with the gap circle: 1/(32Ĉ₀) ≤ ‖s−ρ‖:\n```\ntheorem gapCircle_sep_of_mem_nearZeros {k} (hk) {R} (hRlo) (hgap) {s : ℂ} (hs : ‖s‖ = R)\n    {ρ : ℂ} (hρ : ρ ∈ nearZeros (s.im)) :\n    1 / (32 * C0hat (4 * (k : ℝ) + 9 / 2)) ≤ ‖s - ρ‖ := by\n  -- ρ nontrivial from zeroDisc_isNontrivial\n  by_cases hn : R - 2 < ‖ρ‖\n  · exact gapCircle_sep hk hRlo hgap hs (nontrivial) \n  · -- ‖ρ‖ ≤ R−2: ‖s−ρ‖ ≥ R−‖ρ‖ ≥ 2 ≥ 1/(32Ĉ₀)\n    push Not at hn\n    have h1 : (2:ℝ) ≤ ‖s - ρ‖ := by\n      have h2 := abs_norm_sub_norm_le s ρ\n      rw [hs, abs_of_nonneg (by linarith [hn, hRlo...] : 0 ≤ R − ‖ρ‖)] at h2\n      linarith [h2, hn]\n    have h3 : 1/(32*Ĉ₀) ≤ 2 := by (Ĉ₀ ≥ 2)\n    exact h3.trans h1\n```\nzeroDisc_isNontrivial — need the exact signature: from session 023/024: `zeroDisc_isNontrivial : ρ ∈ zeroDiscFinset t → IsNontrivialZero ρ`? Let me check. Also whether nearZeros membership gives it: nearZeros t := (zeroDiscFinset t).filter (· |im−t| < 1): mem_nearZeros gives ρ ∈ zeroDiscFinset t ∧ |ρ.im − t| < 1 ✓.\n\n6. `nearZeros_count_le {t} (ht : 10 ≤ |t|) : ∑ ρ ∈ nearZeros t, (zeroMult ρ : ℝ) ≤ 3 * A0count * Real.log (3 * max |t-1| |t+1| + 5)`:\n```\n  -- nearZeros t ⊆ (zerosIn (t−1) (t+1)).toFinset\n  have hsub : nearZeros t ⊆ (Zeta23.zerosIn (t-1) (t+1)).toFinset := by\n    intro ρ hρ\n    rw [mem_nearZeros] at hρ\n    obtain ⟨hρd, hρt⟩ := hρ\n    rw [Set.Finite.mem_toFinset]\n    refine ⟨zeroDisc_isNontrivial hρd, ?_, ?_⟩\n    · have h1 : t - 1 < ρ.im := by\n        have := (abs_lt.mp hρt).1  -- −1 < ρ.im − t\n        linarith\n      exact h1\n    · have h2 : ρ.im ≤ t + 1 := by\n        have := (abs_lt.mp hρt).2  -- ρ.im − t < 1\n        linarith\n      exact h2\n  -- bridge to Ncount\n  calc ∑ ρ ∈ nearZeros t, (zeroMult ρ : ℝ)\n      ≤ ∑ ρ ∈ (zerosIn (t−1) (t+1)).toFinset, (zeroMult ρ : ℝ) :=\n        Finset.sum_le_sum_of_subset_of_nonneg hsub (fun z _ _ => Nat.cast_nonneg _)\n    _ = (Zeta23.Ncount (t−1) (t+1) : ℝ) := by\n        rw [Zeta23.Ncount, finsum_mem_eq_finite_toFinset_sum _ (Zeta23.zerosIn_finite _ _), Nat.cast_sum]\n    _ ≤ A0count * 3 * Real.log (3 * max |t−1| |t+1| + 5) := by\n        have h1 := Ncount_le_of_interval_gen (a := t−1) (b := t+1) (by linarith)\n        have h2 : t + 1 - (t - 1) + 1 = 3 := by ring\n        rw [h2] at h1\n        exact h1\n    _ = 3 * A0count * Real.log (3 * max |t−1| |t+1| + 5) := by ring\n```\nHmm wait — zerosIn membership requires IsNontrivialZero ρ AND a < im ∧ im ≤ b — zerosIn's def: {ρ | IsNontrivialZero ρ ∧ a < im ∧ im ≤ b} ✓ refine ⟨nt, h1, h2⟩ — but is the finset's underlying set in that form? zerosIn_finite (a) (b) : (zerosIn a b).Finite: toFinset membership via Set.Finite.mem_toFinset ⟸ membership in the set ✓.\n\nHmm — careful: zerosIn's set-builder: check Zeta23.Ncount def: Ncount a b := ∑ᶠ ρ ∈ zerosIn a b, zeroMult ρ — zerosIn a b := {ρ : ℂ | IsNontrivialZero ρ ∧ a < ρ.im ∧ ρ.im ≤ b} — the exact field order (from Ncount_add_of_le's proof: obtain ⟨hρ, ha, hc⟩ := hρc with hρ : IsNontrivialZero, ha : a < im, hc : im ≤ c ✓).\n\nLet me check zeroDisc_isNontrivial's signature.","signature":""},{"type":"text","text":"Check `zeroDisc_isNontrivial`'s exact signature, then start building c-i."},{"type":"tool_use","id":"Grep_159","name":"Grep","input":{"pattern":"zeroDisc_isNontrivial","path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDisc.lean","output_mode":"content","-n":true,"-B":2,"-A":4,"head_limit":20},"extra_content":null}]