diff --git a/Mathlib/Analysis/Analytic/IsolatedZeros.lean b/Mathlib/Analysis/Analytic/IsolatedZeros.lean index 47acf6695e6992..7fe6aec6df34f0 100644 --- a/Mathlib/Analysis/Analytic/IsolatedZeros.lean +++ b/Mathlib/Analysis/Analytic/IsolatedZeros.lean @@ -374,3 +374,21 @@ theorem AnalyticOnNhd.map_codiscreteWithin {U : Set ๐•œ} {f : ๐•œ โ†’ E} fun _ hs โ†ฆ mem_map.1 (preimage_mem_codiscreteWithin hfU hโ‚‚f hs) end PreimgCodiscrete + +variable {๐•œ : Type*} [NontriviallyNormedField ๐•œ] +variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ๐•œ E] + +/-- If `f` is analytic at `s`, then `dslope f zโ‚€` is analytic at `s`. -/ +protected lemma AnalyticAt.dslope {f : ๐•œ โ†’ E} {zโ‚€ s : ๐•œ} (hf : AnalyticAt ๐•œ f s) : + AnalyticAt ๐•œ (dslope f zโ‚€) s := by + obtain (rfl | hs) := eq_or_ne s zโ‚€ + ยท obtain โŸจp, hpโŸฉ := hf + exact โŸจ_, hp.has_fpower_series_dslope_fslopeโŸฉ + ยท apply AnalyticAt.congr (f := fun z => (z - zโ‚€)โปยน โ€ข (f z - f zโ‚€)) (by fun_prop (disch := grind)) + filter_upwards [isOpen_ne.mem_nhds hs] with z hz using (dslope_of_ne f hz).symm + +/-- If `f` is analytic at `s`, then the `n`-th iterated `dslope` of `f` at `zโ‚€` +is analytic at `s`. -/ +lemma AnalyticAt.iterate_dslope {f : ๐•œ โ†’ E} {zโ‚€ s : ๐•œ} (hf : AnalyticAt ๐•œ f s) (n : โ„•) : + AnalyticAt ๐•œ ((Function.swap dslope zโ‚€)^[n] f) s := + Function.Iterate.rec _ hf (fun _ hf โ†ฆ hf.dslope) n