Skip to content

Commit 8d63eaa

Browse files
committed
feat(Topology/UniformSpace/Closeds): uniform continuity of the singleton map (#31868)
1 parent 3b112fd commit 8d63eaa

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

Mathlib/Topology/UniformSpace/Closeds.lean

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ instance isTrans_hausdorffEntourage (U : SetRel α α) [U.IsTrans] :
7878
(hausdorffEntourage U).IsTrans := by
7979
grw [isTrans_iff_comp_subset_self, ← hausdorffEntourage_comp, comp_subset_self]
8080

81+
@[simp]
82+
theorem singleton_mem_hausdorffEntourage (U : SetRel α α) (x y : α) :
83+
({x}, {y}) ∈ hausdorffEntourage U ↔ (x, y) ∈ U := by
84+
simp [hausdorffEntourage]
85+
8186
end hausdorffEntourage
8287

8388
variable [UniformSpace α]
@@ -129,6 +134,40 @@ theorem isClosed_powerset {F : Set α} (hF : IsClosed F) :
129134
simp_rw [Set.powerset, ← isOpen_compl_iff, Set.compl_setOf, ← Set.inter_compl_nonempty_iff]
130135
exact isOpen_inter_nonempty_of_isOpen hF.isOpen_compl
131136

137+
theorem isClopen_singleton_empty : IsClopen {(∅ : Set α)} := by
138+
constructor
139+
· rw [← Set.powerset_empty]
140+
exact isClosed_powerset isClosed_empty
141+
· simp_rw [isOpen_iff_mem_nhds, Set.mem_singleton_iff, forall_eq, nhds_eq_uniformity]
142+
filter_upwards [Filter.mem_lift' <| Filter.mem_lift' Filter.univ_mem] with F ⟨_, hF⟩
143+
simpa using hF
144+
145+
theorem isUniformEmbedding_singleton : IsUniformEmbedding ({·} : α → Set α) where
146+
injective := Set.singleton_injective
147+
comap_uniformity := by
148+
change Filter.comap _ (Filter.lift' _ _) = _
149+
simp_rw [Filter.comap_lift'_eq, Function.comp_def, Set.preimage,
150+
singleton_mem_hausdorffEntourage]
151+
exact Filter.lift'_id
152+
153+
theorem isClosedEmbedding_singleton [T0Space α] :
154+
Topology.IsClosedEmbedding ({·} : α → Set α) where
155+
__ := isUniformEmbedding_singleton.isEmbedding
156+
isClosed_range := by
157+
rw [← isOpen_compl_iff, isOpen_iff_mem_nhds]
158+
intro s hs
159+
rcases Set.eq_empty_or_nonempty s with rfl | h
160+
· rwa [(isOpen_singleton_iff_nhds_eq_pure _).mp isClopen_singleton_empty.isOpen,
161+
Filter.mem_pure]
162+
rcases h.exists_eq_singleton_or_nontrivial with ⟨x, rfl⟩ | ⟨x, hx, y, hy, hxy⟩
163+
· cases hs <| Set.mem_range_self x
164+
obtain ⟨U, V, hU, hV, hxU, hyV, hUV⟩ := t2_separation hxy
165+
filter_upwards [(isOpen_inter_nonempty_of_isOpen hU).inter (isOpen_inter_nonempty_of_isOpen hV)
166+
|>.mem_nhds ⟨⟨x, hx, hxU⟩, ⟨y, hy, hyV⟩⟩]
167+
rintro _ ⟨hzU, hzV⟩ ⟨z, rfl⟩
168+
rw [Set.mem_setOf, Set.singleton_inter_nonempty] at hzU hzV
169+
exact hUV.notMem_of_mem_left hzU hzV
170+
132171
end UniformSpace.hausdorff
133172

134173
namespace TopologicalSpace.Closeds
@@ -160,6 +199,35 @@ theorem isClosed_subsets_of_isClosed {s : Set α} (hs : IsClosed s) :
160199
IsClosed {t : Closeds α | (t : Set α) ⊆ s} :=
161200
isClosed_induced (UniformSpace.hausdorff.isClosed_powerset hs)
162201

202+
section T0Space
203+
204+
variable [T0Space α]
205+
206+
theorem isUniformEmbedding_singleton : IsUniformEmbedding (Closeds.singleton (α := α)) :=
207+
isUniformEmbedding_coe.of_comp_iff.mp UniformSpace.hausdorff.isUniformEmbedding_singleton
208+
209+
theorem uniformContinuous_singleton : UniformContinuous (Closeds.singleton (α := α)) :=
210+
isUniformEmbedding_singleton.uniformContinuous
211+
212+
@[fun_prop]
213+
theorem isEmbedding_singleton : IsEmbedding (Closeds.singleton (α := α)) :=
214+
isUniformEmbedding_singleton.isEmbedding
215+
216+
@[fun_prop]
217+
theorem continuous_singleton : Continuous (Closeds.singleton (α := α)) :=
218+
isEmbedding_singleton.continuous
219+
220+
@[fun_prop]
221+
theorem isClosedEmbedding_singleton :
222+
Topology.IsClosedEmbedding (Closeds.singleton (α := α)) where
223+
__ := isUniformEmbedding_singleton.isEmbedding
224+
isClosed_range := by
225+
rw [← SetLike.coe_injective.preimage_image (s := Set.range singleton), ← Set.range_comp]
226+
exact UniformSpace.hausdorff.isClosedEmbedding_singleton.isClosed_range.preimage
227+
uniformContinuous_coe.continuous
228+
229+
end T0Space
230+
163231
end TopologicalSpace.Closeds
164232

165233
namespace TopologicalSpace.Compacts
@@ -206,6 +274,12 @@ theorem isClosed_subsets_of_isClosed {s : Set α} (hs : IsClosed s) :
206274
IsClosed {t : Compacts α | (t : Set α) ⊆ s} :=
207275
isClosed_induced (UniformSpace.hausdorff.isClosed_powerset hs)
208276

277+
theorem isUniformEmbedding_singleton : IsUniformEmbedding ({·} : α → Compacts α) :=
278+
isUniformEmbedding_coe.of_comp_iff.mp UniformSpace.hausdorff.isUniformEmbedding_singleton
279+
280+
theorem uniformContinuous_singleton : UniformContinuous ({·} : α → Compacts α) :=
281+
isUniformEmbedding_singleton.uniformContinuous
282+
209283
end TopologicalSpace.Compacts
210284

211285
namespace TopologicalSpace.NonemptyCompacts
@@ -268,4 +342,10 @@ theorem isClosed_subsets_of_isClosed {s : Set α} (hs : IsClosed s) :
268342
IsClosed {t : NonemptyCompacts α | (t : Set α) ⊆ s} :=
269343
isClosed_induced (UniformSpace.hausdorff.isClosed_powerset hs)
270344

345+
theorem isUniformEmbedding_singleton : IsUniformEmbedding ({·} : α → NonemptyCompacts α) :=
346+
isUniformEmbedding_coe.of_comp_iff.mp UniformSpace.hausdorff.isUniformEmbedding_singleton
347+
348+
theorem uniformContinuous_singleton : UniformContinuous ({·} : α → NonemptyCompacts α) :=
349+
isUniformEmbedding_singleton.uniformContinuous
350+
271351
end TopologicalSpace.NonemptyCompacts

0 commit comments

Comments
 (0)