Skip to content

Commit 50ab296

Browse files
committed
chore(AlexandrovDiscrete): move exterior to new files (#16957)
I'm going to use `exterior` in files that don't need to know about `AlexandrovDiscrete`.
1 parent 643916d commit 50ab296

File tree

5 files changed

+145
-100
lines changed

5 files changed

+145
-100
lines changed

Mathlib.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4542,6 +4542,7 @@ import Mathlib.Topology.CompactOpen
45424542
import Mathlib.Topology.Compactification.OnePoint
45434543
import Mathlib.Topology.Compactness.Compact
45444544
import Mathlib.Topology.Compactness.CompactlyGeneratedSpace
4545+
import Mathlib.Topology.Compactness.Exterior
45454546
import Mathlib.Topology.Compactness.Lindelof
45464547
import Mathlib.Topology.Compactness.LocallyCompact
45474548
import Mathlib.Topology.Compactness.Paracompact
@@ -4592,6 +4593,7 @@ import Mathlib.Topology.EMetricSpace.Lipschitz
45924593
import Mathlib.Topology.EMetricSpace.Paracompact
45934594
import Mathlib.Topology.EMetricSpace.Pi
45944595
import Mathlib.Topology.ExtendFrom
4596+
import Mathlib.Topology.Exterior
45954597
import Mathlib.Topology.ExtremallyDisconnected
45964598
import Mathlib.Topology.FiberBundle.Basic
45974599
import Mathlib.Topology.FiberBundle.Constructions

Mathlib/Topology/AlexandrovDiscrete.lean

Lines changed: 2 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ Authors: Yaël Dillies
55
-/
66
import Mathlib.Data.Set.Image
77
import Mathlib.Topology.Bases
8-
import Mathlib.Tactic.Peel
98
import Mathlib.Topology.Inseparable
10-
import Mathlib.Topology.Compactness.Compact
9+
import Mathlib.Topology.Compactness.Exterior
1110

1211
/-!
1312
# Alexandrov-discrete topological spaces
@@ -21,8 +20,6 @@ minimal neighborhood, which we call the *exterior* of the set.
2120
## Main declarations
2221
2322
* `AlexandrovDiscrete`: Prop-valued typeclass for a topological space to be Alexandrov-discrete
24-
* `exterior`: Intersection of all neighborhoods of a set. When the space is Alexandrov-discrete,
25-
this is the minimal neighborhood of the set.
2623
2724
## Notes
2825
@@ -119,89 +116,6 @@ end AlexandrovDiscrete
119116

120117
variable {s t : Set α} {a x y : α}
121118

122-
/-- The *exterior* of a set is the intersection of all its neighborhoods. In an Alexandrov-discrete
123-
space, this is the smallest neighborhood of the set.
124-
125-
Note that this construction is unnamed in the literature. We choose the name in analogy to
126-
`interior`. -/
127-
def exterior (s : Set α) : Set α := (𝓝ˢ s).ker
128-
129-
lemma exterior_singleton_eq_ker_nhds (a : α) : exterior {a} = (𝓝 a).ker := by simp [exterior]
130-
131-
@[simp]
132-
theorem mem_exterior_singleton : x ∈ exterior {y} ↔ x ⤳ y := by
133-
rw [exterior_singleton_eq_ker_nhds, ker_nhds_eq_specializes, mem_setOf]
134-
135-
lemma exterior_def (s : Set α) : exterior s = ⋂₀ {t : Set α | IsOpen t ∧ s ⊆ t} :=
136-
(hasBasis_nhdsSet _).ker.trans sInter_eq_biInter.symm
137-
138-
lemma mem_exterior : a ∈ exterior s ↔ ∀ U, IsOpen U → s ⊆ U → a ∈ U := by simp [exterior_def]
139-
140-
lemma subset_exterior_iff : s ⊆ exterior t ↔ ∀ U, IsOpen U → t ⊆ U → s ⊆ U := by
141-
simp [exterior_def]
142-
143-
lemma subset_exterior : s ⊆ exterior s := subset_exterior_iff.2 fun _ _ ↦ id
144-
145-
lemma exterior_minimal (h₁ : s ⊆ t) (h₂ : IsOpen t) : exterior s ⊆ t := by
146-
rw [exterior_def]; exact sInter_subset_of_mem ⟨h₂, h₁⟩
147-
148-
lemma IsOpen.exterior_eq (h : IsOpen s) : exterior s = s :=
149-
(exterior_minimal Subset.rfl h).antisymm subset_exterior
150-
151-
lemma IsOpen.exterior_subset (ht : IsOpen t) : exterior s ⊆ t ↔ s ⊆ t :=
152-
⟨subset_exterior.trans, fun h ↦ exterior_minimal h ht⟩
153-
154-
@[deprecated (since := "2024-09-18")] alias IsOpen.exterior_subset_iff := IsOpen.exterior_subset
155-
156-
@[simp]
157-
theorem exterior_iUnion {ι : Sort*} (s : ι → Set α) :
158-
exterior (⋃ i, s i) = ⋃ i, exterior (s i) := by
159-
simp only [exterior, nhdsSet_iUnion, ker_iSup]
160-
161-
@[simp]
162-
theorem exterior_union (s t : Set α) : exterior (s ∪ t) = exterior s ∪ exterior t := by
163-
simp only [exterior, nhdsSet_union, ker_sup]
164-
165-
@[simp]
166-
theorem exterior_sUnion (S : Set (Set α)) : exterior (⋃₀ S) = ⋃ s ∈ S, exterior s := by
167-
simp only [sUnion_eq_biUnion, exterior_iUnion]
168-
169-
theorem mem_exterior_iff_specializes : a ∈ exterior s ↔ ∃ b ∈ s, a ⤳ b := calc
170-
a ∈ exterior s ↔ a ∈ exterior (⋃ x ∈ s, {x}) := by simp
171-
_ ↔ ∃ b ∈ s, a ⤳ b := by
172-
simp only [exterior_iUnion, mem_exterior_singleton, mem_iUnion₂, exists_prop]
173-
174-
@[mono] lemma exterior_mono : Monotone (exterior : Set α → Set α) :=
175-
fun _s _t h ↦ ker_mono <| nhdsSet_mono h
176-
177-
/-- This name was used to be used for the `Iff` version,
178-
see `exterior_subset_exterior_iff_nhdsSet`.
179-
-/
180-
@[gcongr] lemma exterior_subset_exterior (h : s ⊆ t) : exterior s ⊆ exterior t := exterior_mono h
181-
182-
@[simp] lemma exterior_subset_exterior_iff_nhdsSet : exterior s ⊆ exterior t ↔ 𝓝ˢ s ≤ 𝓝ˢ t := by
183-
simp (config := {contextual := true}) only [subset_exterior_iff, (hasBasis_nhdsSet _).ge_iff,
184-
and_imp, IsOpen.mem_nhdsSet, IsOpen.exterior_subset]
185-
186-
theorem exterior_eq_exterior_iff_nhdsSet : exterior s = exterior t ↔ 𝓝ˢ s = 𝓝ˢ t := by
187-
simp [le_antisymm_iff]
188-
189-
lemma specializes_iff_exterior_subset : x ⤳ y ↔ exterior {x} ⊆ exterior {y} := by
190-
simp [Specializes]
191-
192-
@[simp] lemma exterior_empty : exterior (∅ : Set α) = ∅ := isOpen_empty.exterior_eq
193-
@[simp] lemma exterior_univ : exterior (univ : Set α) = univ := isOpen_univ.exterior_eq
194-
195-
@[simp] lemma exterior_eq_empty : exterior s = ∅ ↔ s = ∅ :=
196-
⟨eq_bot_mono subset_exterior, by rintro rfl; exact exterior_empty⟩
197-
198-
@[simp] lemma nhdsSet_exterior (s : Set α) : 𝓝ˢ (exterior s) = 𝓝ˢ s := by
199-
refine le_antisymm ((hasBasis_nhdsSet _).ge_iff.2 ?_) (nhdsSet_mono subset_exterior)
200-
exact fun U ⟨hUo, hsU⟩ ↦ hUo.mem_nhdsSet.2 <| hUo.exterior_subset.2 hsU
201-
202-
@[simp] lemma exterior_exterior (s : Set α) : exterior (exterior s) = exterior s := by
203-
simp only [exterior_eq_exterior_iff_nhdsSet, nhdsSet_exterior]
204-
205119
lemma Inducing.alexandrovDiscrete [AlexandrovDiscrete α] {f : β → α} (h : Inducing f) :
206120
AlexandrovDiscrete β where
207121
isOpen_sInter S hS := by
@@ -210,18 +124,6 @@ lemma Inducing.alexandrovDiscrete [AlexandrovDiscrete α] {f : β → α} (h : I
210124
refine ⟨_, isOpen_iInter₂ hU, ?_⟩
211125
simp_rw [preimage_iInter, htU, sInter_eq_biInter]
212126

213-
theorem IsCompact.exterior_iff : IsCompact (exterior s) ↔ IsCompact s := by
214-
simp only [isCompact_iff_finite_subcover]
215-
peel with ι U hUo
216-
simp only [(isOpen_iUnion hUo).exterior_subset,
217-
(isOpen_iUnion fun i ↦ isOpen_iUnion fun _ ↦ hUo i).exterior_subset]
218-
219-
protected alias ⟨IsCompact.of_exterior, IsCompact.exterior⟩ := IsCompact.exterior_iff
220-
221-
@[deprecated IsCompact.exterior (since := "2024-09-18")]
222-
lemma Set.Finite.isCompact_exterior (hs : s.Finite) : IsCompact (exterior s) :=
223-
hs.isCompact.exterior
224-
225127
end
226128

227129
lemma AlexandrovDiscrete.sup {t₁ t₂ : TopologicalSpace α} (_ : @AlexandrovDiscrete α t₁)
@@ -283,7 +185,7 @@ instance AlexandrovDiscrete.toFirstCountable : FirstCountableTopology α where
283185
instance AlexandrovDiscrete.toLocallyCompactSpace : LocallyCompactSpace α where
284186
local_compact_nhds a _U hU := ⟨exterior {a},
285187
isOpen_exterior.mem_nhds <| subset_exterior <| mem_singleton _,
286-
exterior_singleton_subset_iff_mem_nhds.2 hU, (finite_singleton _).isCompact.exterior⟩
188+
exterior_singleton_subset_iff_mem_nhds.2 hU, isCompact_singleton.exterior⟩
287189

288190
instance Subtype.instAlexandrovDiscrete {p : α → Prop} : AlexandrovDiscrete {a // p a} :=
289191
inducing_subtype_val.alexandrovDiscrete
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/-
2+
Copyright (c) 2024 Yury Kudryashov. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yury Kudryashov
5+
-/
6+
import Mathlib.Tactic.Peel
7+
import Mathlib.Topology.Compactness.Compact
8+
import Mathlib.Topology.Exterior
9+
10+
/-!
11+
# Compactness of the exterior of a set
12+
13+
In this file we prove that the exterior of a set
14+
(defined as the intersection of all of its neighborhoods)
15+
is a compact set if and only if the original set is a compact set.
16+
-/
17+
18+
variable {X : Type*} [TopologicalSpace X] {s : Set X}
19+
20+
theorem IsCompact.exterior_iff : IsCompact (exterior s) ↔ IsCompact s := by
21+
simp only [isCompact_iff_finite_subcover]
22+
peel with ι U hUo
23+
simp only [(isOpen_iUnion hUo).exterior_subset,
24+
(isOpen_iUnion fun i ↦ isOpen_iUnion fun _ ↦ hUo i).exterior_subset]
25+
26+
protected alias ⟨IsCompact.of_exterior, IsCompact.exterior⟩ := IsCompact.exterior_iff
27+
28+
@[deprecated IsCompact.exterior (since := "2024-09-18")]
29+
lemma Set.Finite.isCompact_exterior (hs : s.Finite) : IsCompact (exterior s) :=
30+
hs.isCompact.exterior

Mathlib/Topology/Defs/Filter.lean

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ as well as other definitions that rely on `Filter`s.
2929
denoted by `𝓝ˢ s` in the `Topology` scope.
3030
A set `t` is called a neighborhood of `s`, if it includes an open set that includes `s`.
3131
32+
* `exterior s`: The *exterior* of a set is the intersection of all its neighborhoods.
33+
In an Alexandrov-discrete space, this is the smallest neighborhood of the set.
34+
35+
Note that this construction is unnamed in the literature.
36+
We choose the name in analogy to `interior`.
37+
3238
### Continuity at a point
3339
3440
* `ContinuousAt f x`: a function `f` is continuous at a point `x`,
@@ -146,6 +152,13 @@ def nhdsSet (s : Set X) : Filter X :=
146152

147153
@[inherit_doc] scoped[Topology] notation "𝓝ˢ" => nhdsSet
148154

155+
/-- The *exterior* of a set is the intersection of all its neighborhoods. In an Alexandrov-discrete
156+
space, this is the smallest neighborhood of the set.
157+
158+
Note that this construction is unnamed in the literature. We choose the name in analogy to
159+
`interior`. -/
160+
def exterior (s : Set X) : Set X := (𝓝ˢ s).ker
161+
149162
/-- A function between topological spaces is continuous at a point `x₀`
150163
if `f x` tends to `f x₀` when `x` tends to `x₀`. -/
151164
@[fun_prop]

Mathlib/Topology/Exterior.lean

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/-
2+
Copyright (c) 2023 Yaël Dillies. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yaël Dillies, Yury Kudryashov
5+
-/
6+
import Mathlib.Topology.NhdsSet
7+
import Mathlib.Topology.Inseparable
8+
9+
/-!
10+
# Exterior of a set
11+
12+
We define `exterior s` to be the intersection of all neighborhoods of `s`,
13+
see `Topology/Defs/Filter`.
14+
Note that this construction has no standard name in the literature.
15+
16+
In this file we prove basic properties of this operation.
17+
-/
18+
19+
open Set Filter
20+
open scoped Topology
21+
22+
variable {X : Type*} [TopologicalSpace X] {s t : Set X} {x y : X}
23+
24+
lemma exterior_singleton_eq_ker_nhds (x : X) : exterior {x} = (𝓝 x).ker := by simp [exterior]
25+
26+
@[simp]
27+
theorem mem_exterior_singleton : x ∈ exterior {y} ↔ x ⤳ y := by
28+
rw [exterior_singleton_eq_ker_nhds, ker_nhds_eq_specializes, mem_setOf]
29+
30+
lemma exterior_def (s : Set X) : exterior s = ⋂₀ {t : Set X | IsOpen t ∧ s ⊆ t} :=
31+
(hasBasis_nhdsSet _).ker.trans sInter_eq_biInter.symm
32+
33+
lemma mem_exterior : x ∈ exterior s ↔ ∀ U, IsOpen U → s ⊆ U → x ∈ U := by simp [exterior_def]
34+
35+
lemma subset_exterior_iff : s ⊆ exterior t ↔ ∀ U, IsOpen U → t ⊆ U → s ⊆ U := by
36+
simp [exterior_def]
37+
38+
lemma subset_exterior : s ⊆ exterior s := subset_exterior_iff.2 fun _ _ ↦ id
39+
40+
lemma exterior_minimal (h₁ : s ⊆ t) (h₂ : IsOpen t) : exterior s ⊆ t := by
41+
rw [exterior_def]; exact sInter_subset_of_mem ⟨h₂, h₁⟩
42+
43+
lemma IsOpen.exterior_eq (h : IsOpen s) : exterior s = s :=
44+
(exterior_minimal Subset.rfl h).antisymm subset_exterior
45+
46+
lemma IsOpen.exterior_subset (ht : IsOpen t) : exterior s ⊆ t ↔ s ⊆ t :=
47+
⟨subset_exterior.trans, fun h ↦ exterior_minimal h ht⟩
48+
49+
@[deprecated (since := "2024-09-18")] alias IsOpen.exterior_subset_iff := IsOpen.exterior_subset
50+
51+
@[simp]
52+
theorem exterior_iUnion {ι : Sort*} (s : ι → Set X) :
53+
exterior (⋃ i, s i) = ⋃ i, exterior (s i) := by
54+
simp only [exterior, nhdsSet_iUnion, ker_iSup]
55+
56+
@[simp]
57+
theorem exterior_union (s t : Set X) : exterior (s ∪ t) = exterior s ∪ exterior t := by
58+
simp only [exterior, nhdsSet_union, ker_sup]
59+
60+
@[simp]
61+
theorem exterior_sUnion (S : Set (Set X)) : exterior (⋃₀ S) = ⋃ s ∈ S, exterior s := by
62+
simp only [sUnion_eq_biUnion, exterior_iUnion]
63+
64+
theorem mem_exterior_iff_specializes : x ∈ exterior s ↔ ∃ y ∈ s, x ⤳ y := calc
65+
x ∈ exterior s ↔ x ∈ exterior (⋃ y ∈ s, {y}) := by simp
66+
_ ↔ ∃ y ∈ s, x ⤳ y := by
67+
simp only [exterior_iUnion, mem_exterior_singleton, mem_iUnion₂, exists_prop]
68+
69+
@[mono] lemma exterior_mono : Monotone (exterior : Set X → Set X) :=
70+
fun _s _t h ↦ ker_mono <| nhdsSet_mono h
71+
72+
/-- This name was used to be used for the `Iff` version,
73+
see `exterior_subset_exterior_iff_nhdsSet`.
74+
-/
75+
@[gcongr] lemma exterior_subset_exterior (h : s ⊆ t) : exterior s ⊆ exterior t := exterior_mono h
76+
77+
@[simp] lemma exterior_subset_exterior_iff_nhdsSet : exterior s ⊆ exterior t ↔ 𝓝ˢ s ≤ 𝓝ˢ t := by
78+
simp (config := {contextual := true}) only [subset_exterior_iff, (hasBasis_nhdsSet _).ge_iff,
79+
and_imp, IsOpen.mem_nhdsSet, IsOpen.exterior_subset]
80+
81+
theorem exterior_eq_exterior_iff_nhdsSet : exterior s = exterior t ↔ 𝓝ˢ s = 𝓝ˢ t := by
82+
simp [le_antisymm_iff]
83+
84+
lemma specializes_iff_exterior_subset : x ⤳ y ↔ exterior {x} ⊆ exterior {y} := by
85+
simp [Specializes]
86+
87+
@[simp] lemma exterior_empty : exterior (∅ : Set X) = ∅ := isOpen_empty.exterior_eq
88+
@[simp] lemma exterior_univ : exterior (univ : Set X) = univ := isOpen_univ.exterior_eq
89+
90+
@[simp] lemma exterior_eq_empty : exterior s = ∅ ↔ s = ∅ :=
91+
⟨eq_bot_mono subset_exterior, by rintro rfl; exact exterior_empty⟩
92+
93+
@[simp] lemma nhdsSet_exterior (s : Set X) : 𝓝ˢ (exterior s) = 𝓝ˢ s := by
94+
refine le_antisymm ((hasBasis_nhdsSet _).ge_iff.2 ?_) (nhdsSet_mono subset_exterior)
95+
exact fun U ⟨hUo, hsU⟩ ↦ hUo.mem_nhdsSet.2 <| hUo.exterior_subset.2 hsU
96+
97+
@[simp] lemma exterior_exterior (s : Set X) : exterior (exterior s) = exterior s := by
98+
simp only [exterior_eq_exterior_iff_nhdsSet, nhdsSet_exterior]

0 commit comments

Comments
 (0)