Skip to content

Commit 19e41d0

Browse files
committed
feat(Topology/Separation): completely normal iff hereditarily normal (leanprover-community#32764)
Prove a space is completely normal iff it is hereditarily normal iff all open subspaces are normal.
1 parent 83e7fe4 commit 19e41d0

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

Mathlib/Topology/Separation/Regular.lean

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,53 @@ instance ULift.instCompletelyNormalSpace [CompletelyNormalSpace X] :
591591
CompletelyNormalSpace (ULift X) :=
592592
IsEmbedding.uliftDown.completelyNormalSpace
593593

594+
/--
595+
A space is completely normal iff all open subspaces are normal.
596+
-/
597+
theorem completelyNormalSpace_iff_forall_isOpen_normalSpace :
598+
CompletelyNormalSpace X ↔ ∀ s : Set X, IsOpen s → NormalSpace s := by
599+
refine ⟨fun _ _ _ => inferInstance, fun h => ⟨fun s t hSt hsT => ?_⟩⟩
600+
let e := (closure s ∩ closure t)ᶜ
601+
have he : IsOpen e := (isClosed_closure.inter isClosed_closure).isOpen_compl
602+
specialize h e he
603+
have hst : Disjoint (((↑) : e → X) ⁻¹' closure s) (((↑) : e → X) ⁻¹' closure t) := by
604+
rw [disjoint_left]
605+
intro x hxs hxt
606+
exact x.2 ⟨hxs, hxt⟩
607+
obtain ⟨U, V, hU, hV, hsU, htV, hUV⟩ := normal_separation
608+
(isClosed_closure.preimage continuous_subtype_val)
609+
(isClosed_closure.preimage continuous_subtype_val) hst
610+
rw [Topology.IsInducing.subtypeVal.isOpen_iff] at hU hV
611+
obtain ⟨U, hU, rfl⟩ := hU
612+
obtain ⟨V, hV, rfl⟩ := hV
613+
rw [← separatedNhds_iff_disjoint]
614+
rw [Subtype.preimage_val_subset_preimage_val_iff, inter_comm e, inter_comm e] at hsU htV
615+
refine ⟨U ∩ e, V ∩ e, hU.inter he, hV.inter he, ?_, ?_, ?_⟩
616+
· intro x hx
617+
exact hsU ⟨subset_closure hx, fun h => hsT.notMem_of_mem_left hx h.2
618+
· intro x hx
619+
exact htV ⟨subset_closure hx, fun h => hSt.notMem_of_mem_left h.1 hx⟩
620+
· rw [disjoint_left] at hUV ⊢
621+
intro x hxU hxV
622+
exact @hUV ⟨x, hxU.2⟩ hxU.1 hxV.1
623+
624+
/--
625+
A space is completely normal iff it is hereditarily normal.
626+
-/
627+
theorem completelyNormalSpace_iff_forall_normalSpace :
628+
CompletelyNormalSpace X ↔ ∀ s : Set X, NormalSpace s :=
629+
fun _ _ => inferInstance, fun h =>
630+
completelyNormalSpace_iff_forall_isOpen_normalSpace.2 fun s _ => h s⟩
631+
632+
alias ⟨_, CompletelyNormalSpace.of_forall_isOpen_normalSpace⟩ :=
633+
completelyNormalSpace_iff_forall_isOpen_normalSpace
634+
alias ⟨_, CompletelyNormalSpace.of_forall_normalSpace⟩ :=
635+
completelyNormalSpace_iff_forall_normalSpace
636+
637+
instance (priority := 100) CompletelyNormalSpace.of_regularSpace_secondCountableTopology
638+
[RegularSpace X] [SecondCountableTopology X] : CompletelyNormalSpace X :=
639+
.of_forall_normalSpace fun _ => .of_regularSpace_secondCountableTopology
640+
594641
/-- A T₅ space is a completely normal T₁ space. -/
595642
class T5Space (X : Type u) [TopologicalSpace X] : Prop extends T1Space X, CompletelyNormalSpace X
596643

@@ -616,6 +663,30 @@ instance [T5Space X] {p : X → Prop} : T5Space { x // p x } :=
616663
instance ULift.instT5Space [T5Space X] : T5Space (ULift X) :=
617664
IsEmbedding.uliftDown.t5Space
618665

666+
/--
667+
A space is a `T5Space` iff all its open subspaces are `T4Space`.
668+
-/
669+
theorem t5Space_iff_forall_isOpen_t4Space :
670+
T5Space X ↔ ∀ s : Set X, IsOpen s → T4Space s where
671+
mp _ _ _ := inferInstance
672+
mpr h :=
673+
{ toCompletelyNormalSpace :=
674+
completelyNormalSpace_iff_forall_isOpen_normalSpace.2 fun s hs => (h s hs).toNormalSpace
675+
toT1Space :=
676+
have := h univ isOpen_univ
677+
t1Space_of_injective_of_continuous
678+
(fun _ _ => congrArg Subtype.val) (continuous_id.subtype_mk mem_univ)}
679+
680+
/--
681+
A space is `T5Space` iff it is hereditarily `T4Space`.
682+
-/
683+
theorem t5Space_iff_forall_t4Space :
684+
T5Space X ↔ ∀ s : Set X, T4Space s :=
685+
fun _ _ => inferInstance, fun h => t5Space_iff_forall_isOpen_t4Space.2 fun s _ => h s⟩
686+
687+
alias ⟨_, T5Space.of_forall_isOpen_t4Space⟩ := t5Space_iff_forall_isOpen_t4Space
688+
alias ⟨_, T5Space.of_forall_t4Space⟩ := t5Space_iff_forall_t4Space
689+
619690
open SeparationQuotient
620691

621692
/-- The `SeparationQuotient` of a completely normal R₀ space is a T₅ space. -/

0 commit comments

Comments
 (0)