Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 26918a0

Browse files
committed
feat(topology/metric_space/baire): define filter residual (#3149)
Fixes #2265. Also define a typeclass `countable_Inter_filter` and prove that both `residual` and `μ.ae` have this property.
1 parent 62e1364 commit 26918a0

File tree

8 files changed

+183
-57
lines changed

8 files changed

+183
-57
lines changed

src/analysis/normed_space/banach.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ begin
4343
refine mem_Union.2 ⟨n, subset_closure _⟩,
4444
refine (mem_image _ _ _).2 ⟨x, ⟨_, hx⟩⟩,
4545
rwa [mem_ball, dist_eq_norm, sub_zero] },
46-
have : ∃(n:ℕ) y ε, 0 < ε ∧ ball y ε ⊆ closure (f '' (ball 0 n)) :=
46+
have : ∃ (n : ℕ) x, x ∈ interior (closure (f '' (ball 0 n))) :=
4747
nonempty_interior_of_Union_of_closed (λn, is_closed_closure) A,
48+
simp only [mem_interior_iff_mem_nhds, mem_nhds_iff] at this,
4849
rcases this with ⟨n, a, ε, ⟨εpos, H⟩⟩,
4950
rcases normed_field.exists_one_lt_norm 𝕜 with ⟨c, hc⟩,
5051
refine ⟨(ε/2)⁻¹ * ∥c∥ * 2 * n, _, λy, _⟩,

src/measure_theory/measure_space.lean

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johannes Hölzl, Mario Carneiro
55
-/
66
import measure_theory.outer_measure
7+
import order.filter.countable_Inter
8+
79
/-!
810
# Measure spaces
911
@@ -748,15 +750,21 @@ by simp only [ae_iff, not_not, set_of_mem_eq]
748750
lemma ae_of_all {p : α → Prop} (μ : measure α) : (∀a, p a) → ∀ₘ a ∂ μ, p a :=
749751
eventually_of_forall _
750752

753+
instance : countable_Inter_filter μ.ae :=
754+
begin
755+
intros S hSc hS,
756+
simp only [mem_ae_iff, compl_sInter, sUnion_image, bUnion_eq_Union] at hS ⊢,
757+
haveI := hSc.to_encodable,
758+
exact measure_Union_null (subtype.forall.2 hS)
759+
end
760+
751761
lemma ae_all_iff {ι : Type*} [encodable ι] {p : α → ι → Prop} :
752762
(∀ₘ a ∂ μ, ∀i, p a i) ↔ (∀i, ∀ₘ a ∂ μ, p a i) :=
753-
begin
754-
refine iff.intro (assume h i, _) (assume h, _),
755-
{ filter_upwards [h] assume a ha, ha i },
756-
{ have h := measure_Union_null h,
757-
rw [← compl_Inter] at h,
758-
filter_upwards [h] assume a, mem_Inter.1 }
759-
end
763+
eventually_countable_forall
764+
765+
lemma ae_ball_iff {ι} {S : set ι} (hS : countable S) {p : Π (x : α) (i ∈ S), Prop} :
766+
(∀ₘ x ∂ μ, ∀ i ∈ S, p x i ‹_›) ↔ ∀ i ∈ S, ∀ₘ x ∂ μ, p x i ‹_› :=
767+
eventually_countable_ball hS
760768

