← Session 33 — ii′-3b/3c crux + F-D finding; Lagarias letter package
thinking (16350 chars)
I was building ii′-6-b. I have all the forms:
- RectangleBorder (z w) = [[z.re, w.re]] ×ℂ {z.im} ∪ {z.re} ×ℂ [[z.im, w.im]] ∪ [[z.re, w.re]] ×ℂ {w.im} ∪ {w.re} ×ℂ [[z.im, w.im]] — four sides: bottom, left, top, right.
- Rectangle z w — let me check: `Rectangle z w := [[z.re, w.re]] ×ℂ [[z.im, w.im]]` presumably.
Now write LiAssembly.lean with:
§1: sides identity (sf_abs_le_rectInt_add_sum)
§2: the bridge (zeroTerm_norm_le_four_FAlt)
Plus in LiContour.lean: the two perimeter Props + the wide pigeonhole.
Let me start with the LiContour additions (perimeter Props + wide pigeonhole). Append after NoLowZeros/two_le_C0hat region or after exists_zero_avoiding_T. The wide pigeonhole needs the three-window count — build:
```lean
/-- The wide ordinate window: nontrivial zeros with ordinate in [a−1, a+2]. -/
def zeroWindowWide (a : ℝ) : Set ℂ :=
{ρ | IsNontrivialZero ρ ∧ a - 1 ≤ ρ.im ∧ ρ.im ≤ a + 2}
theorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by
apply Set.Finite.subset (zerosIn_finite (a - 2) (a + 2))
intro ρ hρ
refine ⟨hρ.1, ?_, hρ.2.2⟩
linarith [hρ.2.1]
```
Hmm — zerosIn_finite's form: from zeroWindow_finite: `zerosIn_finite (a - 1) (a + 1)` with members ⟨hρ.1 (zero), lower-bound, upper-bound⟩. The refinement: zerosIn_finite t1 t2 gives zeros with t1 ≤ im ≤ t2+1? From zeroWindow_finite: window [a, a+1] ⊆ zerosIn_finite (a−1) (a+1) with the proof refine ⟨hρ.1, ?_, hρ.2.2⟩; linarith [hρ.2.1] — so zerosIn_finite A B's membership is: zero ∧ A ≤ im ∧ im ≤ B+1? The refine gives ⟨zero, ?_, hρ.2.2⟩ where hρ.2.2 : im ≤ a+1 (the window's upper). And ?_ is discharged by linarith [hρ.2.1] (hρ.2.1 : a ≤ im). So zerosIn_finite A B membership components: (zero, A ≤ im, im ≤ B+1)?? For window [a, a+1] via zerosIn_finite (a−1) (a+1): components (a−1 ≤ im [from hρ.2.1: a ≤ im via linarith], im ≤ (a+1)+1 = a+2?? but hρ.2.2 : im ≤ a+1 is passed directly — so the third component is im ≤ a+1 = (a+1)... hmm inconsistent. Let me look at zerosIn_finite's exact signature in Zeta23.
Actually — simpler: zeroWindowWide ⊆ zeroWindow (a−1) ∪ zeroWindow a ∪ zeroWindow (a+1), each finite ✓ no zerosIn_finite needed:
```lean
theorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by
apply Set.Finite.subset ((zeroWindow_finite (a - 1)).union
((zeroWindow_finite a).union (zeroWindow_finite (a + 1))))
intro ρ hρ
simp only [Set.mem_union, zeroWindow, Set.mem_setOf_eq]
by_cases h1 : a - 1 ≤ ρ.im
· left; exact ⟨hρ.1, h1, hρ.2.2⟩ -- wait need im ≤ (a−1)+1 = a: not given
...
```
Hmm — zeroWindowWide a : a−1 ≤ im ≤ a+2. Case split: im ≤ a → zeroWindow (a−1) (a−1 ≤ im ≤ a = (a−1)+1 ✓); a ≤ im ≤ a+1 → zeroWindow a ✓; a+1 ≤ im ≤ a+2 → zeroWindow (a+1) ✓. By trichotomy:
```lean
theorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by
apply Set.Finite.subset ((zeroWindow_finite (a - 1)).union
((zeroWindow_finite a).union (zeroWindow_finite (a + 1))))
intro ρ hρ
obtain ⟨hz, hlo, hhi⟩ := hρ
by_cases h1 : ρ.im ≤ a
· exact Or.inl ⟨hz, hlo, h1⟩
· by_cases h2 : ρ.im ≤ a + 1
· exact Or.inr (Or.inl ⟨hz, by linarith, h2⟩)
· exact Or.inr (Or.inr ⟨hz, by linarith, hhi⟩)
```
Wait — the union membership: the set is zeroWindow (a−1) ∪ (zeroWindow a ∪ zeroWindow (a+1)) — membership forms ✓ as written (the ⊆ relation via Set.Finite.subset: goal ρ ∈ zeroWindow (a−1) ∪ (zeroWindow a ∪ zeroWindow (a+1))). The union lemmas: mem_union. My exacts give the Prop forms — need Set.mem_union.mpr or the direct: `Or.inl ⟨hz, hlo, h1⟩` — membership in a union of SETS (not lists): ρ ∈ A ∪ B ↔ ρ ∈ A ∨ ρ ∈ B ✓ defeq to Or — exact Or.inl works ✓.
Then the count:
```lean
theorem zeroWindowWide_card_le (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :
((zeroWindowWide_finite a).toFinset.card : ℝ) ≤ 3 * C0hat (a + 2) := by
-- the mult-sum over the wide window ≤ sum of the three unit windows
have hsub : (zeroWindowWide_finite a).toFinset ⊆
(zeroWindow_finite (a - 1)).toFinset ∪
((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset) := by
intro ρ hρ
have hmem : ρ ∈ zeroWindowWide a := (zeroWindowWide_finite a).mem_toFinset.mpr hρ
obtain ⟨hz, hlo, hhi⟩ := hmem
by_cases h1 : ρ.im ≤ a
· exact Finset.mem_union.mpr (Or.inl ((zeroWindow_finite (a-1)).mem_toFinset.mpr ⟨hz, hlo, h1⟩))
· by_cases h2 : ρ.im ≤ a + 1
· exact Finset.mem_union.mpr (Or.inr (Finset.mem_union.mpr (Or.inl
((zeroWindow_finite a).mem_toFinset.mpr ⟨hz, by linarith, h2⟩))))
· exact Finset.mem_union.mpr (Or.inr (Finset.mem_union.mpr (Or.inr
((zeroWindow_finite (a+1)).mem_toFinset.mpr ⟨hz, by linarith, hhi⟩))))
have hsum_le : (((zeroWindowWide_finite a).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤
3 * C0hat (a + 2) := by
have h1 := Finset.sum_le_sum_of_subset_of_nonneg hsub (fun ρ _ => Nat.cast_nonneg _)
have h2 := Finset.sum_union ... -- messy; simpler: sum over union ≤ sum of parts (with double counting allowed): Finset.sum_union_inter?
```
Hmm — the union sum with overlaps: sum over A ∪ B ≤ sum A + sum B for nonneg (Finset.sum_union_inter or the direct: sum over the union ≤ sum of the three via `Finset.sum_le_sum_of_subset_of_nonneg` applied... no — sum over union = sum A + sum B − sum (A∩B) ≤ sum A + sum B (nonneg terms) — there's `Finset.sum_union_inter` : sum (s ∪ t) + sum (s ∩ t) = sum s + sum t. So sum (s ∪ t) ≤ sum s + sum t (nonneg intersection sum ≥ 0). For triple: ≤ sum A + sum B + sum C. Each ≤ C0hat(a), C0hat(a+1), C0hat(a+2) via hZC (a−1 ≥ 2 ✓ ha : 3 ≤ a; a ≥ 2 ✓; a+1 ≥ 2 ✓). Then C0hat(a) ≤ C0hat(a+2) and C0hat(a+1) ≤ C0hat(a+2) via C0hat_mono — does C0hat_mono exist? From LiGapCircles (5e-i used C0hat_mono). Let me assume `C0hat_mono : Monotone C0hat` or similar — grep later.
Then card ≤ Σ mult (same pattern as exists_zero_avoiding_T's hWFcard) ≤ 3·C0hat(a+2).
Then exists_zero_avoiding_T_wide clones exists_zero_avoiding_T:
```lean
theorem exists_zero_avoiding_T_wide (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :
∃ T : ℝ, a ≤ T ∧ T ≤ a + 1 ∧
∀ ρ : ℂ, IsNontrivialZero ρ → a - 1 < ρ.im → ρ.im < a + 2 →
1 / (9 * C0hat (a + 2)) ≤ |ρ.im - T| := by
classical
have hfin := zeroWindowWide_finite a
set WF : Finset ℂ := hfin.toFinset with hWF_def
have hWFmem : ∀ ρ : ℂ, ρ ∈ WF ↔ ρ ∈ zeroWindowWide a :=
fun ρ => Set.Finite.mem_toFinset hfin
set S : Finset ℝ := WF.image Complex.im with hS_def
have hScard : S.card ≤ WF.card := Finset.card_image_le
have hWFcard : (WF.card : ℝ) ≤ 3 * C0hat (a + 2) := by
have h1 := zeroWindowWide_card_le hZC ha
-- h1 : card ≤ 3 C0hat — via the mult route
exact h1
obtain ⟨T, hT1, hT2, hT3⟩ := exists_avoiding_midpoint a S hScard
refine ⟨T, hT1, hT2, fun ρ hρ hρlo hρhi => ?_⟩
have hρmem : ρ ∈ WF := (hWFmem ρ).mpr ⟨hρ, by linarith, by linarith⟩
have himmem : ρ.im ∈ S := Finset.mem_image.mpr ⟨ρ, hρmem, rfl⟩
have h1 := hT3 ρ.im himmem
have hC : 2 ≤ C0hat (a + 2) := two_le_C0hat (by linarith)
have hpos : (0:ℝ) < 2 * ((WF.card : ℝ) + 1) := by positivity
have hle : 2 * ((WF.card : ℝ) + 1) ≤ 9 * C0hat (a + 2) := by
linarith [hWFcard, hC]
exact le_trans (one_div_le_one_div_of_le hpos hle) h1
```
Wait — zeroWindowWide_card_le should return the CARD bound (not the mult-sum bound): name it appropriately: the proof gives (card : ℝ) ≤ 3·C0hat(a+2) via card ≤ Σ mult ≤ ... Let me restructure zeroWindowWide_card_le to produce exactly the card bound:
```lean
theorem zeroWindowWide_card_le (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :
((zeroWindowWide_finite a).toFinset.card : ℝ) ≤ 3 * C0hat (a + 2) := by
have hsub : ... (as above)
have hsum : (((zeroWindowWide_finite a).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤
C0hat a + C0hat (a + 1) + C0hat (a + 2) := by
-- via sum_union_inter chain + hZC ×3
...
```
Hmm — the sum over the wide toFinset ≤ sum over the union (subset, nonneg) ≤ sum of the three parts (union-inter). Let me write it carefully:
```lean
have hsum1 : (∑ ρ ∈ (zeroWindowWide_finite a).toFinset, (zeroMult ρ : ℝ)) ≤
∑ ρ ∈ ((zeroWindow_finite (a - 1)).toFinset ∪
((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)),
(zeroMult ρ : ℝ) :=
Finset.sum_le_sum_of_subset_of_nonneg hsub (fun ρ _ => Nat.cast_nonneg _)
have hsum2 : (∑ ρ ∈ ((zeroWindow_finite (a - 1)).toFinset ∪
((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)),
(zeroMult ρ : ℝ)) ≤
(∑ ρ ∈ (zeroWindow_finite (a - 1)).toFinset, (zeroMult ρ : ℝ)) +
((∑ ρ ∈ (zeroWindow_finite a).toFinset, (zeroMult ρ : ℝ)) +
(∑ ρ ∈ (zeroWindow_finite (a + 1)).toFinset, (zeroMult ρ : ℝ))) := by
have hu1 := Finset.sum_union_inter (s := (zeroWindow_finite (a - 1)).toFinset)
(t := (zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)
(f := fun ρ => (zeroMult ρ : ℝ))
have hnn : (0 : ℝ) ≤ ∑ ρ ∈ (zeroWindow_finite (a - 1)).toFinset ∩
((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset),
(zeroMult ρ : ℝ) :=
Finset.sum_nonneg (fun ρ _ => Nat.cast_nonneg _)
have hu2 := Finset.sum_union_inter (s := (zeroWindow_finite a).toFinset)
(t := (zeroWindow_finite (a + 1)).toFinset) (f := fun ρ => (zeroMult ρ : ℝ))
have hnn2 : (0 : ℝ) ≤ ∑ ρ ∈ (zeroWindow_finite a).toFinset ∩
(zeroWindow_finite (a + 1)).toFinset, (zeroMult ρ : ℝ) :=
Finset.sum_nonneg (fun ρ _ => Nat.cast_nonneg _)
linarith
```
Finset.sum_union_inter : ∑ (s ∪ t) + ∑ (s ∩ t) = ∑ s + ∑ t ✓ (exists as Finset.sum_union_inter? — from LiTightR/session-035 usage: exists_avoiding_midpoint... I recall `Finset.sum_union_inter` being used. ✓)
Then hZC (a−1) (by linarith : 2 ≤ a−1), hZC a (by linarith), hZC (a+1) (by linarith) give the three ≤ C0hat(a), C0hat(a+1), C0hat(a+2). Then C0hat monotone: C0hat(a) ≤ C0hat(a+2), C0hat(a+1) ≤ C0hat(a+2). Check C0hat_mono exists — from LiGapCircles. grep. Then total ≤ 3·C0hat(a+2).
And card ≤ Σ mult: the pattern from exists_zero_avoiding_T's hWFcard.
OK — also check `C0hat_mono`. Then the perimeter Props:
```lean
/-- The global ordinate window: nontrivial zeros with 0 < γ ≤ T. -/
def zeroGlobalWindow (T : ℝ) : Set ℂ :=
{ρ | IsNontrivialZero ρ ∧ 0 < ρ.im ∧ ρ.im ≤ T}
theorem zeroGlobalWindow_finite (T : ℝ) : (zeroGlobalWindow T).Finite := by
apply Set.Finite.subset (zerosIn_finite 0 T)
intro ρ hρ
refine ⟨hρ.1, by linarith [hρ.2.1], hρ.2.2⟩
```
Hmm — zerosIn_finite 0 T's membership form — need the exact signature. From zeroWindow_finite: zerosIn_finite (a−1) (a+1) gives ⟨zero, A ≤ im, im ≤ B+1⟩?? The refine passed hρ.2.2 : im ≤ a+1 as the third — if zerosIn_finite A B's third component were im ≤ B+1 = a+2, hρ.2.2 : im ≤ a+1 wouldn't typecheck directly... but it did (zeroWindow_finite builds). So the third component IS im ≤ B+... hmm — wait in zeroWindow_finite: `refine ⟨hρ.1, ?_, hρ.2.2⟩; linarith [hρ.2.1]` — hρ.2.2 : ρ.im ≤ a + 1 is given as the third component. So zerosIn_finite (a−1) (a+1) members have im ≤ a+1 = (a+1)... so zerosIn_finite A B's upper is im ≤ B? For A = a−1, B = a+1: im ≤ a+1 = B ✓ and lower A = a−1 ≤ im ✓ (discharged by linarith from hρ.2.1 : a ≤ im). So zerosIn_finite A B = zeros with A ≤ im ≤ B? But then zeroWindow [a, a+1] ⊆ zerosIn (a−1, a+1): im ∈ [a, a+1] ⊆ [a−1, a+1] ✓ consistent. So zerosIn_finite A B : {zeros ∧ A ≤ im ∧ im ≤ B}? Hmm but wait — zerosIn might be about |im| or about the zero-counting region (zerosIn a b in PNT context = zeros ρ with a ≤ im ≤ b, any re). OK for zeroGlobalWindow: zerosIn_finite 0 T : zeros with 0 ≤ im ≤ T: my members have 0 < im: linarith ✓.
Let me grep zerosIn_finite's signature to be sure.
Also the perimeter Props:
```lean
/-- [PERIMETER — Trudgian 2014 N(T) global form, D-062 §4 / D-071 §3,
user-approved session 038] The global zero-count bound: the
multiplicity-weighted count of nontrivial zeros with 0 < γ ≤ T is at
most FAlt T (T ≥ 2). This is the un-specialized form of the declared
Trudgian source (ZeroCountProp is its unit-window corollary); the unit
form does NOT imply the global form at the FAlt level (summing unit
windows gives 0.433·T·log T > (1/2π)·T·log T). Used by the ii′-6
bridge (the both-signs count is 2× the one-sign count by conj
symmetry). -/
def ZeroCountGlobalProp : Prop :=
∀ T : ℝ, 2 ≤ T →
(((zeroGlobalWindow_finite T).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤ FAlt T
/-- [PERIMETER — M₀ interval certificate, D-062 §4 L6 / D-071 §3,
user-approved session 038] ‖ζ′/ζ(−5/2 + it)‖ ≤ 1.3352 for |t| ≤ 10
(E-023 grid + sampled-Lipschitz ×2; E-023b acb upgrade optional). Used
by the I_III short piece. -/
def MZeroProp : Prop :=
∀ t : ℝ, |t| ≤ 10 → ‖logDeriv riemannZeta (-(5 / 2) + t * Complex.I)‖ ≤ 1.3352
```
Wait — (-(5/2) + t * Complex.I) : ℂ — the -(5/2) needs to be ℂ: `(-(5 / 2 : ℝ) : ℂ)`? Write `(-(5 / 2 : ℝ) : ℂ) + (t : ℝ) * Complex.I` — the re is −5/2 ✓. Hmm — (−(5/2) : ℂ) would be read as negation of the ℂ numeral — same thing. Let me write `(-5 / 2 : ℂ)`? re(−5/2 : ℂ) = −5/2 ✓. Cleaner: `(-5 / 2 : ℂ) + (t : ℝ) * Complex.I`.
Where to put these: LiContour.lean after NoLowZeros/two_le_C0hat (§1) — but FAlt is in LiSkeleton (imported ✓ since C0hat is used).
Now LiAssembly.lean — the sides identity + bridge. The bridge needs the both-signs decomposition: {nontrivial, |im| ≤ T} = {0 < im ≤ T} ∪ {−T ≤ im < 0} ∪ (im = 0 excluded by hNLZ). And the conj bijection between them (zeroMult_conj). The sum over the both-signs set = 2 × sum over the one-sign set (via the conj equiv — the tsum/Finset reindex: for FINSET sums this time (Sz is a Finset) — the conj map on the finset {−T ≤ im < 0} → {0 < im ≤ T} is a bijection with zeroMult_conj: sum over negative side = sum over positive side (via Finset.sum_image or the equiv reindex).
This is the finicky part. Alternative simpler accounting: ‖Σ_nontriv‖ ≤ Σ mult·2 = 2·Σ mult. And Σ mult over both-signs = Σ mult over {0<γ≤T} + Σ over {−T≤γ<0} (disjoint union) = 2·Σ over {0<γ≤T} (conj bijection) ≤ 2·FAlt T. So ‖Σ‖ ≤ 4·FAlt T.
For the Finset formulation: Sz's nontrivial part = (zeroGlobalBoth T).toFinset where zeroGlobalBoth T := {ρ | IsNontrivialZero ρ ∧ |ρ.im| ≤ T ∧ ρ.im ≠ 0}... hmm — with hNLZ: |im| ≥ 14 so im ≠ 0 automatic; |im| ≤ T ⟺ (0 < im ≤ T) ∨ (−T ≤ im < 0).
Actually — do I even need the bridge separated from the sides? The sides identity gives |Sf n| ≤ ‖RectInt‖ + ‖Σ‖. The bridge bounds ‖Σ‖. Then 6-c bounds ‖RectInt‖ by the four sides. The fold (6-d) assembles.
For the bridge, define the Sz finset explicitly:
Sz := (zeroBothWindow T).toFinset ∪ {−2} where zeroBothWindow T := {ρ | IsNontrivialZero ρ ∧ |ρ.im| ≤ T}.
The characterization for rectInt'_Jlag: s ∈ Sz ↔ s ∈ Rectangle z w ∧ zetaA s = 0 — need: zetaA s = 0 ∧ inside ⟺ (nontrivial ∧ |im| ≤ T) ∨ s = −2:
- zetaA s = 0 (s ≠ 1) ⟺ ζ s = 0 (zetaA_apply; s = 1 ∉ inside anyway since... 1 IS inside the rectangle! But zetaA 1 = 1 ≠ 0 ✓ so s ≠ 1 from zetaA s = 0 via zetaA_one).
- ζ s = 0 ⟹ classification: nontrivial ∨ s = 0 ∨ s = −2n.
- inside: s = 0: zetaA 0 = 1/2 ≠ 0 ✓ excluded. s = −2n, n ≥ 1: inside ⟺ −2n ∈ (−5/2, 2√n]×[−T,T]: re = −2n: −5/2 ≤ −2n ⟹ n = 1: −2 ✓ inside (re −2 ∈ [−5/2, 2√n] ✓ im 0 ∈ [−T, T] ✓); n ≥ 2: re ≤ −4 < −5/2 ✗ outside.
- nontrivial: inside ⟺ |im| ≤ T: re ∈ (0,1) ⊆ (−5/2, 2√n) ⟸ need 1 < 2√n (n ≥ 1 ✓) and 0 > −5/2 ✓; im: |im| ≤ T ⟺ −T ≤ im ≤ T ✓ inside.
So the characterization holds with Sz = (zeroBothWindow T).toFinset ∪ {−2} — PROVIDED −2 ∉ (zeroBothWindow T).toFinset (true: −2 not nontrivial — re = −2 ∉ (0,1)).
The Rectangle membership: Rectangle z w = [[z.re, w.re]] ×ℂ [[z.im, w.im]] (from the Rectangle def — check: `Rectangle z w := [[z.re, w.re]] ×ℂ [[z.im, w.im]]`? The symm lemma says Rectangle z w = Rectangle w z via uIcc_comm — consistent with [[z.re, w.re]] ×ℂ [[z.im, w.im]]). Membership: s ∈ Rectangle z w ↔ re s ∈ [[z.re, w.re]] ∧ im s ∈ [[z.im, w.im]] — via the mem lemmas (Complex.mem_reProdIm or similar — rectangleBorder_subset_rectangle used `hsR : s ∈ Rectangle z w := rectangleBorder_subset_rectangle z w hs` and the proof obtained ⟨h1, h2⟩ := hmem and simpa [Set.uIcc_of_le hre] — so membership IS a pair (re ∈ uIcc, im ∈ uIcc) ✓).
OK — the full design is in hand. This is a decent chunk of Lean (~400-500 lines for ii′-6-b). Let me write LiContour additions first, build-check, then LiAssembly.lean.
All forms confirmed. Writing the LiContour additions first (perimeter Props + wide pigeonhole).
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem zerosIn_finite\\|lemma zerosIn_finite\" --include=\"*.lean\" Zeta23/ | head -2 && grep -rn \"C0hat_mono\" D:/Python/Quantum/research/lean/NguyenRH1/NguyenRH1/*.lean | head -3",
"description": "Check zerosIn_finite + C0hat_mono signatures"
}
raw content_json (database row)
[{"type":"thinking","thinking":"I was building ii′-6-b. I have all the forms:\n- RectangleBorder (z w) = [[z.re, w.re]] ×ℂ {z.im} ∪ {z.re} ×ℂ [[z.im, w.im]] ∪ [[z.re, w.re]] ×ℂ {w.im} ∪ {w.re} ×ℂ [[z.im, w.im]] — four sides: bottom, left, top, right.\n- Rectangle z w — let me check: `Rectangle z w := [[z.re, w.re]] ×ℂ [[z.im, w.im]]` presumably.\n\nNow write LiAssembly.lean with:\n§1: sides identity (sf_abs_le_rectInt_add_sum)\n§2: the bridge (zeroTerm_norm_le_four_FAlt)\n\nPlus in LiContour.lean: the two perimeter Props + the wide pigeonhole.\n\nLet me start with the LiContour additions (perimeter Props + wide pigeonhole). Append after NoLowZeros/two_le_C0hat region or after exists_zero_avoiding_T. The wide pigeonhole needs the three-window count — build:\n\n```lean\n/-- The wide ordinate window: nontrivial zeros with ordinate in [a−1, a+2]. -/\ndef zeroWindowWide (a : ℝ) : Set ℂ :=\n {ρ | IsNontrivialZero ρ ∧ a - 1 ≤ ρ.im ∧ ρ.im ≤ a + 2}\n\ntheorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by\n apply Set.Finite.subset (zerosIn_finite (a - 2) (a + 2))\n intro ρ hρ\n refine ⟨hρ.1, ?_, hρ.2.2⟩\n linarith [hρ.2.1]\n```\n\nHmm — zerosIn_finite's form: from zeroWindow_finite: `zerosIn_finite (a - 1) (a + 1)` with members ⟨hρ.1 (zero), lower-bound, upper-bound⟩. The refinement: zerosIn_finite t1 t2 gives zeros with t1 ≤ im ≤ t2+1? From zeroWindow_finite: window [a, a+1] ⊆ zerosIn_finite (a−1) (a+1) with the proof refine ⟨hρ.1, ?_, hρ.2.2⟩; linarith [hρ.2.1] — so zerosIn_finite A B's membership is: zero ∧ A ≤ im ∧ im ≤ B+1? The refine gives ⟨zero, ?_, hρ.2.2⟩ where hρ.2.2 : im ≤ a+1 (the window's upper). And ?_ is discharged by linarith [hρ.2.1] (hρ.2.1 : a ≤ im). So zerosIn_finite A B membership components: (zero, A ≤ im, im ≤ B+1)?? For window [a, a+1] via zerosIn_finite (a−1) (a+1): components (a−1 ≤ im [from hρ.2.1: a ≤ im via linarith], im ≤ (a+1)+1 = a+2?? but hρ.2.2 : im ≤ a+1 is passed directly — so the third component is im ≤ a+1 = (a+1)... hmm inconsistent. Let me look at zerosIn_finite's exact signature in Zeta23.\n\nActually — simpler: zeroWindowWide ⊆ zeroWindow (a−1) ∪ zeroWindow a ∪ zeroWindow (a+1), each finite ✓ no zerosIn_finite needed:\n\n```lean\ntheorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by\n apply Set.Finite.subset ((zeroWindow_finite (a - 1)).union\n ((zeroWindow_finite a).union (zeroWindow_finite (a + 1))))\n intro ρ hρ\n simp only [Set.mem_union, zeroWindow, Set.mem_setOf_eq]\n by_cases h1 : a - 1 ≤ ρ.im\n · left; exact ⟨hρ.1, h1, hρ.2.2⟩ -- wait need im ≤ (a−1)+1 = a: not given\n ...\n```\nHmm — zeroWindowWide a : a−1 ≤ im ≤ a+2. Case split: im ≤ a → zeroWindow (a−1) (a−1 ≤ im ≤ a = (a−1)+1 ✓); a ≤ im ≤ a+1 → zeroWindow a ✓; a+1 ≤ im ≤ a+2 → zeroWindow (a+1) ✓. By trichotomy:\n\n```lean\ntheorem zeroWindowWide_finite (a : ℝ) : (zeroWindowWide a).Finite := by\n apply Set.Finite.subset ((zeroWindow_finite (a - 1)).union\n ((zeroWindow_finite a).union (zeroWindow_finite (a + 1))))\n intro ρ hρ\n obtain ⟨hz, hlo, hhi⟩ := hρ\n by_cases h1 : ρ.im ≤ a\n · exact Or.inl ⟨hz, hlo, h1⟩\n · by_cases h2 : ρ.im ≤ a + 1\n · exact Or.inr (Or.inl ⟨hz, by linarith, h2⟩)\n · exact Or.inr (Or.inr ⟨hz, by linarith, hhi⟩)\n```\nWait — the union membership: the set is zeroWindow (a−1) ∪ (zeroWindow a ∪ zeroWindow (a+1)) — membership forms ✓ as written (the ⊆ relation via Set.Finite.subset: goal ρ ∈ zeroWindow (a−1) ∪ (zeroWindow a ∪ zeroWindow (a+1))). The union lemmas: mem_union. My exacts give the Prop forms — need Set.mem_union.mpr or the direct: `Or.inl ⟨hz, hlo, h1⟩` — membership in a union of SETS (not lists): ρ ∈ A ∪ B ↔ ρ ∈ A ∨ ρ ∈ B ✓ defeq to Or — exact Or.inl works ✓.\n\nThen the count:\n```lean\ntheorem zeroWindowWide_card_le (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :\n ((zeroWindowWide_finite a).toFinset.card : ℝ) ≤ 3 * C0hat (a + 2) := by\n -- the mult-sum over the wide window ≤ sum of the three unit windows\n have hsub : (zeroWindowWide_finite a).toFinset ⊆\n (zeroWindow_finite (a - 1)).toFinset ∪\n ((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset) := by\n intro ρ hρ\n have hmem : ρ ∈ zeroWindowWide a := (zeroWindowWide_finite a).mem_toFinset.mpr hρ\n obtain ⟨hz, hlo, hhi⟩ := hmem\n by_cases h1 : ρ.im ≤ a\n · exact Finset.mem_union.mpr (Or.inl ((zeroWindow_finite (a-1)).mem_toFinset.mpr ⟨hz, hlo, h1⟩))\n · by_cases h2 : ρ.im ≤ a + 1\n · exact Finset.mem_union.mpr (Or.inr (Finset.mem_union.mpr (Or.inl\n ((zeroWindow_finite a).mem_toFinset.mpr ⟨hz, by linarith, h2⟩))))\n · exact Finset.mem_union.mpr (Or.inr (Finset.mem_union.mpr (Or.inr\n ((zeroWindow_finite (a+1)).mem_toFinset.mpr ⟨hz, by linarith, hhi⟩))))\n have hsum_le : (((zeroWindowWide_finite a).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤\n 3 * C0hat (a + 2) := by\n have h1 := Finset.sum_le_sum_of_subset_of_nonneg hsub (fun ρ _ => Nat.cast_nonneg _)\n have h2 := Finset.sum_union ... -- messy; simpler: sum over union ≤ sum of parts (with double counting allowed): Finset.sum_union_inter? \n```\nHmm — the union sum with overlaps: sum over A ∪ B ≤ sum A + sum B for nonneg (Finset.sum_union_inter or the direct: sum over the union ≤ sum of the three via `Finset.sum_le_sum_of_subset_of_nonneg` applied... no — sum over union = sum A + sum B − sum (A∩B) ≤ sum A + sum B (nonneg terms) — there's `Finset.sum_union_inter` : sum (s ∪ t) + sum (s ∩ t) = sum s + sum t. So sum (s ∪ t) ≤ sum s + sum t (nonneg intersection sum ≥ 0). For triple: ≤ sum A + sum B + sum C. Each ≤ C0hat(a), C0hat(a+1), C0hat(a+2) via hZC (a−1 ≥ 2 ✓ ha : 3 ≤ a; a ≥ 2 ✓; a+1 ≥ 2 ✓). Then C0hat(a) ≤ C0hat(a+2) and C0hat(a+1) ≤ C0hat(a+2) via C0hat_mono — does C0hat_mono exist? From LiGapCircles (5e-i used C0hat_mono). Let me assume `C0hat_mono : Monotone C0hat` or similar — grep later.\n\nThen card ≤ Σ mult (same pattern as exists_zero_avoiding_T's hWFcard) ≤ 3·C0hat(a+2).\n\nThen exists_zero_avoiding_T_wide clones exists_zero_avoiding_T:\n```lean\ntheorem exists_zero_avoiding_T_wide (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :\n ∃ T : ℝ, a ≤ T ∧ T ≤ a + 1 ∧\n ∀ ρ : ℂ, IsNontrivialZero ρ → a - 1 < ρ.im → ρ.im < a + 2 →\n 1 / (9 * C0hat (a + 2)) ≤ |ρ.im - T| := by\n classical\n have hfin := zeroWindowWide_finite a\n set WF : Finset ℂ := hfin.toFinset with hWF_def\n have hWFmem : ∀ ρ : ℂ, ρ ∈ WF ↔ ρ ∈ zeroWindowWide a :=\n fun ρ => Set.Finite.mem_toFinset hfin\n set S : Finset ℝ := WF.image Complex.im with hS_def\n have hScard : S.card ≤ WF.card := Finset.card_image_le\n have hWFcard : (WF.card : ℝ) ≤ 3 * C0hat (a + 2) := by\n have h1 := zeroWindowWide_card_le hZC ha\n -- h1 : card ≤ 3 C0hat — via the mult route\n exact h1\n obtain ⟨T, hT1, hT2, hT3⟩ := exists_avoiding_midpoint a S hScard\n refine ⟨T, hT1, hT2, fun ρ hρ hρlo hρhi => ?_⟩\n have hρmem : ρ ∈ WF := (hWFmem ρ).mpr ⟨hρ, by linarith, by linarith⟩\n have himmem : ρ.im ∈ S := Finset.mem_image.mpr ⟨ρ, hρmem, rfl⟩\n have h1 := hT3 ρ.im himmem\n have hC : 2 ≤ C0hat (a + 2) := two_le_C0hat (by linarith)\n have hpos : (0:ℝ) < 2 * ((WF.card : ℝ) + 1) := by positivity\n have hle : 2 * ((WF.card : ℝ) + 1) ≤ 9 * C0hat (a + 2) := by\n linarith [hWFcard, hC]\n exact le_trans (one_div_le_one_div_of_le hpos hle) h1\n```\nWait — zeroWindowWide_card_le should return the CARD bound (not the mult-sum bound): name it appropriately: the proof gives (card : ℝ) ≤ 3·C0hat(a+2) via card ≤ Σ mult ≤ ... Let me restructure zeroWindowWide_card_le to produce exactly the card bound:\n```lean\ntheorem zeroWindowWide_card_le (hZC : ZeroCountProp) {a : ℝ} (ha : 3 ≤ a) :\n ((zeroWindowWide_finite a).toFinset.card : ℝ) ≤ 3 * C0hat (a + 2) := by\n have hsub : ... (as above)\n have hsum : (((zeroWindowWide_finite a).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤\n C0hat a + C0hat (a + 1) + C0hat (a + 2) := by\n -- via sum_union_inter chain + hZC ×3\n ...\n```\nHmm — the sum over the wide toFinset ≤ sum over the union (subset, nonneg) ≤ sum of the three parts (union-inter). Let me write it carefully:\n\n```lean\n have hsum1 : (∑ ρ ∈ (zeroWindowWide_finite a).toFinset, (zeroMult ρ : ℝ)) ≤\n ∑ ρ ∈ ((zeroWindow_finite (a - 1)).toFinset ∪\n ((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)),\n (zeroMult ρ : ℝ) :=\n Finset.sum_le_sum_of_subset_of_nonneg hsub (fun ρ _ => Nat.cast_nonneg _)\n have hsum2 : (∑ ρ ∈ ((zeroWindow_finite (a - 1)).toFinset ∪\n ((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)),\n (zeroMult ρ : ℝ)) ≤\n (∑ ρ ∈ (zeroWindow_finite (a - 1)).toFinset, (zeroMult ρ : ℝ)) +\n ((∑ ρ ∈ (zeroWindow_finite a).toFinset, (zeroMult ρ : ℝ)) +\n (∑ ρ ∈ (zeroWindow_finite (a + 1)).toFinset, (zeroMult ρ : ℝ))) := by\n have hu1 := Finset.sum_union_inter (s := (zeroWindow_finite (a - 1)).toFinset)\n (t := (zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset)\n (f := fun ρ => (zeroMult ρ : ℝ))\n have hnn : (0 : ℝ) ≤ ∑ ρ ∈ (zeroWindow_finite (a - 1)).toFinset ∩\n ((zeroWindow_finite a).toFinset ∪ (zeroWindow_finite (a + 1)).toFinset),\n (zeroMult ρ : ℝ) :=\n Finset.sum_nonneg (fun ρ _ => Nat.cast_nonneg _)\n have hu2 := Finset.sum_union_inter (s := (zeroWindow_finite a).toFinset)\n (t := (zeroWindow_finite (a + 1)).toFinset) (f := fun ρ => (zeroMult ρ : ℝ))\n have hnn2 : (0 : ℝ) ≤ ∑ ρ ∈ (zeroWindow_finite a).toFinset ∩\n (zeroWindow_finite (a + 1)).toFinset, (zeroMult ρ : ℝ) :=\n Finset.sum_nonneg (fun ρ _ => Nat.cast_nonneg _)\n linarith\n```\nFinset.sum_union_inter : ∑ (s ∪ t) + ∑ (s ∩ t) = ∑ s + ∑ t ✓ (exists as Finset.sum_union_inter? — from LiTightR/session-035 usage: exists_avoiding_midpoint... I recall `Finset.sum_union_inter` being used. ✓)\n\nThen hZC (a−1) (by linarith : 2 ≤ a−1), hZC a (by linarith), hZC (a+1) (by linarith) give the three ≤ C0hat(a), C0hat(a+1), C0hat(a+2). Then C0hat monotone: C0hat(a) ≤ C0hat(a+2), C0hat(a+1) ≤ C0hat(a+2). Check C0hat_mono exists — from LiGapCircles. grep. Then total ≤ 3·C0hat(a+2).\n\nAnd card ≤ Σ mult: the pattern from exists_zero_avoiding_T's hWFcard.\n\nOK — also check `C0hat_mono`. Then the perimeter Props:\n\n```lean\n/-- The global ordinate window: nontrivial zeros with 0 < γ ≤ T. -/\ndef zeroGlobalWindow (T : ℝ) : Set ℂ :=\n {ρ | IsNontrivialZero ρ ∧ 0 < ρ.im ∧ ρ.im ≤ T}\n\ntheorem zeroGlobalWindow_finite (T : ℝ) : (zeroGlobalWindow T).Finite := by\n apply Set.Finite.subset (zerosIn_finite 0 T)\n intro ρ hρ\n refine ⟨hρ.1, by linarith [hρ.2.1], hρ.2.2⟩\n```\nHmm — zerosIn_finite 0 T's membership form — need the exact signature. From zeroWindow_finite: zerosIn_finite (a−1) (a+1) gives ⟨zero, A ≤ im, im ≤ B+1⟩?? The refine passed hρ.2.2 : im ≤ a+1 as the third — if zerosIn_finite A B's third component were im ≤ B+1 = a+2, hρ.2.2 : im ≤ a+1 wouldn't typecheck directly... but it did (zeroWindow_finite builds). So the third component IS im ≤ B+... hmm — wait in zeroWindow_finite: `refine ⟨hρ.1, ?_, hρ.2.2⟩; linarith [hρ.2.1]` — hρ.2.2 : ρ.im ≤ a + 1 is given as the third component. So zerosIn_finite (a−1) (a+1) members have im ≤ a+1 = (a+1)... so zerosIn_finite A B's upper is im ≤ B? For A = a−1, B = a+1: im ≤ a+1 = B ✓ and lower A = a−1 ≤ im ✓ (discharged by linarith from hρ.2.1 : a ≤ im). So zerosIn_finite A B = zeros with A ≤ im ≤ B? But then zeroWindow [a, a+1] ⊆ zerosIn (a−1, a+1): im ∈ [a, a+1] ⊆ [a−1, a+1] ✓ consistent. So zerosIn_finite A B : {zeros ∧ A ≤ im ∧ im ≤ B}? Hmm but wait — zerosIn might be about |im| or about the zero-counting region (zerosIn a b in PNT context = zeros ρ with a ≤ im ≤ b, any re). OK for zeroGlobalWindow: zerosIn_finite 0 T : zeros with 0 ≤ im ≤ T: my members have 0 < im: linarith ✓. \n\nLet me grep zerosIn_finite's signature to be sure.\n\nAlso the perimeter Props:\n\n```lean\n/-- [PERIMETER — Trudgian 2014 N(T) global form, D-062 §4 / D-071 §3,\nuser-approved session 038] The global zero-count bound: the\nmultiplicity-weighted count of nontrivial zeros with 0 < γ ≤ T is at\nmost FAlt T (T ≥ 2). This is the un-specialized form of the declared\nTrudgian source (ZeroCountProp is its unit-window corollary); the unit\nform does NOT imply the global form at the FAlt level (summing unit\nwindows gives 0.433·T·log T > (1/2π)·T·log T). Used by the ii′-6\nbridge (the both-signs count is 2× the one-sign count by conj\nsymmetry). -/\ndef ZeroCountGlobalProp : Prop :=\n ∀ T : ℝ, 2 ≤ T →\n (((zeroGlobalWindow_finite T).toFinset.sum fun ρ => zeroMult ρ) : ℝ) ≤ FAlt T\n\n/-- [PERIMETER — M₀ interval certificate, D-062 §4 L6 / D-071 §3,\nuser-approved session 038] ‖ζ′/ζ(−5/2 + it)‖ ≤ 1.3352 for |t| ≤ 10\n(E-023 grid + sampled-Lipschitz ×2; E-023b acb upgrade optional). Used\nby the I_III short piece. -/\ndef MZeroProp : Prop :=\n ∀ t : ℝ, |t| ≤ 10 → ‖logDeriv riemannZeta (-(5 / 2) + t * Complex.I)‖ ≤ 1.3352\n```\n\nWait — (-(5/2) + t * Complex.I) : ℂ — the -(5/2) needs to be ℂ: `(-(5 / 2 : ℝ) : ℂ)`? Write `(-(5 / 2 : ℝ) : ℂ) + (t : ℝ) * Complex.I` — the re is −5/2 ✓. Hmm — (−(5/2) : ℂ) would be read as negation of the ℂ numeral — same thing. Let me write `(-5 / 2 : ℂ)`? re(−5/2 : ℂ) = −5/2 ✓. Cleaner: `(-5 / 2 : ℂ) + (t : ℝ) * Complex.I`.\n\nWhere to put these: LiContour.lean after NoLowZeros/two_le_C0hat (§1) — but FAlt is in LiSkeleton (imported ✓ since C0hat is used). \n\nNow LiAssembly.lean — the sides identity + bridge. The bridge needs the both-signs decomposition: {nontrivial, |im| ≤ T} = {0 < im ≤ T} ∪ {−T ≤ im < 0} ∪ (im = 0 excluded by hNLZ). And the conj bijection between them (zeroMult_conj). The sum over the both-signs set = 2 × sum over the one-sign set (via the conj equiv — the tsum/Finset reindex: for FINSET sums this time (Sz is a Finset) — the conj map on the finset {−T ≤ im < 0} → {0 < im ≤ T} is a bijection with zeroMult_conj: sum over negative side = sum over positive side (via Finset.sum_image or the equiv reindex).\n\nThis is the finicky part. Alternative simpler accounting: ‖Σ_nontriv‖ ≤ Σ mult·2 = 2·Σ mult. And Σ mult over both-signs = Σ mult over {0<γ≤T} + Σ over {−T≤γ<0} (disjoint union) = 2·Σ over {0<γ≤T} (conj bijection) ≤ 2·FAlt T. So ‖Σ‖ ≤ 4·FAlt T.\n\nFor the Finset formulation: Sz's nontrivial part = (zeroGlobalBoth T).toFinset where zeroGlobalBoth T := {ρ | IsNontrivialZero ρ ∧ |ρ.im| ≤ T ∧ ρ.im ≠ 0}... hmm — with hNLZ: |im| ≥ 14 so im ≠ 0 automatic; |im| ≤ T ⟺ (0 < im ≤ T) ∨ (−T ≤ im < 0). \n\nActually — do I even need the bridge separated from the sides? The sides identity gives |Sf n| ≤ ‖RectInt‖ + ‖Σ‖. The bridge bounds ‖Σ‖. Then 6-c bounds ‖RectInt‖ by the four sides. The fold (6-d) assembles.\n\nFor the bridge, define the Sz finset explicitly:\nSz := (zeroBothWindow T).toFinset ∪ {−2} where zeroBothWindow T := {ρ | IsNontrivialZero ρ ∧ |ρ.im| ≤ T}.\n\nThe characterization for rectInt'_Jlag: s ∈ Sz ↔ s ∈ Rectangle z w ∧ zetaA s = 0 — need: zetaA s = 0 ∧ inside ⟺ (nontrivial ∧ |im| ≤ T) ∨ s = −2:\n- zetaA s = 0 (s ≠ 1) ⟺ ζ s = 0 (zetaA_apply; s = 1 ∉ inside anyway since... 1 IS inside the rectangle! But zetaA 1 = 1 ≠ 0 ✓ so s ≠ 1 from zetaA s = 0 via zetaA_one).\n- ζ s = 0 ⟹ classification: nontrivial ∨ s = 0 ∨ s = −2n.\n- inside: s = 0: zetaA 0 = 1/2 ≠ 0 ✓ excluded. s = −2n, n ≥ 1: inside ⟺ −2n ∈ (−5/2, 2√n]×[−T,T]: re = −2n: −5/2 ≤ −2n ⟹ n = 1: −2 ✓ inside (re −2 ∈ [−5/2, 2√n] ✓ im 0 ∈ [−T, T] ✓); n ≥ 2: re ≤ −4 < −5/2 ✗ outside.\n- nontrivial: inside ⟺ |im| ≤ T: re ∈ (0,1) ⊆ (−5/2, 2√n) ⟸ need 1 < 2√n (n ≥ 1 ✓) and 0 > −5/2 ✓; im: |im| ≤ T ⟺ −T ≤ im ≤ T ✓ inside.\n\nSo the characterization holds with Sz = (zeroBothWindow T).toFinset ∪ {−2} — PROVIDED −2 ∉ (zeroBothWindow T).toFinset (true: −2 not nontrivial — re = −2 ∉ (0,1)).\n\nThe Rectangle membership: Rectangle z w = [[z.re, w.re]] ×ℂ [[z.im, w.im]] (from the Rectangle def — check: `Rectangle z w := [[z.re, w.re]] ×ℂ [[z.im, w.im]]`? The symm lemma says Rectangle z w = Rectangle w z via uIcc_comm — consistent with [[z.re, w.re]] ×ℂ [[z.im, w.im]]). Membership: s ∈ Rectangle z w ↔ re s ∈ [[z.re, w.re]] ∧ im s ∈ [[z.im, w.im]] — via the mem lemmas (Complex.mem_reProdIm or similar — rectangleBorder_subset_rectangle used `hsR : s ∈ Rectangle z w := rectangleBorder_subset_rectangle z w hs` and the proof obtained ⟨h1, h2⟩ := hmem and simpa [Set.uIcc_of_le hre] — so membership IS a pair (re ∈ uIcc, im ∈ uIcc) ✓).\n\nOK — the full design is in hand. This is a decent chunk of Lean (~400-500 lines for ii′-6-b). Let me write LiContour additions first, build-check, then LiAssembly.lean.","signature":""},{"type":"text","text":"All forms confirmed. Writing the LiContour additions first (perimeter Props + wide pigeonhole)."},{"type":"tool_use","id":"Bash_246","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem zerosIn_finite\\|lemma zerosIn_finite\" --include=\"*.lean\" Zeta23/ | head -2 && grep -rn \"C0hat_mono\" D:/Python/Quantum/research/lean/NguyenRH1/NguyenRH1/*.lean | head -3","description":"Check zerosIn_finite + C0hat_mono signatures"},"extra_content":null}]