Skip to content

Commit b5fd71c

Browse files
committed
feat(Topology.GDelta.Basic): add helpers for IsMeagre (leanprover-community#33308)
add the following helpers: - IsNowhereDense.isMeagre - isMeagre_biUnion - exists_of_not_meagre_biUnion - Topology.IsInducing.isMeagre_image - IsMeagre.image_val This PR follows leanprover-community#32740, which adds helpers for IsNowhereDense. These lemmas will help to prove the **Effros Theorem**, see [zulip thread](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Effros.20Theorem/with/558712441).
1 parent 1f3b5da commit b5fd71c

1 file changed

Lines changed: 38 additions & 1 deletion

File tree

Mathlib/Topology/GDelta/Basic.lean

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ lemma isNowhereDense_iff_forall_notMem_nhds {s : Set X} :
244244
mem_interior_iff_mem_nhds]
245245

246246
/-- The image of a nowhere dense set through an inducing map is nowhere dense. -/
247-
lemma Topology.IsInducing.isNowhereDense_image {f : X → Y} [TopologicalSpace Y]
247+
lemma Topology.IsInducing.isNowhereDense_image [TopologicalSpace Y] {f : X → Y}
248248
(hf : Topology.IsInducing f) {s : Set X} (h : IsNowhereDense s) : IsNowhereDense (f '' s) := by
249249
rw [isNowhereDense_iff_forall_notMem_nhds, forall_mem_image] at *
250250
simp_rw [hf.nhds_eq_comap, hf.closure_eq_preimage_closure_image] at h
@@ -283,6 +283,14 @@ lemma isMeagre_iUnion [Countable ι'] {f : ι' → Set X} (hs : ∀ i, IsMeagre
283283
rw [IsMeagre, compl_iUnion]
284284
exact countable_iInter_mem.mpr hs
285285

286+
lemma isMeagre_biUnion {I : Set ι} (c : I.Countable) {f : ι → Set X}
287+
(h : ∀ i ∈ I, IsMeagre (f i)) : IsMeagre (⋃ i ∈ I, f i) := by
288+
suffices IsMeagre (⋃ i : I, f i) by simpa
289+
have : Countable I := c
290+
apply isMeagre_iUnion
291+
intro ⟨i, hi⟩
292+
exact h i hi
293+
286294
/-- A set is meagre iff it is contained in a countable union of nowhere dense sets. -/
287295
lemma isMeagre_iff_countable_union_isNowhereDense {s : Set X} :
288296
IsMeagre s ↔ ∃ S : Set (Set X), (∀ t ∈ S, IsNowhereDense t) ∧ S.Countable ∧ s ⊆ ⋃₀ S := by
@@ -302,4 +310,33 @@ lemma nonempty_of_not_isMeagre {s : Set X} (hs : ¬IsMeagre s) : s.Nonempty := b
302310
contrapose! hs
303311
simpa [hs] using IsMeagre.empty
304312

313+
/-- A nowhere dense set is meagre. -/
314+
lemma IsNowhereDense.isMeagre {s : Set X} (h : IsNowhereDense s) : IsMeagre s := by
315+
rw [isMeagre_iff_countable_union_isNowhereDense]
316+
exact ⟨{s}, by simpa, by simp, by simp⟩
317+
318+
lemma exists_of_not_isMeagre_biUnion {I : Set ι}
319+
(c : I.Countable) {A : ι → Set X} (h : ¬IsMeagre (⋃ i ∈ I, A i)) :
320+
∃ i ∈ I, ¬IsMeagre (A i) := by
321+
contrapose! h
322+
exact isMeagre_biUnion c h
323+
324+
/-- The image of a meagre set through an inducing map is meagre. -/
325+
lemma Topology.IsInducing.isMeagre_image [TopologicalSpace Y] {f : X → Y}
326+
(hf : Topology.IsInducing f) {s : Set X} (h : IsMeagre s) : IsMeagre (f '' s) := by
327+
rw [isMeagre_iff_countable_union_isNowhereDense] at *
328+
obtain ⟨T, isNowhereDense, countable, cover⟩ := h
329+
refine ⟨(Set.image f) '' T, ?isNowhereDense, countable.image _, ?cover⟩
330+
case isNowhereDense =>
331+
intro u ⟨t, tT, tu⟩
332+
rw [← tu]
333+
apply hf.isNowhereDense_image (isNowhereDense t tT)
334+
case cover =>
335+
rw [← Set.image_sUnion]
336+
grw [cover]
337+
338+
/-- A set is meagre if it is meagre in some subspace. -/
339+
lemma IsMeagre.image_val {s : Set X} {m : Set s} (h : IsMeagre (m : Set s)) :
340+
IsMeagre (m : Set X) := Topology.IsInducing.subtypeVal.isMeagre_image h
341+
305342
end IsMeagre

0 commit comments

Comments
 (0)