← Session 28 — ii′-5e: partial-fraction identity (zero series + F entire)
thinking (6813 chars)
§4's first part compiles (dyadClass bounds, tailTerm summable, tsum_dyadic_log, dyadic_tail_constant). Now the main tail bound `zero_tail_inv_sq_le` with the fiberwise assembly. Let me write it.
Structure:
```lean
/-- The dyadic fiber bound: the sum of m/(1+γ²) over the zeros with
dyadClass X ρ = j and X < |γ| is at most F_j. -/
-- build inside the main lemma.
/-- **The far-tail bound**: for X ≥ 200,
Σ'_{zeros with |γ| > X} m/(1+γ²) ≤ 16·A₀·log X / X. -/
theorem zero_tail_inv_sq_le {X : ℝ} (hX : 200 ≤ X) :
∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, tailTerm X ρ
≤ 16 * A0count * Real.log X / X := by
```
The assembly:
```lean
have hX0 : (0 : ℝ) < X := by linarith
-- the per-fiber bound (real): Σ_{fiber j} tailTerm X ≤ F_j
-- where F_j := A0count * 2^(j+2) * X * Real.log (3*2^(j+1)*X + 5) / (4^j * X^2)
-- hmm let me define F_j := (4 * A0count / X) * (Real.log (3 * 2^(j+1) * X + 5) / 2^j)
set F : ℕ → ℝ := fun j => (4 * A0count / X) *
(Real.log (3 * (2 : ℝ) ^ (j + 1) * X + 5) / (2 : ℝ) ^ j) with hF
-- 1. the real dyadic bound: ∑' j, F j ≤ 16 A₀ log X / X
have hFsum : Summable F := by
apply Summable.of_norm_bounded ((tsum_dyadic_log X).symm ▸ ?_)...
```
Hmm — F_j ≤ (4A₀/X)·((j+4)log2 + logX)/2^j — via log(3·2^{j+1}X+5) ≤ (j+4)log2 + logX (needs 3·2^{j+1}X+5 ≤ 2^{j+4}X: 6·2^jX + 5 ≤ 16·2^jX ⟺ 5 ≤ 10·2^jX ⟸ 10·200 ✓). So F ≤ G·(4A₀/X) with G_j := ((j+4)log2+logX)/2^j summable (tsum_dyadic_log gives the tsum value — Summable from... the tsum_dyadic_log proof has the summabilities of the two parts: G = log2·(j/2^j) + (4log2+logX)·(1/2)^j — summable via the two ✓ — let me extract a standalone `dyadicG_summable X : Summable (fun j => ((j+4)*log2 + log X)/2^j)` — refactor: prove `dyadicG_summable` + tsum_dyadic_log uses it... or just rebuild. Let me restructure tsum_dyadic_log to expose the summability: add a lemma:
```lean
lemma dyadicLog_summable (X : ℝ) :
Summable (fun j : ℕ => ((j + 4) * Real.log 2 + Real.log X) / (2 : ℝ) ^ j) := by
have hlinH := hasSum_coe_mul_geometric_of_norm_lt_one (r := (1 : ℝ) / 2) (by norm_num)
have hsplit : (fun j : ℕ => ((j + 4) * Real.log 2 + Real.log X) / (2 : ℝ) ^ j)
= fun j : ℕ => Real.log 2 * ((j : ℝ) * ((1 : ℝ) / 2) ^ j)
+ (4 * Real.log 2 + Real.log X) * ((1 : ℝ) / 2) ^ j := by
funext j
have hj : (2 : ℝ) ^ j ≠ 0 := pow_ne_zero _ two_ne_zero
rw [one_div_pow]
field_simp
ring
rw [hsplit]
exact (hlinH.summable.mul_left _).add (summable_geometric_two.mul_left _)
```
and tsum_dyadic_log uses dyadicLog_summable. OK.
The fiber count bound (the heavy part). For each j : ℕ:
- the fiber set T_j := {ρ : Z | dyadClass X ρ = j} — hmm I need Σ over the fiber of zeroMult ≤ the two Ncount intervals. The fiber's nonzero-tailTerm members have |γ| > X — but the COUNT sum over the fiber is over ALL members... For the term bound I bound each term and sum over the fiber — the fiber sum Σ_{fiber} (zeroMult ρ)·(1/(4^jX²)) — but the terms with |γ| ≤ X have tailTerm = 0 — so Σ_{fiber} tailTerm ≤ Σ_{fiber, |γ|>X} (1/(4^jX²))·m ≤ (1/(4^jX²))·(count of {2^jX ≤ |γ| < 2^{j+1}X}-ish)...
To keep the plumbing manageable: bound Σ_{ρ ∈ fiber} tailTerm X ρ ≤ (1/(4^j X²))·Σ_{ρ ∈ fiber} (zeroMult ρ : ℝ)·(indicator-ish)... hmm — the terms with tailTerm = 0 contribute 0 to the LHS but their m's would be counted in the count bound — that's FINE for an upper bound (the count covers them). So: Σ_{fiber} tailTerm ≤ Σ_{fiber} (1/(4^jX²))·m = (1/(4^jX²))·Σ_{fiber} m ≤ (1/(4^jX²))·(2A₀(2^{j+1}X+3)·log(3·2^{j+1}X+5))... wait — but the fiber for j = 0 includes ALL zeros with |γ| ≤ X (dyadClass = 0 for |γ| < 2X — including |γ| ≤ X) — the count of fiber 0 ⊆ {|γ| < 2X} ≍ A₀·2X·log(6X+5) — and the term bound for fiber 0: 1/(4^0 X²) = 1/X² — so fiber-0 ≤ (1/X²)·2A₀·X·log ≍ 2A₀ log X/X ✓ fine — BUT the terms with |γ| ≤ X in fiber 0 have tailTerm = 0, so they're counted unnecessarily — harmless ✓. And the count of fiber 0 ⊆ {|γ| < 2X} ⊆ zerosIn (−1)(2X) ∪ zerosIn (−2X)(0]?? — the general cover: {|γ| < 2^j X... for the count I use the two intervals [2^j X − 1, 2^{j+1} X]-form as planned: for j = 0: |γ| < 2X and |γ| > X (nonzero terms) ⊆ (X−1, 2X] ∪ [−2X, −X+1)... fine — include everything: the count formula Ncount(2^jX−1, 2^{j+1}X] + Ncount(−2^{j+1}X, −(2^jX−1)] works for j = 0 too (covers |γ| ∈ (X−1, 2X] and the nonzero part |γ| > X ⊆ (X−1,...) ✓ wait — the fiber-0 NONZERO terms have |γ| > X: ⊆ (X, 2X) ⊆ (X−1, 2X] ✓ (X−1 = 2^0X − 1 ✓ the formula holds for j=0 ✓).
Hmm — but there's a subtlety: for the count bound I should count ONLY the nonzero-term members (|γ| > X) — but for j ≥ 1 the fiber's members all have |γ| ≥ 2^jX ≥ 2X > X ✓ all nonzero — fine either way; using the full fiber count is a slight overcount for j=0 — harmless ✓.
So the count bound: Σ_{ρ ∈ fiber j} (zeroMult ρ : ℝ) ≤ Ncount(2^jX − 1) (2^{j+1}X) + Ncount(−2^{j+1}X) (−(2^jX − 1))·... — wait the negative interval: γ ∈ [−2^{j+1}X, −(2^jX−1))... hmm the negative side: −|γ| with |γ| ∈ [2^jX−1?? — let me redo: the nonzero members of fiber j have |γ| ∈ (X, 2^{j+1}X) ∩ [2^j X, ∞)... for j ≥ 1: |γ| ∈ [2^jX, 2^{j+1}X): positive side γ ∈ [2^jX, 2^{j+1}X) ⊆ (2^jX−1, 2^{j+1}X] ✓ = zerosIn (2^jX−1) (2^{j+1}X) ✓; negative side γ ∈ (−2^{j+1}X, −2^jX] ⊆ zerosIn (−2^{j+1}X) (−2^jX) ✓ (T₁ < im ≤ T₂: −2^{j+1}X < γ ≤ −2^jX ✓). For j = 0: nonzero members |γ| ∈ (X, 2X): positive ⊆ (X, 2X) ⊆ (X−1, 2X] ✓; negative: γ ∈ (−2X, −X) ⊆ zerosIn (−2X) (−X)?? −2X < γ ≤ −X: γ > −2X ✓ γ ≤ −X?? my range: γ ∈ (−2X, −X): γ < −X < −X... γ ≤ −X ✓ (γ < −X ⟹ γ ≤ −X ✓). So negative side ⊆ zerosIn (−2^{j+1}X) (−2^jX) ✓ for all j (for j=0: (−2X, −X) ⊆ (−2X, −X] ✓).
Count: Ncount(2^jX−1, 2^{j+1}X] ≤ A₀(2^{j+1}X − (2^jX−1) + 1)·log(3·max(|2^jX−1|, 2^{j+1}X)+5) = A₀(2^jX + 2)·log(3·2^{j+1}X + 5) (max: 2^{j+1}X since 2^jX−1 ≤ 2^{j+1}X ✓ and both nonneg ✓ |2^jX−1| = 2^jX−1 (≥ 199 > 0) ✓).
Ncount(−2^{j+1}X, −2^jX] ≤ A₀(2^jX+1)·log(3·2^{j+1}X+5) (max |−2^{j+1}X|, |−2^jX| = 2^{j+1}X ✓).
Total ≤ A₀(2^{j+1}X + 3)·log(...) ≤ A₀(2^{j+2}X)·log(...) (2^{j+1}X + 3 ≤ 2^{j+2}X ⟺ 3 ≤ 2^{j+1}X ✓ X ≥ 200).
So F_j := A₀·2^{j+2}·X·log(3·2^{j+1}X+5)/(4^j X²) — let me simplify the final form: 2^{j+2}/4^j = 4/2^j: F_j = (4A₀/X)·log(3·2^{j+1}X+5)/2^j ✓ (as I set above).
The fiber-sum-to-interval-counts bridge: the fiber (a Finset of Z) maps via Subtype.val to ℂ; the image ⊆ zerosIn a b ∪ zerosIn a' b' — as finsets of ℂ — the two toFinsets; sum over image ≤ sum over union ≤ sum + sum — via Finset.sum_le_sum_of_subset_of_nonneg into (W1.toFinset ∪ W2.toFinset) then Finset.sum_union (disjoint? the two windows are disjoint (im > 0 vs im ≤ negative... 2^jX−1 ≥ 199 > 0 > −2^jX: disjoint ✓ `Set.disjoint` via im signs ✓)).
This is the heaviest plumbing. ~120 lines for the count bridge.
Let me now write the whole §4-main. I'll write it carefully.
Part 1 clean. Now the main tail bound — writing the fiber count bridge and the assembly.
tool: Edit
input
{
"file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiCircleBound.lean",
"old_string": "lemma dyadicLog_summable_PLACEHOLDER : True := by trivial\n\nend NguyenRH1\n\nend",
"new_string": "lemma dyadicLog_summable_PLACEHOLDER : True := by trivial\n\nend NguyenRH1\n\nend",
"replace_all": false
}
raw content_json (database row)
[{"type":"thinking","thinking":"§4's first part compiles (dyadClass bounds, tailTerm summable, tsum_dyadic_log, dyadic_tail_constant). Now the main tail bound `zero_tail_inv_sq_le` with the fiberwise assembly. Let me write it.\n\nStructure:\n```lean\n/-- The dyadic fiber bound: the sum of m/(1+γ²) over the zeros with\ndyadClass X ρ = j and X < |γ| is at most F_j. -/\n-- build inside the main lemma.\n\n/-- **The far-tail bound**: for X ≥ 200,\nΣ'_{zeros with |γ| > X} m/(1+γ²) ≤ 16·A₀·log X / X. -/\ntheorem zero_tail_inv_sq_le {X : ℝ} (hX : 200 ≤ X) :\n ∑' ρ : {ρ : ℂ // IsNontrivialZero ρ}, tailTerm X ρ\n ≤ 16 * A0count * Real.log X / X := by\n```\n\nThe assembly:\n```lean\n have hX0 : (0 : ℝ) < X := by linarith\n -- the per-fiber bound (real): Σ_{fiber j} tailTerm X ≤ F_j\n -- where F_j := A0count * 2^(j+2) * X * Real.log (3*2^(j+1)*X + 5) / (4^j * X^2)\n -- hmm let me define F_j := (4 * A0count / X) * (Real.log (3 * 2^(j+1) * X + 5) / 2^j)\n set F : ℕ → ℝ := fun j => (4 * A0count / X) *\n (Real.log (3 * (2 : ℝ) ^ (j + 1) * X + 5) / (2 : ℝ) ^ j) with hF\n -- 1. the real dyadic bound: ∑' j, F j ≤ 16 A₀ log X / X\n have hFsum : Summable F := by\n apply Summable.of_norm_bounded ((tsum_dyadic_log X).symm ▸ ?_)...\n```\nHmm — F_j ≤ (4A₀/X)·((j+4)log2 + logX)/2^j — via log(3·2^{j+1}X+5) ≤ (j+4)log2 + logX (needs 3·2^{j+1}X+5 ≤ 2^{j+4}X: 6·2^jX + 5 ≤ 16·2^jX ⟺ 5 ≤ 10·2^jX ⟸ 10·200 ✓). So F ≤ G·(4A₀/X) with G_j := ((j+4)log2+logX)/2^j summable (tsum_dyadic_log gives the tsum value — Summable from... the tsum_dyadic_log proof has the summabilities of the two parts: G = log2·(j/2^j) + (4log2+logX)·(1/2)^j — summable via the two ✓ — let me extract a standalone `dyadicG_summable X : Summable (fun j => ((j+4)*log2 + log X)/2^j)` — refactor: prove `dyadicG_summable` + tsum_dyadic_log uses it... or just rebuild. Let me restructure tsum_dyadic_log to expose the summability: add a lemma:\n```lean\nlemma dyadicLog_summable (X : ℝ) :\n Summable (fun j : ℕ => ((j + 4) * Real.log 2 + Real.log X) / (2 : ℝ) ^ j) := by\n have hlinH := hasSum_coe_mul_geometric_of_norm_lt_one (r := (1 : ℝ) / 2) (by norm_num)\n have hsplit : (fun j : ℕ => ((j + 4) * Real.log 2 + Real.log X) / (2 : ℝ) ^ j)\n = fun j : ℕ => Real.log 2 * ((j : ℝ) * ((1 : ℝ) / 2) ^ j)\n + (4 * Real.log 2 + Real.log X) * ((1 : ℝ) / 2) ^ j := by\n funext j\n have hj : (2 : ℝ) ^ j ≠ 0 := pow_ne_zero _ two_ne_zero\n rw [one_div_pow]\n field_simp\n ring\n rw [hsplit]\n exact (hlinH.summable.mul_left _).add (summable_geometric_two.mul_left _)\n```\nand tsum_dyadic_log uses dyadicLog_summable. OK.\n\nThe fiber count bound (the heavy part). For each j : ℕ:\n- the fiber set T_j := {ρ : Z | dyadClass X ρ = j} — hmm I need Σ over the fiber of zeroMult ≤ the two Ncount intervals. The fiber's nonzero-tailTerm members have |γ| > X — but the COUNT sum over the fiber is over ALL members... For the term bound I bound each term and sum over the fiber — the fiber sum Σ_{fiber} (zeroMult ρ)·(1/(4^jX²)) — but the terms with |γ| ≤ X have tailTerm = 0 — so Σ_{fiber} tailTerm ≤ Σ_{fiber, |γ|>X} (1/(4^jX²))·m ≤ (1/(4^jX²))·(count of {2^jX ≤ |γ| < 2^{j+1}X}-ish)...\n\nTo keep the plumbing manageable: bound Σ_{ρ ∈ fiber} tailTerm X ρ ≤ (1/(4^j X²))·Σ_{ρ ∈ fiber} (zeroMult ρ : ℝ)·(indicator-ish)... hmm — the terms with tailTerm = 0 contribute 0 to the LHS but their m's would be counted in the count bound — that's FINE for an upper bound (the count covers them). So: Σ_{fiber} tailTerm ≤ Σ_{fiber} (1/(4^jX²))·m = (1/(4^jX²))·Σ_{fiber} m ≤ (1/(4^jX²))·(2A₀(2^{j+1}X+3)·log(3·2^{j+1}X+5))... wait — but the fiber for j = 0 includes ALL zeros with |γ| ≤ X (dyadClass = 0 for |γ| < 2X — including |γ| ≤ X) — the count of fiber 0 ⊆ {|γ| < 2X} ≍ A₀·2X·log(6X+5) — and the term bound for fiber 0: 1/(4^0 X²) = 1/X² — so fiber-0 ≤ (1/X²)·2A₀·X·log ≍ 2A₀ log X/X ✓ fine — BUT the terms with |γ| ≤ X in fiber 0 have tailTerm = 0, so they're counted unnecessarily — harmless ✓. And the count of fiber 0 ⊆ {|γ| < 2X} ⊆ zerosIn (−1)(2X) ∪ zerosIn (−2X)(0]?? — the general cover: {|γ| < 2^j X... for the count I use the two intervals [2^j X − 1, 2^{j+1} X]-form as planned: for j = 0: |γ| < 2X and |γ| > X (nonzero terms) ⊆ (X−1, 2X] ∪ [−2X, −X+1)... fine — include everything: the count formula Ncount(2^jX−1, 2^{j+1}X] + Ncount(−2^{j+1}X, −(2^jX−1)] works for j = 0 too (covers |γ| ∈ (X−1, 2X] and the nonzero part |γ| > X ⊆ (X−1,...) ✓ wait — the fiber-0 NONZERO terms have |γ| > X: ⊆ (X, 2X) ⊆ (X−1, 2X] ✓ (X−1 = 2^0X − 1 ✓ the formula holds for j=0 ✓).\n\nHmm — but there's a subtlety: for the count bound I should count ONLY the nonzero-term members (|γ| > X) — but for j ≥ 1 the fiber's members all have |γ| ≥ 2^jX ≥ 2X > X ✓ all nonzero — fine either way; using the full fiber count is a slight overcount for j=0 — harmless ✓.\n\nSo the count bound: Σ_{ρ ∈ fiber j} (zeroMult ρ : ℝ) ≤ Ncount(2^jX − 1) (2^{j+1}X) + Ncount(−2^{j+1}X) (−(2^jX − 1))·... — wait the negative interval: γ ∈ [−2^{j+1}X, −(2^jX−1))... hmm the negative side: −|γ| with |γ| ∈ [2^jX−1?? — let me redo: the nonzero members of fiber j have |γ| ∈ (X, 2^{j+1}X) ∩ [2^j X, ∞)... for j ≥ 1: |γ| ∈ [2^jX, 2^{j+1}X): positive side γ ∈ [2^jX, 2^{j+1}X) ⊆ (2^jX−1, 2^{j+1}X] ✓ = zerosIn (2^jX−1) (2^{j+1}X) ✓; negative side γ ∈ (−2^{j+1}X, −2^jX] ⊆ zerosIn (−2^{j+1}X) (−2^jX) ✓ (T₁ < im ≤ T₂: −2^{j+1}X < γ ≤ −2^jX ✓). For j = 0: nonzero members |γ| ∈ (X, 2X): positive ⊆ (X, 2X) ⊆ (X−1, 2X] ✓; negative: γ ∈ (−2X, −X) ⊆ zerosIn (−2X) (−X)?? −2X < γ ≤ −X: γ > −2X ✓ γ ≤ −X?? my range: γ ∈ (−2X, −X): γ < −X < −X... γ ≤ −X ✓ (γ < −X ⟹ γ ≤ −X ✓). So negative side ⊆ zerosIn (−2^{j+1}X) (−2^jX) ✓ for all j (for j=0: (−2X, −X) ⊆ (−2X, −X] ✓).\n\nCount: Ncount(2^jX−1, 2^{j+1}X] ≤ A₀(2^{j+1}X − (2^jX−1) + 1)·log(3·max(|2^jX−1|, 2^{j+1}X)+5) = A₀(2^jX + 2)·log(3·2^{j+1}X + 5) (max: 2^{j+1}X since 2^jX−1 ≤ 2^{j+1}X ✓ and both nonneg ✓ |2^jX−1| = 2^jX−1 (≥ 199 > 0) ✓).\nNcount(−2^{j+1}X, −2^jX] ≤ A₀(2^jX+1)·log(3·2^{j+1}X+5) (max |−2^{j+1}X|, |−2^jX| = 2^{j+1}X ✓).\nTotal ≤ A₀(2^{j+1}X + 3)·log(...) ≤ A₀(2^{j+2}X)·log(...) (2^{j+1}X + 3 ≤ 2^{j+2}X ⟺ 3 ≤ 2^{j+1}X ✓ X ≥ 200).\n\nSo F_j := A₀·2^{j+2}·X·log(3·2^{j+1}X+5)/(4^j X²) — let me simplify the final form: 2^{j+2}/4^j = 4/2^j: F_j = (4A₀/X)·log(3·2^{j+1}X+5)/2^j ✓ (as I set above).\n\nThe fiber-sum-to-interval-counts bridge: the fiber (a Finset of Z) maps via Subtype.val to ℂ; the image ⊆ zerosIn a b ∪ zerosIn a' b' — as finsets of ℂ — the two toFinsets; sum over image ≤ sum over union ≤ sum + sum — via Finset.sum_le_sum_of_subset_of_nonneg into (W1.toFinset ∪ W2.toFinset) then Finset.sum_union (disjoint? the two windows are disjoint (im > 0 vs im ≤ negative... 2^jX−1 ≥ 199 > 0 > −2^jX: disjoint ✓ `Set.disjoint` via im signs ✓)).\n\nThis is the heaviest plumbing. ~120 lines for the count bridge.\n\nLet me now write the whole §4-main. I'll write it carefully.","signature":""},{"type":"text","text":"Part 1 clean. Now the main tail bound — writing the fiber count bridge and the assembly."},{"type":"tool_use","id":"Edit_374","name":"Edit","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiCircleBound.lean","old_string":"lemma dyadicLog_summable_PLACEHOLDER : True := by trivial\n\nend NguyenRH1\n\nend","new_string":"lemma dyadicLog_summable_PLACEHOLDER : True := by trivial\n\nend NguyenRH1\n\nend","replace_all":false},"extra_content":null}]