Skip to content

Commit 31b5cb4

Browse files
committed
feat: an open subset of a Baire space is Baire (leanprover-community#32673)
This PR proves the following lemmas: 1. If `f : X → Y` is an open quotient map and `X` is a Baire space, then `Y` is Baire. As a corollary, a homeomorphism maps a Baire space to a Baire space. 3. If `f : X → Y` is an open embedding and `Y` is a Baire space, then `X` is Baire. As a corollary, any open subset of a Baire space is Baire. Formalized with help from Aristotle.
1 parent b86fd5c commit 31b5cb4

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

Mathlib/Topology/Baire/Lemmas.lean

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Sébastien Gouëzel
66
module
77

88
public import Mathlib.Topology.GDelta.Basic
9+
public import Mathlib.Topology.Constructions
910

1011
/-!
1112
# Baire spaces
@@ -17,7 +18,7 @@ and all locally compact regular spaces are Baire spaces.
1718
We prove the theorems in `Mathlib/Topology/Baire/CompleteMetrizable`
1819
and `Mathlib/Topology/Baire/LocallyCompactRegular`.
1920
20-
In this file we prove various corollaries of Baire theorems.
21+
In this file we prove some lemmas about Baire spaces.
2122
2223
The good concept underlying the theorems is that of a Gδ set, i.e., a countable intersection
2324
of open sets. Then Baire theorem can also be formulated as the fact that a countable
@@ -47,6 +48,39 @@ theorem dense_iInter_of_isOpen_nat {f : ℕ → Set X} (ho : ∀ n, IsOpen (f n)
4748
(hd : ∀ n, Dense (f n)) : Dense (⋂ n, f n) :=
4849
BaireSpace.baire_property f ho hd
4950

51+
/-- If `p : Y → X` is an open embedding and `X` is a Baire space, then `Y` is a Baire space. -/
52+
theorem Topology.IsOpenEmbedding.baireSpace {Y : Type*} [TopologicalSpace Y] {p : Y → X}
53+
(hp : Topology.IsOpenEmbedding p) : BaireSpace Y := by
54+
constructor
55+
intro f hof hdf
56+
let s := range p
57+
let c := fun n : ℕ => p '' f n ∪ (closure s)ᶜ
58+
have c_open (n : ℕ) : IsOpen (c n) := IsOpen.union (hp.isOpenMap (f n) (hof n))
59+
isClosed_closure.isOpen_compl
60+
have c_dense (n : ℕ) : Dense (c n) := by
61+
rw [dense_iff_closure_eq, subset_antisymm_iff]
62+
have : univ ⊆ closure (c n) := calc
63+
_ ⊆ (interior (closure s)) ∪ (interior (closure s))ᶜ := by grind
64+
_ ⊆ closure s ∪ (interior (closure s))ᶜ := by gcongr; exact interior_subset
65+
_ ⊆ closure (p '' f n) ∪ (interior (closure s))ᶜ := union_subset_union
66+
(closure_minimal (hp.continuous.range_subset_closure_image_dense (hdf n))
67+
isClosed_closure) (subset_refl (interior (closure s))ᶜ)
68+
_ ⊆ closure (p '' f n) ∪ closure ((closure s)ᶜ) := union_subset_union (by simp) (by simp)
69+
_ = closure (c n) := closure_union.symm
70+
grind
71+
have c_inter_dense : Dense (⋂ n, c n) := dense_iInter_of_isOpen_nat c_open c_dense
72+
have c_inter_eq : ⋂ n, f n = p ⁻¹' (⋂ n, c n) := by
73+
ext x
74+
simp only [mem_iInter, mem_preimage, mem_union, mem_compl_iff, c]
75+
refine ⟨fun h i => by grind, fun h i => ?_⟩
76+
exact hp.injective.mem_set_image.mp (imp_iff_or_not.mpr (h i)
77+
(subset_closure (mem_range_self x)))
78+
exact c_inter_eq ▸ Dense.preimage c_inter_dense hp.isOpenMap
79+
80+
/-- An open subset of a Baire space is Baire. -/
81+
theorem IsOpen.baireSpace {s : Set X} (hO : IsOpen s) : BaireSpace s :=
82+
hO.isOpenEmbedding_subtypeVal.baireSpace
83+
5084
/-- Baire theorem: a countable intersection of dense open sets is dense. Formulated here with ⋂₀. -/
5185
theorem dense_sInter_of_isOpen {S : Set (Set X)} (ho : ∀ s ∈ S, IsOpen s) (hS : S.Countable)
5286
(hd : ∀ s ∈ S, Dense s) : Dense (⋂₀ S) := by

Mathlib/Topology/Homeomorph/Lemmas.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ protected theorem secondCountableTopology [SecondCountableTopology Y]
3737
(h : X ≃ₜ Y) : SecondCountableTopology X :=
3838
h.isInducing.secondCountableTopology
3939

40+
protected theorem baireSpace [BaireSpace X] (f : X ≃ₜ Y) : BaireSpace Y :=
41+
f.isOpenQuotientMap.baireSpace
42+
4043
/-- If `h : X → Y` is a homeomorphism, `h(s)` is compact iff `s` is. -/
4144
@[simp]
4245
theorem isCompact_image {s : Set X} (h : X ≃ₜ Y) : IsCompact (h '' s) ↔ IsCompact s :=

Mathlib/Topology/Maps/OpenQuotient.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Yury Kudryashov
66
module
77

88
public import Mathlib.Topology.Maps.Basic
9+
public import Mathlib.Topology.Baire.Lemmas
910

1011
/-!
1112
# Open quotient maps
@@ -64,6 +65,15 @@ theorem dense_preimage_iff (h : IsOpenQuotientMap f) {s : Set Y} : Dense (f ⁻
6465
fun hs ↦ h.surjective.denseRange.dense_of_mapsTo h.continuous hs (mapsTo_preimage _ _),
6566
fun hs ↦ hs.preimage h.isOpenMap⟩
6667

68+
/-- If `f` is an open quotient map and `X` is Baire, then `Y` is Baire. -/
69+
theorem baireSpace {f : X → Y} [BaireSpace X] (hf : IsOpenQuotientMap f) :
70+
BaireSpace Y := by
71+
constructor
72+
intro u hou hdu
73+
have := dense_iInter_of_isOpen_nat (fun n => hf.continuous.isOpen_preimage (u n) (hou n))
74+
(fun n => (IsOpenQuotientMap.dense_preimage_iff hf).mpr (hdu n))
75+
simp_all [← preimage_iInter, IsOpenQuotientMap.dense_preimage_iff]
76+
6777
end IsOpenQuotientMap
6878

6979
theorem Topology.IsInducing.isOpenQuotientMap_of_surjective (ind : IsInducing f)

0 commit comments

Comments
 (0)