761769
lemma ae_eq_refl (f : α → β) : ∀ₘ a ∂ μ, f a = f a :=
762770
ae_of_all μ $ λ a, rfl
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/-
2+
Copyright (c) 2020 Yury G. Kudryashov. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Author: Yury G. Kudryashov
5+
-/
6+
import order.filter.basic
7+
import data.set.countable
8+
9+
/-!
10+
# Filters with countable intersection property
11+
12+
In this file we define `countable_Inter_filter` to be the class of filters with the following
13+
property: for any countable collection of sets `s ∈ l` their intersection belongs to `l` as well.
14+
15+
Two main examples are the `residual` filter defined in `topology.metric_space.baire` and
16+
the `measure.ae` filter defined in `measure_theory.measure_space`.
17+
-/
18+
19+
open set filter
20+
21+
variables {ι α : Type*}
22+
23+
/-- A filter `l` has the countable intersection property if for any countable collection
24+
of sets `s ∈ l` their intersection belongs to `l` as well. -/
25+
class countable_Inter_filter (l : filter α) : Prop :=
26+
(countable_sInter_mem_sets' :
27+
∀ {S : set (set α)} (hSc : countable S) (hS : ∀ s ∈ S, s ∈ l), ⋂₀ S ∈ l)
28+
29+
variables {l : filter α} [countable_Inter_filter l]
30+
31+
lemma countable_sInter_mem_sets {S : set (set α)} (hSc : countable S) :
32+
⋂₀ S ∈ l ↔ ∀ s ∈ S, s ∈ l :=
33+
⟨λ hS s hs, mem_sets_of_superset hS (sInter_subset_of_mem hs),
34+
countable_Inter_filter.countable_sInter_mem_sets' hSc⟩
35+
36+
lemma countable_Inter_mem_sets [encodable ι] {s : ι → set α} :
37+
(⋂ i, s i) ∈ l ↔ ∀ i, s i ∈ l :=
38+
sInter_range s ▸ (countable_sInter_mem_sets (countable_range _)).trans forall_range_iff
39+
40+
lemma countable_bInter_mem_sets {S : set ι} (hS : countable S) {s : Π i ∈ S, set α} :
41+
(⋂ i ∈ S, s i ‹_›) ∈ l ↔ ∀ i ∈ S, s i ‹_› ∈ l :=
42+
begin
43+
rw [bInter_eq_Inter],
44+
haveI := hS.to_encodable,
45+
exact countable_Inter_mem_sets.trans subtype.forall
46+
end
47+
48+
lemma eventually_countable_forall [encodable ι] {p : α → ι → Prop} :
49+
(∀ᶠ x in l, ∀ i, p x i) ↔ ∀ i, ∀ᶠ x in l, p x i :=
50+
by simpa only [filter.eventually, set_of_forall]
51+
using @countable_Inter_mem_sets _ _ l _ _ (λ i, {x | p x i})
52+
53+
lemma eventually_countable_ball {S : set ι} (hS : countable S) {p : Π (x : α) (i ∈ S), Prop} :
54+
(∀ᶠ x in l, ∀ i ∈ S, p x i ‹_›) ↔ ∀ i ∈ S, ∀ᶠ x in l, p x i ‹_› :=
55+
by simpa only [filter.eventually, set_of_forall]
56+
using @countable_bInter_mem_sets _ _ l _ _ hS (λ i hi, {x | p x i hi})
57+
58+
instance countable_Inter_filter_principal (s : set α) : countable_Inter_filter (principal s) :=
59+
⟨λ S hSc hS, subset_sInter hS⟩
60+
61+
instance countable_Inter_filter_bot : countable_Inter_filter (⊥ : filter α) :=
62+
by { rw ← principal_empty, apply countable_Inter_filter_principal }
63+
64+
instance countable_Inter_filter_top : countable_Inter_filter (⊤ : filter α) :=
65+
by { rw ← principal_univ, apply countable_Inter_filter_principal }

src/topology/basic.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,17 @@ have 𝓝 a ⊓ principal (s ∩ t) ≠ ⊥,
554554
... ≠ ⊥ : by rw [closure_eq_nhds] at ht; assumption,
555555
by rwa [closure_eq_nhds]
556556

557+
lemma dense_inter_of_open_left {s t : set α} (hs : closure s = univ) (ht : closure t = univ)
558+
(hso : is_open s) :
559+
closure (s ∩ t) = univ :=
560+
eq_univ_of_subset (closure_minimal (closure_inter_open hso) is_closed_closure) $
561+
by simp only [*, inter_univ]
562+
563+
lemma dense_inter_of_open_right {s t : set α} (hs : closure s = univ) (ht : closure t = univ)
564+
(hto : is_open t) :
565+
closure (s ∩ t) = univ :=
566+
inter_comm t s ▸ dense_inter_of_open_left ht hs hto
567+
557568
lemma closure_diff {s t : set α} : closure s - closure t ⊆ closure (s - t) :=
558569
calc closure s \ closure t = (- closure t) ∩ closure s : by simp only [diff_eq, inter_comm]
559570
... ⊆ closure (- closure t ∩ s) : closure_inter_open $ is_open_compl_iff.mpr $ is_closed_closure

src/topology/instances/ennreal.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ end
768768

