← Session 35 — ii′-6-R: Lagarias 6.1 right-tail re-proof (E-032/D-073)
thinking (10977 chars)
Build GREEN (8770 jobs — wait, 8770? The full build was 8773 with LiSideBounds not imported by root. The module count: LiSideBounds isn't root-imported yet, so it built as an extra target... 8770 vs 8773 — the count difference is because LiSideBounds built standalone (the root library NguyenRH1.lean doesn't import it yet). Fine.
There's still a stray "ring works primarily in commutative rings" note in the output — from an earlier line? The build completed successfully, so it's a warning/suggestion trace, likely from the `ring` in hconj that DID close but printed a note? Odd — let me check if there's a warning in LiSideBounds specifically. The grep for LiSideBounds returned nothing, so no warnings in my file. The note must be a leftover trace line in the output (from elaboration suggestion machinery). Since the build is green and no LiSideBounds warnings, move on.
**6-c-i scaffolding COMPLETE.** Now 6-c-ii: I_III.
The statement:
```lean
theorem vIntegral_Jlag_left_norm_le (hZC : ZeroCountProp) (hZC2 : ZeroCountProp2)
(hNLZ : NoLowZeros) (hMZ : MZeroProp) {n : ℕ} (hn : 100000 ≤ n) {T : ℝ}
(hTn : Real.sqrt n ≤ T) (hTn1 : T ≤ Real.sqrt n + 1) :
‖VIntegral (Jlag n) (-5/2) (-T) T‖ ≤
4 * T * ((2/3) * Z2hat T + 10.5 * Real.log (T + 2) + 48) + 40 * 1.3352
```
Wait — hn : 100000 ≤ n gives √n ≥ 316.2 ⟹ T ≥ 316 ≥ 10 ✓.
Proof structure:
1. VIntegral_norm: ‖VIntegral‖ = ‖∫ t in −T..T, Jlag n (−5/2 + tI)‖.
2. ‖∫‖ ≤ ∫_{−T}^{T} ‖Jlag‖ (norm_integral_le_integral_norm, needs −T ≤ T ✓).
3. Split: ∫_{−T}^{T} = ∫_{−T}^{−10} + ∫_{−10}^{10} + ∫_{10}^{T} (integral_add_adjacent_intervals ×2 — needs IntervalIntegrable on each piece: ‖Jlag‖ is continuous (Jlag continuous: kFun continuous (differentiable ✓) × logDeriv continuous ✓ — need ContinuousOn of Jlag on the path: Jlag n s = kFun n s * (−logDeriv ζ s): kFun_differentiableAt (s ≠ 1) ⟹ continuousAt; logDeriv continuous via my lemma ⟹ Jlag continuousAt ⟹ continuousOn ⟹ norm continuous ⟹ integrable).
Hmm — actually norm_integral_le_integral_norm gives ‖∫ f‖ ≤ ∫ ‖f‖ — and then I split the ∫‖f‖. Integrability of ‖Jlag‖: (ContinuousOn.norm) ✓.
4. ∫_{−T}^{−10} g = ∫_{10}^{T} g via integral_comp_neg + jlag_left_vertical_norm_even:
∫ t in −T..−10, g t where g t = ‖Jlag n (−5/2 + tI)‖: integral_comp_neg : ∫ x in a..b, f(−x) = ∫ x in −b..−a, f x. So ∫ t in −T..−10, g t = ∫ t in −T..−10, g(−(−t)) — hmm: define h(t) := g(−t): h(t) = g(t) by jlag_left_vertical_norm_even (g(−t) = g(t) — wait my lemma: ‖Jlag n (−5/2 + (−t)I)‖ = ‖Jlag n (−5/2 + tI)‖ ✓ so g(−t) = g(t) — g is even). ∫_{−T}^{−10} g = ∫_{−T}^{−10} (fun t => g(−t)) — pointwise eq (g even) — then integral_comp_neg: ∫ x in −T..−10, g(−x) = ∫ x in 10..T, g x ✓.
5. Middle: ∫_{−10}^{10} g ≤ 20·(2·1.3352): g t = ‖kFun‖·‖logDeriv‖ ≤ 2·1.3352 (kFun_norm_le_two re = −5/2 ≤ 1/2 ✓; MZeroProp hMZ t (|t| ≤ 10) — MZeroProp's point form: `((-5/2:ℂ) + (t:ℝ)·I)` — my point is `((-5/2:ℝ):ℂ) + (t:ℝ)·I` — cast bridge: push_cast/show). Via intervalIntegral.integral_mono_on (g ≤ const) + integral_const: ∫_{−10}^{10} c = c·20.
6. Tails: ∫_{10}^{T} g ≤ (T−10)·(2·((2/3)·Z2hat T + 10.5·log(T+2)+48)): per t ∈ [10, T]:
g t ≤ 2·‖logDeriv ζ(−5/2+it)‖ ≤ 2·(‖Σnear‖ + ‖R‖) where:
- capstone: ‖logDeriv − Σ_{nearZerosSub t} mult/(s−ρ)‖ ≤ 10.5·log(|t|+2)+48, s = −5/2+it: hyps: ht : 10 ≤ t ✓; hσlo/hσhi: re = −5/2 ✓ simp; him : s.im = t ✓ simp; hζ: zeta_ne_zero_left_vertical ✓ (cast bridge: the lemma's point is ((−5/2:ℝ):ℂ)+t·I vs capstone's s — I'll set s := ((−5/2:ℝ):ℂ)+t·I and discharge .re/.im by simp).
- ‖logDeriv‖ ≤ ‖logDeriv − Σ‖ + ‖Σ‖ (norm: a = (a−b)+b).
- ‖Σ_{nearZerosSub t} (mult:ℂ)/(s−ρ)‖ ≤ Σ ‖mult/(s−ρ)‖ ≤ Σ (2/5)·mult ≤ (2/5)·Z2hat t ≤ (2/3)·Z2hat T:
- per ρ: ‖(mult:ℂ)/(s−ρ)‖ = mult/‖s−ρ‖ ≤ mult/(5/2): ‖s−ρ‖ ≥ |re(s−ρ)| = |−5/2 − ρ.re| = 5/2 + ρ.re (ρ.re ∈ (0,1)) ≥ 5/2. re(s−ρ) = s.re − ρ.re = −5/2 − ρ.re (simp). |−5/2−ρ.re| = 5/2+ρ.re (abs_of_neg... −5/2−ρ.re < 0 ⟹ |x| = −x = 5/2+ρ.re). So 1/‖s−ρ‖ ≤ 1/(5/2) = 2/5 (div_le_div with abs_re_le_norm).
- Σ mult ≤ Z2hat t (nearZerosSub_mult_sum_le hZC2, 10 ≤ t ✓).
- (2/5)·Z2hat t ≤ (2/3)·Z2hat T: 2/5 ≤ 2/3 + Z2hat t ≤ Z2hat T (Z2hat_mono, t ≤ T, 1 ≤ t) + Z2hat T ≥ 0.
- log(|t|+2) = log(t+2) (t ≥ 10 > 0: abs_of_nonneg) ≤ log(T+2) (mono).
So g t ≤ 2·((2/3)·Z2hat T + 10.5·log(T+2) + 48) = const K on [10, T].
∫_{10}^{T} g ≤ (T−10)·K.
7. Assemble: ∫_{−T}^{T} g ≤ 2·(T−10)·K + 20·(2·1.3352) = 2T·K − 20K + 40·1.3352 ≤ 2T·K + 40·1.3352 = 4T·((2/3)Z2hat T + 10.5 log(T+2) + 48) + 40·1.3352 ✓ (K = 2·(...) so 2T·K = 4T·(...) ✓; −20K ≤ 0 — need K ≥ 0: Z2hat T ≥ 0? Z2hat T = 0.6·log(T+2)+0.886·loglog+2.7 ≥ 0 for T ≥ 1 (log ≥ 1, loglog ≥ 0 ✓) ✓).
Cast bridge concern: MZeroProp's point `((-5/2:ℂ) + (t:ℝ)·I)` vs my `((-5/2:ℝ):ℂ) + (t:ℝ)·I`: these are the SAME up to the cast: (−5/2 : ℂ) vs ↑((−5/2:ℝ)) — `push_cast`/`ofReal_div`... `(-5/2 : ℂ) = ((-5/2 : ℝ) : ℂ)` by push_cast; ring or norm_num. There might be defeq: (−5/2 : ℂ) unfolds via OfScientific/ofNat... safer: `show` + push_cast + ring, or `convert hMZ t ht using 2` hmm. I'll write a small bridge: have e : ((-5/2:ℝ):ℂ) + (t:ℝ)*I = (-5/2:ℂ) + (t:ℝ)*I := by push_cast; ring — wait the LHS is ↑(-5/2:ℝ) and RHS (−5/2:ℂ): push_cast normalizes ↑(-5/2) → (-5/2:ℂ) ✓ then rfl. So `by push_cast; ring` or even `by norm_num`.
Similarly norm_logDeriv... not needed here.
Also the tight capstone's `s.im = t` — with s := ↑(-5/2:ℝ) + ↑t·I: s.im = t by simp ✓ (Complex.add_re/im simp lemmas handle ↑x + ↑t*I — the earlier hre/him proofs used `by simp` ✓).
Let me now write §2. It's long — let me structure it as: first the per-t pointwise bound lemma `jlag_left_vertical_norm_at` (t ≥ 10), then the middle bound, then the assembly. Writing now.
One more check — intervalIntegral.integral_const : ∫ x in a..b, c = (b−a)•c for ℝ: `intervalIntegral.integral_const c : ∫ x in a..b, c = (b - a) • c` ✓ (for real-valued: (b−a)·c via smul = mul).
And integral_mono_on: needs f g integrable + a ≤ b + pointwise on Icc ✓.
The per-piece integrability: g(t) = ‖Jlag n (↑(-5/2:ℝ) + ↑t·I)‖: ContinuousOn on uIcc a b: Jlag continuous at path points: kFun continuous: kFun_differentiableAt (hs : s ≠ 1) (LiSides:63) ⟹ .continuousAt; logDeriv continuous (my lemma, needs ζ ≠ 0 ✓ zeta_ne_zero_left_vertical + s ≠ 1: re = −5/2 ≠ 1 ⟹ s ≠ 1 via re). Jlag = kFun * (−logDeriv): ContinuousAt.mul + ContinuousAt.neg. Then norm: ContinuousAt.norm. So:
```lean
theorem jlag_left_vertical_continuousAt (n : ℕ) (t : ℝ) :
ContinuousAt (fun u => Jlag n ((-5/2:ℝ) + (u:ℝ)*Complex.I)) t := by
-- continuity of the composition at u = t
have hpath : ContinuousAt (fun u : ℝ => ((-5/2:ℝ):ℂ) + (u:ℝ)*Complex.I) t := by
fun_prop — or: continuousAt_const.add (continuousAt_ofReal... )
```
The path map u ↦ ↑x + ↑u·I: continuous: ContinuousAt.add continuousAt_const (ContinuousAt.mul (Complex.continuous_ofReal.continuousAt ... ) continuousAt_const)... `Complex.continuous_ofReal : Continuous ofReal` ✓. (fun u => (↑u : ℂ)): continuous_ofReal.continuousAt. (·*I): .mul_const or ContinuousAt.mul _ continuousAt_const. Let me write with continuity/fun_prop tactics — `fun_prop` handles such goals usually. Or `continuity`. I'll try fun_prop first.
Then Jlag continuousAt at the point s := path t: Jlag n = kFun n * (−logDeriv ζ):
```lean
have hs1 : s ≠ 1 := by intro h; have := h ▸ ... re = −5/2 ≠ 1
have hζ : riemannZeta s ≠ 0 := zeta_ne_zero_left_vertical t — careful: my lemma is stated at point ↑(-5/2:ℝ)+↑t·I ✓ exact.
have h1 : ContinuousAt (kFun n) s := (kFun_differentiableAt hs1).continuousAt
have h2 : ContinuousAt (logDeriv riemannZeta) s := continuousAt_logDeriv_zeta hs1 hζ
have h3 : ContinuousAt (Jlag n) s := by
unfold Jlag
exact h1.mul (h2.neg) — Jlag n s = kFun n s * (−logDeriv ... ): Jlag n = fun s => kFun n s * (−(deriv ζ s/ζ s)): the −(deriv/ζ) = −logDeriv: need logDeriv defeq: logDeriv ζ s = deriv ζ s/ζ s by rfl? logDeriv is a def: logDeriv f x = deriv f x / f x — so −(deriv ζ s/ζ s) = −logDeriv ζ s by rfl ✓. But as FUNCTIONS: (fun s => kFun n s * (−(deriv ζ s/ζ s))) vs kFun n * (−logDeriv ζ): h1.mul h2.neg : ContinuousAt (fun s => kFun n s * (−logDeriv ζ s)) — need the Jlag unfold to match: unfold Jlag logDeriv? Or: show ContinuousAt (fun s => kFun n s * (-(deriv riemannZeta s / riemannZeta s))) t.comp hpath hmm.
```
Cleaner: ContinuousAt.comp_of_eq or:
```lean
have hJ : ContinuousAt (Jlag n) s := by
have e : Jlag n = fun z => kFun n z * (-logDeriv riemannZeta z) := rfl
rw [e]
exact h1.mul h2.neg
```
`Jlag n = fun z => kFun n z * (-logDeriv ζ z)` by rfl: Jlag def: kFun n s * (-(deriv ζ s/ζ s)); logDeriv ζ z = deriv ζ z/ζ z by def — rfl should hold (defeq) ✓. Then ContinuousAt.comp: (h1.mul h2.neg).comp hpath? The composition: ContinuousAt (fun u => Jlag n (path u)) t = (hJ).comp hpath ✓ `ContinuousAt.comp`.
Then the norm function g u = ‖Jlag n (path u)‖: (that).norm ✓.
Integrable: ContinuousOn.intervalIntegrable: (continuousOn of the composition on uIcc a b) — from ContinuousAt at each point: ContinuousOn fun u => ... := fun u hu => (continuousAt_... u).continuousWithinAt ✓.
OK writing §2 now. It's big; I'll write the whole thing then iterate on build errors. Let me be careful about:
- MZeroProp exact statement: `∀ t : ℝ, |t| ≤ 10 → ‖logDeriv riemannZeta ((-5/2:ℂ) + (t:ℝ)*Complex.I)‖ ≤ 1.3352` — point (−5/2 : ℂ).
- The cast bridge e_cast : ((-5/2:ℝ):ℂ) = (-5/2:ℂ) := by push_cast; ring — then rw [e_cast] or use `show`.
Actually simpler: state my zeta_ne_zero_left_vertical and continuousAt lemmas at the MZeroProp point form (−5/2 : ℂ) + t·I?? But VIntegral's point form is ↑(−5/2:ℝ) + ↑t·I (from the def f (x + y*I) with x : ℝ — the coercion inserts ↑). Hmm — actually is it? `f (x + y * I)` with x y : ℝ: `x + y * I`: y * I : ℝ * ℂ — the elaborator inserts ↑ on y: (↑y * I); then x + that: ℝ + ℂ ⟹ ↑x + ↑y*I. So the VIntegral point is `((x:ℝ):ℂ) + ((y:ℝ):ℂ)*I` i.e. ↑(-5/2) + ↑t*I ✓ (matches how I wrote the lemmas — the build accepted them with those forms ✓ and `simp` computed re/im ✓).
So the bridge: ↑(-5/2:ℝ) = (-5/2:ℂ): `by push_cast; ring` — push_cast turns ↑(-5/2:ℝ) into (-5/2:ℂ)? push_cast normalizes: ↑(-5/2) = -(↑5)/(↑2) = ... it should close by norm_num: `by norm_num` might do it: (↑(-5/2:ℝ):ℂ) = (-5/2:ℂ): norm_num [Complex.ofReal_div, ...] — safest: `by push_cast; ring`. But wait — is it even TRUE definitionally? (−5/2 : ℂ) is OfScientific/ofNat-based; ↑(-5/2:ℝ) is ofReal of the real OfScientific — not defeq but provable by push_cast+ring or `Complex.ext <;> simp; norm_num`. I'll make a tiny lemma:
```lean
lemma leftX : ((-5/2 : ℝ) : ℂ) = (-5/2 : ℂ) := by push_cast; ring
```
Hmm — push_cast on ↑(-5/2): gives (-(5:ℂ))/2 vs (-5/2:ℂ): then ring? ring handles division in fields ✓ should close.
Then MZeroProp application: have h := hMZ t ht10; rw [← leftX] at h — wait the point in hMZ is (-5/2:ℂ) + ↑t*I; mine is ↑(-5/2:ℝ) + ↑t*I: rw [← leftX] at h changes (-5/2:ℂ) → ↑(-5/2:ℝ) ✓.
Now write §2.
Scaffolding GREEN. Committing 6-c-i, then writing §2 (I_III).
tool: Bash
input
{
"command": "cd /d/Python/Quantum && git add research/lean/NguyenRH1/NguyenRH1/LiSideBounds.lean && git -c user.name=\"NGUYEN-RH-1\" -c user.email=\"research@local\" commit -m \"$(cat <<'EOF'\nii\u2032-6-c-i: LiSideBounds.lean scaffolding GREEN (build 8770 jobs)\n\nZ2hat_mono (C0hat_mono clone), nearZerosSub_mult_sum_le (\u2264 Z2hat t via the\nLiTightR image/subset bridge + ZeroCountProp2), continuousAt/On_logDeriv_zeta\n(analyticity quotient), Jlag_norm_eq, zeta_ne_zero_left_vertical (classification),\nzeta_ne_zero_horizontal (wide-pigeonhole clearance), rectangleIntegral_Jlag_eq\n(side decomposition), VIntegral_norm, HIntegral_split, jlag_left_vertical_norm_even.\nBanked: rw [\u2190 him] loops on nested occurrences (use forward); numeral-cast conj\nidentities need the map-chain + push_cast + ring (simp misfires on -5/2);\nIsNontrivialZero's .re projections need h \u25b8 hnt.2.1 (rw can't see inside);\nlogDeriv unfolds to Pi.div (Pi.div_apply bridge).\nEOF\n)\"",
"description": "Commit 6-c-i scaffolding"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Build GREEN (8770 jobs — wait, 8770? The full build was 8773 with LiSideBounds not imported by root. The module count: LiSideBounds isn't root-imported yet, so it built as an extra target... 8770 vs 8773 — the count difference is because LiSideBounds built standalone (the root library NguyenRH1.lean doesn't import it yet). Fine.\n\nThere's still a stray \"ring works primarily in commutative rings\" note in the output — from an earlier line? The build completed successfully, so it's a warning/suggestion trace, likely from the `ring` in hconj that DID close but printed a note? Odd — let me check if there's a warning in LiSideBounds specifically. The grep for LiSideBounds returned nothing, so no warnings in my file. The note must be a leftover trace line in the output (from elaboration suggestion machinery). Since the build is green and no LiSideBounds warnings, move on.\n\n**6-c-i scaffolding COMPLETE.** Now 6-c-ii: I_III.\n\nThe statement:\n```lean\ntheorem vIntegral_Jlag_left_norm_le (hZC : ZeroCountProp) (hZC2 : ZeroCountProp2)\n (hNLZ : NoLowZeros) (hMZ : MZeroProp) {n : ℕ} (hn : 100000 ≤ n) {T : ℝ}\n (hTn : Real.sqrt n ≤ T) (hTn1 : T ≤ Real.sqrt n + 1) :\n ‖VIntegral (Jlag n) (-5/2) (-T) T‖ ≤\n 4 * T * ((2/3) * Z2hat T + 10.5 * Real.log (T + 2) + 48) + 40 * 1.3352\n```\n\nWait — hn : 100000 ≤ n gives √n ≥ 316.2 ⟹ T ≥ 316 ≥ 10 ✓.\n\nProof structure:\n1. VIntegral_norm: ‖VIntegral‖ = ‖∫ t in −T..T, Jlag n (−5/2 + tI)‖.\n2. ‖∫‖ ≤ ∫_{−T}^{T} ‖Jlag‖ (norm_integral_le_integral_norm, needs −T ≤ T ✓).\n3. Split: ∫_{−T}^{T} = ∫_{−T}^{−10} + ∫_{−10}^{10} + ∫_{10}^{T} (integral_add_adjacent_intervals ×2 — needs IntervalIntegrable on each piece: ‖Jlag‖ is continuous (Jlag continuous: kFun continuous (differentiable ✓) × logDeriv continuous ✓ — need ContinuousOn of Jlag on the path: Jlag n s = kFun n s * (−logDeriv ζ s): kFun_differentiableAt (s ≠ 1) ⟹ continuousAt; logDeriv continuous via my lemma ⟹ Jlag continuousAt ⟹ continuousOn ⟹ norm continuous ⟹ integrable).\n Hmm — actually norm_integral_le_integral_norm gives ‖∫ f‖ ≤ ∫ ‖f‖ — and then I split the ∫‖f‖. Integrability of ‖Jlag‖: (ContinuousOn.norm) ✓.\n4. ∫_{−T}^{−10} g = ∫_{10}^{T} g via integral_comp_neg + jlag_left_vertical_norm_even:\n ∫ t in −T..−10, g t where g t = ‖Jlag n (−5/2 + tI)‖: integral_comp_neg : ∫ x in a..b, f(−x) = ∫ x in −b..−a, f x. So ∫ t in −T..−10, g t = ∫ t in −T..−10, g(−(−t)) — hmm: define h(t) := g(−t): h(t) = g(t) by jlag_left_vertical_norm_even (g(−t) = g(t) — wait my lemma: ‖Jlag n (−5/2 + (−t)I)‖ = ‖Jlag n (−5/2 + tI)‖ ✓ so g(−t) = g(t) — g is even). ∫_{−T}^{−10} g = ∫_{−T}^{−10} (fun t => g(−t)) — pointwise eq (g even) — then integral_comp_neg: ∫ x in −T..−10, g(−x) = ∫ x in 10..T, g x ✓.\n5. Middle: ∫_{−10}^{10} g ≤ 20·(2·1.3352): g t = ‖kFun‖·‖logDeriv‖ ≤ 2·1.3352 (kFun_norm_le_two re = −5/2 ≤ 1/2 ✓; MZeroProp hMZ t (|t| ≤ 10) — MZeroProp's point form: `((-5/2:ℂ) + (t:ℝ)·I)` — my point is `((-5/2:ℝ):ℂ) + (t:ℝ)·I` — cast bridge: push_cast/show). Via intervalIntegral.integral_mono_on (g ≤ const) + integral_const: ∫_{−10}^{10} c = c·20.\n6. Tails: ∫_{10}^{T} g ≤ (T−10)·(2·((2/3)·Z2hat T + 10.5·log(T+2)+48)): per t ∈ [10, T]:\n g t ≤ 2·‖logDeriv ζ(−5/2+it)‖ ≤ 2·(‖Σnear‖ + ‖R‖) where:\n - capstone: ‖logDeriv − Σ_{nearZerosSub t} mult/(s−ρ)‖ ≤ 10.5·log(|t|+2)+48, s = −5/2+it: hyps: ht : 10 ≤ t ✓; hσlo/hσhi: re = −5/2 ✓ simp; him : s.im = t ✓ simp; hζ: zeta_ne_zero_left_vertical ✓ (cast bridge: the lemma's point is ((−5/2:ℝ):ℂ)+t·I vs capstone's s — I'll set s := ((−5/2:ℝ):ℂ)+t·I and discharge .re/.im by simp).\n - ‖logDeriv‖ ≤ ‖logDeriv − Σ‖ + ‖Σ‖ (norm: a = (a−b)+b).\n - ‖Σ_{nearZerosSub t} (mult:ℂ)/(s−ρ)‖ ≤ Σ ‖mult/(s−ρ)‖ ≤ Σ (2/5)·mult ≤ (2/5)·Z2hat t ≤ (2/3)·Z2hat T:\n - per ρ: ‖(mult:ℂ)/(s−ρ)‖ = mult/‖s−ρ‖ ≤ mult/(5/2): ‖s−ρ‖ ≥ |re(s−ρ)| = |−5/2 − ρ.re| = 5/2 + ρ.re (ρ.re ∈ (0,1)) ≥ 5/2. re(s−ρ) = s.re − ρ.re = −5/2 − ρ.re (simp). |−5/2−ρ.re| = 5/2+ρ.re (abs_of_neg... −5/2−ρ.re < 0 ⟹ |x| = −x = 5/2+ρ.re). So 1/‖s−ρ‖ ≤ 1/(5/2) = 2/5 (div_le_div with abs_re_le_norm).\n - Σ mult ≤ Z2hat t (nearZerosSub_mult_sum_le hZC2, 10 ≤ t ✓).\n - (2/5)·Z2hat t ≤ (2/3)·Z2hat T: 2/5 ≤ 2/3 + Z2hat t ≤ Z2hat T (Z2hat_mono, t ≤ T, 1 ≤ t) + Z2hat T ≥ 0.\n - log(|t|+2) = log(t+2) (t ≥ 10 > 0: abs_of_nonneg) ≤ log(T+2) (mono).\n So g t ≤ 2·((2/3)·Z2hat T + 10.5·log(T+2) + 48) = const K on [10, T].\n ∫_{10}^{T} g ≤ (T−10)·K.\n7. Assemble: ∫_{−T}^{T} g ≤ 2·(T−10)·K + 20·(2·1.3352) = 2T·K − 20K + 40·1.3352 ≤ 2T·K + 40·1.3352 = 4T·((2/3)Z2hat T + 10.5 log(T+2) + 48) + 40·1.3352 ✓ (K = 2·(...) so 2T·K = 4T·(...) ✓; −20K ≤ 0 — need K ≥ 0: Z2hat T ≥ 0? Z2hat T = 0.6·log(T+2)+0.886·loglog+2.7 ≥ 0 for T ≥ 1 (log ≥ 1, loglog ≥ 0 ✓) ✓).\n\nCast bridge concern: MZeroProp's point `((-5/2:ℂ) + (t:ℝ)·I)` vs my `((-5/2:ℝ):ℂ) + (t:ℝ)·I`: these are the SAME up to the cast: (−5/2 : ℂ) vs ↑((−5/2:ℝ)) — `push_cast`/`ofReal_div`... `(-5/2 : ℂ) = ((-5/2 : ℝ) : ℂ)` by push_cast; ring or norm_num. There might be defeq: (−5/2 : ℂ) unfolds via OfScientific/ofNat... safer: `show` + push_cast + ring, or `convert hMZ t ht using 2` hmm. I'll write a small bridge: have e : ((-5/2:ℝ):ℂ) + (t:ℝ)*I = (-5/2:ℂ) + (t:ℝ)*I := by push_cast; ring — wait the LHS is ↑(-5/2:ℝ) and RHS (−5/2:ℂ): push_cast normalizes ↑(-5/2) → (-5/2:ℂ) ✓ then rfl. So `by push_cast; ring` or even `by norm_num`.\n\nSimilarly norm_logDeriv... not needed here.\n\nAlso the tight capstone's `s.im = t` — with s := ↑(-5/2:ℝ) + ↑t·I: s.im = t by simp ✓ (Complex.add_re/im simp lemmas handle ↑x + ↑t*I — the earlier hre/him proofs used `by simp` ✓).\n\nLet me now write §2. It's long — let me structure it as: first the per-t pointwise bound lemma `jlag_left_vertical_norm_at` (t ≥ 10), then the middle bound, then the assembly. Writing now.\n\nOne more check — intervalIntegral.integral_const : ∫ x in a..b, c = (b−a)•c for ℝ: `intervalIntegral.integral_const c : ∫ x in a..b, c = (b - a) • c` ✓ (for real-valued: (b−a)·c via smul = mul).\n\nAnd integral_mono_on: needs f g integrable + a ≤ b + pointwise on Icc ✓.\n\nThe per-piece integrability: g(t) = ‖Jlag n (↑(-5/2:ℝ) + ↑t·I)‖: ContinuousOn on uIcc a b: Jlag continuous at path points: kFun continuous: kFun_differentiableAt (hs : s ≠ 1) (LiSides:63) ⟹ .continuousAt; logDeriv continuous (my lemma, needs ζ ≠ 0 ✓ zeta_ne_zero_left_vertical + s ≠ 1: re = −5/2 ≠ 1 ⟹ s ≠ 1 via re). Jlag = kFun * (−logDeriv): ContinuousAt.mul + ContinuousAt.neg. Then norm: ContinuousAt.norm. So:\n\n```lean\ntheorem jlag_left_vertical_continuousAt (n : ℕ) (t : ℝ) :\n ContinuousAt (fun u => Jlag n ((-5/2:ℝ) + (u:ℝ)*Complex.I)) t := by\n -- continuity of the composition at u = t\n have hpath : ContinuousAt (fun u : ℝ => ((-5/2:ℝ):ℂ) + (u:ℝ)*Complex.I) t := by\n fun_prop — or: continuousAt_const.add (continuousAt_ofReal... )\n```\n\nThe path map u ↦ ↑x + ↑u·I: continuous: ContinuousAt.add continuousAt_const (ContinuousAt.mul (Complex.continuous_ofReal.continuousAt ... ) continuousAt_const)... `Complex.continuous_ofReal : Continuous ofReal` ✓. (fun u => (↑u : ℂ)): continuous_ofReal.continuousAt. (·*I): .mul_const or ContinuousAt.mul _ continuousAt_const. Let me write with continuity/fun_prop tactics — `fun_prop` handles such goals usually. Or `continuity`. I'll try fun_prop first.\n\nThen Jlag continuousAt at the point s := path t: Jlag n = kFun n * (−logDeriv ζ): \n```lean\n have hs1 : s ≠ 1 := by intro h; have := h ▸ ... re = −5/2 ≠ 1\n have hζ : riemannZeta s ≠ 0 := zeta_ne_zero_left_vertical t — careful: my lemma is stated at point ↑(-5/2:ℝ)+↑t·I ✓ exact.\n have h1 : ContinuousAt (kFun n) s := (kFun_differentiableAt hs1).continuousAt\n have h2 : ContinuousAt (logDeriv riemannZeta) s := continuousAt_logDeriv_zeta hs1 hζ\n have h3 : ContinuousAt (Jlag n) s := by\n unfold Jlag\n exact h1.mul (h2.neg) — Jlag n s = kFun n s * (−logDeriv ... ): Jlag n = fun s => kFun n s * (−(deriv ζ s/ζ s)): the −(deriv/ζ) = −logDeriv: need logDeriv defeq: logDeriv ζ s = deriv ζ s/ζ s by rfl? logDeriv is a def: logDeriv f x = deriv f x / f x — so −(deriv ζ s/ζ s) = −logDeriv ζ s by rfl ✓. But as FUNCTIONS: (fun s => kFun n s * (−(deriv ζ s/ζ s))) vs kFun n * (−logDeriv ζ): h1.mul h2.neg : ContinuousAt (fun s => kFun n s * (−logDeriv ζ s)) — need the Jlag unfold to match: unfold Jlag logDeriv? Or: show ContinuousAt (fun s => kFun n s * (-(deriv riemannZeta s / riemannZeta s))) t.comp hpath hmm.\n```\nCleaner: ContinuousAt.comp_of_eq or: \n```lean\n have hJ : ContinuousAt (Jlag n) s := by\n have e : Jlag n = fun z => kFun n z * (-logDeriv riemannZeta z) := rfl\n rw [e]\n exact h1.mul h2.neg\n```\n`Jlag n = fun z => kFun n z * (-logDeriv ζ z)` by rfl: Jlag def: kFun n s * (-(deriv ζ s/ζ s)); logDeriv ζ z = deriv ζ z/ζ z by def — rfl should hold (defeq) ✓. Then ContinuousAt.comp: (h1.mul h2.neg).comp hpath? The composition: ContinuousAt (fun u => Jlag n (path u)) t = (hJ).comp hpath ✓ `ContinuousAt.comp`.\n\nThen the norm function g u = ‖Jlag n (path u)‖: (that).norm ✓.\n\nIntegrable: ContinuousOn.intervalIntegrable: (continuousOn of the composition on uIcc a b) — from ContinuousAt at each point: ContinuousOn fun u => ... := fun u hu => (continuousAt_... u).continuousWithinAt ✓.\n\nOK writing §2 now. It's big; I'll write the whole thing then iterate on build errors. Let me be careful about:\n- MZeroProp exact statement: `∀ t : ℝ, |t| ≤ 10 → ‖logDeriv riemannZeta ((-5/2:ℂ) + (t:ℝ)*Complex.I)‖ ≤ 1.3352` — point (−5/2 : ℂ).\n- The cast bridge e_cast : ((-5/2:ℝ):ℂ) = (-5/2:ℂ) := by push_cast; ring — then rw [e_cast] or use `show`.\n\nActually simpler: state my zeta_ne_zero_left_vertical and continuousAt lemmas at the MZeroProp point form (−5/2 : ℂ) + t·I?? But VIntegral's point form is ↑(−5/2:ℝ) + ↑t·I (from the def f (x + y*I) with x : ℝ — the coercion inserts ↑). Hmm — actually is it? `f (x + y * I)` with x y : ℝ: `x + y * I`: y * I : ℝ * ℂ — the elaborator inserts ↑ on y: (↑y * I); then x + that: ℝ + ℂ ⟹ ↑x + ↑y*I. So the VIntegral point is `((x:ℝ):ℂ) + ((y:ℝ):ℂ)*I` i.e. ↑(-5/2) + ↑t*I ✓ (matches how I wrote the lemmas — the build accepted them with those forms ✓ and `simp` computed re/im ✓).\n\nSo the bridge: ↑(-5/2:ℝ) = (-5/2:ℂ): `by push_cast; ring` — push_cast turns ↑(-5/2:ℝ) into (-5/2:ℂ)? push_cast normalizes: ↑(-5/2) = -(↑5)/(↑2) = ... it should close by norm_num: `by norm_num` might do it: (↑(-5/2:ℝ):ℂ) = (-5/2:ℂ): norm_num [Complex.ofReal_div, ...] — safest: `by push_cast; ring`. But wait — is it even TRUE definitionally? (−5/2 : ℂ) is OfScientific/ofNat-based; ↑(-5/2:ℝ) is ofReal of the real OfScientific — not defeq but provable by push_cast+ring or `Complex.ext <;> simp; norm_num`. I'll make a tiny lemma:\n\n```lean\nlemma leftX : ((-5/2 : ℝ) : ℂ) = (-5/2 : ℂ) := by push_cast; ring\n```\nHmm — push_cast on ↑(-5/2): gives (-(5:ℂ))/2 vs (-5/2:ℂ): then ring? ring handles division in fields ✓ should close.\n\nThen MZeroProp application: have h := hMZ t ht10; rw [← leftX] at h — wait the point in hMZ is (-5/2:ℂ) + ↑t*I; mine is ↑(-5/2:ℝ) + ↑t*I: rw [← leftX] at h changes (-5/2:ℂ) → ↑(-5/2:ℝ) ✓.\n\nNow write §2.","signature":""},{"type":"text","text":"Scaffolding GREEN. Committing 6-c-i, then writing §2 (I_III)."},{"type":"tool_use","id":"Bash_59","name":"Bash","input":{"command":"cd /d/Python/Quantum && git add research/lean/NguyenRH1/NguyenRH1/LiSideBounds.lean && git -c user.name=\"NGUYEN-RH-1\" -c user.email=\"research@local\" commit -m \"$(cat <<'EOF'\nii′-6-c-i: LiSideBounds.lean scaffolding GREEN (build 8770 jobs)\n\nZ2hat_mono (C0hat_mono clone), nearZerosSub_mult_sum_le (≤ Z2hat t via the\nLiTightR image/subset bridge + ZeroCountProp2), continuousAt/On_logDeriv_zeta\n(analyticity quotient), Jlag_norm_eq, zeta_ne_zero_left_vertical (classification),\nzeta_ne_zero_horizontal (wide-pigeonhole clearance), rectangleIntegral_Jlag_eq\n(side decomposition), VIntegral_norm, HIntegral_split, jlag_left_vertical_norm_even.\nBanked: rw [← him] loops on nested occurrences (use forward); numeral-cast conj\nidentities need the map-chain + push_cast + ring (simp misfires on -5/2);\nIsNontrivialZero's .re projections need h ▸ hnt.2.1 (rw can't see inside);\nlogDeriv unfolds to Pi.div (Pi.div_apply bridge).\nEOF\n)\"","description":"Commit 6-c-i scaffolding"},"extra_content":null}]