Skip to content

Commit 1b045b9

Browse files
committed
feat(Topology/Sets): separation properties of (Nonempty)Compacts (leanprover-community#37674)
1 parent 27aad96 commit 1b045b9

1 file changed

Lines changed: 97 additions & 6 deletions

File tree

Mathlib/Topology/Sets/VietorisTopology.lean

Lines changed: 97 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -281,18 +281,40 @@ theorem _root_.IsCompact.powerset_vietoris {K : Set α} (hK : IsCompact K) :
281281
instance [CompactSpace α] : CompactSpace (Set α) :=
282282
⟨powerset_univ ▸ isCompact_univ.powerset_vietoris⟩
283283

284+
theorem subset_closure_of_specializes {s t : Set α} (h : s ⤳ t) : t ⊆ closure s :=
285+
h.mem_closed isClosed_closure.powerset_vietoris subset_closure
286+
287+
theorem specializes_iff {s t : Set α} : s ⤳ t ↔ (∀ x ∈ s, ∃ y ∈ t, x ⤳ y) ∧ t ⊆ closure s := by
288+
refine ⟨fun h => ⟨fun x hx => ?_, subset_closure_of_specializes h⟩, fun ⟨hst, hts⟩ => ?_⟩
289+
· obtain ⟨y, hyt, hxy⟩ := h.mem_closed (s := {u | (u ∩ closure {x}).Nonempty})
290+
(isClosed_inter_nonempty_of_isClosed isClosed_closure) ⟨x, hx, subset_closure rfl⟩
291+
exact ⟨y, hyt, specializes_iff_mem_closure.mpr hxy⟩
292+
· simp_rw [Specializes, nhds_generateFrom, le_iInf₂_iff]
293+
rintro _ ⟨hs, ⟨U, hU, rfl⟩ | ⟨U, hU, rfl⟩⟩
294+
· refine iInf₂_le U.powerset ⟨fun x hx => ?_, .inl <| mem_image_of_mem _ hU⟩
295+
obtain ⟨y, hyt, hxy⟩ := hst x hx
296+
exact hxy.mem_open hU <| hs hyt
297+
· obtain ⟨x, hxt, hxU⟩ := hs
298+
obtain ⟨y, hyU, hys⟩ := mem_closure_iff.mp (hts hxt) U hU hxU
299+
exact iInf₂_le {t | (t ∩ U).Nonempty} ⟨⟨y, hys, hyU⟩, .inr <| mem_image_of_mem _ hU⟩
300+
301+
theorem specializes_iff_of_t1Space {s t : Set α} [T1Space α] : s ⤳ t ↔ s ⊆ t ∧ t ⊆ closure s := by
302+
simp_rw [specializes_iff, specializes_iff_eq, existsAndEq, and_true, ← subset_def]
303+
304+
theorem subset_of_specializes {s t : Set α} [T1Space α] (h : s ⤳ t) : s ⊆ t :=
305+
(specializes_iff_of_t1Space.mp h).1
306+
284307
theorem specializes_of_subset_closure {s t : Set α} (hst : s ⊆ t) (hts : t ⊆ closure s) :
285308
s ⤳ t := by
286-
simp_rw [Specializes, nhds_generateFrom, le_iInf₂_iff]
287-
rintro _ ⟨hs, ⟨U, hU, rfl⟩ | ⟨U, hU, rfl⟩⟩
288-
· exact iInf₂_le U.powerset ⟨hst.trans hs, .inl <| mem_image_of_mem _ hU⟩
289-
· obtain ⟨x, hxt, hxU⟩ := hs
290-
obtain ⟨y, hyU, hys⟩ := mem_closure_iff.mp (hts hxt) U hU hxU
291-
exact iInf₂_le {t | (t ∩ U).Nonempty} ⟨⟨y, hys, hyU⟩, .inr <| mem_image_of_mem _ hU⟩
309+
aesop (add simp specializes_iff)
292310

293311
theorem specializes_closure {s : Set α} : s ⤳ closure s :=
294312
specializes_of_subset_closure subset_closure .rfl
295313

314+
instance [T1Space α] : T0Space (Set α) where
315+
t0 _ _ h :=
316+
subset_antisymm (subset_of_specializes h.specializes) (subset_of_specializes h.specializes')
317+
296318
end vietoris
297319

298320
namespace Compacts
@@ -456,6 +478,54 @@ instance [DiscreteTopology α] : DiscreteTopology (Compacts α) := by
456478
theorem discreteTopology_iff : DiscreteTopology (Compacts α) ↔ DiscreteTopology α :=
457479
fun _ => isEmbedding_singleton.discreteTopology, fun _ => inferInstance⟩
458480

481+
instance [T1Space α] : T0Space (Compacts α) :=
482+
isEmbedding_coe.t0Space
483+
484+
instance [T2Space α] : T2Space (Compacts α) where
485+
t2 K₁ K₂ h := by
486+
wlog h' : ¬(K₁ ≤ K₂) generalizing K₁ K₂
487+
· grind [Disjoint.symm, le_antisymm]
488+
rw [SetLike.not_le_iff_exists] at h'
489+
obtain ⟨x, hx₁, hx₂⟩ := h'
490+
obtain ⟨U, V, hU, hV, hU', hV', hUV⟩ := K₂.isCompact.separation_of_notMem hx₂
491+
exact ⟨_, _, isOpen_inter_nonempty_of_isOpen hV, isOpen_subsets_of_isOpen hU, ⟨x, hx₁, hV'⟩,
492+
hU', by grind [Set.Nonempty]⟩
493+
494+
@[simp]
495+
theorem t2Space_iff : T2Space (Compacts α) ↔ T2Space α :=
496+
fun _ => isEmbedding_singleton.t2Space, fun _ => inferInstance⟩
497+
498+
instance [RegularSpace α] : RegularSpace (Compacts α) := by
499+
simp_rw [regularSpace_generateFrom induced_generateFrom_eq, image_union, image_image, powerset,
500+
preimage_setOf_eq, Filter.disjoint_iff]
501+
rintro _ (⟨U, hU, rfl⟩ | ⟨U, hU, rfl⟩) K hK
502+
· obtain ⟨V, W, hV, hW, hKV, hUW, hVW⟩ :=
503+
SeparatedNhds.of_isCompact_isClosed K.isCompact hU.isClosed_compl
504+
(disjoint_compl_right_iff_subset.mpr hK)
505+
refine ⟨{K | (↑K ∩ W).Nonempty}, ?_, {K | ↑K ⊆ V},
506+
(isOpen_subsets_of_isOpen hV).mem_nhds_iff.mpr hKV, by grind [Set.Nonempty]⟩
507+
simp_rw [(isOpen_inter_nonempty_of_isOpen hW).mem_nhdsSet, compl_setOf,
508+
← inter_compl_nonempty_iff]
509+
grw [hUW]
510+
· obtain ⟨x, hx₁, hx₂⟩ := hK
511+
obtain ⟨V, W, hV, hW, hxV, hUW, hVW⟩ :=
512+
SeparatedNhds.of_isCompact_isClosed (isCompact_singleton (x := x)) hU.isClosed_compl
513+
(by simpa)
514+
refine ⟨{K | ↑K ⊆ W}, ?_, {K | (↑K ∩ V).Nonempty}, ?_, by grind [Set.Nonempty]⟩
515+
· simp_rw [(isOpen_subsets_of_isOpen hW).mem_nhdsSet, compl_setOf, not_nonempty_iff_eq_empty,
516+
← disjoint_iff_inter_eq_empty, ← subset_compl_iff_disjoint_right]
517+
gcongr
518+
· rw [(isOpen_inter_nonempty_of_isOpen hV).mem_nhds_iff]
519+
exact ⟨x, hx₁, hxV <| Set.mem_singleton x⟩
520+
521+
@[simp]
522+
theorem regularSpace_iff : RegularSpace (Compacts α) ↔ RegularSpace α :=
523+
fun _ => isEmbedding_singleton.regularSpace, fun _ => inferInstance⟩
524+
525+
@[simp]
526+
theorem t3Space_iff : T3Space (Compacts α) ↔ T3Space α :=
527+
fun _ => isEmbedding_singleton.t3Space, fun _ => inferInstance⟩
528+
459529
theorem isCompact_subsets_of_isCompact {K : Set α} (hK : IsCompact K) :
460530
IsCompact {L : Compacts α | ↑L ⊆ K} := by
461531
rw [isEmbedding_coe.isCompact_iff]
@@ -679,6 +749,27 @@ instance [DiscreteTopology α] : DiscreteTopology (NonemptyCompacts α) :=
679749
theorem discreteTopology_iff : DiscreteTopology (NonemptyCompacts α) ↔ DiscreteTopology α :=
680750
fun _ => isEmbedding_singleton.discreteTopology, fun _ => inferInstance⟩
681751

752+
instance [T1Space α] : T0Space (NonemptyCompacts α) :=
753+
isEmbedding_toCompacts.t0Space
754+
755+
instance [T2Space α] : T2Space (NonemptyCompacts α) :=
756+
isEmbedding_toCompacts.t2Space
757+
758+
@[simp]
759+
theorem t2Space_iff : T2Space (NonemptyCompacts α) ↔ T2Space α :=
760+
fun _ => isEmbedding_singleton.t2Space, fun _ => inferInstance⟩
761+
762+
instance [RegularSpace α] : RegularSpace (NonemptyCompacts α) :=
763+
isEmbedding_toCompacts.regularSpace
764+
765+
@[simp]
766+
theorem regularSpace_iff : RegularSpace (NonemptyCompacts α) ↔ RegularSpace α :=
767+
fun _ => isEmbedding_singleton.regularSpace, fun _ => inferInstance⟩
768+
769+
@[simp]
770+
theorem t3Space_iff : T3Space (NonemptyCompacts α) ↔ T3Space α :=
771+
fun _ => isEmbedding_singleton.t3Space, fun _ => inferInstance⟩
772+
682773
instance [CompactSpace α] : CompactSpace (NonemptyCompacts α) :=
683774
isClosedEmbedding_toCompacts.compactSpace
684775

0 commit comments

Comments
 (0)