769769
theorem continuous_edist : continuous (λp:α×α, edist p.1 p.2) :=
770770
begin
771-
apply continuous_of_le_add_edist 2 (by simp),
771+
apply continuous_of_le_add_edist 2 (by norm_num),
772772
rintros ⟨x, y⟩ ⟨x', y'⟩,
773773
calc edist x y ≤ edist x x' + edist x' y' + edist y' y : edist_triangle4 _ _ _ _
774774
... = edist x' y' + (edist x x' + edist y y') : by simp [edist_comm]; cc
@@ -795,6 +795,9 @@ begin
795795
exact cauchy_seq_of_edist_le_of_summable d hf hd
796796
end
797797

798+
lemma emetric.is_closed_ball {a : α} {r : ennreal} : is_closed (closed_ball a r) :=
799+
is_closed_le (continuous_id.edist continuous_const) continuous_const
800+
798801
/-- If `edist (f n) (f (n+1))` is bounded above by a function `d : ℕ → ennreal`,
799802
then the distance from `f n` to the limit is bounded by `∑'_{k=n}^∞ d k`. -/
800803
lemma edist_le_tsum_of_edist_le_of_tendsto {f : ℕ → α} (d : ℕ → ennreal)

src/topology/metric_space/baire.lean

Lines changed: 82 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Sébastien Gouëzel
55
-/
66
import analysis.specific_limits
7+
import order.filter.countable_Inter
78

89
/-!
910
# Baire theorem
@@ -18,10 +19,13 @@ covered by a countable union of closed sets, then the union of their interiors i
1819
1920
The names of the theorems do not contain the string "Baire", but are instead built from the form of
2021
the statement. "Baire" is however in the docstring of all the theorems, to facilitate grep searches.
22+
23+
We also define the filter `residual α` generated by dense `Gδ` sets and prove that this filter
24+
has the countable intersection property.
2125
-/
2226

2327
noncomputable theory
24-
open_locale classical
28+
open_locale classical topological_space
2529

2630
open filter encodable set
2731

@@ -86,18 +90,30 @@ end
8690

8791
end is_Gδ
8892

