Skip to content

Commit 1ae2161

Browse files
committed
feat(Analysis): characterizing and congr lemma for toMeromorphicNFAt
1 parent ba1e3bb commit 1ae2161

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

Mathlib/Analysis/Meromorphic/NormalForm.lean

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,11 +437,55 @@ lemma MeromorphicAt.eqOn_compl_singleton_toMeromorphicNFAt (hf : MeromorphicAt f
437437
toMeromorphicNFAt f x = 0 := by
438438
simp [toMeromorphicNFAt, hf]
439439

440+
@[simp] lemma toMeromorphicNFAt_of_meromorphicOrderAt_ne_zero
441+
(horder : meromorphicOrderAt f x ≠ 0) : toMeromorphicNFAt f x x = 0 := by
442+
by_cases hf : MeromorphicAt f x
443+
· simp [toMeromorphicNFAt, hf, horder]
444+
· simp [hf] at horder
445+
446+
lemma MeromorphicAt.exists_analytic_and_toMeromorphicNFAt_eventuallyEq (hf : MeromorphicAt f x)
447+
(horder : meromorphicOrderAt f x = 0) :
448+
∃ g : 𝕜 → E, AnalyticAt 𝕜 g x ∧ g x ≠ 0 ∧ toMeromorphicNFAt f x =ᶠ[𝓝 x] g := by
449+
obtain ⟨hanalytic, hgx, hg⟩ := Classical.choose_spec <|
450+
(meromorphicOrderAt_eq_int_iff hf).mp horder
451+
refine ⟨Classical.choose <| (meromorphicOrderAt_eq_int_iff hf).mp horder, hanalytic, hgx, ?_⟩
452+
apply eventuallyEq_nhds_of_eventuallyEq_nhdsNE
453+
· simp only [toMeromorphicNFAt, hf, ↓reduceDIte, horder, coe_zero, ne_eq, zpow_zero, one_smul]
454+
trans f
455+
· classical
456+
apply Function.update_eventuallyEq_nhdsNE
457+
rw [Filter.EventuallyEq]
458+
simp only [zpow_zero, ne_eq, one_smul] at hg
459+
convert! hg
460+
simp
461+
· simp [toMeromorphicNFAt, hf, horder]
462+
440463
/-- Conversion to normal form at `x` changes the value only at x. -/
441464
lemma MeromorphicAt.eq_nhdsNE_toMeromorphicNFAt (hf : MeromorphicAt f x) :
442465
f =ᶠ[𝓝[≠] x] toMeromorphicNFAt f x :=
443466
eventually_nhdsWithin_of_forall (fun _ hz ↦ hf.eqOn_compl_singleton_toMeromorphicNFAt hz)
444467

468+
@[gcongr]
469+
lemma toMeromorphicNFAt_congr {f g : 𝕜 → E} (hfg : f =ᶠ[𝓝[≠] x] g) :
470+
toMeromorphicNFAt f x x = toMeromorphicNFAt g x x := by
471+
by_cases hf : MeromorphicAt f x
472+
<;> obtain hg := (MeromorphicAt.meromorphicAt_congr hfg).eq ▸ hf
473+
· by_cases hforder : meromorphicOrderAt f x = 0
474+
<;> obtain hgorder := meromorphicOrderAt_congr hfg ▸ hforder
475+
· obtain ⟨f', hf'anl, _, hf'⟩ :=
476+
hf.exists_analytic_and_toMeromorphicNFAt_eventuallyEq hforder
477+
obtain ⟨g', hg'anl, _, hg'⟩ :=
478+
hg.exists_analytic_and_toMeromorphicNFAt_eventuallyEq hgorder
479+
have hf'g' : f' =ᶠ[𝓝[≠] x] g' := (hf'.symm.filter_mono nhdsWithin_le_nhds).trans <|
480+
hf.eq_nhdsNE_toMeromorphicNFAt.symm.trans <| hfg.trans <|
481+
hg.eq_nhdsNE_toMeromorphicNFAt.trans <|
482+
hg'.filter_mono nhdsWithin_le_nhds
483+
have heq : f' x = g' x := Filter.EventuallyEq.eq_of_nhds
484+
((AnalyticAt.frequently_eq_iff_eventually_eq hf'anl hg'anl).mp hf'g'.frequently)
485+
exact hf'.eq_of_nhds.trans <| heq.trans hg'.eq_of_nhds.symm
486+
· simp [hforder, hgorder]
487+
· simp [hf, hg]
488+
445489
/-- After conversion to normal form at `x`, the function has normal form. -/
446490
theorem meromorphicNFAt_toMeromorphicNFAt :
447491
MeromorphicNFAt (toMeromorphicNFAt f x) x := by

0 commit comments

Comments
 (0)