feat(Analysis/Analytic): simple zeros and logarithmic residue#36778
feat(Analysis/Analytic): simple zeros and logarithmic residue#36778psinary-sketch wants to merge 1 commit into
Conversation
Welcome new contributor!Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests. We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR. Thank you again for joining our community. |
PR summary 1c7e491807Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
| set_option linter.style.longLine false | ||
| module -- shake: keep-all |
There was a problem hiding this comment.
Could you remove this change?
There was a problem hiding this comment.
Done, removed the stale lines. Thanks for catching that.
b6d71d6 to
d33e560
Compare
| public import Mathlib.Util.TransImports | ||
| public import Mathlib.Util.WhatsNew | ||
| public import Mathlib.Util.WithWeakNamespace | ||
|
|
There was a problem hiding this comment.
What's up with these changes?
There was a problem hiding this comment.
Sorry, artifact from PowerShell line-ending handling. Let me fix.
Fixed — the trailing changes were an artifact of PowerShell line-ending handling. The diff should now be clean: just the one import line added.
Three new theorems about simple zeros of analytic functions: - AnalyticAt.analyticOrderAt_eq_one_of_zero_deriv_ne_zero: if f is analytic at z₀, f(z₀) = 0, and f'(z₀) ≠ 0, then analyticOrderAt f z₀ = 1. - AnalyticAt.eventually_ne_of_deriv_ne_zero: under the same hypotheses, f is nonzero in a punctured neighborhood of z₀. - AnalyticAt.tendsto_residue_simple_zero: the logarithmic residue (w - z₀) * f'(w)/f(w) → 1 as w → z₀. Key ingredient for residue computation of meromorphic functions.
d33e560 to
334244a
Compare
wwylele
left a comment
There was a problem hiding this comment.
I didn't check the proof body and only commented on statements. But the amount of have suggests there are likely space to simplify the proof
| public section SimpleZero | ||
|
|
||
| /-- At a zero with nonvanishing derivative, the analytic order is 1. -/ | ||
| theorem AnalyticAt.analyticOrderAt_eq_one_of_zero_deriv_ne_zero |
There was a problem hiding this comment.
Since this is a direct corollary of AnalyticAt.analyticOrderAt_sub_eq_one_of_deriv_ne_zero, I think it should be moved to that file next to the existing lemma
| rwa [analyticOrderAt_congr this] at h | ||
|
|
||
| /-- At a simple zero, the function is nonzero in a punctured neighborhood. -/ | ||
| theorem AnalyticAt.eventually_ne_of_deriv_ne_zero |
There was a problem hiding this comment.
Same for this one. It should be either in Mathlib.Analysis.Analytic.IsolatedZeros or Mathlib.Analysis.Analytic.Order, whichever is further from the import tree root
| theorem AnalyticAt.tendsto_residue_simple_zero | ||
| {f : ℂ → ℂ} {z₀ : ℂ} (hf : AnalyticAt ℂ f z₀) | ||
| (hfz : f z₀ = 0) (hf' : deriv f z₀ ≠ 0) : | ||
| Tendsto (fun w => (w - z₀) * (deriv f w / f w)) |
There was a problem hiding this comment.
Since logDeriv f x = deriv f x / f x, I think this should be stated with logDeriv and moved to Mathlib.Analysis.Calculus.LogDeriv
There was a problem hiding this comment.
Thanks for the detailed review! You're right on all points — these belong in their natural homes rather than a new file. I'll close this PR and split into three smaller ones:
analyticOrderAt_eq_one_of_zero_deriv_ne_zero → added to Order.lean
eventually_ne_of_deriv_ne_zero (without hfz) → added to Order.lean or IsolatedZeros.lean
Residue limit restated with logDeriv → added to LogDeriv.lean
Will also simplify the proofs. Thanks for guiding the placement.
| /-- At a simple zero, the function is nonzero in a punctured neighborhood. -/ | ||
| theorem AnalyticAt.eventually_ne_of_deriv_ne_zero | ||
| {f : ℂ → ℂ} {z₀ : ℂ} (hf : AnalyticAt ℂ f z₀) | ||
| (hfz : f z₀ = 0) (hf' : deriv f z₀ ≠ 0) : |
There was a problem hiding this comment.
(hfz : f z₀ = 0) can be dropped, right?
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
Add \AnalyticAt.tendsto_mul_logDeriv_simple_zero\: if f is analytic at x, f(x) = 0, and f'(x) ≠ 0, then \(w - x) * logDeriv f w → 1\ as \w → x\. Restated with \logDeriv\ and placed in \LogDeriv.lean\ per review feedback on leanprover-community#36778. Split from leanprover-community#36778 (3 of 3).
Add \AnalyticAt.tendsto_mul_logDeriv_simple_zero\: if f is analytic at x, f(x) = 0, and f'(x) ≠ 0, then \(w - x) * logDeriv f w → 1\ as \w → x\. Restated with \logDeriv\ and placed in \LogDeriv.lean\ per review feedback on leanprover-community#36778. Split from leanprover-community#36778 (3 of 3).
Add AnalyticAt.tendsto_mul_logDeriv_simple_zero: if f is analytic at x, f(x) = 0, and f'(x) != 0, then (w - x) * logDeriv f w tends to 1 as w tends to x. Restated with logDeriv per review feedback on leanprover-community#36778. Split from leanprover-community#36778 (3 of 3).
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
Add `AnalyticAt.tendsto_mul_logDeriv_simple_zero`: if f is analytic at x, f(x) = 0, and f'(x) ≠ 0, then `(w - x) * logDeriv f w → 1` as `w → x`. Restated with `logDeriv` and placed in `LogDeriv.lean` per review feedback from @wwylele on #36778. Split from #36778 (3 of 3). Co-authored-by: interleaves <psinary@hotmail.com>
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
git checkout schwarz-reflection git rebase upstream/master git push origin schwarz-reflection --force-with-lease git stash pop Add AnalyticAt.tendsto_mul_logDeriv_simple_zero: if f is analytic at x, f(x) = 0, and f'(x) != 0, then (w - x) * logDeriv f w tends to 1 as w tends to x. Restated with logDeriv per review feedback on leanprover-community#36778. Split from leanprover-community#36778 (3 of 3).
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…ver-community#36881) Add `AnalyticAt.tendsto_mul_logDeriv_simple_zero`: if f is analytic at x, f(x) = 0, and f'(x) ≠ 0, then `(w - x) * logDeriv f w → 1` as `w → x`. Restated with `logDeriv` and placed in `LogDeriv.lean` per review feedback from @wwylele on leanprover-community#36778. Split from leanprover-community#36778 (3 of 3). Co-authored-by: interleaves <psinary@hotmail.com>
…36865) Add AnalyticAt.analyticOrderAt_eq_one_of_zero_deriv_ne_zero: if f is analytic at x, f(x) = 0, and f'(x) ≠ 0, then analyticOrderAt f x = 1. Placed next to analyticOrderAt_sub_eq_one_of_deriv_ne_zero in Order.lean per review feedback on #36778. AI disclosure: Lean code developed with Claude (Anthropic) assistance in workflow. Mathematical content and proof strategies are original. All code verified locally with lake env lean before submission. Co-authored-by: interleaves <psinary@hotmail.com>
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
…derivative Add \AnalyticAt.eventually_ne_nhdsWithin_of_deriv_ne_zero\: if f is analytic at x and f'(x) ≠ 0, then f(w) ≠ f(x) in a punctured neighborhood of x. No hypothesis on f(x) needed (per review feedback on leanprover-community#36778). Placed in Order.lean next to \�nalyticOrderAt_sub_eq_one_of_deriv_ne_zero\.
Three new theorems about simple zeros of analytic functions:
AnalyticAt.analyticOrderAt_eq_one_of_zero_deriv_ne_zero: if f is analytic at z₀, f(z₀) = 0, and f'(z₀) ≠ 0, then analyticOrderAt f z₀ = 1.
AnalyticAt.eventually_ne_of_deriv_ne_zero: under the same hypotheses, f is nonzero in a punctured neighborhood of z₀.
AnalyticAt.tendsto_residue_simple_zero: the logarithmic residue (w - z₀) * f'(w)/f(w) → 1 as w → z₀. Key ingredient for residue computation of meromorphic functions.