Skip to content

Commit ed1b665

Browse files
plp127ReemMelamed
authored andcommitted
chore(Topology): generalize Topology.IsEmbedding.perfectlyNormalSpace (leanprover-community#39576)
Generalize theorem `Topology.IsEmbedding.perfectlyNormalSpace` to inducing maps. Generalize some other theorem along the way. Rename `isGδ_induced` to `IsGδ.preimage`, to match `IsOpen.preimage` and `IsClosed.preimage`.
1 parent 3a6fc3c commit ed1b665

5 files changed

Lines changed: 35 additions & 27 deletions

File tree

Mathlib/Topology/Baire/LocallyCompactRegular.lean

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,15 @@ instance (priority := 100) BaireSpace.of_t2Space_locallyCompactSpace : BaireSpac
5959
exact hK_nonempty.mono hK_subset
6060

6161
/-- A Gδ subset of a locally compact R₁ space is Baire. -/
62-
theorem IsGδ.of_t2Space_locallyCompactSpace (hG : IsGδ s) : BaireSpace s := by
63-
have : BaireSpace (closure s) := by
64-
convert! BaireSpace.of_t2Space_locallyCompactSpace using 1
65-
· infer_instance
66-
· exact isClosed_closure.locallyCompactSpace
62+
theorem IsGδ.baireSpace_of_t2Space_locallyCompactSpace (hG : IsGδ s) : BaireSpace s := by
63+
have : LocallyCompactSpace (closure s) := isClosed_closure.locallyCompactSpace
64+
have : BaireSpace (closure s) := .of_t2Space_locallyCompactSpace
6765
have : BaireSpace ((↑) ⁻¹' s : Set (closure s)) :=
68-
(isGδ_induced continuous_subtype_val hG).baireSpace_of_dense
66+
(hG.preimage continuous_subtype_val).baireSpace_of_dense
6967
(by simp [Subtype.dense_iff, inter_eq_right.mpr subset_closure])
7068
have h_homeo : Homeomorph ((↑) ⁻¹' s : Set (closure s)) s := ⟨⟨fun x => ⟨x, x.2⟩,
7169
fun x => ⟨⟨x, subset_closure x.2⟩, x.2⟩, by grind, by grind⟩, by fun_prop, by fun_prop⟩
7270
exact h_homeo.baireSpace
71+
72+
@[deprecated (since := "2026-06-04")]
73+
alias IsGδ.of_t2Space_locallyCompactSpace := IsGδ.baireSpace_of_t2Space_locallyCompactSpace

Mathlib/Topology/GDelta/Basic.lean

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,14 @@ theorem IsGδ.iUnion [Finite ι'] {f : ι' → Set X} (h : ∀ i, IsGδ (f i)) :
152152
.sUnion (finite_range _) <| forall_mem_range.2 h
153153

154154
/-- The preimage of a Gδ set under a continuous map is Gδ. -/
155-
theorem isGδ_induced [TopologicalSpace Y] {f : X → Y} {s : Set Y} (hf : Continuous f)
155+
theorem IsGδ.preimage [TopologicalSpace Y] {f : X → Y} {s : Set Y} (hf : Continuous f)
156156
(hs : IsGδ s) : IsGδ (f ⁻¹' s) := by
157157
obtain ⟨U, hU1, hU2⟩ := hs.eq_iInter_nat
158158
simp_all only [preimage_iInter]
159159
exact IsGδ.iInter_of_isOpen (fun i => hf.isOpen_preimage (U i) (hU1 i))
160160

161+
@[deprecated (since := "2026-05-19")] alias isGδ_induced := IsGδ.preimage
162+
161163
end IsGδ
162164

163165
section residual

Mathlib/Topology/Separation/GDelta.lean

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ open Function Set Filter Topology TopologicalSpace
3131

3232
universe u
3333

34-
variable {X : Type*} [TopologicalSpace X]
34+
variable {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
3535

3636
section Separation
3737

@@ -121,13 +121,30 @@ instance (priority := 100) [PerfectlyNormalSpace X] : R0Space X where
121121
intros
122122
solve_by_elim [hxy.mem_open]
123123

124+
theorem Topology.IsInducing.perfectlyNormalSpace [PerfectlyNormalSpace Y] {e : X → Y}
125+
(he : IsInducing e) : PerfectlyNormalSpace X where
126+
toNormalSpace := he.completelyNormalSpace.toNormalSpace
127+
closed_gdelta _ hs := (he.isClosed_iff.1 hs).elim fun _ ht =>
128+
ht.2 ▸ ht.1.isGδ.preimage he.continuous
129+
130+
instance {s : Set X} [PerfectlyNormalSpace X] : PerfectlyNormalSpace s :=
131+
IsEmbedding.subtypeVal.perfectlyNormalSpace
132+
124133
/-- A T₆ space is a perfectly normal T₀ space. -/
125134
class T6Space (X : Type u) [TopologicalSpace X] : Prop extends T0Space X, PerfectlyNormalSpace X
126135

127136
-- see Note [lower instance priority]
128137
/-- A `T₆` space is a `T₅` space. -/
129138
instance (priority := 100) T6Space.toT5Space [T6Space X] : T5Space X where
130139

140+
theorem Topology.IsEmbedding.t6Space [T6Space Y] {e : X → Y}
141+
(he : IsEmbedding e) : T6Space X where
142+
toPerfectlyNormalSpace := he.perfectlyNormalSpace
143+
toT0Space := he.t0Space
144+
145+
instance {s : Set X} [T6Space X] : T6Space s :=
146+
IsEmbedding.subtypeVal.t6Space
147+
131148
end PerfectlyNormal
132149

133150
end Separation

Mathlib/Topology/Separation/PerfectlyNormal.lean

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,5 @@ theorem perfectlyNormalSpace_iff_forall_isClosed_preimage_zero :
106106
· rcases (mem_iInter.1 h 0).1 with ⟨x, rfl⟩
107107
exact (hfr x).1 }
108108

109-
theorem Topology.IsEmbedding.perfectlyNormalSpace {e : X → Y} (he : IsEmbedding e)
110-
[PerfectlyNormalSpace Y] : PerfectlyNormalSpace X := by
111-
rw [perfectlyNormalSpace_iff_forall_isClosed_preimage_zero]
112-
intro t ht
113-
obtain ⟨c, hc⟩ : ∃ c, IsClosed c ∧ e '' t = c ∩ range e := he.image_eq_isClosed_inter_range ht
114-
obtain ⟨f, rfl, hf⟩ :=
115-
perfectlyNormalSpace_iff_forall_isClosed_preimage_zero.1 inferInstance c hc.1
116-
refine ⟨⟨f ∘ e, f.continuous.comp he.continuous⟩, ?_, fun x => hf (e x)⟩
117-
simpa [Set.ext_iff, he.injective.preimage_image] using congr(e ⁻¹' $(hc.2))
118-
119-
instance {s : Set X} [PerfectlyNormalSpace X] : PerfectlyNormalSpace s :=
120-
IsEmbedding.subtypeVal.perfectlyNormalSpace
109+
@[deprecated (since := "2026-06-03")]
110+
alias Topology.IsEmbedding.perfectlyNormalSpace := Topology.IsInducing.perfectlyNormalSpace

Mathlib/Topology/Separation/Regular.lean

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -595,10 +595,10 @@ instance (priority := 100) CompletelyNormalSpace.toNormalSpace
595595
normal s t hs ht hd := separatedNhds_iff_disjoint.2 <|
596596
completely_normal (by rwa [hs.closure_eq]) (by rwa [ht.closure_eq])
597597

598-
theorem Topology.IsEmbedding.completelyNormalSpace [TopologicalSpace Y] [CompletelyNormalSpace Y]
599-
{e : X → Y} (he : IsEmbedding e) : CompletelyNormalSpace X := by
598+
theorem Topology.IsInducing.completelyNormalSpace [TopologicalSpace Y] [CompletelyNormalSpace Y]
599+
{e : X → Y} (he : IsInducing e) : CompletelyNormalSpace X := by
600600
refine ⟨fun s t hd₁ hd₂ => ?_⟩
601-
simp only [he.isInducing.nhdsSet_eq_comap]
601+
simp only [he.nhdsSet_eq_comap]
602602
refine disjoint_comap (completely_normal ?_ ?_)
603603
· rwa [← subset_compl_iff_disjoint_left, image_subset_iff, preimage_compl,
604604
← he.closure_eq_preimage_closure_image, subset_compl_iff_disjoint_left]
@@ -665,10 +665,8 @@ class T5Space (X : Type u) [TopologicalSpace X] : Prop extends T1Space X, Comple
665665

666666
theorem Topology.IsEmbedding.t5Space [TopologicalSpace Y] [T5Space Y] {e : X → Y}
667667
(he : IsEmbedding e) : T5Space X where
668-
__ := he.t1Space
669-
completely_normal := by
670-
have := he.completelyNormalSpace
671-
exact completely_normal
668+
toCompletelyNormalSpace := he.completelyNormalSpace
669+
toT1Space := he.t1Space
672670

673671
protected theorem Homeomorph.t5Space [TopologicalSpace Y] [T5Space X] (h : X ≃ₜ Y) : T5Space Y :=
674672
h.symm.isClosedEmbedding.t5Space

0 commit comments

Comments
 (0)