93+
/-- A set `s` is called *residual* if it includes a dense `Gδ` set. If `α` is a Baire space
94+
(e.g., a complete metric space), then residual sets form a filter, see `mem_residual`.
95+
96+
For technical reasons we define the filter `residual` in any topological space
97+
but in a non-Baire space it is not useful because it may contain some non-residual
98+
sets. -/
99+
def residual (α : Type*) [topological_space α] : filter α :=
100+
⨅ t (ht : is_Gδ t) (ht' : closure t = univ), principal t
101+
89102
section Baire_theorem
90-
open metric
91-
variables [metric_space α] [complete_space α]
103+
open emetric ennreal
104+
variables [emetric_space α] [complete_space α]
92105

93106
/-- Baire theorem: a countable intersection of dense open sets is dense. Formulated here when
94107
the source space is ℕ (and subsumed below by `dense_Inter_of_open` working with any
95108
encodable source space). -/
96109
theorem dense_Inter_of_open_nat {f : ℕ → set α} (ho : ∀n, is_open (f n))
97110
(hd : ∀n, closure (f n) = univ) : closure (⋂n, f n) = univ :=
98111
begin
99-
let B : ℕ → ℝ := λn, ((1/2)^n : ℝ),
100-
have Bpos : ∀n, 0 < B n := λn, begin apply pow_pos, by norm_num end,
112+
let B : ℕ → ennreal := λn, 1/2^n,
113+
have Bpos : ∀n, 0 < B n,
114+
{ intro n,
115+
simp only [B, div_def, one_mul, ennreal.inv_pos],
116+
exact pow_ne_top two_ne_top },
101117
/- Translate the density assumption into two functions `center` and `radius` associating
102118
to any n, x, δ, δpos a center and a positive radius such that
103119
`closed_ball center radius` is included both in `f n` and in `closed_ball x δ`.
@@ -106,40 +122,40 @@ begin
106122
{ assume n x δ,
107123
by_cases δpos : δ > 0,
108124
{ have : x ∈ closure (f n) := by simpa only [(hd n).symm] using mem_univ x,
109-
rcases metric.mem_closure_iff.1 this (δ/2) (half_pos δpos) with ⟨y, ys, xy⟩,
110-
rw dist_comm at xy,
111-
rcases is_open_iff.1 (ho n) y ys with ⟨r, rpos, hr⟩,
112-
refine ⟨y, min (min (δ/2) (r/2)) (B (n+1)), λ_, ⟨_, _, λz hz, ⟨_, _⟩⟩⟩,
113-
show 0 < min (min (δ / 2) (r/2)) (B (n+1)),
114-
from lt_min (lt_min (half_pos δpos) (half_pos rpos)) (Bpos (n+1)),
115-
show min (min (δ / 2) (r/2)) (B (n+1)) ≤ B (n+1), from min_le_right _ _,
125+
rcases emetric.mem_closure_iff.1 this (δ/2) (ennreal.half_pos δpos) with ⟨y, ys, xy⟩,
126+
rw edist_comm at xy,
127+
obtain ⟨r, rpos, hr⟩ : ∃ r > 0, closed_ball y r ⊆ f n :=
128+
nhds_basis_closed_eball.mem_iff.1 (is_open_iff_mem_nhds.1 (ho n) y ys),
129+
refine ⟨y, min (min (δ/2) r) (B (n+1)), λ_, ⟨_, _, λz hz, ⟨_, _⟩⟩⟩,
130+
show 0 < min (min (δ / 2) r) (B (n+1)),
131+
from lt_min (lt_min (ennreal.half_pos δpos) rpos) (Bpos (n+1)),
132+
show min (min (δ / 2) r) (B (n+1)) ≤ B (n+1), from min_le_right _ _,
116133
show z ∈ closed_ball x δ, from calc
117-
dist z x ≤ dist z y + dist y x : dist_triangle _ _ _
118-
... ≤ (min (min (δ / 2) (r/2)) (B (n+1))) + (δ/2) : add_le_add hz (le_of_lt xy)
119-
... ≤ δ/2 + δ/2 : add_le_add (le_trans (min_le_left _ _) (min_le_left _ _)) (le_refl _)
120-
... = δ : add_halves _,
134+
edist z x ≤ edist z y + edist y x : edist_triangle _ _ _
135+
... ≤ (min (min (δ / 2) r) (B (n+1))) + (δ/2) : add_le_add' hz (le_of_lt xy)
136+
... ≤ δ/2 + δ/2 : add_le_add' (le_trans (min_le_left _ _) (min_le_left _ _)) (le_refl _)
137+
... = δ : ennreal.add_halves δ,
121138
show z ∈ f n, from hr (calc
122-
dist z y ≤ min (min (δ / 2) (r/2)) (B (n+1)) : hz
123-
... ≤ r/2 : le_trans (min_le_left _ _) (min_le_right _ _)
124-
... < r : half_lt_self rpos) },
139+
edist z y ≤ min (min (δ / 2) r) (B (n+1)) : hz
140+
... ≤ r : le_trans (min_le_left _ _) (min_le_right _ _)) },
125141
{ use [x, 0] }},
126142
choose center radius H using this,
127143

