Current task: —

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

#1606 assistant 2026-08-23 22:56:57.684 UTC · 770→2558 tok open ⤢
thinking (5125 chars)
3b committed (727f656). Now 3c: the five shell bounds + assembly. Let me plan the shell lemmas concretely. Setup for all shells: - k : ℕ, hk : 4000 ≤ k - R : ℝ, hRlo : 4k+5/2 ≤ R, hRhi : R ≤ 4k+3 - hgap : the ordinate clearance property - s : ℂ, hs : ‖s‖ = R - Derived: hsz : ¬IsNontrivialZero s (3a), hth := gapCircle_threshold hk, hĈ2 : 2 ≤ C0hat(4k+9/2), hR : 16002 ≤ R (from 4·4000+2.5), hlogR : 9 ≤ log R. The finite part F := circleZeros R. g ρ := ‖seriesTerm s ρ‖. Shell predicates (as filters on F): - P1 ρ := ‖(ρ:ℂ)‖ ≤ 3 - P2 ρ := ‖(ρ:ℂ)‖ ≤ R/2 - P3 ρ := ‖(ρ:ℂ)‖ ≤ R−2 - P4 ρ := ‖(ρ:ℂ)‖ < R+2 Partition: F.filter P1 / F.filter (¬P1 ∧ P2) / F.filter (¬P2 ∧ P3) / F.filter (¬P3 ∧ P4) / F.filter ¬P4. Wait — for the shells to match the design: - low: P1 = ‖ρ‖ ≤ 3 - inlo: ¬P1 ∧ P2: 3 < ‖ρ‖ ≤ R/2 ✓ - inhi: ¬P2 ∧ P3: R/2 < ‖ρ‖ ≤ R−2 ✓ - crit: ¬P3 ∧ P4: R−2 < ‖ρ‖ < R+2 ✓ - up: ¬P4: R+2 ≤ ‖ρ‖ ✓ And the sum: Σ_F g = Σ_{F.filter P1} + Σ_{F.filter (¬P1∧P2)} + ... via iterated Finset.sum_filter_add_sum_filter_not: Σ_F g = Σ_{F.filter P1} g + Σ_{F.filter ¬P1} g Σ_{F.filter ¬P1} g = Σ_{(F.filter ¬P1).filter P2} g + Σ_{(F.filter ¬P1).filter ¬P2} g and (F.filter ¬P1).filter P2 = F.filter (fun ρ => ¬P1 ρ ∧ P2 ρ) via Finset.filter_filter (filter P2 (filter ¬P1 F) = filter (fun a => ¬P1 a ∧ P2 a) F — check Finset.filter_filter's form: filter p (filter q s) = filter (fun a => q a ∧ p a) s. So (F.filter ¬P1).filter P2 = F.filter (¬P1 ∧ P2) ✓.) So the assembly is mechanical. Each shell bound is a standalone lemma over an explicit filter-finset: **Shell low**: `shell_low : ∑ ρ ∈ F.filter (fun ρ => ‖(ρ:ℂ)‖ ≤ 3), g ρ ≤ 2 * lowZeroConst` Per element: g ρ = m·(R/(‖ρ‖·‖s−ρ‖)) (seriesTerm_norm_eq_div) ≤ 2m(1+1/‖ρ‖): - ‖s−ρ‖ ≥ R − ‖ρ‖ ≥ R−3: ‖s−ρ‖ ≥ |‖s‖−‖ρ‖| = R−‖ρ‖ (abs_norm_sub_norm_le : |‖a‖−‖b‖| ≤ ‖a−b‖; s−ρ: ‖s‖−‖ρ‖ could be ≥ 0: R ≥ 3 ≥ ‖ρ‖ ✓ so |R−‖ρ‖| = R−‖ρ‖). - m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−3)): need ‖s−ρ‖ ≥ R−3 > 0 (R ≥ 16002) ✓ div_le_div with the product: m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−3)) ⟸ ‖ρ‖·‖s−ρ‖ ≥ ‖ρ‖·(R−3) (‖ρ‖ > 0, ‖s−ρ‖ ≥ R−3) ⟹ 1/(‖ρ‖‖s−ρ‖) ≤ 1/(‖ρ‖(R−3)) ⟹ times mR ≥ 0. Then m·R/(‖ρ‖(R−3)) = (R/(R−3))·(m/‖ρ‖) ≤ 2·(m/‖ρ‖) (R/(R−3) ≤ 2 ⟺ R ≤ 2R−6 ⟺ 6 ≤ R ✓) ≤ 2·m·(1+1/‖ρ‖) (m/‖ρ‖ ≤ m(1+1/‖ρ‖) since m ≤ m/‖ρ‖·‖ρ‖... m/‖ρ‖ ≤ m·(1+1/‖ρ‖) ⟺ m/‖ρ‖ ≤ m + m/‖ρ‖ ⟺ 0 ≤ m ✓). - Sum over the filter ≤ 2·Σ m(1+1/‖ρ‖) ≤ 2·lowZeroConst: filter ⊆ lowZeros (‖ρ‖ ≤ 3: mem lowZeros ⟺ ‖ρ‖ ≤ 3 ✓ — lowZeros is {‖ρ‖ ≤ 3}.toFinset hmm: lowZeros = (show {ρ | ‖ρ‖ ≤ 3}.Finite ...).toFinset — membership: Set.Finite.mem_toFinset: ρ ∈ lowZeros ⟺ ‖ρ‖ ≤ 3 ✓). sum_le_sum_of_subset_of_nonneg ✓ (terms m(1+1/‖ρ‖) ≥ 0 ✓). **Shell inlo** (the dyadic machine): `shell_inlo : ∑ ρ ∈ F.filter (fun ρ => ¬ ‖(ρ:ℂ)‖ ≤ 3 ∧ ‖(ρ:ℂ)‖ ≤ R/2), g ρ ≤ 15 * A0count * J * (J + 4)` — hmm wait, earlier constants: per-shell ≤ 15A₀(j+4), J shells: ≤ 15A₀J(J+4). Let me recheck with the brick ≤ 3A₀(b−a+2)·log(3·max|a||b|+5): - shell j (j ∈ Ico 1 (J+1)): a = 2^j−1, b = 2^{j+1}: b−a+2 = 2^j+3; max|a||b| = b: log(3·2^{j+1}+5) ≤ (j+4)·log2 ≤ j+4. - count ≤ 3A₀(2^j+3)(j+4). - term: g ρ = m·R/(‖ρ‖‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−‖ρ‖))... ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R/2 (‖ρ‖ ≤ R/2) ⟹ g ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖ ≤ 2m/2^j (‖ρ‖ ≥ 2^j). - shell sum ≤ (2/2^j)·3A₀(2^j+3)(j+4) = 6A₀(1+3/2^j)(j+4) ≤ 6A₀(1+3/2)(j+4)·... 3/2^j ≤ 3/2 (j ≥ 1): = 6A₀·(5/2)(j+4) = 15A₀(j+4) ✓ ≤ 15A₀(J+4). - total ≤ Σ_{j∈Ico 1 (J+1)} 15A₀(J+4) = J·15A₀(J+4) (card Ico 1 (J+1) = J). Structure in Lean per dyadic family — I'll prove a generic per-family lemma? The three dyadic families share: fiberwise decomposition, per-fiber count brick, per-fiber term bound, the j+4 log bound, J-bound. But the dyad variable differs (‖ρ‖, R−‖ρ‖, ‖ρ‖−R). A fully generic lemma would need the dyad as a parameter with hypotheses linking term bounds and counts — doable but the hypothesis list gets long. Given time, let me do ONE generic dyadic-shell lemma: ``` lemma dyadic_family_le (FS : Finset {ρ // IsNontrivialZero ρ}) (d : {ρ // IsNontrivialZero ρ} → ℝ) (J : ℕ) (C₁ : ℝ) -- term-bound constant: g ρ ≤ C₁·m/2^{j(ρ)} where j = Nat.log 2 ⌊d ρ⌋₊ (hd : ∀ ρ ∈ FS, 2 ≤ d ρ ∧ d ρ < R') -- d range (hterm : ∀ ρ ∈ FS, g ρ ≤ C₁ * (zeroMult ρ : ℝ) / (2:ℝ)^(Nat.log 2 ⌊d ρ⌋₊)) (hcount : ∀ j ∈ Ico 1 (J+1), ∀ (per-j count bound)) ``` Hmm — the count brick per shell j needs the a,b,c which depend on the family. Parameterize by giving the count bound as a hypothesis function: ``` (hcount : ∀ j : ℕ, ∑ ρ ∈ FS.filter (fun ρ => Nat.log 2 ⌊d ρ⌋₊ = j), (zeroMult (ρ:ℂ):ℝ) ≤ cnt j) ``` and then conclude Σ_{FS} g ≤ Σ_{j∈Ico 1 (J+1)} C₁/2^j·cnt j... plus needing the fiber-cover fact: every ρ ∈ FS has j(ρ) ∈ Ico 1 (J+1). Then per family, instantiate: d, J, C₁, cnt with the brick providing hcount. The generic lemma: Σ_{FS} g ≤ Σ_{FS} C₁·m/2^{j(ρ)} [sum_le_sum via hterm] = Σ_{j∈image j(·)} Σ_{fiber} C₁·m/2^j [fiberwise] = Σ_j (C₁/2^j)·(Σ_{fiber} m) [sum_congr + mul_sum] ≤ Σ_{j∈image} (C₁/2^j)·cnt j [hcount per j] ≤ Σ_{j∈Ico 1 (J+1)} (C₁/2^j)·cnt j [image ⊆ Ico, terms ≥ 0] then per-family closed form. For the fiberwise step, check if Finset.sum_fiberwise exists. Let me grep Mathlib.
3b committed. Before building 3c's dyadic machinery, check whether `Finset.sum_fiberwise` exists in this Mathlib.
tool: Bash
input
{
  "command": "cd \"D:/Python/Quantum/research/lean/NguyenRH1\" && grep -rn \"sum_fiberwise\" ../../../zeta-23-lean/.lake/packages/mathlib/Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean | head -10",
  "description": "Check for Finset.sum_fiberwise"
}
raw content_json (database row)
[{"type":"thinking","thinking":"3b committed (727f656). Now 3c: the five shell bounds + assembly.\n\nLet me plan the shell lemmas concretely. Setup for all shells: \n- k : ℕ, hk : 4000 ≤ k\n- R : ℝ, hRlo : 4k+5/2 ≤ R, hRhi : R ≤ 4k+3\n- hgap : the ordinate clearance property\n- s : ℂ, hs : ‖s‖ = R\n- Derived: hsz : ¬IsNontrivialZero s (3a), hth := gapCircle_threshold hk, hĈ2 : 2 ≤ C0hat(4k+9/2), hR : 16002 ≤ R (from 4·4000+2.5), hlogR : 9 ≤ log R.\n\nThe finite part F := circleZeros R. g ρ := ‖seriesTerm s ρ‖.\n\nShell predicates (as filters on F):\n- P1 ρ := ‖(ρ:ℂ)‖ ≤ 3\n- P2 ρ := ‖(ρ:ℂ)‖ ≤ R/2\n- P3 ρ := ‖(ρ:ℂ)‖ ≤ R−2\n- P4 ρ := ‖(ρ:ℂ)‖ < R+2\n\nPartition: F.filter P1 / F.filter (¬P1 ∧ P2) / F.filter (¬P2 ∧ P3) / F.filter (¬P3 ∧ P4) / F.filter ¬P4. Wait — for the shells to match the design:\n- low: P1 = ‖ρ‖ ≤ 3\n- inlo: ¬P1 ∧ P2: 3 < ‖ρ‖ ≤ R/2 ✓\n- inhi: ¬P2 ∧ P3: R/2 < ‖ρ‖ ≤ R−2 ✓\n- crit: ¬P3 ∧ P4: R−2 < ‖ρ‖ < R+2 ✓\n- up: ¬P4: R+2 ≤ ‖ρ‖ ✓\n\nAnd the sum: Σ_F g = Σ_{F.filter P1} + Σ_{F.filter (¬P1∧P2)} + ... via iterated Finset.sum_filter_add_sum_filter_not:\nΣ_F g = Σ_{F.filter P1} g + Σ_{F.filter ¬P1} g\nΣ_{F.filter ¬P1} g = Σ_{(F.filter ¬P1).filter P2} g + Σ_{(F.filter ¬P1).filter ¬P2} g\nand (F.filter ¬P1).filter P2 = F.filter (fun ρ => ¬P1 ρ ∧ P2 ρ) via Finset.filter_filter (filter P2 (filter ¬P1 F) = filter (fun a => ¬P1 a ∧ P2 a) F — check Finset.filter_filter's form: filter p (filter q s) = filter (fun a => q a ∧ p a) s. So (F.filter ¬P1).filter P2 = F.filter (¬P1 ∧ P2) ✓.)\n\nSo the assembly is mechanical. Each shell bound is a standalone lemma over an explicit filter-finset:\n\n**Shell low**: `shell_low : ∑ ρ ∈ F.filter (fun ρ => ‖(ρ:ℂ)‖ ≤ 3), g ρ ≤ 2 * lowZeroConst`\nPer element: g ρ = m·(R/(‖ρ‖·‖s−ρ‖)) (seriesTerm_norm_eq_div) ≤ 2m(1+1/‖ρ‖):\n- ‖s−ρ‖ ≥ R − ‖ρ‖ ≥ R−3: ‖s−ρ‖ ≥ |‖s‖−‖ρ‖| = R−‖ρ‖ (abs_norm_sub_norm_le : |‖a‖−‖b‖| ≤ ‖a−b‖; s−ρ: ‖s‖−‖ρ‖ could be ≥ 0: R ≥ 3 ≥ ‖ρ‖ ✓ so |R−‖ρ‖| = R−‖ρ‖).\n- m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−3)): need ‖s−ρ‖ ≥ R−3 > 0 (R ≥ 16002) ✓ div_le_div with the product: m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−3)) ⟸ ‖ρ‖·‖s−ρ‖ ≥ ‖ρ‖·(R−3) (‖ρ‖ > 0, ‖s−ρ‖ ≥ R−3) ⟹ 1/(‖ρ‖‖s−ρ‖) ≤ 1/(‖ρ‖(R−3)) ⟹ times mR ≥ 0. Then m·R/(‖ρ‖(R−3)) = (R/(R−3))·(m/‖ρ‖) ≤ 2·(m/‖ρ‖) (R/(R−3) ≤ 2 ⟺ R ≤ 2R−6 ⟺ 6 ≤ R ✓) ≤ 2·m·(1+1/‖ρ‖) (m/‖ρ‖ ≤ m(1+1/‖ρ‖) since m ≤ m/‖ρ‖·‖ρ‖... m/‖ρ‖ ≤ m·(1+1/‖ρ‖) ⟺ m/‖ρ‖ ≤ m + m/‖ρ‖ ⟺ 0 ≤ m ✓).\n- Sum over the filter ≤ 2·Σ m(1+1/‖ρ‖) ≤ 2·lowZeroConst: filter ⊆ lowZeros (‖ρ‖ ≤ 3: mem lowZeros ⟺ ‖ρ‖ ≤ 3 ✓ — lowZeros is {‖ρ‖ ≤ 3}.toFinset hmm: lowZeros = (show {ρ | ‖ρ‖ ≤ 3}.Finite ...).toFinset — membership: Set.Finite.mem_toFinset: ρ ∈ lowZeros ⟺ ‖ρ‖ ≤ 3 ✓). sum_le_sum_of_subset_of_nonneg ✓ (terms m(1+1/‖ρ‖) ≥ 0 ✓).\n\n**Shell inlo** (the dyadic machine): \n`shell_inlo : ∑ ρ ∈ F.filter (fun ρ => ¬ ‖(ρ:ℂ)‖ ≤ 3 ∧ ‖(ρ:ℂ)‖ ≤ R/2), g ρ ≤ 15 * A0count * J * (J + 4)` — hmm wait, earlier constants: per-shell ≤ 15A₀(j+4), J shells: ≤ 15A₀J(J+4). Let me recheck with the brick ≤ 3A₀(b−a+2)·log(3·max|a||b|+5):\n- shell j (j ∈ Ico 1 (J+1)): a = 2^j−1, b = 2^{j+1}: b−a+2 = 2^j+3; max|a||b| = b: log(3·2^{j+1}+5) ≤ (j+4)·log2 ≤ j+4.\n- count ≤ 3A₀(2^j+3)(j+4).\n- term: g ρ = m·R/(‖ρ‖‖s−ρ‖) ≤ m·R/(‖ρ‖·(R−‖ρ‖))... ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R/2 (‖ρ‖ ≤ R/2) ⟹ g ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖ ≤ 2m/2^j (‖ρ‖ ≥ 2^j).\n- shell sum ≤ (2/2^j)·3A₀(2^j+3)(j+4) = 6A₀(1+3/2^j)(j+4) ≤ 6A₀(1+3/2)(j+4)·... 3/2^j ≤ 3/2 (j ≥ 1): = 6A₀·(5/2)(j+4) = 15A₀(j+4) ✓ ≤ 15A₀(J+4).\n- total ≤ Σ_{j∈Ico 1 (J+1)} 15A₀(J+4) = J·15A₀(J+4) (card Ico 1 (J+1) = J).\n\nStructure in Lean per dyadic family — I'll prove a generic per-family lemma? The three dyadic families share: fiberwise decomposition, per-fiber count brick, per-fiber term bound, the j+4 log bound, J-bound. But the dyad variable differs (‖ρ‖, R−‖ρ‖, ‖ρ‖−R). A fully generic lemma would need the dyad as a parameter with hypotheses linking term bounds and counts — doable but the hypothesis list gets long. Given time, let me do ONE generic dyadic-shell lemma:\n\n```\nlemma dyadic_family_le (FS : Finset {ρ // IsNontrivialZero ρ}) (d : {ρ // IsNontrivialZero ρ} → ℝ)\n    (J : ℕ) (C₁ : ℝ) -- term-bound constant: g ρ ≤ C₁·m/2^{j(ρ)} where j = Nat.log 2 ⌊d ρ⌋₊\n    (hd : ∀ ρ ∈ FS, 2 ≤ d ρ ∧ d ρ < R') -- d range\n    (hterm : ∀ ρ ∈ FS, g ρ ≤ C₁ * (zeroMult ρ : ℝ) / (2:ℝ)^(Nat.log 2 ⌊d ρ⌋₊))\n    (hcount : ∀ j ∈ Ico 1 (J+1), ∀ (per-j count bound))\n```\nHmm — the count brick per shell j needs the a,b,c which depend on the family. Parameterize by giving the count bound as a hypothesis function:\n```\n    (hcount : ∀ j : ℕ, ∑ ρ ∈ FS.filter (fun ρ => Nat.log 2 ⌊d ρ⌋₊ = j), (zeroMult (ρ:ℂ):ℝ) ≤ cnt j)\n```\nand then conclude Σ_{FS} g ≤ Σ_{j∈Ico 1 (J+1)} C₁/2^j·cnt j... plus needing the fiber-cover fact: every ρ ∈ FS has j(ρ) ∈ Ico 1 (J+1).\n\nThen per family, instantiate: d, J, C₁, cnt with the brick providing hcount. The generic lemma: \nΣ_{FS} g ≤ Σ_{FS} C₁·m/2^{j(ρ)} [sum_le_sum via hterm] = Σ_{j∈image j(·)} Σ_{fiber} C₁·m/2^j [fiberwise] = Σ_j (C₁/2^j)·(Σ_{fiber} m) [sum_congr + mul_sum] ≤ Σ_{j∈image} (C₁/2^j)·cnt j [hcount per j] ≤ Σ_{j∈Ico 1 (J+1)} (C₁/2^j)·cnt j [image ⊆ Ico, terms ≥ 0] then per-family closed form.\n\nFor the fiberwise step, check if Finset.sum_fiberwise exists. Let me grep Mathlib.","signature":""},{"type":"text","text":"3b committed. Before building 3c's dyadic machinery, check whether `Finset.sum_fiberwise` exists in this Mathlib."},{"type":"tool_use","id":"Bash_66","name":"Bash","input":{"command":"cd \"D:/Python/Quantum/research/lean/NguyenRH1\" && grep -rn \"sum_fiberwise\" ../../../zeta-23-lean/.lake/packages/mathlib/Mathlib/Algebra/BigOperators/Group/Finset/Basic.lean | head -10","description":"Check for Finset.sum_fiberwise"},"extra_content":null}]