← Session 28 — ii′-5e: partial-fraction identity (zero series + F entire)
thinking (3184 chars)
`AnalyticOn.norm_le_of_norm_le_on_sphere (hyp_r : r ≤ R) (analytic : AnalyticOn ℂ f (closedBall 0 R)) (cond : ∀ z ∈ sphere 0 r, ‖f z‖ ≤ C) (wInS : w ∈ closedBall 0 r) : ‖f w‖ ≤ C` ✓.
For the difference quotient: no direct Mathlib hit. Build it: for F analytic at 0 with HasFPowerSeriesAt F p 0: F z = Σ pₙ zⁿ: (F z − F 0)/z = Σ_{n≥1} pₙ z^{n−1} = Σ_m p_{m+1} z^m for z ≠ 0... the cleaner formal approach in Mathlib: there's `HasFPowerSeriesAt` for (f z − f 0)/z... hmm — I recall `AnalyticAt.fun_sub_div`?? no. Alternative approach used in practice: `(f z - f 0)/z` analytic at 0 ⟺ ... Use: F(z) − F(0) has a zero of order ≥ 1 at 0 ⟹ (F(z)−F(0)) = z·G(z) with G analytic — the analyticOrderAt route: analyticOrderNatAt (F − F(0)) 0 ≥ 1 (since value 0: `analyticOrderNatAt_pos_of_eq_zero`? or natCast_le_analyticOrderAt_iff...) then the NF: F − F(0) = z^1·h with h analytic at 0: G := h: F z − F 0 = z·h z near 0: G(z) := h: then (F z − F 0)/z = h z near 0 punctured ⟹ ... but I need the GLOBAL G entire: G z := (F z − F 0)/z is analytic for z ≠ 0 directly (F entire, denominator nonzero: AnalyticAt.div (F − F0) analytic (z analytic) z ≠ 0 ✓); at 0: the NF gives h analytic at 0 with F − F0 = (id)·h near 0 ⟹ (F z − F 0)/z =ᶠ[𝓝[≠] 0] h ⟹ ... AGAIN the punctured-vs-full issue! Hmm — but here it's simpler: define Gpiecewise? No — same limUnder trick? OR: the analyticOrderAt API: `analyticOrderAt` + division: Mathlib HAS this: `AnalyticAt.div_of_order...`? Hmm: there might be `AnalyticAt.exists_analytic_..._div`...
Actually — simplest: I don't need G named globally. The squeeze via max-modulus needs G analytic on closedBall 0 R for each R and the value G z for an arbitrary fixed z. Restructure: prove directly `∀ z, Gentire z = Gentire 0`:
For a FIXED z₀ (wlog z₀ ≠ 0): consider G*(z) := (Gentire z − Gentire 0)/z for z ≠ 0, extended at 0 by the NF factor h(0)... — the extension exists as an analytic function at 0 via the NF: from analyticOrderNatAt (Gentire − const) 0 ≥ 1: the NF gives Gentire − Gentire 0 =ᶠ (z−0)^m • h with m ≥ 1: define G̃ z := (z−0)^{m−1}•h z — analytic at 0 — and for z ≠ 0 near 0: G̃ z = z^{m−1}h z = (z^m h z)/z = (Gentire z − Gentire 0)/z ✓ punctured agreement. And GLOBALLY G̃ := fun z => if z = 0 then (local value) else ... — SAME point-value annoyance.
Hmm OK — actually cleanest formal dodge: use the limUnder trick ONCE more: Gsqueezed z := limUnder (𝓝[≠] z) (fun w => (Gentire w − Gentire 0)/w)?? For z ≠ 0 the function is continuous at z ⟹ Gsqueezed z = (Gentire z − Gentire 0)/z ✓; at 0: NF witness ⟹ analytic. Same machinery as 5e-iv — ~40 lines. OR even simpler: SKIP the quotient entirely — a different squeeze:
**Cauchy-estimate route**: F(z) − F(0) analytic, vanishes at 0, |·| ≤ 2M on |z| = R ⟹ by Schwarz lemma?! The Schwarz lemma: |F(z) − F(0)| ≤ (2M/R)·|z| for |z| ≤ R — IS Schwarz in Mathlib/Zeta23? `Complex.abs_...schwarz`? There IS a Schwarz lemma in Mathlib: `Complex.norm_le_...` hmm. If available: for fixed z₀: |Gentire z₀ − Gentire 0| ≤ 2(C(log R)³ + |Gentire 0|)·|z₀|/R → 0 ⟹ Gentire z₀ = Gentire 0 ✓✓ — the Schwarz lemma IS exactly the difference-quotient max-modulus argument packaged! Check Mathlib for Schwarz.
The sphere lemma is confirmed. For the squeeze, the Schwarz lemma would package the difference-quotient step — checking if Mathlib has it.
tool: Bash
input
{
"command": "cd D:/Python/Quantum/zeta-23-lean/.lake/packages/mathlib && grep -rln \"schwarz\\|Schwarz\" Mathlib/Analysis/Complex/ | head -3 && grep -rn \"theorem.*schwarz\\|lemma.*schwarz\" Mathlib/Analysis/Complex/Schwarz.lean 2>/dev/null | head -8",
"description": "Schwarz lemma in Mathlib"
}
raw content_json (database row)
[{"type":"thinking","thinking":"`AnalyticOn.norm_le_of_norm_le_on_sphere (hyp_r : r ≤ R) (analytic : AnalyticOn ℂ f (closedBall 0 R)) (cond : ∀ z ∈ sphere 0 r, ‖f z‖ ≤ C) (wInS : w ∈ closedBall 0 r) : ‖f w‖ ≤ C` ✓.\n\nFor the difference quotient: no direct Mathlib hit. Build it: for F analytic at 0 with HasFPowerSeriesAt F p 0: F z = Σ pₙ zⁿ: (F z − F 0)/z = Σ_{n≥1} pₙ z^{n−1} = Σ_m p_{m+1} z^m for z ≠ 0... the cleaner formal approach in Mathlib: there's `HasFPowerSeriesAt` for (f z − f 0)/z... hmm — I recall `AnalyticAt.fun_sub_div`?? no. Alternative approach used in practice: `(f z - f 0)/z` analytic at 0 ⟺ ... Use: F(z) − F(0) has a zero of order ≥ 1 at 0 ⟹ (F(z)−F(0)) = z·G(z) with G analytic — the analyticOrderAt route: analyticOrderNatAt (F − F(0)) 0 ≥ 1 (since value 0: `analyticOrderNatAt_pos_of_eq_zero`? or natCast_le_analyticOrderAt_iff...) then the NF: F − F(0) = z^1·h with h analytic at 0: G := h: F z − F 0 = z·h z near 0: G(z) := h: then (F z − F 0)/z = h z near 0 punctured ⟹ ... but I need the GLOBAL G entire: G z := (F z − F 0)/z is analytic for z ≠ 0 directly (F entire, denominator nonzero: AnalyticAt.div (F − F0) analytic (z analytic) z ≠ 0 ✓); at 0: the NF gives h analytic at 0 with F − F0 = (id)·h near 0 ⟹ (F z − F 0)/z =ᶠ[𝓝[≠] 0] h ⟹ ... AGAIN the punctured-vs-full issue! Hmm — but here it's simpler: define Gpiecewise? No — same limUnder trick? OR: the analyticOrderAt API: `analyticOrderAt` + division: Mathlib HAS this: `AnalyticAt.div_of_order...`? Hmm: there might be `AnalyticAt.exists_analytic_..._div`... \n\nActually — simplest: I don't need G named globally. The squeeze via max-modulus needs G analytic on closedBall 0 R for each R and the value G z for an arbitrary fixed z. Restructure: prove directly `∀ z, Gentire z = Gentire 0`:\n\nFor a FIXED z₀ (wlog z₀ ≠ 0): consider G*(z) := (Gentire z − Gentire 0)/z for z ≠ 0, extended at 0 by the NF factor h(0)... — the extension exists as an analytic function at 0 via the NF: from analyticOrderNatAt (Gentire − const) 0 ≥ 1: the NF gives Gentire − Gentire 0 =ᶠ (z−0)^m • h with m ≥ 1: define G̃ z := (z−0)^{m−1}•h z — analytic at 0 — and for z ≠ 0 near 0: G̃ z = z^{m−1}h z = (z^m h z)/z = (Gentire z − Gentire 0)/z ✓ punctured agreement. And GLOBALLY G̃ := fun z => if z = 0 then (local value) else ... — SAME point-value annoyance.\n\nHmm OK — actually cleanest formal dodge: use the limUnder trick ONCE more: Gsqueezed z := limUnder (𝓝[≠] z) (fun w => (Gentire w − Gentire 0)/w)?? For z ≠ 0 the function is continuous at z ⟹ Gsqueezed z = (Gentire z − Gentire 0)/z ✓; at 0: NF witness ⟹ analytic. Same machinery as 5e-iv — ~40 lines. OR even simpler: SKIP the quotient entirely — a different squeeze: \n\n**Cauchy-estimate route**: F(z) − F(0) analytic, vanishes at 0, |·| ≤ 2M on |z| = R ⟹ by Schwarz lemma?! The Schwarz lemma: |F(z) − F(0)| ≤ (2M/R)·|z| for |z| ≤ R — IS Schwarz in Mathlib/Zeta23? `Complex.abs_...schwarz`? There IS a Schwarz lemma in Mathlib: `Complex.norm_le_...` hmm. If available: for fixed z₀: |Gentire z₀ − Gentire 0| ≤ 2(C(log R)³ + |Gentire 0|)·|z₀|/R → 0 ⟹ Gentire z₀ = Gentire 0 ✓✓ — the Schwarz lemma IS exactly the difference-quotient max-modulus argument packaged! Check Mathlib for Schwarz.","signature":""},{"type":"text","text":"The sphere lemma is confirmed. For the squeeze, the Schwarz lemma would package the difference-quotient step — checking if Mathlib has it."},{"type":"tool_use","id":"Bash_245","name":"Bash","input":{"command":"cd D:/Python/Quantum/zeta-23-lean/.lake/packages/mathlib && grep -rln \"schwarz\\|Schwarz\" Mathlib/Analysis/Complex/ | head -3 && grep -rn \"theorem.*schwarz\\|lemma.*schwarz\" Mathlib/Analysis/Complex/Schwarz.lean 2>/dev/null | head -8","description":"Schwarz lemma in Mathlib"},"extra_content":null}]