128144
refine subset.antisymm (subset_univ _) (λx hx, _),
129-
refine metric.mem_closure_iff.2 (λε εpos, _),
145+
refine (mem_closure_iff_nhds_basis nhds_basis_closed_eball).2 (λ ε εpos, _),
130146
/- ε is positive. We have to find a point in the ball of radius ε around x belonging to all `f n`.
131147
For this, we construct inductively a sequence `F n = (c n, r n)` such that the closed ball
132148
`closed_ball (c n) (r n)` is included in the previous ball and in `f n`, and such that
133149
`r n` is small enough to ensure that `c n` is a Cauchy sequence. Then `c n` converges to a
134150
limit which belongs to all the `f n`. -/
135-
let F : ℕ → (α × ) := λn, nat.rec_on n (prod.mk x (min (ε/2) 1))
151+
let F : ℕ → (α × ennreal) := λn, nat.rec_on n (prod.mk x (min ε (B 0)))
136152
(λn p, prod.mk (center n p.1 p.2) (radius n p.1 p.2)),
137153
let c : ℕ → α := λn, (F n).1,
138-
let r : ℕ → := λn, (F n).2,
154+
let r : ℕ → ennreal := λn, (F n).2,
139155
have rpos : ∀n, r n > 0,
140156
{ assume n,
141157
induction n with n hn,
142-
exact lt_min (half_pos εpos) (zero_lt_one),
158+
exact lt_min εpos (Bpos 0),
143159
exact (H n (c n) (r n) hn).1 },
144160
have rB : ∀n, r n ≤ B n,
145161
{ assume n,
@@ -148,20 +164,17 @@ begin
148164
exact (H n (c n) (r n) (rpos n)).2.1 },
149165
have incl : ∀n, closed_ball (c (n+1)) (r (n+1)) ⊆ (closed_ball (c n) (r n)) ∩ (f n) :=
150166
λn, (H n (c n) (r n) (rpos n)).2.2,
151-
have cdist : ∀n, dist (c n) (c (n+1)) ≤ B n,
167+
have cdist : ∀n, edist (c n) (c (n+1)) ≤ B n,
152168
{ assume n,
153-
rw dist_comm,
154-
have A : c (n+1) ∈ closed_ball (c (n+1)) (r (n+1)) :=
155-
mem_closed_ball_self (le_of_lt (rpos (n+1))),
169+
rw edist_comm,
170+
have A : c (n+1) ∈ closed_ball (c (n+1)) (r (n+1)) := mem_closed_ball_self,
156171
have I := calc
157172
closed_ball (c (n+1)) (r (n+1)) ⊆ closed_ball (c n) (r n) :
158173
subset.trans (incl n) (inter_subset_left _ _)
159174
... ⊆ closed_ball (c n) (B n) : closed_ball_subset_closed_ball (rB n),
160175
exact I A },
161-
have : cauchy_seq c,
162-
{ refine cauchy_seq_of_le_geometric (1/2) 1 (by norm_num) (λn, _),
163-
rw one_mul,
164-
exact cdist n },
176+
have : cauchy_seq c :=
177+
cauchy_seq_of_edist_le_geometric_two _ one_ne_top cdist,
165178
-- as the sequence `c n` is Cauchy in a complete space, it converges to a limit `y`.
166179
rcases cauchy_seq_tendsto_of_complete this with ⟨y, ylim⟩,
167180
-- this point `y` will be the desired point. We will check that it belongs to all
@@ -177,16 +190,13 @@ begin
177190
{ assume n,
178191
refine mem_of_closed_of_tendsto (by simp) ylim is_closed_ball _,
179192
simp only [filter.mem_at_top_sets, nonempty_of_inhabited, set.mem_preimage],
180-
exact ⟨n, λm hm, I n m hm (mem_closed_ball_self (le_of_lt (rpos m)))⟩ },
193+
exact ⟨n, λm hm, I n m hm mem_closed_ball_self⟩ },
181194
split,
182195
show ∀n, y ∈ f n,
183196
{ assume n,
184197
have : closed_ball (c (n+1)) (r (n+1)) ⊆ f n := subset.trans (incl n) (inter_subset_right _ _),
185198
exact this (yball (n+1)) },
186-
show dist x y < ε, from calc
187-
dist x y = dist y x : dist_comm _ _
188-
... ≤ r 0 : yball 0
189-
... < ε : lt_of_le_of_lt (min_le_left _ _) (half_lt_self εpos)
199+
show edist y x ≤ ε, from le_trans (yball 0) (min_le_left _ _),
190200
end
191201

192202
/-- Baire theorem: a countable intersection of dense open sets is dense. Formulated here with ⋂₀. -/
@@ -272,6 +282,35 @@ begin
272282
apply dense_Inter_of_Gδ; simp [bool.forall_bool, *]
273283
end
274284

