← Session 24 — ii′-2…4: swaps, (4.10) design, contour + website roadmap fixes
thinking (7390 chars)
Big finds:
1. `norm_Gamma_le_Gamma_re {z : ℂ} (hz : 0 < z.re) : ‖Complex.Gamma z‖ ≤ Real.Gamma z.re` (WeilEF/Effective.lean) — |Γ(z)| ≤ Γ(Re z) for Re z > 0.
2. `Zeta23.StirlingVert.digamma_stirling` — used in Y.lean: digamma Stirling bound! Let me look at its statement.
3. `norm_logDeriv_Gammaℝ_le_log`: ‖ΓR′/ΓR(s)‖ ≤ log(|Im s|+3)+5 for 0 < Re s ≤ 4, |Im s| ≥ 2 — the digamma strip bound.
For the FE-polynomial bound for |ζ| in the left strip: ζ(s) = χ(s)ζ(1−s) where χ involves Γ((1−s)/2)/Γ(s/2). With |Γ(w)| ≤ Γ(Re w) for Re w > 0 and the reflection formula for Re w < 0 (Γ(w) = π/(sin(πw)·Γ(1−w)))... Hmm — the ratio |Γ((1−s)/2)/Γ(s/2)| with s = σ+it, σ ∈ [−4, 2]: (1−s)/2 has Re = (1−σ)/2 ∈ [−1/2, 5/2] and s/2 has Re ∈ [−2, 1]. Both can have negative Re — so norm_Gamma_le_Gamma_re alone insufficient; need reflection formula to flip to positive Re + |sin| bounds. Mathlib: does it have the reflection formula for complex Gamma? `Complex.Gamma_one_sub_mul`? or `Complex.Gamma_mul_Gamma_one_sub`? I recall Mathlib HAS Euler's reflection: `Complex.Gamma_mul_Gamma_one_sub (s) : Gamma s * Gamma (1 − s) = π / sin (π s)`? Let me check. If yes: |Γ(w)| for Re w ∈ [−1/2, 0): |Γ(w)| = |π/(sin πw · Γ(1−w))| = π/(|sin πw|·Γ(1−re w)) hmm with |Γ(1−w)| ≤ Γ(1−re w)... so |Γ(w)| ≤ π/(|sin(πw)|·Γ(1−re w))... and |sin(πw)| for w = a+ib, |b| ≥ 5: |sin(πw)| ~ e^{π|b|}/2 — lower bound: |sin z| ≥ (e^{|Im z|} − 1)/2·... sin z = (e^{iz} − e^{−iz})/(2i): |sin z| ≥ (e^{|y|} − e^{−|y|})/2 ≥ e^{|y|}/3 for |y| ≥ 1 ✓ elementary.
So the Γ-ratio bound IS assemblable from:
- norm_Gamma_le_Gamma_re (Re > 0)
- reflection formula (if in Mathlib)
- |sin| lower bounds (elementary)
- Real.Gamma bounds on [1, 3]: Γ(x) ≤ max(Γ1, Γ2) = 1 for x ∈ [1,2]... Γ(x) ≤ 2 for x ∈ [1,3] say (Γ(3) = 2): Real.Gamma convex, bounds on interval — elementary-ish (Real.Gamma_pos, convexity... or just Γ(x) ≤ Γ... hmm need a bound: Real.Gamma is ≤ 2 on [1,3]? On [1,3], max at endpoints? Γ convex so max on boundary: Γ(1) = 1, Γ(3) = 2 ⟹ ≤ 2 ✓ via convexity — Mathlib has `Real.Gamma` convexity (BohrMollerup: `Real.convexOn_logGamma`... then Γ = exp ∘ logΓ... there might be direct bounds. Or cruder: Γ(x) = ∫... ≤ ... — manageable.)
The power |t|^{...}: where does the polynomial growth come from? |Γ(a+ib)| ≤ Γ(a) — that's CONSTANT in b! So |Γ((1−s)/2)| ≤ Γ((1−σ)/2) ≤ 2 (bounded!) and |Γ(s/2)| ≥ 1/|...| — the LOWER bound for Γ(s/2) — via reflection: |Γ(s/2)| = π/(|sin(πs/2)|·|Γ(1−s/2)|) ≥ π/(e^{π|t|/2}·Γ(1−σ/2))... so the RATIO |Γ((1−s)/2)/Γ(s/2)| ≤ Γ((1−σ)/2)·Γ(1−σ/2)·e^{π|t|/2}/π·(1/3)ish — BOUNDED in t except for the e^{π|t|/2} factor which cancels the sin in χ.
Hold on — the actual Stirling size of the ratio is |t|^{1/2−σ} — NOT bounded! But norm_Gamma_le_Gamma_re gives |Γ(a+ib)| ≤ Γ(a) — losing the |b|^{a−1/2} factor. For the ζ polynomial bound we don't need the sharp exponent — ANY polynomial in t works (A·log t after log). Does the crude |Γ| ≤ Γ(re) route give polynomial? |χ(s)| = |2^s π^{s−1} sin(πs/2) Γ(1−s)| — the completed form: ζ(s) = χ₀(s)ζ(1−s) with χ₀(s) = 2^s π^{s−1} sin(πs/2)Γ(1−s). Here 1−s has Re = 1−σ ∈ [−1, 5] for σ ∈ [−4, 2]... re(1−s) can be negative (−1 for σ = 2... wait our σ ≤ 2 hmm — on the disc B(2+it, 6): σ ranges [−4, 8]! For σ ≥ 2 use ZetaUpperBnd?? No — ZetaUpperBnd covers σ ∈ [1−A/log|t|, 2]. For σ ∈ [2, 8]: trivial Dirichlet: |ζ(s)| ≤ ζ(2) ✓ (Re s ≥ 2: |ζ| ≤ Σ n^{−2} = ζ(2)). For σ ∈ [−4, 2]: FE: ζ(s) = χ₀(s)ζ(1−s): |ζ(1−s)| with re(1−s) = 1−σ ∈ [−1, 5]: hmm — if σ ∈ [−4, −1/2], re(1−s) ∈ [3/2, 5]: |ζ(1−s)| ≤ ζ(3/2) ✓ Dirichlet-trivial. So use FE only for σ ∈ [−4, −1/2] (or [−4, 0]) and ZetaUpperBnd on [0, 2] hmm ZetaUpperBnd needs σ ≥ 1−A/log|t| — for σ ∈ [0, 1−A/log|t|) there's a GAP. Hmm. What covers σ ∈ [0, 1/2]?
Wait — actually, for the Davenport disc argument, we need |ζ| ≤ C·t^A on the WHOLE disc B(2+it, R). Cover:
- σ ∈ [3/2, 8]: |ζ| ≤ ζ(3/2) ✓ trivial Dirichlet.
- σ ∈ [1/2, 3/2]: hmm — ZetaUpperBnd covers [1−A/log|t|, 2]: for |t| large, 1−A/log|t| < 1/2? A/log|t| < 1/2 ⟺ log|t| > 2A: A = 1/2: log|t| > 1: |t| > e ✓ (we have |t| ≥ 10). So [1/2, 2] ⊆ ZetaUpperBnd range for |t| ≥ 10 hmm need 1 − A/log|t| ≤ 1/2 ⟺ A/log|t| ≥ 1/2 ⟺ log|t| ≤ 2A = 1 ⟺ |t| ≤ e! WRONG DIRECTION. ZetaUpperBnd needs σ ≥ 1 − A/log|t|; as |t| grows, 1−A/log|t| → 1⁻. So for |t| = 10: 1 − 0.5/2.3 = 0.78. So ZetaUpperBnd at t=10 covers σ ∈ [0.78, 2]. σ ∈ [1/2, 0.78] NOT covered by it. GAP on [0, 0.78]-ish!
Hmm. So what covers the critical strip σ ∈ [0, 1]? The classic bound: |ζ(σ+it)| ≤ C t^{(1−σ)/2} log t (convexity/approximate functional equation) — does Zeta23 have anything? PNT needs zero-free-region bounds — Vinogradov-Korobov or classical de la Vallée Poussin: those need |ζ| ≤ A log t type bounds on σ ∈ [1−c/log t, ...] only. Hmm — but WAIT: maybe FromPNTPlus has a strip bound for other reasons. Let me grep Zeta23 for bounds on ζ in the critical strip: "norm_zeta" or "ZetaBnd" or convexity...
Also — the OTHER approach for the middle strip: Phragmén–Lindelöf! |ζ| ≤ C log t on σ ≥ 1−A/log t (ZetaUpperBnd), |ζ| ≤ ζ(3/2) on σ ≥ 3/2, and |ζ(s)| ≤ poly via FE on σ ≤ 1/2 hmm...
Hold on — let me reconsider. For σ ∈ [0, 1]: the FUNCTIONAL EQUATION bound: ζ(s) = χ₀(s)ζ(1−s) with |ζ(1−s)| ≤ ζ(1/2)?? no — re(1−s) ∈ [0,1] for σ ∈ [0,1] — the Dirichlet series doesn't converge there either. UGH. The critical strip really needs either AFE/convexity or Phragmén–Lindelöf from the two sides.
Phragmén–Lindelöf on the strip [0,1]×[t,∞): needs |ζ| bounded by SOME polynomial on the boundary lines σ = 0 and σ = 1... σ = 0: FE: |ζ(it)| = |χ₀(it)||ζ(1−it)| ≤ |χ₀(it)|·ζ(1): |χ₀(it)| = |2^it π^{it−1} sin(πit/2)Γ(1−it)|: |2^it| = 1, |π^{it−1}| = π^{−1}, |sin(πit/2)| = |sin(πit/2)| = (e^{πt/2}−e^{−πt/2})/2 ~ e^{πt/2}/2, |Γ(1−it)| = Γ(1)... = 1 (constant! via norm_Gamma_le_Gamma_re) — so |χ₀(it)| ≤ C·e^{πt/2} — EXPONENTIAL?! That's wrong — the true χ₀(it) ~ (t/2π)^{1/2}. The crude |Γ(1−it)| ≤ Γ(1) loses the e^{−πt/2} decay of Γ on vertical lines! Γ(1−it) actually decays like e^{−πt/2}√(2πt)... So norm_Gamma_le_Gamma_re is USELESS for the FE side — we NEED the vertical decay of Γ.
So the crux missing piece: **|Γ(a+ib)| ≤ C·(1+|b|)^{a−1/2}·e^{−π|b|/2}** for a in a compact range — complex Stirling. From what? Zeta23 has `inv_gamma_eq_prod` (Weierstrass for 1/Γ)! From the Weierstrass product: 1/Γ(z) = z e^{γz}∏(1+z/n)e^{−z/n} — bounding |1/Γ| from the product: log|1/Γ| = log|z| + γa + Σ(log|1+z/n| − a/n)... The sum Σ (log|1+z/n| − a/n): for z = a+ib with |b| large: the terms with n ~ |b| give the −π|b|/2... This is the standard derivation of Stirling from Weierstrass — doable but a real build (the bulk: estimating Σ log|1 + z/n|...).
Hmm wait — what about `StirlingVert.digamma_stirling`? That's for digamma (ψ), not log Γ. For the FE bound I need |Γ| itself...
Hold on — alternative: the μ function! GammaFacts/Mu.lean: `Zeta23.mu` — "mu_eq" — μ(τ) is probably the exponent function for ζ bounds?! "mu_monotoneOn", "mu_deriv_bound" — the μ function in the explicit-formula context is usually the order-of-growth function: |ζ(σ+it)| ≤ C t^{μ(σ)}! Let me check Zeta23.mu — grep mu_eq. If Zeta23 has a μ-function bound |ζ(σ+it)| ≤ C·t^{μ(σ)} for all σ — that's EXACTLY the polynomial strip bound needed!! "H-Γ: |μ(τ)| ≤ K₂(1+|τ|)^{1/2}" from Bridge.lean — that's about a different μ (the mollifier?). Let me look at GammaFacts/Mu.lean:130 mu_eq.
`norm_Gamma_le_Gamma_re` loses Γ's vertical decay — the FE side needs more. But `GammaFacts/Mu.lean` has a `Zeta23.mu` function that might be exactly the strip-growth exponent. Checking.
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean && sed -n '120,165p' Zeta23/GammaFacts/Mu.lean && grep -rn \"def mu\\|mu_def\" Zeta23/ --include=*.lean | head -5",
"description": "Read mu_eq and find Zeta23.mu definition"
}
raw content_json (database row)
[{"type":"thinking","thinking":"Big finds:\n1. `norm_Gamma_le_Gamma_re {z : ℂ} (hz : 0 < z.re) : ‖Complex.Gamma z‖ ≤ Real.Gamma z.re` (WeilEF/Effective.lean) — |Γ(z)| ≤ Γ(Re z) for Re z > 0.\n2. `Zeta23.StirlingVert.digamma_stirling` — used in Y.lean: digamma Stirling bound! Let me look at its statement.\n3. `norm_logDeriv_Gammaℝ_le_log`: ‖ΓR′/ΓR(s)‖ ≤ log(|Im s|+3)+5 for 0 < Re s ≤ 4, |Im s| ≥ 2 — the digamma strip bound.\n\nFor the FE-polynomial bound for |ζ| in the left strip: ζ(s) = χ(s)ζ(1−s) where χ involves Γ((1−s)/2)/Γ(s/2). With |Γ(w)| ≤ Γ(Re w) for Re w > 0 and the reflection formula for Re w < 0 (Γ(w) = π/(sin(πw)·Γ(1−w)))... Hmm — the ratio |Γ((1−s)/2)/Γ(s/2)| with s = σ+it, σ ∈ [−4, 2]: (1−s)/2 has Re = (1−σ)/2 ∈ [−1/2, 5/2] and s/2 has Re ∈ [−2, 1]. Both can have negative Re — so norm_Gamma_le_Gamma_re alone insufficient; need reflection formula to flip to positive Re + |sin| bounds. Mathlib: does it have the reflection formula for complex Gamma? `Complex.Gamma_one_sub_mul`? or `Complex.Gamma_mul_Gamma_one_sub`? I recall Mathlib HAS Euler's reflection: `Complex.Gamma_mul_Gamma_one_sub (s) : Gamma s * Gamma (1 − s) = π / sin (π s)`? Let me check. If yes: |Γ(w)| for Re w ∈ [−1/2, 0): |Γ(w)| = |π/(sin πw · Γ(1−w))| = π/(|sin πw|·Γ(1−re w)) hmm with |Γ(1−w)| ≤ Γ(1−re w)... so |Γ(w)| ≤ π/(|sin(πw)|·Γ(1−re w))... and |sin(πw)| for w = a+ib, |b| ≥ 5: |sin(πw)| ~ e^{π|b|}/2 — lower bound: |sin z| ≥ (e^{|Im z|} − 1)/2·... sin z = (e^{iz} − e^{−iz})/(2i): |sin z| ≥ (e^{|y|} − e^{−|y|})/2 ≥ e^{|y|}/3 for |y| ≥ 1 ✓ elementary.\n\nSo the Γ-ratio bound IS assemblable from:\n- norm_Gamma_le_Gamma_re (Re > 0)\n- reflection formula (if in Mathlib)\n- |sin| lower bounds (elementary)\n- Real.Gamma bounds on [1, 3]: Γ(x) ≤ max(Γ1, Γ2) = 1 for x ∈ [1,2]... Γ(x) ≤ 2 for x ∈ [1,3] say (Γ(3) = 2): Real.Gamma convex, bounds on interval — elementary-ish (Real.Gamma_pos, convexity... or just Γ(x) ≤ Γ... hmm need a bound: Real.Gamma is ≤ 2 on [1,3]? On [1,3], max at endpoints? Γ convex so max on boundary: Γ(1) = 1, Γ(3) = 2 ⟹ ≤ 2 ✓ via convexity — Mathlib has `Real.Gamma` convexity (BohrMollerup: `Real.convexOn_logGamma`... then Γ = exp ∘ logΓ... there might be direct bounds. Or cruder: Γ(x) = ∫... ≤ ... — manageable.)\n\nThe power |t|^{...}: where does the polynomial growth come from? |Γ(a+ib)| ≤ Γ(a) — that's CONSTANT in b! So |Γ((1−s)/2)| ≤ Γ((1−σ)/2) ≤ 2 (bounded!) and |Γ(s/2)| ≥ 1/|...| — the LOWER bound for Γ(s/2) — via reflection: |Γ(s/2)| = π/(|sin(πs/2)|·|Γ(1−s/2)|) ≥ π/(e^{π|t|/2}·Γ(1−σ/2))... so the RATIO |Γ((1−s)/2)/Γ(s/2)| ≤ Γ((1−σ)/2)·Γ(1−σ/2)·e^{π|t|/2}/π·(1/3)ish — BOUNDED in t except for the e^{π|t|/2} factor which cancels the sin in χ. \n\nHold on — the actual Stirling size of the ratio is |t|^{1/2−σ} — NOT bounded! But norm_Gamma_le_Gamma_re gives |Γ(a+ib)| ≤ Γ(a) — losing the |b|^{a−1/2} factor. For the ζ polynomial bound we don't need the sharp exponent — ANY polynomial in t works (A·log t after log). Does the crude |Γ| ≤ Γ(re) route give polynomial? |χ(s)| = |2^s π^{s−1} sin(πs/2) Γ(1−s)| — the completed form: ζ(s) = χ₀(s)ζ(1−s) with χ₀(s) = 2^s π^{s−1} sin(πs/2)Γ(1−s). Here 1−s has Re = 1−σ ∈ [−1, 5] for σ ∈ [−4, 2]... re(1−s) can be negative (−1 for σ = 2... wait our σ ≤ 2 hmm — on the disc B(2+it, 6): σ ranges [−4, 8]! For σ ≥ 2 use ZetaUpperBnd?? No — ZetaUpperBnd covers σ ∈ [1−A/log|t|, 2]. For σ ∈ [2, 8]: trivial Dirichlet: |ζ(s)| ≤ ζ(2) ✓ (Re s ≥ 2: |ζ| ≤ Σ n^{−2} = ζ(2)). For σ ∈ [−4, 2]: FE: ζ(s) = χ₀(s)ζ(1−s): |ζ(1−s)| with re(1−s) = 1−σ ∈ [−1, 5]: hmm — if σ ∈ [−4, −1/2], re(1−s) ∈ [3/2, 5]: |ζ(1−s)| ≤ ζ(3/2) ✓ Dirichlet-trivial. So use FE only for σ ∈ [−4, −1/2] (or [−4, 0]) and ZetaUpperBnd on [0, 2] hmm ZetaUpperBnd needs σ ≥ 1−A/log|t| — for σ ∈ [0, 1−A/log|t|) there's a GAP. Hmm. What covers σ ∈ [0, 1/2]?\n\nWait — actually, for the Davenport disc argument, we need |ζ| ≤ C·t^A on the WHOLE disc B(2+it, R). Cover:\n- σ ∈ [3/2, 8]: |ζ| ≤ ζ(3/2) ✓ trivial Dirichlet.\n- σ ∈ [1/2, 3/2]: hmm — ZetaUpperBnd covers [1−A/log|t|, 2]: for |t| large, 1−A/log|t| < 1/2? A/log|t| < 1/2 ⟺ log|t| > 2A: A = 1/2: log|t| > 1: |t| > e ✓ (we have |t| ≥ 10). So [1/2, 2] ⊆ ZetaUpperBnd range for |t| ≥ 10 hmm need 1 − A/log|t| ≤ 1/2 ⟺ A/log|t| ≥ 1/2 ⟺ log|t| ≤ 2A = 1 ⟺ |t| ≤ e! WRONG DIRECTION. ZetaUpperBnd needs σ ≥ 1 − A/log|t|; as |t| grows, 1−A/log|t| → 1⁻. So for |t| = 10: 1 − 0.5/2.3 = 0.78. So ZetaUpperBnd at t=10 covers σ ∈ [0.78, 2]. σ ∈ [1/2, 0.78] NOT covered by it. GAP on [0, 0.78]-ish!\n\nHmm. So what covers the critical strip σ ∈ [0, 1]? The classic bound: |ζ(σ+it)| ≤ C t^{(1−σ)/2} log t (convexity/approximate functional equation) — does Zeta23 have anything? PNT needs zero-free-region bounds — Vinogradov-Korobov or classical de la Vallée Poussin: those need |ζ| ≤ A log t type bounds on σ ∈ [1−c/log t, ...] only. Hmm — but WAIT: maybe FromPNTPlus has a strip bound for other reasons. Let me grep Zeta23 for bounds on ζ in the critical strip: \"norm_zeta\" or \"ZetaBnd\" or convexity...\n\nAlso — the OTHER approach for the middle strip: Phragmén–Lindelöf! |ζ| ≤ C log t on σ ≥ 1−A/log t (ZetaUpperBnd), |ζ| ≤ ζ(3/2) on σ ≥ 3/2, and |ζ(s)| ≤ poly via FE on σ ≤ 1/2 hmm...\n\nHold on — let me reconsider. For σ ∈ [0, 1]: the FUNCTIONAL EQUATION bound: ζ(s) = χ₀(s)ζ(1−s) with |ζ(1−s)| ≤ ζ(1/2)?? no — re(1−s) ∈ [0,1] for σ ∈ [0,1] — the Dirichlet series doesn't converge there either. UGH. The critical strip really needs either AFE/convexity or Phragmén–Lindelöf from the two sides.\n\nPhragmén–Lindelöf on the strip [0,1]×[t,∞): needs |ζ| bounded by SOME polynomial on the boundary lines σ = 0 and σ = 1... σ = 0: FE: |ζ(it)| = |χ₀(it)||ζ(1−it)| ≤ |χ₀(it)|·ζ(1): |χ₀(it)| = |2^it π^{it−1} sin(πit/2)Γ(1−it)|: |2^it| = 1, |π^{it−1}| = π^{−1}, |sin(πit/2)| = |sin(πit/2)| = (e^{πt/2}−e^{−πt/2})/2 ~ e^{πt/2}/2, |Γ(1−it)| = Γ(1)... = 1 (constant! via norm_Gamma_le_Gamma_re) — so |χ₀(it)| ≤ C·e^{πt/2} — EXPONENTIAL?! That's wrong — the true χ₀(it) ~ (t/2π)^{1/2}. The crude |Γ(1−it)| ≤ Γ(1) loses the e^{−πt/2} decay of Γ on vertical lines! Γ(1−it) actually decays like e^{−πt/2}√(2πt)... So norm_Gamma_le_Gamma_re is USELESS for the FE side — we NEED the vertical decay of Γ. \n\nSo the crux missing piece: **|Γ(a+ib)| ≤ C·(1+|b|)^{a−1/2}·e^{−π|b|/2}** for a in a compact range — complex Stirling. From what? Zeta23 has `inv_gamma_eq_prod` (Weierstrass for 1/Γ)! From the Weierstrass product: 1/Γ(z) = z e^{γz}∏(1+z/n)e^{−z/n} — bounding |1/Γ| from the product: log|1/Γ| = log|z| + γa + Σ(log|1+z/n| − a/n)... The sum Σ (log|1+z/n| − a/n): for z = a+ib with |b| large: the terms with n ~ |b| give the −π|b|/2... This is the standard derivation of Stirling from Weierstrass — doable but a real build (the bulk: estimating Σ log|1 + z/n|...).\n\nHmm wait — what about `StirlingVert.digamma_stirling`? That's for digamma (ψ), not log Γ. For the FE bound I need |Γ| itself...\n\nHold on — alternative: the μ function! GammaFacts/Mu.lean: `Zeta23.mu` — \"mu_eq\" — μ(τ) is probably the exponent function for ζ bounds?! \"mu_monotoneOn\", \"mu_deriv_bound\" — the μ function in the explicit-formula context is usually the order-of-growth function: |ζ(σ+it)| ≤ C t^{μ(σ)}! Let me check Zeta23.mu — grep mu_eq. If Zeta23 has a μ-function bound |ζ(σ+it)| ≤ C·t^{μ(σ)} for all σ — that's EXACTLY the polynomial strip bound needed!! \"H-Γ: |μ(τ)| ≤ K₂(1+|τ|)^{1/2}\" from Bridge.lean — that's about a different μ (the mollifier?). Let me look at GammaFacts/Mu.lean:130 mu_eq.","signature":""},{"type":"text","text":"`norm_Gamma_le_Gamma_re` loses Γ's vertical decay — the FE side needs more. But `GammaFacts/Mu.lean` has a `Zeta23.mu` function that might be exactly the strip-growth exponent. Checking."},{"type":"tool_use","id":"Bash_164","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean && sed -n '120,165p' Zeta23/GammaFacts/Mu.lean && grep -rn \"def mu\\|mu_def\" Zeta23/ --include=*.lean | head -5","description":"Read mu_eq and find Zeta23.mu definition"},"extra_content":null}]