← Session 29 — ii′-5e-v: circle bound (far-tail + series bounds)
thinking (21727 chars)
I have all the API I need. Now let me plan chunk 3 carefully.
**Goal:** `seriesFun_norm_le_gapCircle` — on the γ-gap circle |s| = R (from `exists_gapCircle_radius`), bound ‖seriesFun s‖ ≤ C·A₀·(log R)²-ish.
The design from STATE.md:
1. ‖seriesFun s‖ ≤ ∑' ρ, m·R/(‖ρ‖·‖s−ρ‖) via norm_tsum_le_tsum_norm + per-term norm identity (needs ζ s ≠ 0 on the circle).
2. THRESHOLD LEMMA (k ≥ 4000): 16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish.
3. ONE tsum_split_finset at F := {‖ρ‖ ≤ 2R} + tail via zero_tail_inv_sq_le.
4. The finite part by Finset.filter into low / inner-low / inner-high / critical / upper bands.
Wait — actually let me think about the structure of the bound more carefully. The term is:
‖seriesTerm s ρ‖ = mult·‖s‖/(‖ρ‖·‖s−ρ‖) = m·R/(‖ρ‖·‖s−ρ‖).
Shell bounds:
- low (‖ρ‖ ≤ 3): m·R/(‖ρ‖·‖s−ρ‖). With ‖s‖ = R, ‖ρ‖ ≤ 3, R ≥ 4k+2.5 ≥ 16000ish, ‖s−ρ‖ ≥ R−3 ≥ R/2. So term ≤ m·R/(‖ρ‖·(R−3)) ≤ 2m/‖ρ‖. Sum ≤ 2·lowZeroConst. (lowZeroConst = Σ m·(1+1/‖ρ‖), and 2/‖ρ‖ ≤ 2·(1+1/‖ρ‖), so ≤ 2·lowZeroConst.) Fine — but lowZeroConst needs ‖ρ‖ ≤ 3 membership, the term needs to be compared when ‖ρ‖ ≤ 3 AND ‖ρ‖ ≤ 2R (finite part).
- inner-low (3 < ‖ρ‖ ≤ R/2): ‖s−ρ‖ ≥ R − ‖ρ‖ ≥ R/2 ≥ ‖ρ‖ (since ‖ρ‖ ≤ R/2). Term ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖. Dyadic in ‖ρ‖: zeros with ‖ρ‖ ∈ (2^j, 2^{j+1}], j from 2 to log₂(R/2). |γ| ≥ ‖ρ‖ − 1 via norm ≤ |re|+|im|. Count via Ncount_le_of_interval_gen on [2^j−1, 2^{j+1}] hmm... Actually per design: "inner-low (3 < ‖ρ‖ ≤ R/2: term ≤ 2/‖ρ‖, dyadic in ‖ρ‖, counts via Ncount_le_of_interval_gen)". So the contribution: Σ_j (2/2^j)·A₀·(2^j+1+1)·log(3·2^{j+1}+5) ≈ Σ_j 2·A₀·log(...) ≈ O(A₀·(log R)²) over J ≈ log₂ R terms.
- inner-high (R/2 < ‖ρ‖ ≤ R−2): ‖s−ρ‖ ≥ R−‖ρ‖ ≥ 2. Term ≤ m·R/(‖ρ‖·(R−‖ρ‖)) ≤ m·R/((R/2)·(R−‖ρ‖)) = 2m/(R−‖ρ‖). Dyadic in R−‖ρ‖: R−‖ρ‖ ∈ [2^j, 2^{j+1}), ‖ρ‖ ∈ (R−2^{j+1}, R−2^j]. |γ| ≥ ‖ρ‖−1 ≥ R−2^{j+1}−1 ≈ R/2ish. Count via Ncount window of width 2^{j+1} at height ~R: ≤ A₀·(2^{j+1}+1)·log(3R+5). Term ≤ 2/2^j. Contribution per j: 2·2^{−j}·A₀·(2^{j+1}+1)·log ≈ 8·A₀·log. Number of j's: log₂(R/2−2)... hmm R−‖ρ‖ ranges from 2 to R/2, so J ≈ log₂ R terms. Total O(A₀·(log R)²).
- critical (R−2 < ‖ρ‖ < R+2): split on |im s|:
- strip arcs (|im s| ≥ 10): re s ∈ [−√(R²−100), √(R²−100)] — wait no. |s| = R, |im s| ≥ 10 ⟹ |re s| ≤ √(R²−100) < R. And for the zero ρ with ‖ρ‖ ≈ R and |re ρ| ∈ (0,1), |γ| = |im ρ| ≥ ‖ρ‖−1 ≥ R−3. Then |s−ρ| ≥ |im s − γ|... hmm need care with signs. |s−ρ| ≥ |im(s−ρ)| = |t−γ| where t = im s. Now |t| ≤ R, |γ| ≥ R−3. | |t| − |γ| | ≤ 3... that's not directly a gap. The γ-gap is about |γ − R|. Let me reconsider: |t − γ| ≥ | |γ| − |t| | when t,γ have same sign... no wait: |t−γ| ≥ ||t|−|γ|| is always true (reverse triangle). Hmm but the design says "strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R".
Let me redo this: for |s| = R with |im s| ≥ 10: |t| = |im s| ≥ 10, and |t| ≤ R. Also R − |t| = (R²−t²)/(R+|t|) = re²/(R+|t|) ≤ re²/R. If |t| ≥ 10 then |re| ≤ √(R²−100), so R−|t| ≥ R−√(R²−100) = 100/(R+√(R²−100)) ≥ 50/R. Hmm that's a lower bound on R−|t|, but we need an upper bound: |R−|t|| = R−|t| ≤ R − 10... that's big. Hmm.
Wait, I think I have the geometry wrong. Let me re-read the design: "critical (R−2 < ‖ρ‖ < R+2: strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R; near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 — the split on |im s| ≥ 10 vs < 10)".
OK so the split is on the point s on the circle:
- Case |im s| ≥ 10 (strip arcs — most of the circle): Then re s ∈ [−√(R²−100), √(R²−100)]. Hmm, and |R − |t||: |t| = √(R²−re²) ≥ √(R²−(R²−100)) = 10, and |t| ≤ R. So |R−|t|| = R−|t| ≤ R−10. That's NOT ≤ 13/R. Hmm.
Wait — maybe the split is |im s| < 10 for strip?? No wait. Let me think again. The point of the γ-gap: |t−γ| where t = im s. We have |t−γ| ≥ ||t|−|γ||... but the γ-gap gives |γ−R| ≥ 1/(16Ĉ₀) (or ≥ 1). If t and γ have the same sign: |t−γ| ≥ | |t|−|γ| | ≥ | R − |γ| | − | R−|t| |... by reverse triangle: ||t|−|γ|| ≥ ||γ|−R| − ||t|−R|. So if ||t|−R| ≤ 1/(32Ĉ₀) — i.e., |t| is CLOSE to R — then |t−γ| ≥ 1/(16Ĉ₀) − 1/(32Ĉ₀) = 1/(32Ĉ₀).
|t| close to R means re s small: |t| = √(R²−re²) ≥ R−re²/R... R−|t| = re²/(R+|t|) ≤ re²/R. So R−|t| ≤ 13/R iff re² ≤ 13 (for |t| ≤ R). Hmm, so the "strip arcs" are where |re s| ≤ √13?? That's the strip near the top/bottom of the circle where re s ∈ (0,1)-ish — i.e., s is in the critical strip region! Yes — that makes sense: "strip arcs" = the part of the circle passing through the critical strip (near the top, im ≈ ±R, re ∈ [−4,4] say). There |t| ≈ R, so |t−γ| ≈ |R−γ| ≥ 1/(16Ĉ₀) by the gap (or ≥ 1), and R−|t| = re²/(R+|t|) ≤ 16/R... the design says ≤ 13/R (re² ≤ 13 ⟸ |re| ≤ √13 ≈ 3.6, hmm, maybe |re| ≤ 3: re² ≤ 9, 9/(R+|t|) ≤ 9/R... or 13 for |re| ≤ √13).
And "near-axis arcs" = |im s| < 10, where |re s| ≥ √(R²−100) (s near ±R on the real axis). There |s−ρ| ≥ |re(s−ρ)| = |re s − re ρ| ≥ |re s| − 1 ≥ √(R²−100) − 1 ≥ R/2.
OK so the split is on |im s| ≥ 10 vs |im s| < 10. For |im s| ≥ 10... wait, that doesn't match: if s is near the top of the circle (strip arc), then im s ≈ ±R which has |im s| ≥ 10 for R ≥ 10. And near-axis arcs have |im s| < 10 (s near the real axis). But then for the strip arc bound |t−γ| ≥ 1/(32Ĉ₀), we need |re s| ≤ √13 to get R−|t| ≤ 13/R. But the strip arc |im s| ≥ 10 only gives |re s| ≤ √(R²−100), which is ≈ R, huge!
Hmm wait. Let me reconsider. Actually I bet the split for the critical annulus zeros is different. Let me think about which (s, ρ) pairs are dangerous: ‖ρ‖ ∈ (R−2, R+2), so |γ| ≥ ‖ρ‖−1 ∈ (R−3, R+1) or |γ| ≤ ‖ρ‖+1... |γ| ∈ (R−3, R+3)-ish. |s−ρ|² = (re s − re ρ)² + (t−γ)².
Dangerous case: t ≈ γ (same sign, both ≈ ±R) AND re s ≈ re ρ (small). That's exactly s in the strip arcs: |re s| ≤ ~4 and |im s| ≈ R.
If |re s| > 4: then |s−ρ| ≥ |re s − re ρ| ≥ |re s| − 1 > 3. Fine, no gap needed.
If |re s| ≤ 4: then R−|t| = re²/(R+|t|) ≤ 16/R. And |t−γ|: if t and γ same sign, |t−γ| ≥ ||t|−|γ|| ≥ |R−|γ|| − |R−|t|| ≥ 1/(16Ĉ₀) − 16/R ≥ 1/(32Ĉ₀) provided 16/R ≤ 1/(32Ĉ₀), i.e., R ≥ 512·Ĉ₀ — the threshold lemma! (STATE says "16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish" — 26 ≈ ... hmm 16·26 = 416, close to 512·... well the exact numbers will come out in the wash; the design says 13/R not 16/R, so |re| ≤ √13.)
If t, γ opposite signs: |t−γ| = |t|+|γ| ≥ |γ| ≥ R−3 ≥ R/2. Fine.
So actually the split for the critical shell should be on |re s|, not |im s|. But the design says "the split on |im s| ≥ 10 vs < 10". Hmm, and the design's near-axis bound: ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 uses |im s| < 10 ⟹ |re s| ≥ √(R²−100). And the strip arcs |im s| ≥ 10... for those, |re s| ≤ √(R²−100). But then R−|t| = re²/(R+|t|) where re² ≤ R²−100: that gives R−|t| ≤ (R²−100)/(R+|t|) = (R−|t|)(R+|t|)/(R+|t|) — circular. With |t| ≥ 10: R−|t| = (R²−t²)/(R+|t|) = re²/(R+|t|). To get R−|t| ≤ 13/R need re²·... hmm with |t| ≥ 10, R+|t| ≥ R, so R−|t| ≤ re²/R. Still need re² ≤ 13.
Wait, maybe I'm misreading: perhaps the design intends |im s| ≥ 10 for the STRIP arc but additionally |re s| ≤ √13 is automatic?? No...
Hmm, let me reconsider. Maybe the split is THREE-way for the critical shell:
- s with |re s| ≤ √13 (strip arcs — includes both |t|≥10 automatically since R big): use the γ-gap.
- s with |re s| > √13: |s−ρ| ≥ |re s| − 1 ≥ √13 − 1 ≥ 2.6 — a CONSTANT lower bound. That's plenty (no log factor)!
Actually that's even better — no need for the |im s| < 10 case with the √(R²−100) business. But the design in journal-030 says: "near-axis arcs ‖s−ρ‖ ≥ √(R²−100)−1 ≥ R/2 — NO gap needed there" and STATE says "near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2". So the design splits the CIRCLE (all shells, not just critical) into strip arcs (|im s| ≥ 10) vs near-axis arcs (|im s| < 10)?
Hmm wait, but that split (|im s| ≥ 10 everywhere on the circle) is for the LOGDERIV assembly (5e-v-c), where the strip arcs need re ∈ [−5/2, 7/2] hmm no...
Let me re-read journal-030's design for the logDeriv: "logDeriv ζ on the circle: strip arcs (re ∈ [−5/2, 7/2], |t| ≥ 10 for R ≥ 11): 5c/5d capstones... right near-axis (re ≥ √(R²−100) ≥ 2): the Dirichlet bound; left near-axis (re ≤ −√(R²−100)): 5d's logDeriv_zeta_fe..." — so for the logDeriv assembly the circle is split three ways: strip arcs (|re| ≤ ~7/2-ish, |t| ≥ 10), right near-axis (re ≥ √(R²−100)), left near-axis (re ≤ −√(R²−100)). Note √(R²−100) ≥ 7/2 for R ≥ ~11.
For the SERIES bound (this chunk), the critical shell analysis: the design says "strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R; near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 — the split on |im s| ≥ 10 vs < 10".
Hmm OK here's the thing: for the strip arc bound via the γ-gap, we need |re s| small (≤ √13). But the strip arcs as defined (|im s| ≥ 10) allow re s up to √(R²−100). Contradiction... UNLESS the intended split is:
- |im s| ≥ 10 AND |re s| ≤ √13-ish: γ-gap bound.
- otherwise: |s−ρ| ≥ max(|re s|−1, ...) — wait for |im s| ≥ 10 with |re s| > √13, |s−ρ| ≥ |re s|−1 ≥ √13−1 ≈ 2.6 (constant, fine). For |im s| < 10: |re s| ≥ √(R²−100) ⟹ |s−ρ| ≥ √(R²−100)−1 ≥ R/2.
So the real split for the critical shell: |s−ρ| ≥ min over cases. The cleanest formalization:
- If |re s| ≤ √13 (⟹ R−|t| ≤ 13/R): |s−ρ| ≥ |t−γ| ≥ | |γ| − |t| |... need same-sign vs opposite-sign: opposite sign ⟹ |t−γ| ≥ |γ| ≥ R−3. Same sign ⟹ |t−γ| ≥ |R−|γ|| − 13/R ≥ 1/(16Ĉ₀) − 13/R ≥ 1/(32Ĉ₀) by the threshold.
- If |re s| > √13: |s−ρ| ≥ |re s| − 1 ≥ √13 − 1 ≥ 5/2.
So in ALL cases on the critical shell: ‖s−ρ‖ ≥ min(1/(32Ĉ₀), 5/2) = 1/(32Ĉ₀) (since Ĉ₀ ≥ 2 ⟹ 32Ĉ₀ ≥ 64 ⟹ 1/(32Ĉ₀) ≤ 1/64 ≤ 5/2).
Then the critical-shell term: m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/((R−2)·(1/(32Ĉ₀))) = 32Ĉ₀·m·R/(R−2) ≤ 64·Ĉ₀·m (R/(R−2) ≤ 2 for R ≥ 4). Count of critical-shell zeros (mult-weighted): |γ| ≤ ‖ρ‖ ≤ R+2 and |γ| ≥ ‖ρ‖−1 ≥ R−3. So Ncount(−R−2, −R+3] + Ncount(R−3, R+2] ≤ 2·A₀·6·log(3(R+2)+5) = 12·A₀·log(3R+11). Total critical ≤ 64·Ĉ₀·12·A₀·log(3R+11) = 768·Ĉ₀·A₀·log(3R+11) = O(A₀·Ĉ₀·log R). Good — matches D-068 C1's O((log R)²·Ĉ₀)-ish... wait Ĉ₀ itself is O(log R loglog R), fine, that's part of the design (the R-bound ends up O((log R)³) after including Ĉ₀ ~ log).
- upper shell (R+2 ≤ ‖ρ‖ ≤ 2R): ‖s−ρ‖ ≥ ‖ρ‖−R ≥ 2. Term ≤ m·R/(‖ρ‖·(‖ρ‖−R)) ≤ m·R/(R·(‖ρ‖−R)) = m/(‖ρ‖−R). Dyadic in ‖ρ‖−R ∈ [2^j, 2^{j+1}): term ≤ m/2^j; count: |γ| ≤ ‖ρ‖ ≤ R+2^{j+1}, |γ| ≥ ‖ρ‖−1 ≥ R+2^j−1. Ncount window width 2^{j+1}+1 at height R+2^{j+1}: ≤ A₀(2^{j+1}+2)log(3(R+2^{j+1})+5). Per-j: 2^{-j}·A₀·(2^{j+1}+2)·log(3(R+2^{j+1})+5) ≈ 4·A₀·log. J ≈ log₂ R terms. Total O(A₀·(log R)²).
- tail (‖ρ‖ > 2R): seriesTerm_norm_le (needs 2‖s‖ ≤ ‖ρ‖, i.e. ‖ρ‖ ≥ 2R ✓, and ‖ρ‖ ≥ 2 ✓): term ≤ (17/6)·R·m/(1+‖γ‖²). Sum over ‖ρ‖ > 2R. Now ‖ρ‖ > 2R ⟹ |γ| ≥ ‖ρ‖−1 > 2R−1. So the tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+‖γ‖²) hmm but zero_tail_inv_sq_le is in terms of 1/(1+im²) not 1/(1+‖γ‖²). Let me check: tailTerm X ρ = m/(1+im²) for |im| > X. And 1+‖γ‖² vs 1+im²: ‖γ‖² = im²+(1/2−re)², and from tailTerm_summable: 1+‖γ‖² ≤ 2(1+im²). So 1/(1+‖γ‖²) ≥ 1/(2(1+im²)). Hmm we need an UPPER bound on the tail, so we need 1/(1+‖γ‖²) ≤ something with im. ‖γ‖² = im² + (1/2−re)² ≥ im² ⟹ 1/(1+‖γ‖²) ≤ 1/(1+im²). Good direction!
So tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+γ²)... wait but the sum over ‖ρ‖ > 2R of m/(1+‖γ‖²) is over a SUBSET of {|γ| > 2R−1}... hmm, need {|γ| > 2R−1} ⊇ {‖ρ‖ > 2R}: ‖ρ‖ > 2R ⟹ |im ρ| = |γ| ≥ ‖ρ‖ − |re| > 2R−1 ✓. So Σ_{‖ρ‖>2R} m/(1+‖γ‖²) ≤ Σ_{|γ|>2R−1} m/(1+im²) = tailTerm-sum ≤ 16·A₀·log(2R−1)/(2R−1) (zero_tail_inv_sq_le, needs 2R−1 ≥ 200 ✓ for R ≥ 100.5, and k ≥ 4000 gives R ≥ 16002).
Hmm wait — zero_tail_inv_sq_le's LHS is ∑' ρ, tailTerm X ρ = Σ_{|γ|>X} m/(1+im²). But we need to relate Σ_{‖ρ‖>2R} (as an if-zeroed tsum from tsum_split_finset) to it. The tsum_split_finset gives: ∑' ρ, f ρ = Σ_{ρ ∈ F} f ρ + ∑' ρ, (if ρ ∈ F then 0 else f ρ) where f ρ = m·R/(‖ρ‖·‖s−ρ‖)...
Hmm wait, actually let me restructure. The design step 1 says first bound ‖seriesFun s‖ ≤ ∑' ρ, ‖seriesTerm s ρ‖, then per-term identity: ‖seriesTerm s ρ‖ = m·R/(‖ρ‖·‖s−ρ‖) — this needs the term to be written via one_div_sub_add_one_div, requiring s−ρ ≠ 0 (ζ s ≠ 0 argument) and ρ ≠ 0. Then define g ρ := (zeroMult ρ:ℝ)·R/(‖ρ‖·‖s−ρ‖), and bound ∑' ρ, g ρ via tsum_split_finset at F := {‖ρ‖ ≤ 2R} (as a finset of the subtype — needs finiteness from finite_subtype_norm_lt).
Then:
- The finite part Σ_{ρ∈F} g ρ splits via Finset.filter into the shells. But shells are defined by ‖ρ‖ ranges — use successive filters. Might be cleaner: partition F into disjoint finsets F_low (‖ρ‖ ≤ 3), F_inlo (3 < ‖ρ‖ ≤ R/2), F_inhi (R/2 < ‖ρ‖ ≤ R−2), F_crit (R−2 < ‖ρ‖ < R+2), F_up (R+2 ≤ ‖ρ‖ ≤ 2R). These are disjoint and cover F (for R ≥ 6). Sum = sum over pieces via Finset.sum over filter... or just bound each by filtering.
- The tail ∑' ρ, if ρ ∈ F then 0 else g ρ: bound each nonzero term via seriesTerm_norm_le's conclusion hmm — actually g ρ was DEFINED as m·R/(‖ρ‖·‖s−ρ‖) which for ‖ρ‖ > 2R is ≤ (17/6)R·m/(1+‖γ‖²) — the seriesTerm_norm_le proof route. Then ∑' over the tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+im²) — but the if-zeroed tsum is over the subtype with indicator; need to dominate by tailTerm (2R−1) and use tsum_le_tsum. tailTerm's summability is proved (tailTerm_summable). And the if-zeroed g is summable (from the split machinery or by domination).
Hmm — but there's a subtlety: g ρ involves ‖s−ρ‖⁻¹ which is fine, but the bound (17/6)R·m/(1+‖γ‖²) was for ‖seriesTerm s ρ‖, and g ρ = ‖seriesTerm s ρ‖ when the identity holds (s−ρ ≠ 0). Since we established ζ s ≠ 0 on the circle ⟹ s ≠ ρ for all nontrivial ρ, the identity holds for ALL ρ. Good — so actually we can set g ρ := ‖seriesTerm s ρ‖ directly and prove g ρ = m·R/(‖ρ‖·‖s−ρ‖) as a lemma.
Plan of the Lean build for chunk 3:
**Lemma A (ζ s ≠ 0 on the circle / no nontrivial zero on the circle):** for s with ‖s‖ = R (R from the gap circle, k ≥ 1), s is not a nontrivial zero. Proof: suppose IsNontrivialZero s. Then re s ∈ (0,1), so im s ≠ 0 and |im s| = √(R²−re²). |R − |im s|| = R − √(R²−re²) = re²/(R+√(R²−re²)) ≤ 1/R (since re² ≤ 1 and R+√ ≥ R... wait √(R²−re²) ≥ 0 so R+|t| ≥ R ⟹ re²/(R+|t|) ≤ 1/R). Then by the γ-gap property: |im s − R| ≥ 1/(16Ĉ₀) or ≥ 1. If |im s| near R: |im s − R| ≤ 1/R. Need 1/R < 1/(16·Ĉ₀(4k+9/2)) i.e. 16·Ĉ₀(4k+9/2) < R — the threshold lemma. Hmm wait, but actually the γ-gap gives clearance |γ − R| for POSITIVE ordinates near R; im s could be negative: |im s| ≈ R ⟹ im s ≈ −R: then |im s − R| ≈ 2R ≥ 1 — the second disjunct, no contradiction needed... wait we need a contradiction in both cases? No: the gap says (clearance) ∨ (≥1). If im s ≈ −R, |im s − R| ≈ 2R > 1 for R > 1 — consistent, no contradiction. But if im s < 0 then |im s − (−R)|... hmm the gap circle is symmetric? The gap property is only about |ρ.im − R|. For a zero with im ≈ −R, there's no contradiction from the gap!
Hmm wait — isNontrivialZero_conj: if s is a nontrivial zero with im s < 0, then conj s is a nontrivial zero with im = −im s > 0 ≈ R. Then apply the gap to conj s: |−im s − R| = |im s + R|... hmm no: conj s has im = −(im s) ≈ R. Gap: |(−im s) − R| ≥ 1/(16Ĉ₀) or ≥ 1. And |−im s − R| = ||im s| − R| ≤ 1/R < 1/(16Ĉ₀) by threshold, and < 1. Contradiction either way.
So: for s on the circle, if IsNontrivialZero s, let t = |im s| (√(R²−re²) as computed); the zero ρ' = s if im s ≥ 0 else conj s has im ρ' = |im s|. Then |im ρ' − R| = R − |im s| ≤ re²/R ≤ 1/R < min(1, 1/(16Ĉ₀)) by threshold (needs 16Ĉ₀ < R and R > 1). Contradiction with the gap applied to ρ'.
**Lemma B (THRESHOLD, k ≥ 4000):** 16·Ĉ₀(4k+9/2) < 4k+5/2 (≤ R). Via Ĉ₀(x) = 0.886·log(x+2) + 0.433·log(log(x+2)) + something? Let me check the C0hat definition in LiSkeleton:736.
Let me look at the exact def. From LiSkeleton.lean:736: `def C0hat (t : ℝ) : ℝ :=` — need to see. It's D-056 §2's majorant: probably (2/3)·log((t+2)/(2π)) + ... hmm. Let me grep.
Also the design says: "Ĉ₀(16006) ≤ 9.36 (log(16008) ≤ 10 ⟸ 16008 ≤ 2.7182818286^10 ⟸ Real.exp_one_lt_d9 + norm_num pow chain; log 10 ≤ 2.4 ⟸ e^{0.4} ≥ 1.4 = 1+0.4 via Real.add_one_le_exp) + the increment bound Ĉ₀(x) − Ĉ₀(16006) ≤ 0.53·(x−16004)/16006 via log(a/b) ≤ a/b − 1 (Real.log_le_sub_one_of_pos)".
Then 16·Ĉ₀(4k+9/2) ≤ 16·(9.36 + 0.53·(4k+9/2−16004)/16006)... and we want this < 4k+5/2. The linear function 16·0.53/16006·(4k) ≈ 0.0021·k grows slower than 4k, and at k = 4000: 16·9.36 ≈ 150 < 16002. So with room. The design says "16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish" hmm — the ·26 might be for the critical shell arc bound: 13/R ≤ 1/(32Ĉ₀) ⟺ 13·32·Ĉ₀ ≤ R ⟺ 416·Ĉ₀ ≤ R. Yes! That's the ·26... 13·32 = 416 = 16·26. So the threshold lemma is: 416·Ĉ₀(4k+9/2) ≤ 4k+5/2 (≤ R). That gives both 16Ĉ₀ < R (for the zero-free circle) and 13/R ≤ 1/(32Ĉ₀) (for the critical arcs).
Check: 416·9.36 ≈ 3894 at k=4000 vs 16002 ✓ huge slack. Linear growth: Ĉ₀(x) ≈ 1.1·log x; 416·1.1·log(4k) vs 4k: at k=4000, 416·1.1·8.3+... ≈ 4000·... fine, and the slope of LHS ~416·1.1/(4k)·4 ≈ 0.11 at k=4000 decreasing, while RHS slope 4. So holds for all k ≥ 4000 easily.
**Lemma C (the tail via zero_tail_inv_sq_le):** tail contribution ≤ 40·A₀·log R per design. Let me redo: tail ≤ (17R/6)·16·A₀·log(2R−1)/(2R−1). log(2R−1) ≤ log(2R) = log 2 + log R ≤ 2 log R (R ≥ 2). And R/(2R−1) ≤ 1 (R ≥ 1). So ≤ (17/6)·16·A₀·2·log R = (272/3)·A₀·log R ≈ 90.7·A₀·log R. The design says ≤ 40·A₀·log R — hmm, 17/6·16 = 45.3, times 2 for the log = 90.7. Or without the log 2: log(2R−1)/(2R−1)·R ≤ log(2R)/(2R−1)·R. Eh, constants don't matter much — I'll use whatever comes out, maybe ≤ 96·A₀·log R. Fine.
Wait, actually, one issue: the tail in the tsum_split is ∑' ρ, (if ρ ∈ F then 0 else g ρ) where F = {‖ρ‖ ≤ 2R}. For ρ ∉ F (‖ρ‖ > 2R), g ρ = m·R/(‖ρ‖‖s−ρ‖) ≤ (17/6)·R·m/(1+‖γ‖²) via seriesTerm_norm_le's internals. Hmm — but rather than re-deriving, note g ρ = ‖seriesTerm s ρ‖ (the identity lemma) and seriesTerm_norm_le gives ‖seriesTerm s ρ‖ ≤ (17/6)·‖s‖·m/(1+‖γ‖²) directly for ‖ρ‖ ≥ 2 and 2‖s‖ ≤ ‖ρ‖. ‖s‖ = R. So tail term ≤ (17R/6)·m/(1+‖γ‖²) ≤ (17R/6)·m/(1+im²) = (17R/6)·tailTerm (2R−1) ρ when |γ| > 2R−1 (which holds when ‖ρ‖ > 2R). So the if-zeroed sum ≤ (17R/6)·Σ tailTerm(2R−1) ≤ (17R/6)·16A₀log(2R−1)/(2R−1).
**Lemma D (finite part shells):** This is the big one. Σ_{ρ∈F} g ρ where F = {‖ρ‖ ≤ 2R} subtype-finset.
Split F by filter into the 5 shells. Each shell:
1. **low** (‖ρ‖ ≤ 3): g ρ = mR/(‖ρ‖‖s−ρ‖), ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R−3. g ρ ≤ m·R/((R−3)·‖ρ‖) = (R/(R−3))·m/‖ρ‖ ≤ 2·m/‖ρ‖ (R ≥ 6) ≤ 2·m(1+1/‖ρ‖)... wait 2/‖ρ‖ ≤ 2(1+1/‖ρ‖) ✓. Sum ≤ 2·lowZeroConst. But careful: lowZeroConst's finset is lowZeros = {‖ρ‖ ≤ 3} (all of them, not just those in F). Since F_low = F.filter(‖ρ‖ ≤ 3) ⊆ lowZeros, sum over F_low ≤ sum over lowZeros by nonneg. Good: ≤ 2·lowZeroConst. This is a CONSTANT (no log R) — absorbed.
2. **inner-low** (3 < ‖ρ‖ ≤ R/2): g ρ ≤ 2m/‖ρ‖ (since ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R/2 ≥ ‖ρ‖... wait R−‖ρ‖ ≥ R/2 ✓ so g ρ ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖). Dyadic: for j ≥ 1 with 2^j < ‖ρ‖ ≤ 2^{j+1}, g ≤ 2m/2^j. Zeros: |γ| ≥ ‖ρ‖−1 > 2^j−1 and |γ| ≤ ‖ρ‖ ≤ 2^{j+1}. Two Ncount windows (pos/neg): Ncount(2^j−1, 2^{j+1}] + Ncount(−2^{j+1}, −(2^j−1)] ≤ 2·A₀·(2^j+2)·log(3·2^{j+1}+5). Contribution of shell-j: (2/2^j)·2A₀(2^j+2)log(3·2^{j+1}+5) = 4A₀(1+2/2^j)·log(3·2^{j+1}+5) ≤ 12·A₀·(log(3·2^{j+1}+5)) hmm ≤ 12·A₀·(j·log2 + log(3+5)... let me not precompute; assemble at the end: ≤ Σ_{j=1}^{J} 12·A₀·log(3·2^{j+1}+5) where J = ⌈log₂(R/2)⌉. log(3·2^{j+1}+5) ≤ log(8·2^{j+1}) = (j+4)log 2 ≤ (j+4)·1 hmm log 2 < 1 so ≤ j+4. So per-j ≤ 12A₀(j+4), sum over j ≤ J: 12A₀(J(J+1)/2 + 4J) = O(A₀·J²) = O(A₀(log R)²).
Number of dyadic shells: j ranges over ℕ but only finitely many shells contain zeros of F (‖ρ‖ ≤ R/2 ⟹ 2^j < R/2). Handle: define the shells as filter on F with condition 2^j < ‖ρ‖ ≤ 2^{j+1}, j ∈ Finset.range (J+1) for J with 2^J ≥ R/2... or better: sum over j : ℕ but use that shells are empty for 2^j ≥ R/2. Cleanest in Lean: sum over j ∈ Finset.range (J+1) where J = Nat.log 2 ⌊R/2⌋₊ + 1 or similar; show every ρ in inner-low has 2^j < ‖ρ‖ ≤ 2^{j+1} for a unique j (Nat.log 2 ⌊‖ρ‖⌋₊) and j ≤ J.
This is getting big. Total estimate: this chunk is probably 800–1200 lines of Lean. That's a LOT for one session. Let me think about how to split.
STATE.md says this session is "chunk 3 — the main seriesFun_norm_le_gapCircle". The previous chunk (tail bound) took a full session (031) and was ~500 lines. This chunk is bigger. Given the session protocol (sub-stages end in clean committed states), I should aim for:
**Session 032 target:** the full `seriesFun_norm_le_gapCircle` — but if it runs long, natural sub-stops:
- chunk 3a: Lemma A (no zeros on circle) + Lemma B (threshold k ≥ 4000) + the norm-identity setup (g ρ = m·R/(‖ρ‖‖s−ρ‖)) + the tsum split + the tail (Lemma C).
- chunk 3b: the five shell bounds + assembly.
Actually, let me reconsider the assembly. What exactly should the final statement be? Something like:
```
theorem seriesFun_norm_le_gapCircle (hZC : ZeroCountProp) {k : ℕ} (hk : 4000 ≤ k)
{R : ℝ} (hR : 4*k+5/2 ≤ R) (hgap : ∀ ρ, IsNontrivialZero ρ → (1/(16*C0hat(4k+9/2))) ≤ |ρ.im - R| ∨ 1 ≤ |ρ.im - R|)
{s : ℂ} (hs : ‖s‖ = R) :
‖seriesFun s‖ ≤ C * A0count * (Real.log R)^2 (or similar explicit form)
```
The exact constant doesn't matter — the squeeze only needs O((log R)³) total. Actually for 5e-v-d we need ‖Gentire‖ on the circle ≤ C(log R)³-ish with any constants. The series part is O(A₀·Ĉ₀·log R + A₀(log R)²) = O((log R)³)-ish since Ĉ₀ = O(log R·loglog R). The final Fexpr bound will fold everything. So I should pick a clean explicit bound. Given Ĉ₀(4k+9/2) ≤ Ĉ₀(R+2) (mono, R ≤ 4k+3 ⟹ 4k+9/2 ≤ R+2), and Ĉ₀(x) = (2/3)log(x+2)... let me check C0hat's actual definition.
From LiSkeleton.lean:736 — let me look at it.
Actually, let me look at C0hat and also think about what form the final bound should take. Let me grep the definition.
Let me check the exact `C0hat` definition and the `ZeroCountProp`/`zeroWindow` API.
tool: Read
input
{
"file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiSkeleton.lean",
"offset": 725,
"limit": 30
}
tool: Grep
input
{
"pattern": "(zeroWindow|ZeroCountProp|gammaOf)",
"path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiContour.lean",
"output_mode": "content",
"-n": true,
"head_limit": 30
}
raw content_json (database row)
[{"type":"thinking","thinking":"I have all the API I need. Now let me plan chunk 3 carefully.\n\n**Goal:** `seriesFun_norm_le_gapCircle` — on the γ-gap circle |s| = R (from `exists_gapCircle_radius`), bound ‖seriesFun s‖ ≤ C·A₀·(log R)²-ish.\n\nThe design from STATE.md:\n\n1. ‖seriesFun s‖ ≤ ∑' ρ, m·R/(‖ρ‖·‖s−ρ‖) via norm_tsum_le_tsum_norm + per-term norm identity (needs ζ s ≠ 0 on the circle).\n2. THRESHOLD LEMMA (k ≥ 4000): 16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish.\n3. ONE tsum_split_finset at F := {‖ρ‖ ≤ 2R} + tail via zero_tail_inv_sq_le.\n4. The finite part by Finset.filter into low / inner-low / inner-high / critical / upper bands.\n\nWait — actually let me think about the structure of the bound more carefully. The term is:\n‖seriesTerm s ρ‖ = mult·‖s‖/(‖ρ‖·‖s−ρ‖) = m·R/(‖ρ‖·‖s−ρ‖).\n\nShell bounds:\n- low (‖ρ‖ ≤ 3): m·R/(‖ρ‖·‖s−ρ‖). With ‖s‖ = R, ‖ρ‖ ≤ 3, R ≥ 4k+2.5 ≥ 16000ish, ‖s−ρ‖ ≥ R−3 ≥ R/2. So term ≤ m·R/(‖ρ‖·(R−3)) ≤ 2m/‖ρ‖. Sum ≤ 2·lowZeroConst. (lowZeroConst = Σ m·(1+1/‖ρ‖), and 2/‖ρ‖ ≤ 2·(1+1/‖ρ‖), so ≤ 2·lowZeroConst.) Fine — but lowZeroConst needs ‖ρ‖ ≤ 3 membership, the term needs to be compared when ‖ρ‖ ≤ 3 AND ‖ρ‖ ≤ 2R (finite part).\n\n- inner-low (3 < ‖ρ‖ ≤ R/2): ‖s−ρ‖ ≥ R − ‖ρ‖ ≥ R/2 ≥ ‖ρ‖ (since ‖ρ‖ ≤ R/2). Term ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖. Dyadic in ‖ρ‖: zeros with ‖ρ‖ ∈ (2^j, 2^{j+1}], j from 2 to log₂(R/2). |γ| ≥ ‖ρ‖ − 1 via norm ≤ |re|+|im|. Count via Ncount_le_of_interval_gen on [2^j−1, 2^{j+1}] hmm... Actually per design: \"inner-low (3 < ‖ρ‖ ≤ R/2: term ≤ 2/‖ρ‖, dyadic in ‖ρ‖, counts via Ncount_le_of_interval_gen)\". So the contribution: Σ_j (2/2^j)·A₀·(2^j+1+1)·log(3·2^{j+1}+5) ≈ Σ_j 2·A₀·log(...) ≈ O(A₀·(log R)²) over J ≈ log₂ R terms.\n\n- inner-high (R/2 < ‖ρ‖ ≤ R−2): ‖s−ρ‖ ≥ R−‖ρ‖ ≥ 2. Term ≤ m·R/(‖ρ‖·(R−‖ρ‖)) ≤ m·R/((R/2)·(R−‖ρ‖)) = 2m/(R−‖ρ‖). Dyadic in R−‖ρ‖: R−‖ρ‖ ∈ [2^j, 2^{j+1}), ‖ρ‖ ∈ (R−2^{j+1}, R−2^j]. |γ| ≥ ‖ρ‖−1 ≥ R−2^{j+1}−1 ≈ R/2ish. Count via Ncount window of width 2^{j+1} at height ~R: ≤ A₀·(2^{j+1}+1)·log(3R+5). Term ≤ 2/2^j. Contribution per j: 2·2^{−j}·A₀·(2^{j+1}+1)·log ≈ 8·A₀·log. Number of j's: log₂(R/2−2)... hmm R−‖ρ‖ ranges from 2 to R/2, so J ≈ log₂ R terms. Total O(A₀·(log R)²).\n\n- critical (R−2 < ‖ρ‖ < R+2): split on |im s|:\n - strip arcs (|im s| ≥ 10): re s ∈ [−√(R²−100), √(R²−100)] — wait no. |s| = R, |im s| ≥ 10 ⟹ |re s| ≤ √(R²−100) < R. And for the zero ρ with ‖ρ‖ ≈ R and |re ρ| ∈ (0,1), |γ| = |im ρ| ≥ ‖ρ‖−1 ≥ R−3. Then |s−ρ| ≥ |im s − γ|... hmm need care with signs. |s−ρ| ≥ |im(s−ρ)| = |t−γ| where t = im s. Now |t| ≤ R, |γ| ≥ R−3. | |t| − |γ| | ≤ 3... that's not directly a gap. The γ-gap is about |γ − R|. Let me reconsider: |t − γ| ≥ | |γ| − |t| | when t,γ have same sign... no wait: |t−γ| ≥ ||t|−|γ|| is always true (reverse triangle). Hmm but the design says \"strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R\". \n\nLet me redo this: for |s| = R with |im s| ≥ 10: |t| = |im s| ≥ 10, and |t| ≤ R. Also R − |t| = (R²−t²)/(R+|t|) = re²/(R+|t|) ≤ re²/R. If |t| ≥ 10 then |re| ≤ √(R²−100), so R−|t| ≥ R−√(R²−100) = 100/(R+√(R²−100)) ≥ 50/R. Hmm that's a lower bound on R−|t|, but we need an upper bound: |R−|t|| = R−|t| ≤ R − 10... that's big. Hmm.\n\nWait, I think I have the geometry wrong. Let me re-read the design: \"critical (R−2 < ‖ρ‖ < R+2: strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R; near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 — the split on |im s| ≥ 10 vs < 10)\".\n\nOK so the split is on the point s on the circle:\n- Case |im s| ≥ 10 (strip arcs — most of the circle): Then re s ∈ [−√(R²−100), √(R²−100)]. Hmm, and |R − |t||: |t| = √(R²−re²) ≥ √(R²−(R²−100)) = 10, and |t| ≤ R. So |R−|t|| = R−|t| ≤ R−10. That's NOT ≤ 13/R. Hmm.\n\nWait — maybe the split is |im s| < 10 for strip?? No wait. Let me think again. The point of the γ-gap: |t−γ| where t = im s. We have |t−γ| ≥ ||t|−|γ||... but the γ-gap gives |γ−R| ≥ 1/(16Ĉ₀) (or ≥ 1). If t and γ have the same sign: |t−γ| ≥ | |t|−|γ| | ≥ | R − |γ| | − | R−|t| |... by reverse triangle: ||t|−|γ|| ≥ ||γ|−R| − ||t|−R|. So if ||t|−R| ≤ 1/(32Ĉ₀) — i.e., |t| is CLOSE to R — then |t−γ| ≥ 1/(16Ĉ₀) − 1/(32Ĉ₀) = 1/(32Ĉ₀). \n\n|t| close to R means re s small: |t| = √(R²−re²) ≥ R−re²/R... R−|t| = re²/(R+|t|) ≤ re²/R. So R−|t| ≤ 13/R iff re² ≤ 13 (for |t| ≤ R). Hmm, so the \"strip arcs\" are where |re s| ≤ √13?? That's the strip near the top/bottom of the circle where re s ∈ (0,1)-ish — i.e., s is in the critical strip region! Yes — that makes sense: \"strip arcs\" = the part of the circle passing through the critical strip (near the top, im ≈ ±R, re ∈ [−4,4] say). There |t| ≈ R, so |t−γ| ≈ |R−γ| ≥ 1/(16Ĉ₀) by the gap (or ≥ 1), and R−|t| = re²/(R+|t|) ≤ 16/R... the design says ≤ 13/R (re² ≤ 13 ⟸ |re| ≤ √13 ≈ 3.6, hmm, maybe |re| ≤ 3: re² ≤ 9, 9/(R+|t|) ≤ 9/R... or 13 for |re| ≤ √13).\n\nAnd \"near-axis arcs\" = |im s| < 10, where |re s| ≥ √(R²−100) (s near ±R on the real axis). There |s−ρ| ≥ |re(s−ρ)| = |re s − re ρ| ≥ |re s| − 1 ≥ √(R²−100) − 1 ≥ R/2.\n\nOK so the split is on |im s| ≥ 10 vs |im s| < 10. For |im s| ≥ 10... wait, that doesn't match: if s is near the top of the circle (strip arc), then im s ≈ ±R which has |im s| ≥ 10 for R ≥ 10. And near-axis arcs have |im s| < 10 (s near the real axis). But then for the strip arc bound |t−γ| ≥ 1/(32Ĉ₀), we need |re s| ≤ √13 to get R−|t| ≤ 13/R. But the strip arc |im s| ≥ 10 only gives |re s| ≤ √(R²−100), which is ≈ R, huge!\n\nHmm wait. Let me reconsider. Actually I bet the split for the critical annulus zeros is different. Let me think about which (s, ρ) pairs are dangerous: ‖ρ‖ ∈ (R−2, R+2), so |γ| ≥ ‖ρ‖−1 ∈ (R−3, R+1) or |γ| ≤ ‖ρ‖+1... |γ| ∈ (R−3, R+3)-ish. |s−ρ|² = (re s − re ρ)² + (t−γ)². \n\nDangerous case: t ≈ γ (same sign, both ≈ ±R) AND re s ≈ re ρ (small). That's exactly s in the strip arcs: |re s| ≤ ~4 and |im s| ≈ R.\n\nIf |re s| > 4: then |s−ρ| ≥ |re s − re ρ| ≥ |re s| − 1 > 3. Fine, no gap needed.\nIf |re s| ≤ 4: then R−|t| = re²/(R+|t|) ≤ 16/R. And |t−γ|: if t and γ same sign, |t−γ| ≥ ||t|−|γ|| ≥ |R−|γ|| − |R−|t|| ≥ 1/(16Ĉ₀) − 16/R ≥ 1/(32Ĉ₀) provided 16/R ≤ 1/(32Ĉ₀), i.e., R ≥ 512·Ĉ₀ — the threshold lemma! (STATE says \"16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish\" — 26 ≈ ... hmm 16·26 = 416, close to 512·... well the exact numbers will come out in the wash; the design says 13/R not 16/R, so |re| ≤ √13.)\nIf t, γ opposite signs: |t−γ| = |t|+|γ| ≥ |γ| ≥ R−3 ≥ R/2. Fine.\n\nSo actually the split for the critical shell should be on |re s|, not |im s|. But the design says \"the split on |im s| ≥ 10 vs < 10\". Hmm, and the design's near-axis bound: ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 uses |im s| < 10 ⟹ |re s| ≥ √(R²−100). And the strip arcs |im s| ≥ 10... for those, |re s| ≤ √(R²−100). But then R−|t| = re²/(R+|t|) where re² ≤ R²−100: that gives R−|t| ≤ (R²−100)/(R+|t|) = (R−|t|)(R+|t|)/(R+|t|) — circular. With |t| ≥ 10: R−|t| = (R²−t²)/(R+|t|) = re²/(R+|t|). To get R−|t| ≤ 13/R need re²·... hmm with |t| ≥ 10, R+|t| ≥ R, so R−|t| ≤ re²/R. Still need re² ≤ 13.\n\nWait, maybe I'm misreading: perhaps the design intends |im s| ≥ 10 for the STRIP arc but additionally |re s| ≤ √13 is automatic?? No...\n\nHmm, let me reconsider. Maybe the split is THREE-way for the critical shell:\n- s with |re s| ≤ √13 (strip arcs — includes both |t|≥10 automatically since R big): use the γ-gap.\n- s with |re s| > √13: |s−ρ| ≥ |re s| − 1 ≥ √13 − 1 ≥ 2.6 — a CONSTANT lower bound. That's plenty (no log factor)!\n\nActually that's even better — no need for the |im s| < 10 case with the √(R²−100) business. But the design in journal-030 says: \"near-axis arcs ‖s−ρ‖ ≥ √(R²−100)−1 ≥ R/2 — NO gap needed there\" and STATE says \"near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2\". So the design splits the CIRCLE (all shells, not just critical) into strip arcs (|im s| ≥ 10) vs near-axis arcs (|im s| < 10)?\n\nHmm wait, but that split (|im s| ≥ 10 everywhere on the circle) is for the LOGDERIV assembly (5e-v-c), where the strip arcs need re ∈ [−5/2, 7/2] hmm no...\n\nLet me re-read journal-030's design for the logDeriv: \"logDeriv ζ on the circle: strip arcs (re ∈ [−5/2, 7/2], |t| ≥ 10 for R ≥ 11): 5c/5d capstones... right near-axis (re ≥ √(R²−100) ≥ 2): the Dirichlet bound; left near-axis (re ≤ −√(R²−100)): 5d's logDeriv_zeta_fe...\" — so for the logDeriv assembly the circle is split three ways: strip arcs (|re| ≤ ~7/2-ish, |t| ≥ 10), right near-axis (re ≥ √(R²−100)), left near-axis (re ≤ −√(R²−100)). Note √(R²−100) ≥ 7/2 for R ≥ ~11.\n\nFor the SERIES bound (this chunk), the critical shell analysis: the design says \"strip arcs |s−ρ| ≥ |t−γ| ≥ 1/(32Ĉ₀) via the γ-gap + |R−|t|| ≤ 13/R; near-axis arcs ‖s−ρ‖ ≥ |re s|−1 ≥ √(R²−100)−1 ≥ R/2 — the split on |im s| ≥ 10 vs < 10\".\n\nHmm OK here's the thing: for the strip arc bound via the γ-gap, we need |re s| small (≤ √13). But the strip arcs as defined (|im s| ≥ 10) allow re s up to √(R²−100). Contradiction... UNLESS the intended split is:\n- |im s| ≥ 10 AND |re s| ≤ √13-ish: γ-gap bound.\n- otherwise: |s−ρ| ≥ max(|re s|−1, ...) — wait for |im s| ≥ 10 with |re s| > √13, |s−ρ| ≥ |re s|−1 ≥ √13−1 ≈ 2.6 (constant, fine). For |im s| < 10: |re s| ≥ √(R²−100) ⟹ |s−ρ| ≥ √(R²−100)−1 ≥ R/2.\n\nSo the real split for the critical shell: |s−ρ| ≥ min over cases. The cleanest formalization:\n- If |re s| ≤ √13 (⟹ R−|t| ≤ 13/R): |s−ρ| ≥ |t−γ| ≥ | |γ| − |t| |... need same-sign vs opposite-sign: opposite sign ⟹ |t−γ| ≥ |γ| ≥ R−3. Same sign ⟹ |t−γ| ≥ |R−|γ|| − 13/R ≥ 1/(16Ĉ₀) − 13/R ≥ 1/(32Ĉ₀) by the threshold.\n- If |re s| > √13: |s−ρ| ≥ |re s| − 1 ≥ √13 − 1 ≥ 5/2.\n\nSo in ALL cases on the critical shell: ‖s−ρ‖ ≥ min(1/(32Ĉ₀), 5/2) = 1/(32Ĉ₀) (since Ĉ₀ ≥ 2 ⟹ 32Ĉ₀ ≥ 64 ⟹ 1/(32Ĉ₀) ≤ 1/64 ≤ 5/2).\n\nThen the critical-shell term: m·R/(‖ρ‖·‖s−ρ‖) ≤ m·R/((R−2)·(1/(32Ĉ₀))) = 32Ĉ₀·m·R/(R−2) ≤ 64·Ĉ₀·m (R/(R−2) ≤ 2 for R ≥ 4). Count of critical-shell zeros (mult-weighted): |γ| ≤ ‖ρ‖ ≤ R+2 and |γ| ≥ ‖ρ‖−1 ≥ R−3. So Ncount(−R−2, −R+3] + Ncount(R−3, R+2] ≤ 2·A₀·6·log(3(R+2)+5) = 12·A₀·log(3R+11). Total critical ≤ 64·Ĉ₀·12·A₀·log(3R+11) = 768·Ĉ₀·A₀·log(3R+11) = O(A₀·Ĉ₀·log R). Good — matches D-068 C1's O((log R)²·Ĉ₀)-ish... wait Ĉ₀ itself is O(log R loglog R), fine, that's part of the design (the R-bound ends up O((log R)³) after including Ĉ₀ ~ log).\n\n- upper shell (R+2 ≤ ‖ρ‖ ≤ 2R): ‖s−ρ‖ ≥ ‖ρ‖−R ≥ 2. Term ≤ m·R/(‖ρ‖·(‖ρ‖−R)) ≤ m·R/(R·(‖ρ‖−R)) = m/(‖ρ‖−R). Dyadic in ‖ρ‖−R ∈ [2^j, 2^{j+1}): term ≤ m/2^j; count: |γ| ≤ ‖ρ‖ ≤ R+2^{j+1}, |γ| ≥ ‖ρ‖−1 ≥ R+2^j−1. Ncount window width 2^{j+1}+1 at height R+2^{j+1}: ≤ A₀(2^{j+1}+2)log(3(R+2^{j+1})+5). Per-j: 2^{-j}·A₀·(2^{j+1}+2)·log(3(R+2^{j+1})+5) ≈ 4·A₀·log. J ≈ log₂ R terms. Total O(A₀·(log R)²).\n\n- tail (‖ρ‖ > 2R): seriesTerm_norm_le (needs 2‖s‖ ≤ ‖ρ‖, i.e. ‖ρ‖ ≥ 2R ✓, and ‖ρ‖ ≥ 2 ✓): term ≤ (17/6)·R·m/(1+‖γ‖²). Sum over ‖ρ‖ > 2R. Now ‖ρ‖ > 2R ⟹ |γ| ≥ ‖ρ‖−1 > 2R−1. So the tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+‖γ‖²) hmm but zero_tail_inv_sq_le is in terms of 1/(1+im²) not 1/(1+‖γ‖²). Let me check: tailTerm X ρ = m/(1+im²) for |im| > X. And 1+‖γ‖² vs 1+im²: ‖γ‖² = im²+(1/2−re)², and from tailTerm_summable: 1+‖γ‖² ≤ 2(1+im²). So 1/(1+‖γ‖²) ≥ 1/(2(1+im²)). Hmm we need an UPPER bound on the tail, so we need 1/(1+‖γ‖²) ≤ something with im. ‖γ‖² = im² + (1/2−re)² ≥ im² ⟹ 1/(1+‖γ‖²) ≤ 1/(1+im²). Good direction!\n\nSo tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+γ²)... wait but the sum over ‖ρ‖ > 2R of m/(1+‖γ‖²) is over a SUBSET of {|γ| > 2R−1}... hmm, need {|γ| > 2R−1} ⊇ {‖ρ‖ > 2R}: ‖ρ‖ > 2R ⟹ |im ρ| = |γ| ≥ ‖ρ‖ − |re| > 2R−1 ✓. So Σ_{‖ρ‖>2R} m/(1+‖γ‖²) ≤ Σ_{|γ|>2R−1} m/(1+im²) = tailTerm-sum ≤ 16·A₀·log(2R−1)/(2R−1) (zero_tail_inv_sq_le, needs 2R−1 ≥ 200 ✓ for R ≥ 100.5, and k ≥ 4000 gives R ≥ 16002).\n\nHmm wait — zero_tail_inv_sq_le's LHS is ∑' ρ, tailTerm X ρ = Σ_{|γ|>X} m/(1+im²). But we need to relate Σ_{‖ρ‖>2R} (as an if-zeroed tsum from tsum_split_finset) to it. The tsum_split_finset gives: ∑' ρ, f ρ = Σ_{ρ ∈ F} f ρ + ∑' ρ, (if ρ ∈ F then 0 else f ρ) where f ρ = m·R/(‖ρ‖·‖s−ρ‖)... \n\nHmm wait, actually let me restructure. The design step 1 says first bound ‖seriesFun s‖ ≤ ∑' ρ, ‖seriesTerm s ρ‖, then per-term identity: ‖seriesTerm s ρ‖ = m·R/(‖ρ‖·‖s−ρ‖) — this needs the term to be written via one_div_sub_add_one_div, requiring s−ρ ≠ 0 (ζ s ≠ 0 argument) and ρ ≠ 0. Then define g ρ := (zeroMult ρ:ℝ)·R/(‖ρ‖·‖s−ρ‖), and bound ∑' ρ, g ρ via tsum_split_finset at F := {‖ρ‖ ≤ 2R} (as a finset of the subtype — needs finiteness from finite_subtype_norm_lt).\n\nThen:\n- The finite part Σ_{ρ∈F} g ρ splits via Finset.filter into the shells. But shells are defined by ‖ρ‖ ranges — use successive filters. Might be cleaner: partition F into disjoint finsets F_low (‖ρ‖ ≤ 3), F_inlo (3 < ‖ρ‖ ≤ R/2), F_inhi (R/2 < ‖ρ‖ ≤ R−2), F_crit (R−2 < ‖ρ‖ < R+2), F_up (R+2 ≤ ‖ρ‖ ≤ 2R). These are disjoint and cover F (for R ≥ 6). Sum = sum over pieces via Finset.sum over filter... or just bound each by filtering.\n\n- The tail ∑' ρ, if ρ ∈ F then 0 else g ρ: bound each nonzero term via seriesTerm_norm_le's conclusion hmm — actually g ρ was DEFINED as m·R/(‖ρ‖·‖s−ρ‖) which for ‖ρ‖ > 2R is ≤ (17/6)R·m/(1+‖γ‖²) — the seriesTerm_norm_le proof route. Then ∑' over the tail ≤ (17R/6)·Σ_{|γ|>2R−1} m/(1+im²) — but the if-zeroed tsum is over the subtype with indicator; need to dominate by tailTerm (2R−1) and use tsum_le_tsum. tailTerm's summability is proved (tailTerm_summable). And the if-zeroed g is summable (from the split machinery or by domination).\n\nHmm — but there's a subtlety: g ρ involves ‖s−ρ‖⁻¹ which is fine, but the bound (17/6)R·m/(1+‖γ‖²) was for ‖seriesTerm s ρ‖, and g ρ = ‖seriesTerm s ρ‖ when the identity holds (s−ρ ≠ 0). Since we established ζ s ≠ 0 on the circle ⟹ s ≠ ρ for all nontrivial ρ, the identity holds for ALL ρ. Good — so actually we can set g ρ := ‖seriesTerm s ρ‖ directly and prove g ρ = m·R/(‖ρ‖·‖s−ρ‖) as a lemma.\n\nPlan of the Lean build for chunk 3:\n\n**Lemma A (ζ s ≠ 0 on the circle / no nontrivial zero on the circle):** for s with ‖s‖ = R (R from the gap circle, k ≥ 1), s is not a nontrivial zero. Proof: suppose IsNontrivialZero s. Then re s ∈ (0,1), so im s ≠ 0 and |im s| = √(R²−re²). |R − |im s|| = R − √(R²−re²) = re²/(R+√(R²−re²)) ≤ 1/R (since re² ≤ 1 and R+√ ≥ R... wait √(R²−re²) ≥ 0 so R+|t| ≥ R ⟹ re²/(R+|t|) ≤ 1/R). Then by the γ-gap property: |im s − R| ≥ 1/(16Ĉ₀) or ≥ 1. If |im s| near R: |im s − R| ≤ 1/R. Need 1/R < 1/(16·Ĉ₀(4k+9/2)) i.e. 16·Ĉ₀(4k+9/2) < R — the threshold lemma. Hmm wait, but actually the γ-gap gives clearance |γ − R| for POSITIVE ordinates near R; im s could be negative: |im s| ≈ R ⟹ im s ≈ −R: then |im s − R| ≈ 2R ≥ 1 — the second disjunct, no contradiction needed... wait we need a contradiction in both cases? No: the gap says (clearance) ∨ (≥1). If im s ≈ −R, |im s − R| ≈ 2R > 1 for R > 1 — consistent, no contradiction. But if im s < 0 then |im s − (−R)|... hmm the gap circle is symmetric? The gap property is only about |ρ.im − R|. For a zero with im ≈ −R, there's no contradiction from the gap!\n\nHmm wait — isNontrivialZero_conj: if s is a nontrivial zero with im s < 0, then conj s is a nontrivial zero with im = −im s > 0 ≈ R. Then apply the gap to conj s: |−im s − R| = |im s + R|... hmm no: conj s has im = −(im s) ≈ R. Gap: |(−im s) − R| ≥ 1/(16Ĉ₀) or ≥ 1. And |−im s − R| = ||im s| − R| ≤ 1/R < 1/(16Ĉ₀) by threshold, and < 1. Contradiction either way. \n\nSo: for s on the circle, if IsNontrivialZero s, let t = |im s| (√(R²−re²) as computed); the zero ρ' = s if im s ≥ 0 else conj s has im ρ' = |im s|. Then |im ρ' − R| = R − |im s| ≤ re²/R ≤ 1/R < min(1, 1/(16Ĉ₀)) by threshold (needs 16Ĉ₀ < R and R > 1). Contradiction with the gap applied to ρ'. \n\n**Lemma B (THRESHOLD, k ≥ 4000):** 16·Ĉ₀(4k+9/2) < 4k+5/2 (≤ R). Via Ĉ₀(x) = 0.886·log(x+2) + 0.433·log(log(x+2)) + something? Let me check the C0hat definition in LiSkeleton:736.\n\nLet me look at the exact def. From LiSkeleton.lean:736: `def C0hat (t : ℝ) : ℝ :=` — need to see. It's D-056 §2's majorant: probably (2/3)·log((t+2)/(2π)) + ... hmm. Let me grep.\n\nAlso the design says: \"Ĉ₀(16006) ≤ 9.36 (log(16008) ≤ 10 ⟸ 16008 ≤ 2.7182818286^10 ⟸ Real.exp_one_lt_d9 + norm_num pow chain; log 10 ≤ 2.4 ⟸ e^{0.4} ≥ 1.4 = 1+0.4 via Real.add_one_le_exp) + the increment bound Ĉ₀(x) − Ĉ₀(16006) ≤ 0.53·(x−16004)/16006 via log(a/b) ≤ a/b − 1 (Real.log_le_sub_one_of_pos)\".\n\nThen 16·Ĉ₀(4k+9/2) ≤ 16·(9.36 + 0.53·(4k+9/2−16004)/16006)... and we want this < 4k+5/2. The linear function 16·0.53/16006·(4k) ≈ 0.0021·k grows slower than 4k, and at k = 4000: 16·9.36 ≈ 150 < 16002. So with room. The design says \"16·Ĉ₀(4k+9/2)·26 ≤ 4k+2-ish\" hmm — the ·26 might be for the critical shell arc bound: 13/R ≤ 1/(32Ĉ₀) ⟺ 13·32·Ĉ₀ ≤ R ⟺ 416·Ĉ₀ ≤ R. Yes! That's the ·26... 13·32 = 416 = 16·26. So the threshold lemma is: 416·Ĉ₀(4k+9/2) ≤ 4k+5/2 (≤ R). That gives both 16Ĉ₀ < R (for the zero-free circle) and 13/R ≤ 1/(32Ĉ₀) (for the critical arcs).\n\nCheck: 416·9.36 ≈ 3894 at k=4000 vs 16002 ✓ huge slack. Linear growth: Ĉ₀(x) ≈ 1.1·log x; 416·1.1·log(4k) vs 4k: at k=4000, 416·1.1·8.3+... ≈ 4000·... fine, and the slope of LHS ~416·1.1/(4k)·4 ≈ 0.11 at k=4000 decreasing, while RHS slope 4. So holds for all k ≥ 4000 easily.\n\n**Lemma C (the tail via zero_tail_inv_sq_le):** tail contribution ≤ 40·A₀·log R per design. Let me redo: tail ≤ (17R/6)·16·A₀·log(2R−1)/(2R−1). log(2R−1) ≤ log(2R) = log 2 + log R ≤ 2 log R (R ≥ 2). And R/(2R−1) ≤ 1 (R ≥ 1). So ≤ (17/6)·16·A₀·2·log R = (272/3)·A₀·log R ≈ 90.7·A₀·log R. The design says ≤ 40·A₀·log R — hmm, 17/6·16 = 45.3, times 2 for the log = 90.7. Or without the log 2: log(2R−1)/(2R−1)·R ≤ log(2R)/(2R−1)·R. Eh, constants don't matter much — I'll use whatever comes out, maybe ≤ 96·A₀·log R. Fine.\n\nWait, actually, one issue: the tail in the tsum_split is ∑' ρ, (if ρ ∈ F then 0 else g ρ) where F = {‖ρ‖ ≤ 2R}. For ρ ∉ F (‖ρ‖ > 2R), g ρ = m·R/(‖ρ‖‖s−ρ‖) ≤ (17/6)·R·m/(1+‖γ‖²) via seriesTerm_norm_le's internals. Hmm — but rather than re-deriving, note g ρ = ‖seriesTerm s ρ‖ (the identity lemma) and seriesTerm_norm_le gives ‖seriesTerm s ρ‖ ≤ (17/6)·‖s‖·m/(1+‖γ‖²) directly for ‖ρ‖ ≥ 2 and 2‖s‖ ≤ ‖ρ‖. ‖s‖ = R. So tail term ≤ (17R/6)·m/(1+‖γ‖²) ≤ (17R/6)·m/(1+im²) = (17R/6)·tailTerm (2R−1) ρ when |γ| > 2R−1 (which holds when ‖ρ‖ > 2R). So the if-zeroed sum ≤ (17R/6)·Σ tailTerm(2R−1) ≤ (17R/6)·16A₀log(2R−1)/(2R−1).\n\n**Lemma D (finite part shells):** This is the big one. Σ_{ρ∈F} g ρ where F = {‖ρ‖ ≤ 2R} subtype-finset.\n\nSplit F by filter into the 5 shells. Each shell:\n\n1. **low** (‖ρ‖ ≤ 3): g ρ = mR/(‖ρ‖‖s−ρ‖), ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R−3. g ρ ≤ m·R/((R−3)·‖ρ‖) = (R/(R−3))·m/‖ρ‖ ≤ 2·m/‖ρ‖ (R ≥ 6) ≤ 2·m(1+1/‖ρ‖)... wait 2/‖ρ‖ ≤ 2(1+1/‖ρ‖) ✓. Sum ≤ 2·lowZeroConst. But careful: lowZeroConst's finset is lowZeros = {‖ρ‖ ≤ 3} (all of them, not just those in F). Since F_low = F.filter(‖ρ‖ ≤ 3) ⊆ lowZeros, sum over F_low ≤ sum over lowZeros by nonneg. Good: ≤ 2·lowZeroConst. This is a CONSTANT (no log R) — absorbed.\n\n2. **inner-low** (3 < ‖ρ‖ ≤ R/2): g ρ ≤ 2m/‖ρ‖ (since ‖s−ρ‖ ≥ R−‖ρ‖ ≥ R/2 ≥ ‖ρ‖... wait R−‖ρ‖ ≥ R/2 ✓ so g ρ ≤ m·R/(‖ρ‖·(R/2)) = 2m/‖ρ‖). Dyadic: for j ≥ 1 with 2^j < ‖ρ‖ ≤ 2^{j+1}, g ≤ 2m/2^j. Zeros: |γ| ≥ ‖ρ‖−1 > 2^j−1 and |γ| ≤ ‖ρ‖ ≤ 2^{j+1}. Two Ncount windows (pos/neg): Ncount(2^j−1, 2^{j+1}] + Ncount(−2^{j+1}, −(2^j−1)] ≤ 2·A₀·(2^j+2)·log(3·2^{j+1}+5). Contribution of shell-j: (2/2^j)·2A₀(2^j+2)log(3·2^{j+1}+5) = 4A₀(1+2/2^j)·log(3·2^{j+1}+5) ≤ 12·A₀·(log(3·2^{j+1}+5)) hmm ≤ 12·A₀·(j·log2 + log(3+5)... let me not precompute; assemble at the end: ≤ Σ_{j=1}^{J} 12·A₀·log(3·2^{j+1}+5) where J = ⌈log₂(R/2)⌉. log(3·2^{j+1}+5) ≤ log(8·2^{j+1}) = (j+4)log 2 ≤ (j+4)·1 hmm log 2 < 1 so ≤ j+4. So per-j ≤ 12A₀(j+4), sum over j ≤ J: 12A₀(J(J+1)/2 + 4J) = O(A₀·J²) = O(A₀(log R)²). \n\nNumber of dyadic shells: j ranges over ℕ but only finitely many shells contain zeros of F (‖ρ‖ ≤ R/2 ⟹ 2^j < R/2). Handle: define the shells as filter on F with condition 2^j < ‖ρ‖ ≤ 2^{j+1}, j ∈ Finset.range (J+1) for J with 2^J ≥ R/2... or better: sum over j : ℕ but use that shells are empty for 2^j ≥ R/2. Cleanest in Lean: sum over j ∈ Finset.range (J+1) where J = Nat.log 2 ⌊R/2⌋₊ + 1 or similar; show every ρ in inner-low has 2^j < ‖ρ‖ ≤ 2^{j+1} for a unique j (Nat.log 2 ⌊‖ρ‖⌋₊) and j ≤ J.\n\nThis is getting big. Total estimate: this chunk is probably 800–1200 lines of Lean. That's a LOT for one session. Let me think about how to split.\n\nSTATE.md says this session is \"chunk 3 — the main seriesFun_norm_le_gapCircle\". The previous chunk (tail bound) took a full session (031) and was ~500 lines. This chunk is bigger. Given the session protocol (sub-stages end in clean committed states), I should aim for:\n\n**Session 032 target:** the full `seriesFun_norm_le_gapCircle` — but if it runs long, natural sub-stops:\n- chunk 3a: Lemma A (no zeros on circle) + Lemma B (threshold k ≥ 4000) + the norm-identity setup (g ρ = m·R/(‖ρ‖‖s−ρ‖)) + the tsum split + the tail (Lemma C).\n- chunk 3b: the five shell bounds + assembly.\n\nActually, let me reconsider the assembly. What exactly should the final statement be? Something like:\n\n```\ntheorem seriesFun_norm_le_gapCircle (hZC : ZeroCountProp) {k : ℕ} (hk : 4000 ≤ k)\n {R : ℝ} (hR : 4*k+5/2 ≤ R) (hgap : ∀ ρ, IsNontrivialZero ρ → (1/(16*C0hat(4k+9/2))) ≤ |ρ.im - R| ∨ 1 ≤ |ρ.im - R|)\n {s : ℂ} (hs : ‖s‖ = R) :\n ‖seriesFun s‖ ≤ C * A0count * (Real.log R)^2 (or similar explicit form)\n```\n\nThe exact constant doesn't matter — the squeeze only needs O((log R)³) total. Actually for 5e-v-d we need ‖Gentire‖ on the circle ≤ C(log R)³-ish with any constants. The series part is O(A₀·Ĉ₀·log R + A₀(log R)²) = O((log R)³)-ish since Ĉ₀ = O(log R·loglog R). The final Fexpr bound will fold everything. So I should pick a clean explicit bound. Given Ĉ₀(4k+9/2) ≤ Ĉ₀(R+2) (mono, R ≤ 4k+3 ⟹ 4k+9/2 ≤ R+2), and Ĉ₀(x) = (2/3)log(x+2)... let me check C0hat's actual definition.\n\nFrom LiSkeleton.lean:736 — let me look at it.\n\nActually, let me look at C0hat and also think about what form the final bound should take. Let me grep the definition.","signature":""},{"type":"text","text":"Let me check the exact `C0hat` definition and the `ZeroCountProp`/`zeroWindow` API."},{"type":"tool_use","id":"Read_8","name":"Read","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiSkeleton.lean","offset":725,"limit":30},"extra_content":null},{"type":"tool_use","id":"Grep_9","name":"Grep","input":{"pattern":"(zeroWindow|ZeroCountProp|gammaOf)","path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiContour.lean","output_mode":"content","-n":true,"head_limit":30},"extra_content":null}]