Skip to content

Commit 9f9c40f

Browse files
committed
feat: formulate identity principle for meromorphic functions on topologically perfect subsets (#37371)
Add a simple, but useful, reformulation of the identity principle for meromorphic functions on topologically perfect subsets. To facilitate application, establish (closures of) open subsets in perfect topological spaces are preperfect sets.
1 parent 5536c82 commit 9f9c40f

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

Mathlib/Analysis/Meromorphic/Divisor.lean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Stefan Kebekus
66
module
77

88
public import Mathlib.Algebra.Order.WithTop.Untop0
9+
public import Mathlib.Analysis.Meromorphic.IsolatedZeros
910
public import Mathlib.Analysis.Meromorphic.Order
1011
public import Mathlib.Topology.LocallyFinsupp
1112

@@ -93,6 +94,24 @@ theorem divisor_congr_codiscreteWithin_of_eqOn_compl {f₁ f₂ : 𝕜 → E} (h
9394
tauto
9495
· simp [hx]
9596

97+
/-
98+
If two meromorphic functions agree outside a set codiscrete within a perfect set, then they define
99+
the same divisors there.
100+
-/
101+
theorem divisor_of_eventuallyEq_codiscreteWithin_preperfect {f₁ f₂ : 𝕜 → E}
102+
(hf₁ : MeromorphicOn f₁ U) (hf₂ : MeromorphicOn f₂ U) (hU : Preperfect U)
103+
(h : f₁ =ᶠ[codiscreteWithin U] f₂) :
104+
divisor f₁ U = divisor f₂ U := by
105+
ext z
106+
by_cases hz : z ∉ U
107+
· simp_all
108+
rw [not_not] at hz
109+
rw [divisor_apply hf₁ hz, divisor_apply hf₂ hz]
110+
congr 1
111+
apply meromorphicOrderAt_congr
112+
apply (hf₁ z hz).eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin_preperfect
113+
(hf₂ z hz) hz hU h
114+
96115
/--
97116
If two functions differ only on a discrete set of an open, then they induce the same divisors.
98117
-/

Mathlib/Analysis/Meromorphic/IsolatedZeros.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,29 @@ theorem eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin (hf : MeromorphicAt
9494
rw [eventuallyEq_iff_sub] at *
9595
apply (hf.sub hg).eventuallyEq_zero_nhdsNE_of_eventuallyEq_zero_codiscreteWithin h₁x h₂x h
9696

97+
/-
98+
Variant of `MeromorphicAt.eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin`, as a statement
99+
about meromorphic functions that agree outside a set codiscrete within a perfect set.
100+
-/
101+
theorem eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin_preperfect (hf : MeromorphicAt f x)
102+
(hg : MeromorphicAt g x) (hx : x ∈ U) (hU : Preperfect U) (h : f =ᶠ[codiscreteWithin U] g) :
103+
f =ᶠ[𝓝[≠] x] g :=
104+
hf.eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin hg hx (hU x hx) h
105+
106+
/-
107+
Variant of `MeromorphicAt.eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin`, as a statement
108+
about meromorphic functions agreeing in a neighborhood of a preperfect set.
109+
-/
110+
theorem eventually_nhdsSet_eventuallyEq_codiscreteWithin (hf : MeromorphicOn f U)
111+
(hg : MeromorphicOn g U) (hU : Preperfect U) (h : f =ᶠ[codiscreteWithin U] g) :
112+
∀ᶠ x in 𝓝ˢ U, f =ᶠ[𝓝[≠] x] g := by
113+
rw [eventually_nhdsSet_iff_exists]
114+
use {x | f =ᶠ[𝓝[≠] x] g}
115+
simp only [Set.mem_setOf_eq, imp_self, implies_true, and_true]
116+
constructor
117+
· apply isOpen_setOf_eventually_nhdsWithin
118+
· intro x hx
119+
rw [Set.mem_setOf]
120+
exact eventuallyEq_nhdsNE_of_eventuallyEq_codiscreteWithin (hf x hx) (hg x hx) hx (hU x hx) h
121+
97122
end MeromorphicAt

Mathlib/Topology/Perfect.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,20 @@ theorem Preperfect.perfect_closure (hC : Preperfect C) : Perfect (closure C) :=
125125
rw [closure_eq_cluster_pts] at hx
126126
exact hx
127127

128+
/-
129+
Open subsects in perfect spaces are preperfect.
130+
-/
131+
theorem IsOpen.preperfect [PerfectSpace α] {U : Set α} (hU : IsOpen U) :
132+
Preperfect U := by
133+
simpa using PerfectSpace.univ_preperfect.open_inter hU
134+
135+
/-
136+
Closures of open subsects in perfect spaces are preperfect, hence perfect.
137+
-/
138+
theorem IsOpen.perfect_closure [PerfectSpace α] {U : Set α} (hU : IsOpen U) :
139+
Perfect (closure U) :=
140+
hU.preperfect.perfect_closure
141+
128142
/-- In a T1 space, being preperfect is equivalent to having perfect closure. -/
129143
theorem preperfect_iff_perfect_closure [T1Space α] : Preperfect C ↔ Perfect (closure C) := by
130144
constructor <;> intro h

0 commit comments

Comments
 (0)