← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes
thinking (8230 chars)
`ContinuousOn.comp_fract'' {f : α → β} (h : ContinuousOn f I) (hf : f 0 = f 1) : Continuous (fun x => f (fract x))` (probably) — the single-function version. That's exactly what I need for b2Fun continuity: b2Fun = g ∘ Int.fract with g(u) = (u²−u)/2 on I = Icc 0 1, g(0) = 0 = g(1) ✓.
Now I have everything. Let me write LiRBound.lean §1 (ii′-5b). Plan:
```lean
def b2Fun (x : ℝ) : ℝ := (Int.fract x ^ 2 - Int.fract x) / 2
```
Lemmas:
1. `b2Fun_add_one (x : ℝ) : b2Fun (x + 1) = b2Fun x` — via Int.fract_add_one.
2. `b2Fun_range`: −1/8 ≤ b2Fun x ∧ b2Fun x ≤ 0 — from fract ∈ [0,1): (u²−u)/2 = −u(1−u)/2, u(1−u) ∈ [0, 1/4].
3. `abs_b2Fun_le : |b2Fun x| ≤ 1/8`.
4. `continuous_b2Fun : Continuous b2Fun` — comp_fract'' with g u = (u²−u)/2, g 0 = 0 = g 1 ✓ (need ContinuousOn g (Icc 0 1) ✓ polynomial).
5. `hasDerivAt_b2Fun {x : ℝ} (hx : x ≠ ⌊x⌋) : HasDerivAt b2Fun (Int.fract x - 1/2) x` — fract differentiable at x (continuousAt_fract gives continuity; differentiability: HasDerivAt fract 1 x off integers: fract = id − floor, floor locally constant ⟹ HasDerivAt (fun x => x − ⌊x⌋) (1 − 0) — hmm: HasDerivAt (fun x => Int.fract x) 1 x for x ∉ ℤ: fract = id − ↑(floor): near x, floor is constant (= ⌊x⌋): so fract =ᶠ[𝓝 x] fun y => y − ⌊x⌋ which has derivative 1: `HasDerivAt.congr_of_eventuallyEq`? Need floor locally constant: ∀ y near x, ⌊y⌋ = ⌊x⌋ — from continuousAt_fract's Ico: on Ico(⌊x⌋, ⌊x⌋+1) floor = const ✓ and Ico ∈ 𝓝 x when x ∉ ℤ ✓. So:
HasDerivAt Int.fract 1 x := by
have hIco : Ico (⌊x⌋ : ℝ) (⌊x⌋ + 1) ∈ 𝓝 x := Ico_mem_nhds (Int.floor_le x |>.lt_of_ne ...) (Int.lt_floor_add_one x)
apply HasDerivAt.congr_of_eventuallyEq (hasDerivAt_id x |>.sub_const (⌊x⌋ : ℝ)?...)
Hmm: fract y = y − ↑⌊y⌋; near x: ⌊y⌋ = ⌊x⌋: so fract =ᶠ fun y => y − ↑⌊x⌋: HasDerivAt of that = 1 − 0 = 1 ✓.
The floor-locally-constant fact: `Int.floor_eq_on_Ico`? or from Ico membership: y ∈ Ico(⌊x⌋, ⌊x⌋+1) ⟹ ⌊y⌋ = ⌊x⌋: `Int.floor_eq_on_Ico'`? there's `Int.floor_eq_on_Ico (n : ℤ) (x) (h : x ∈ Ico n (n+1)) : ⌊x⌋ = n`? I believe `Int.floor_eq_on_Ico` exists ✓.
Then b2Fun = (fract²−fract)/2: HasDerivAt (fract x − 1/2): chain: (u²−u)/2 at u with u' = 1: deriv = (2u−1)/2 = u−1/2 ✓ via hasDerivAt pow/sub/div_const.
6. The B₁ link: on [1, ∞): Zeta23's B1 x = x − ⌊x⌋₊ − 1/2 and Int.fract x = x − ⌊x⌋: equal for x ≥ 0: `Nat.floor_eq_int_floor`? the cast: (⌊x⌋₊ : ℝ) = (⌊x⌋ : ℝ) for x ≥ 0: `Nat.floor_eq_iff`... the lemma: `Nat.floor_int`? Let me look for `Nat.floor_eq_int_floor`/`Int.floor_natCast`... The right one: `Nat.floor_eq_intFloor`?? I'll find: for 0 ≤ x: (⌊x⌋₊ : ℤ) = ⌊x⌋ — `Nat.floor_eq_int_floor (hx : 0 ≤ x)`? or `Int.floor_natCast`... I'll handle with `Nat.floor_eq_iff`+`Int.floor_eq_iff` if no direct lemma.
Then the IBP identity (re s > 0):
```lean
theorem integral_b1_cpow_eq (s : ℂ) (hs : 0 < s.re) :
∫ x in Set.Ioi 1, (EulerMaclaurin.B1 x : ℂ) * (x : ℂ) ^ (-s - 1)
= (s + 1) * ∫ x in Set.Ioi 1, (b2Fun x : ℂ) * (x : ℂ) ^ (-s - 2) := ...
```
Hmm wait — signs: I want ∫ B̃₁·x^{−s−1} = (s+1)∫ B̃₂·x^{−s−2}·(−1)...: v = x^{−s−1}, v' = −(s+1)x^{−s−2}: ∫ B̃₁v = [B̃₂v]₁^N − ∫ B̃₂ v' = 0 + (s+1)∫ B̃₂ x^{−s−2} ✓ (B̃₂(1) = 0, B̃₂(N) = 0 for integer N). So ∫₁^N B̃₁ v = (s+1)∫₁^N B̃₂ x^{−s−2} for integer N ≥ 1, re-free (any s) — then limits: LHS → ∫₁^∞ (re s > 0 needed for LHS convergence), RHS → (s+1)∫₁^∞ (re s > −1). So identity holds for re s > 0.
The per-interval IBP application: integral_mul_deriv_eq_deriv_mul_of_hasDerivAt with:
- u := fun x => (b2Fun x : ℂ), u' := fun x => (Int.fract x − 1/2 : ℂ) [ContinuousOn u ✓; HasDerivAt on Ioo(k, k+1) ✓ since fract x ≠ 0 there]
- v := fun x => (x : ℂ) ^ (-s - 1), v' := fun x => -(s+1) * (x:ℂ)^(-s-2) [everywhere smooth on x > 0]
- The IBP gives ∫ u'·v + u·v' = u·v| boundaries: ∫ₖ^{k+1} u'v + ∫ u v' = 0 − 0: ∫ₖ^{k+1} u' v = −∫ u v' = (s+1)∫ B̃₂ x^{−s−2} ✓.
- u' = ↑fract − 1/2 = B̃₁-as-int-version; on [k, k+1] with k ≥ 1: Int.fract x = x − k = B̃₁-int; relate to Zeta23 B1: B1 x = x − ↑⌊x⌋₊ − 1/2 with ⌊x⌋₊ = ⌊x⌋ for x ≥ 0.
Then sum k = 1 to N−1, then N → ∞ (Tendsto via dominated convergence on Ioi: Mathlib `intervalIntegral_tendstoIoi`? — check name: maybe `intervalIntegral_tendstoIoi (hfi : IntegrableOn f (Ioi a) ...)`: Tendsto (fun N : ℕ => ∫ x in a..N, f x) atTop (𝓝 (∫ x in Ioi a, f))? I'll find it.)
Then §3: hasDerivAt of the B₂-parameter-integral for re s > −1 (clone of hasDerivAt_Zeta0Integral with the extra decay power).
Then §4: the extended identity via identity principle:
```lean
theorem riemannZeta_eq_level2 {s : ℂ} (hs : -1 < s.re) (hs1 : s ≠ 1) :
riemannZeta s = 1 / 2 + 1 / (s - 1) + s * (s + 1) * ∫ x in Set.Ioi (1:ℝ), (b2Fun x : ℂ) * (x : ℂ) ^ (-s - 2)
```
Wait — sign: ζ(s) = 1/2 + 1/(s−1) − s·∫ B̃₁ x^{−s−1} and ∫ B̃₁ = (s+1)∫ B̃₂ x^{−s−2}: ζ(s) = 1/2 + 1/(s−1) − s(s+1)∫ B̃₂ x^{−s−2}. So with MINUS: `1/2 + 1/(s−1) − s*(s+1)*∫`. Let me double check the ζ₀ sign: riemannZeta0 N s = Σ + (−N^(1−s))/(1−s) + (−N^(−s))/2 + s·∫_N^∞ (⌊x⌋+1/2−x)/x^{s+1} dx. (⌊x⌋+1/2−x) = −B̃₁(x) (Nat-floor version). At N = 1: = 1 + (−1)/(1−s) + (−1)/2 + s·∫₁^∞ (−B̃₁)x^{−s−1} = 1 + 1/(s−1) − 1/2 − s∫B̃₁x^{−s−1} = 1/2 + 1/(s−1) − s∫B̃₁x^{−s−1} ✓. Then −s∫B̃₁ = −s(s+1)∫B̃₂x^{−s−2}: ζ = 1/2 + 1/(s−1) − s(s+1)∫B̃₂·x^{−s−2} ✓.
Identity principle: both sides analytic on U := {s | −1 < re s} \ {1} (preconnected? {re > −1} minus a point — the slit... {re s > −1, s ≠ 1}: preconnected ✓ (open convex minus a point in ℂ — still connected: half-plane minus a point is path-connected ✓). Both analytic: LHS: HolomorphicOn_riemannZeta (Zeta23 ✓ — check exact name/namespace: used in Zeta0EqZeta proof as `HolomorphicOn_riemannZeta.analyticOnNhd`... it's probably root or Complex namespace — `HolomorphicOn_riemannZeta`). RHS: polynomial/1/(s−1) analytic + the B₂-integral analytic via §3's hasDerivAt (hasDerivAt on the open set ⟹ differentiableOn ⟹ analyticOnNhd via DifferentiableOn.analyticOnNhd ✓ used before). Agree on {re s > 0, s ≠ 1} — eventuallyEq at e.g. 2: the Zeta0EqZeta proof pattern uses eqOn_of_preconnected_of_eventuallyEq with the point 2 — copy.
§5: the disc bound:
```lean
theorem norm_riemannZeta_le_disc {t : ℝ} (ht : 10 ≤ |t|) {s : ℂ}
(hmem : s ∈ Metric.ball (2 + t * Complex.I) (5/2)) : ‖riemannZeta s‖ ≤ ...
```
Hmm — cleaner: state the bound on the half-plane σ ≥ −1/2 with |t| ≥ 10:
‖ζ(σ+it)‖ ≤ 1/2 + 1/9 + (σ²+t²+...)/4·... — let me compute the raw bound: |ζ(s)| ≤ 1/2 + 1/|s−1| + |s||s+1|/(8(σ+1)). For σ ≥ −1/2: 8(σ+1) ≥ 4: |s||s+1|/(8(σ+1)) ≤ |s||s+1|/4. |s| ≤ σ+|t|... ‖s‖ ≤ |σ|+|t| hmm σ ∈ [−1/2, ...]: unbounded σ?! The disc bounds σ ≤ 9/2. State the theorem FOR THE DISC: s ∈ closedBall (2+it) (5/2): then ‖s‖ ≤ ‖2+it‖ + 5/2 ≤ 2+|t|+5/2 = |t|+9/2; ‖s+1‖ ≤ |t|+11/2; |s−1| ≥ |t|−1 ≥ 9... hmm |s−1| ≥ ||s|−1|... simpler: |s−1| ≥ |Im(s−1)| = |t| ≥ 10 ✓ (abs_im_le_norm).
So ‖ζ s‖ ≤ 1/2 + 1/10 + (|t|+9/2)(|t|+11/2)/4. For |t| ≥ 10: (|t|+4.5)(|t|+5.5)/4 = (|t|² + 10|t| + 24.75)/4 ≤ (|t|² + |t|² + 0.25|t|²)/4? 10|t| ≤ |t|² (|t| ≥ 10) ✓; 24.75 ≤ 24.75·(|t|²/100) = 0.2475|t|² ✓. Total ≤ 2.2475|t|²/4 = 0.561875|t|². Plus 0.6. ≤ 0.57|t|² (0.6 ≤ 0.006|t|²). So:
‖ζ s‖ ≤ 3/5·|t|²?? 0.561875 + 0.006 = 0.568 — hmm 0.57|t|² — constants: state as `(3/4) * |t|^2` for comfort: 0.568 ≤ 0.75 ✓ plenty. Or exact traced form (0.6 + 0.561875·|t|²). For downstream use, the shape A'·log|t| + B' will absorb: log|g| ≤ log(0.57) + 2log|t| + m·log(1/0.2). Fine.
Statement: `theorem norm_riemannZeta_le_of_mem_ball {t : ℝ} (ht : 10 ≤ |t|) {s : ℂ} (hs : s ∈ Metric.closedBall (2 + t*I) (5/2)) : ‖riemannZeta s‖ ≤ 3/4 * |t|^2` or similar. Need s ≠ 1 ✓ (|t| ≥ 10 ⟹ s ≠ 1) and re s ≥ −1/2 ✓ (disc) and re s > −1 for the rep ✓.
Also for the center lower bound (ii′-5c): |ζ(2+it)| ≥ 1/ζ(2) — via moebius: 1/ζ(s) = Σ μ(n)n^{−s}: Mathlib: `LSeries_moebius`? hmm — `ArithmeticFunction.LSeries_moebius_eq_riemannZeta_inv`? Let me check quickly... Actually there might be `riemannZeta_inv_eq...`. I'll check when building 5c. For now 5b scope = the representation + the disc upper bound.
OK — also check: `HolomorphicOn_riemannZeta` — where does it live (namespace)? And `integrable_log_over_pow` (used in the Zeta23 proof — their own lemma? it was used with (r := ...) — grep). Let me check these two, then write the file.
`ContinuousOn.comp_fract''` gives continuity for free. Checking the last two names (`HolomorphicOn_riemannZeta`, `integrable_log_over_pow`), then writing LiRBound.lean §1.
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem HolomorphicOn_riemannZeta\\b\\|lemma HolomorphicOn_riemannZeta\\b\\|theorem HolomorphicOn_riemannZeta0\\|lemma HolomorphicOn_riemannZeta0\" Zeta23/ --include=*.lean -r | head -4; grep -rn \"theorem integrable_log_over_pow\\|lemma integrable_log_over_pow\" Zeta23/ --include=*.lean -r | head -2; grep -rn \"intervalIntegral_tendstoIoi\\|tendsto.*integral.*Ioi\\|integral_Iic\" Zeta23/FromPNTPlus/ZetaBounds.lean | head -4",
"description": "Check holomorphicity lemma, integrable_log_over_pow, Ioi limit lemmas"
}
raw content_json (database row)
[{"type":"thinking","thinking":"`ContinuousOn.comp_fract'' {f : α → β} (h : ContinuousOn f I) (hf : f 0 = f 1) : Continuous (fun x => f (fract x))` (probably) — the single-function version. That's exactly what I need for b2Fun continuity: b2Fun = g ∘ Int.fract with g(u) = (u²−u)/2 on I = Icc 0 1, g(0) = 0 = g(1) ✓.\n\nNow I have everything. Let me write LiRBound.lean §1 (ii′-5b). Plan:\n\n```lean\ndef b2Fun (x : ℝ) : ℝ := (Int.fract x ^ 2 - Int.fract x) / 2\n```\n\nLemmas:\n1. `b2Fun_add_one (x : ℝ) : b2Fun (x + 1) = b2Fun x` — via Int.fract_add_one.\n2. `b2Fun_range`: −1/8 ≤ b2Fun x ∧ b2Fun x ≤ 0 — from fract ∈ [0,1): (u²−u)/2 = −u(1−u)/2, u(1−u) ∈ [0, 1/4].\n3. `abs_b2Fun_le : |b2Fun x| ≤ 1/8`.\n4. `continuous_b2Fun : Continuous b2Fun` — comp_fract'' with g u = (u²−u)/2, g 0 = 0 = g 1 ✓ (need ContinuousOn g (Icc 0 1) ✓ polynomial).\n5. `hasDerivAt_b2Fun {x : ℝ} (hx : x ≠ ⌊x⌋) : HasDerivAt b2Fun (Int.fract x - 1/2) x` — fract differentiable at x (continuousAt_fract gives continuity; differentiability: HasDerivAt fract 1 x off integers: fract = id − floor, floor locally constant ⟹ HasDerivAt (fun x => x − ⌊x⌋) (1 − 0) — hmm: HasDerivAt (fun x => Int.fract x) 1 x for x ∉ ℤ: fract = id − ↑(floor): near x, floor is constant (= ⌊x⌋): so fract =ᶠ[𝓝 x] fun y => y − ⌊x⌋ which has derivative 1: `HasDerivAt.congr_of_eventuallyEq`? Need floor locally constant: ∀ y near x, ⌊y⌋ = ⌊x⌋ — from continuousAt_fract's Ico: on Ico(⌊x⌋, ⌊x⌋+1) floor = const ✓ and Ico ∈ 𝓝 x when x ∉ ℤ ✓. So:\n HasDerivAt Int.fract 1 x := by\n have hIco : Ico (⌊x⌋ : ℝ) (⌊x⌋ + 1) ∈ 𝓝 x := Ico_mem_nhds (Int.floor_le x |>.lt_of_ne ...) (Int.lt_floor_add_one x)\n apply HasDerivAt.congr_of_eventuallyEq (hasDerivAt_id x |>.sub_const (⌊x⌋ : ℝ)?...)\n Hmm: fract y = y − ↑⌊y⌋; near x: ⌊y⌋ = ⌊x⌋: so fract =ᶠ fun y => y − ↑⌊x⌋: HasDerivAt of that = 1 − 0 = 1 ✓.\n The floor-locally-constant fact: `Int.floor_eq_on_Ico`? or from Ico membership: y ∈ Ico(⌊x⌋, ⌊x⌋+1) ⟹ ⌊y⌋ = ⌊x⌋: `Int.floor_eq_on_Ico'`? there's `Int.floor_eq_on_Ico (n : ℤ) (x) (h : x ∈ Ico n (n+1)) : ⌊x⌋ = n`? I believe `Int.floor_eq_on_Ico` exists ✓.\n Then b2Fun = (fract²−fract)/2: HasDerivAt (fract x − 1/2): chain: (u²−u)/2 at u with u' = 1: deriv = (2u−1)/2 = u−1/2 ✓ via hasDerivAt pow/sub/div_const.\n\n6. The B₁ link: on [1, ∞): Zeta23's B1 x = x − ⌊x⌋₊ − 1/2 and Int.fract x = x − ⌊x⌋: equal for x ≥ 0: `Nat.floor_eq_int_floor`? the cast: (⌊x⌋₊ : ℝ) = (⌊x⌋ : ℝ) for x ≥ 0: `Nat.floor_eq_iff`... the lemma: `Nat.floor_int`? Let me look for `Nat.floor_eq_int_floor`/`Int.floor_natCast`... The right one: `Nat.floor_eq_intFloor`?? I'll find: for 0 ≤ x: (⌊x⌋₊ : ℤ) = ⌊x⌋ — `Nat.floor_eq_int_floor (hx : 0 ≤ x)`? or `Int.floor_natCast`... I'll handle with `Nat.floor_eq_iff`+`Int.floor_eq_iff` if no direct lemma.\n\nThen the IBP identity (re s > 0):\n```lean\ntheorem integral_b1_cpow_eq (s : ℂ) (hs : 0 < s.re) :\n ∫ x in Set.Ioi 1, (EulerMaclaurin.B1 x : ℂ) * (x : ℂ) ^ (-s - 1)\n = (s + 1) * ∫ x in Set.Ioi 1, (b2Fun x : ℂ) * (x : ℂ) ^ (-s - 2) := ...\n```\nHmm wait — signs: I want ∫ B̃₁·x^{−s−1} = (s+1)∫ B̃₂·x^{−s−2}·(−1)...: v = x^{−s−1}, v' = −(s+1)x^{−s−2}: ∫ B̃₁v = [B̃₂v]₁^N − ∫ B̃₂ v' = 0 + (s+1)∫ B̃₂ x^{−s−2} ✓ (B̃₂(1) = 0, B̃₂(N) = 0 for integer N). So ∫₁^N B̃₁ v = (s+1)∫₁^N B̃₂ x^{−s−2} for integer N ≥ 1, re-free (any s) — then limits: LHS → ∫₁^∞ (re s > 0 needed for LHS convergence), RHS → (s+1)∫₁^∞ (re s > −1). So identity holds for re s > 0.\n\nThe per-interval IBP application: integral_mul_deriv_eq_deriv_mul_of_hasDerivAt with:\n- u := fun x => (b2Fun x : ℂ), u' := fun x => (Int.fract x − 1/2 : ℂ) [ContinuousOn u ✓; HasDerivAt on Ioo(k, k+1) ✓ since fract x ≠ 0 there]\n- v := fun x => (x : ℂ) ^ (-s - 1), v' := fun x => -(s+1) * (x:ℂ)^(-s-2) [everywhere smooth on x > 0]\n- The IBP gives ∫ u'·v + u·v' = u·v| boundaries: ∫ₖ^{k+1} u'v + ∫ u v' = 0 − 0: ∫ₖ^{k+1} u' v = −∫ u v' = (s+1)∫ B̃₂ x^{−s−2} ✓.\n- u' = ↑fract − 1/2 = B̃₁-as-int-version; on [k, k+1] with k ≥ 1: Int.fract x = x − k = B̃₁-int; relate to Zeta23 B1: B1 x = x − ↑⌊x⌋₊ − 1/2 with ⌊x⌋₊ = ⌊x⌋ for x ≥ 0.\n\nThen sum k = 1 to N−1, then N → ∞ (Tendsto via dominated convergence on Ioi: Mathlib `intervalIntegral_tendstoIoi`? — check name: maybe `intervalIntegral_tendstoIoi (hfi : IntegrableOn f (Ioi a) ...)`: Tendsto (fun N : ℕ => ∫ x in a..N, f x) atTop (𝓝 (∫ x in Ioi a, f))? I'll find it.)\n\nThen §3: hasDerivAt of the B₂-parameter-integral for re s > −1 (clone of hasDerivAt_Zeta0Integral with the extra decay power).\n\nThen §4: the extended identity via identity principle:\n```lean\ntheorem riemannZeta_eq_level2 {s : ℂ} (hs : -1 < s.re) (hs1 : s ≠ 1) :\n riemannZeta s = 1 / 2 + 1 / (s - 1) + s * (s + 1) * ∫ x in Set.Ioi (1:ℝ), (b2Fun x : ℂ) * (x : ℂ) ^ (-s - 2)\n```\nWait — sign: ζ(s) = 1/2 + 1/(s−1) − s·∫ B̃₁ x^{−s−1} and ∫ B̃₁ = (s+1)∫ B̃₂ x^{−s−2}: ζ(s) = 1/2 + 1/(s−1) − s(s+1)∫ B̃₂ x^{−s−2}. So with MINUS: `1/2 + 1/(s−1) − s*(s+1)*∫`. Let me double check the ζ₀ sign: riemannZeta0 N s = Σ + (−N^(1−s))/(1−s) + (−N^(−s))/2 + s·∫_N^∞ (⌊x⌋+1/2−x)/x^{s+1} dx. (⌊x⌋+1/2−x) = −B̃₁(x) (Nat-floor version). At N = 1: = 1 + (−1)/(1−s) + (−1)/2 + s·∫₁^∞ (−B̃₁)x^{−s−1} = 1 + 1/(s−1) − 1/2 − s∫B̃₁x^{−s−1} = 1/2 + 1/(s−1) − s∫B̃₁x^{−s−1} ✓. Then −s∫B̃₁ = −s(s+1)∫B̃₂x^{−s−2}: ζ = 1/2 + 1/(s−1) − s(s+1)∫B̃₂·x^{−s−2} ✓.\n\nIdentity principle: both sides analytic on U := {s | −1 < re s} \\ {1} (preconnected? {re > −1} minus a point — the slit... {re s > −1, s ≠ 1}: preconnected ✓ (open convex minus a point in ℂ — still connected: half-plane minus a point is path-connected ✓). Both analytic: LHS: HolomorphicOn_riemannZeta (Zeta23 ✓ — check exact name/namespace: used in Zeta0EqZeta proof as `HolomorphicOn_riemannZeta.analyticOnNhd`... it's probably root or Complex namespace — `HolomorphicOn_riemannZeta`). RHS: polynomial/1/(s−1) analytic + the B₂-integral analytic via §3's hasDerivAt (hasDerivAt on the open set ⟹ differentiableOn ⟹ analyticOnNhd via DifferentiableOn.analyticOnNhd ✓ used before). Agree on {re s > 0, s ≠ 1} — eventuallyEq at e.g. 2: the Zeta0EqZeta proof pattern uses eqOn_of_preconnected_of_eventuallyEq with the point 2 — copy.\n\n§5: the disc bound:\n```lean\ntheorem norm_riemannZeta_le_disc {t : ℝ} (ht : 10 ≤ |t|) {s : ℂ}\n (hmem : s ∈ Metric.ball (2 + t * Complex.I) (5/2)) : ‖riemannZeta s‖ ≤ ...\n```\nHmm — cleaner: state the bound on the half-plane σ ≥ −1/2 with |t| ≥ 10:\n‖ζ(σ+it)‖ ≤ 1/2 + 1/9 + (σ²+t²+...)/4·... — let me compute the raw bound: |ζ(s)| ≤ 1/2 + 1/|s−1| + |s||s+1|/(8(σ+1)). For σ ≥ −1/2: 8(σ+1) ≥ 4: |s||s+1|/(8(σ+1)) ≤ |s||s+1|/4. |s| ≤ σ+|t|... ‖s‖ ≤ |σ|+|t| hmm σ ∈ [−1/2, ...]: unbounded σ?! The disc bounds σ ≤ 9/2. State the theorem FOR THE DISC: s ∈ closedBall (2+it) (5/2): then ‖s‖ ≤ ‖2+it‖ + 5/2 ≤ 2+|t|+5/2 = |t|+9/2; ‖s+1‖ ≤ |t|+11/2; |s−1| ≥ |t|−1 ≥ 9... hmm |s−1| ≥ ||s|−1|... simpler: |s−1| ≥ |Im(s−1)| = |t| ≥ 10 ✓ (abs_im_le_norm).\nSo ‖ζ s‖ ≤ 1/2 + 1/10 + (|t|+9/2)(|t|+11/2)/4. For |t| ≥ 10: (|t|+4.5)(|t|+5.5)/4 = (|t|² + 10|t| + 24.75)/4 ≤ (|t|² + |t|² + 0.25|t|²)/4? 10|t| ≤ |t|² (|t| ≥ 10) ✓; 24.75 ≤ 24.75·(|t|²/100) = 0.2475|t|² ✓. Total ≤ 2.2475|t|²/4 = 0.561875|t|². Plus 0.6. ≤ 0.57|t|² (0.6 ≤ 0.006|t|²). So:\n‖ζ s‖ ≤ 3/5·|t|²?? 0.561875 + 0.006 = 0.568 — hmm 0.57|t|² — constants: state as `(3/4) * |t|^2` for comfort: 0.568 ≤ 0.75 ✓ plenty. Or exact traced form (0.6 + 0.561875·|t|²). For downstream use, the shape A'·log|t| + B' will absorb: log|g| ≤ log(0.57) + 2log|t| + m·log(1/0.2). Fine.\n\nStatement: `theorem norm_riemannZeta_le_of_mem_ball {t : ℝ} (ht : 10 ≤ |t|) {s : ℂ} (hs : s ∈ Metric.closedBall (2 + t*I) (5/2)) : ‖riemannZeta s‖ ≤ 3/4 * |t|^2` or similar. Need s ≠ 1 ✓ (|t| ≥ 10 ⟹ s ≠ 1) and re s ≥ −1/2 ✓ (disc) and re s > −1 for the rep ✓.\n\nAlso for the center lower bound (ii′-5c): |ζ(2+it)| ≥ 1/ζ(2) — via moebius: 1/ζ(s) = Σ μ(n)n^{−s}: Mathlib: `LSeries_moebius`? hmm — `ArithmeticFunction.LSeries_moebius_eq_riemannZeta_inv`? Let me check quickly... Actually there might be `riemannZeta_inv_eq...`. I'll check when building 5c. For now 5b scope = the representation + the disc upper bound.\n\nOK — also check: `HolomorphicOn_riemannZeta` — where does it live (namespace)? And `integrable_log_over_pow` (used in the Zeta23 proof — their own lemma? it was used with (r := ...) — grep). Let me check these two, then write the file.","signature":""},{"type":"text","text":"`ContinuousOn.comp_fract''` gives continuity for free. Checking the last two names (`HolomorphicOn_riemannZeta`, `integrable_log_over_pow`), then writing LiRBound.lean §1."},{"type":"tool_use","id":"Bash_187","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && grep -rn \"theorem HolomorphicOn_riemannZeta\\b\\|lemma HolomorphicOn_riemannZeta\\b\\|theorem HolomorphicOn_riemannZeta0\\|lemma HolomorphicOn_riemannZeta0\" Zeta23/ --include=*.lean -r | head -4; grep -rn \"theorem integrable_log_over_pow\\|lemma integrable_log_over_pow\" Zeta23/ --include=*.lean -r | head -2; grep -rn \"intervalIntegral_tendstoIoi\\|tendsto.*integral.*Ioi\\|integral_Iic\" Zeta23/FromPNTPlus/ZetaBounds.lean | head -4","description":"Check holomorphicity lemma, integrable_log_over_pow, Ioi limit lemmas"},"extra_content":null}]