File tree Expand file tree Collapse file tree 3 files changed +58
-0
lines changed
Expand file tree Collapse file tree 3 files changed +58
-0
lines changed Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ Authors: Stefan Kebekus
66module
77
88public import Mathlib.Algebra.Order.WithTop.Untop0
9+ public import Mathlib.Analysis.Meromorphic.IsolatedZeros
910public import Mathlib.Analysis.Meromorphic.Order
1011public 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/--
97116If two functions differ only on a discrete set of an open, then they induce the same divisors.
98117-/
Original file line number Diff line number Diff 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+
97122end MeromorphicAt
Original file line number Diff line number Diff 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. -/
129143theorem preperfect_iff_perfect_closure [T1Space α] : Preperfect C ↔ Perfect (closure C) := by
130144 constructor <;> intro h
You can’t perform that action at this time.
0 commit comments