285+
/-- A property holds on a residual (comeagre) set if and only if it holds on some dense `Gδ` set. -/
286+
lemma eventually_residual {p : α → Prop} :
287+
(∀ᶠ x in residual α, p x) ↔ ∃ (t : set α), is_Gδ t ∧ closure t = univ ∧ ∀ x ∈ t, p x :=
288+
calc (∀ᶠ x in residual α, p x) ↔
289+
∀ᶠ x in ⨅ (t : set α) (ht : is_Gδ t ∧ closure t = univ), principal t, p x :
290+
by simp only [residual, infi_and]
291+
... ↔ ∃ (t : set α) (ht : is_Gδ t ∧ closure t = univ), ∀ᶠ x in principal t, p x :
292+
mem_binfi (λ t₁ h₁ t₂ h₂, ⟨t₁ ∩ t₂, ⟨h₁.1.inter h₂.1, dense_inter_of_Gδ h₁.1 h₂.1 h₁.2 h₂.2⟩,
293+
by simp⟩) ⟨univ, is_Gδ_univ, closure_univ⟩
294+
... ↔ _ : by simp [and_assoc]
295+
296+
/-- A set is residual (comeagre) if and only if it includes a dense `Gδ` set. -/
297+
lemma mem_residual {s : set α} :
298+
s ∈ residual α ↔ ∃ t ⊆ s, is_Gδ t ∧ closure t = univ :=
299+
(@eventually_residual α _ _ (λ x, x ∈ s)).trans $ exists_congr $
300+
λ t, by rw [exists_prop, and_comm (t ⊆ s), subset_def, and_assoc]
301+
302+
instance : countable_Inter_filter (residual α) :=
303+
begin
304+
intros S hSc hS,
305+
simp only [mem_residual] at *,
306+
choose T hTs hT using hS,
307+
refine ⟨⋂ s ∈ S, T s ‹_›, _, _, _⟩,
308+
{ rw [sInter_eq_bInter],
309+
exact Inter_subset_Inter (λ s, Inter_subset_Inter $ hTs s) },
310+
{ exact is_Gδ_bInter hSc (λ s hs, (hT s hs).1) },
311+
{ exact dense_bInter_of_Gδ (λ s hs, (hT s hs).1) hSc (λ s hs, (hT s hs).2) }
312+
end
313+
275314
/-- Baire theorem: if countably many closed sets cover the whole space, then their interiors
276315
are dense. Formulated here with an index set which is a countable set in any type. -/
277316
theorem dense_bUnion_interior_of_closed {S : set β} {f : β → set α} (hc : ∀s∈S, is_closed (f s))
@@ -319,18 +358,14 @@ end
319358
/-- One of the most useful consequences of Baire theorem: if a countable union of closed sets
320359
covers the space, then one of the sets has nonempty interior. -/
321360
theorem nonempty_interior_of_Union_of_closed [nonempty α] [encodable β] {f : β → set α}
322-
(hc : ∀s, is_closed (f s)) (hU : (⋃s, f s) = univ) : ∃s x ε, 0 < ε ∧ ball x ε ⊆ f s :=
361+
(hc : ∀s, is_closed (f s)) (hU : (⋃s, f s) = univ) :
362+
∃s, (interior $ f s).nonempty :=
323363
begin
324-
have : ∃s, (interior (f s)).nonempty,
325-
{ by_contradiction h,
326-
simp only [not_exists, not_nonempty_iff_eq_empty] at h,
327-
have := calc ∅ = closure (⋃s, interior (f s)) : by simp [h]
328-
... = univ : dense_Union_interior_of_closed hc hU,
329-
exact univ_nonempty.ne_empty this.symm },
330-
rcases this with ⟨s, hs⟩,
331-
rcases hs with ⟨x, hx⟩,
332-
rcases mem_nhds_iff.1 (mem_interior_iff_mem_nhds.1 hx) with ⟨ε, εpos, hε⟩,
333-
exact ⟨s, x, ε, εpos, hε⟩,
364+
by_contradiction h,
365+
simp only [not_exists, not_nonempty_iff_eq_empty] at h,
366+
have := calc ∅ = closure (⋃s, interior (f s)) : by simp [h]
367+
... = univ : dense_Union_interior_of_closed hc hU,
368+
exact univ_nonempty.ne_empty this.symm
334369
end
335370

336371
end Baire_theorem

src/topology/metric_space/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ theorem nhds_basis_ball_inv_nat_pos :
553553
nhds_basis_uniformity uniformity_basis_dist_inv_nat_pos
554554

555555
theorem is_open_iff : is_open s ↔ ∀x∈s, ∃ε>0, ball x ε ⊆ s :=
556-
by simp only [is_open_iff_nhds, mem_nhds_iff, le_principal_iff]
556+
by simp only [is_open_iff_mem_nhds, mem_nhds_iff]
557557

558558
theorem is_open_ball : is_open (ball x ε) :=
559559
is_open_iff.2 $ λ y, exists_ball_subset_ball

src/topology/metric_space/emetric_space.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,9 @@ by rw [emetric.ball_eq_empty_iff]
566566
theorem nhds_basis_eball : (𝓝 x).has_basis (λ ε:ennreal, 0 < ε) (ball x) :=
567567
nhds_basis_uniformity uniformity_basis_edist
568568

569+
theorem nhds_basis_closed_eball : (𝓝 x).has_basis (λ ε:ennreal, 0 < ε) (closed_ball x) :=
570+
nhds_basis_uniformity uniformity_basis_edist_le
571+
569572
@[nolint ge_or_gt] -- see Note [nolint_ge]
570573
theorem nhds_eq : 𝓝 x = (⨅ε>0, principal (ball x ε)) :=
571574
nhds_basis_eball.eq_binfi

0 commit comments

Comments
 (0)