Skip to content

Commit 28c8a70

Browse files
feat: port Topology.LocalAtTarget (#2205)
Co-authored-by: Moritz Doll <moritz.doll@googlemail.com>
1 parent 05186d6 commit 28c8a70

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1725,6 +1725,7 @@ import Mathlib.Topology.Instances.Sign
17251725
import Mathlib.Topology.Instances.TrivSqZeroExt
17261726
import Mathlib.Topology.IsLocallyHomeomorph
17271727
import Mathlib.Topology.List
1728+
import Mathlib.Topology.LocalAtTarget
17281729
import Mathlib.Topology.LocalExtr
17291730
import Mathlib.Topology.LocalHomeomorph
17301731
import Mathlib.Topology.LocallyConstant.Algebra
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
/-
2+
Copyright (c) 2022 Andrew Yang. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Andrew Yang
5+
6+
! This file was ported from Lean 3 source module topology.local_at_target
7+
! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
8+
! Please do not edit these lines, except to modify the commit id
9+
! if you have ported upstream changes.
10+
-/
11+
import Mathlib.Topology.Sets.Opens
12+
13+
/-!
14+
# Properties of maps that are local at the target.
15+
16+
We show that the following properties of continuous maps are local at the target :
17+
- `inducing`
18+
- `embedding`
19+
- `open_embedding`
20+
- `closed_embedding`
21+
22+
-/
23+
24+
25+
open TopologicalSpace Set Filter
26+
27+
open Topology Filter
28+
29+
variable {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] {f : α → β}
30+
31+
variable {s : Set β} {ι : Type _} {U : ι → Opens β} (hU : supᵢ U = ⊤)
32+
33+
theorem Set.restrictPreimage_inducing (s : Set β) (h : Inducing f) :
34+
Inducing (s.restrictPreimage f) := by
35+
simp_rw [inducing_subtype_val.inducing_iff, inducing_iff_nhds, restrictPreimage,
36+
MapsTo.coe_restrict, restrict_eq, ← @Filter.comap_comap _ _ _ _ _ f, Function.comp_apply] at h⊢
37+
intro a
38+
rw [← h, ← inducing_subtype_val.nhds_eq_comap]
39+
#align set.restrict_preimage_inducing Set.restrictPreimage_inducing
40+
41+
alias Set.restrictPreimage_inducing ← Inducing.restrictPreimage
42+
#align inducing.restrict_preimage Inducing.restrictPreimage
43+
44+
theorem Set.restrictPreimage_embedding (s : Set β) (h : Embedding f) :
45+
Embedding (s.restrictPreimage f) :=
46+
⟨h.1.restrictPreimage s, h.2.restrictPreimage s⟩
47+
#align set.restrict_preimage_embedding Set.restrictPreimage_embedding
48+
49+
alias Set.restrictPreimage_embedding ← Embedding.restrictPreimage
50+
#align embedding.restrict_preimage Embedding.restrictPreimage
51+
52+
theorem Set.restrictPreimage_openEmbedding (s : Set β) (h : OpenEmbedding f) :
53+
OpenEmbedding (s.restrictPreimage f) :=
54+
⟨h.1.restrictPreimage s,
55+
(s.range_restrictPreimage f).symm ▸ continuous_subtype_val.isOpen_preimage _ h.2
56+
#align set.restrict_preimage_open_embedding Set.restrictPreimage_openEmbedding
57+
58+
alias Set.restrictPreimage_openEmbedding ← OpenEmbedding.restrictPreimage
59+
#align open_embedding.restrict_preimage OpenEmbedding.restrictPreimage
60+
61+
theorem Set.restrictPreimage_closedEmbedding (s : Set β) (h : ClosedEmbedding f) :
62+
ClosedEmbedding (s.restrictPreimage f) :=
63+
⟨h.1.restrictPreimage s,
64+
(s.range_restrictPreimage f).symm ▸ inducing_subtype_val.isClosed_preimage _ h.2
65+
#align set.restrict_preimage_closed_embedding Set.restrictPreimage_closedEmbedding
66+
67+
alias Set.restrictPreimage_closedEmbedding ← ClosedEmbedding.restrictPreimage
68+
#align closed_embedding.restrict_preimage ClosedEmbedding.restrictPreimage
69+
70+
theorem Set.restrictPreimage_isClosedMap (s : Set β) (H : IsClosedMap f) :
71+
IsClosedMap (s.restrictPreimage f) := by
72+
rintro t ⟨u, hu, e⟩
73+
refine' ⟨⟨_, (H _ (IsOpen.isClosed_compl hu)).1, _⟩⟩
74+
rw [← (congr_arg HasCompl.compl e).trans (compl_compl t)]
75+
simp only [Set.preimage_compl, compl_inj_iff]
76+
ext ⟨x, hx⟩
77+
suffices (∃ y, y ∉ u ∧ f y = x) ↔ ∃ y, y ∉ u ∧ f y ∈ s ∧ f y = x by
78+
simpa [Set.restrictPreimage, ← Subtype.coe_inj]
79+
exact ⟨fun ⟨a, b, c⟩ => ⟨a, b, c.symm ▸ hx, c⟩, fun ⟨a, b, _, c⟩ => ⟨a, b, c⟩⟩
80+
#align set.restrict_preimage_is_closed_map Set.restrictPreimage_isClosedMap
81+
82+
theorem isOpen_iff_inter_of_supᵢ_eq_top (s : Set β) : IsOpen s ↔ ∀ i, IsOpen (s ∩ U i) := by
83+
constructor
84+
· exact fun H i => H.inter (U i).2
85+
· intro H
86+
have : (⋃ i, (U i : Set β)) = Set.univ := by
87+
convert congr_arg (SetLike.coe) hU
88+
simp
89+
rw [← s.inter_univ, ← this, Set.inter_unionᵢ]
90+
exact isOpen_unionᵢ H
91+
#align is_open_iff_inter_of_supr_eq_top isOpen_iff_inter_of_supᵢ_eq_top
92+
93+
theorem isOpen_iff_coe_preimage_of_supᵢ_eq_top (s : Set β) :
94+
IsOpen s ↔ ∀ i, IsOpen ((↑) ⁻¹' s : Set (U i)) := by
95+
-- Porting note: rewrote to avoid ´simp´ issues
96+
rw [isOpen_iff_inter_of_supᵢ_eq_top hU s]
97+
refine forall_congr' fun i => ?_
98+
rw [(U _).2.openEmbedding_subtype_val.open_iff_image_open]
99+
erw [Set.image_preimage_eq_inter_range]
100+
rw [Subtype.range_coe, Opens.carrier_eq_coe]
101+
#align is_open_iff_coe_preimage_of_supr_eq_top isOpen_iff_coe_preimage_of_supᵢ_eq_top
102+
103+
theorem isClosed_iff_coe_preimage_of_supᵢ_eq_top (s : Set β) :
104+
IsClosed s ↔ ∀ i, IsClosed ((↑) ⁻¹' s : Set (U i)) := by
105+
simpa using isOpen_iff_coe_preimage_of_supᵢ_eq_top hU (sᶜ)
106+
#align is_closed_iff_coe_preimage_of_supr_eq_top isClosed_iff_coe_preimage_of_supᵢ_eq_top
107+
108+
theorem isClosedMap_iff_isClosedMap_of_supᵢ_eq_top :
109+
IsClosedMap f ↔ ∀ i, IsClosedMap ((U i).1.restrictPreimage f) := by
110+
refine' ⟨fun h i => Set.restrictPreimage_isClosedMap _ h, _⟩
111+
rintro H s hs
112+
rw [isClosed_iff_coe_preimage_of_supᵢ_eq_top hU]
113+
intro i
114+
convert H i _ ⟨⟨_, hs.1, eq_compl_comm.mpr rfl⟩⟩
115+
ext ⟨x, hx⟩
116+
suffices (∃ y, y ∈ s ∧ f y = x) ↔ ∃ y, y ∈ s ∧ f y ∈ U i ∧ f y = x by
117+
simpa [Set.restrictPreimage, ← Subtype.coe_inj]
118+
exact ⟨fun ⟨a, b, c⟩ => ⟨a, b, c.symm ▸ hx, c⟩, fun ⟨a, b, _, c⟩ => ⟨a, b, c⟩⟩
119+
#align is_closed_map_iff_is_closed_map_of_supr_eq_top isClosedMap_iff_isClosedMap_of_supᵢ_eq_top
120+
121+
theorem inducing_iff_inducing_of_supᵢ_eq_top (h : Continuous f) :
122+
Inducing f ↔ ∀ i, Inducing ((U i).1.restrictPreimage f) := by
123+
simp_rw [inducing_subtype_val.inducing_iff, inducing_iff_nhds, restrictPreimage,
124+
MapsTo.coe_restrict, restrict_eq, ← @Filter.comap_comap _ _ _ _ _ f]
125+
constructor
126+
· intro H i x
127+
rw [Function.comp_apply, ← H, ← inducing_subtype_val.nhds_eq_comap]
128+
· intro H x
129+
obtain ⟨i, hi⟩ :=
130+
Opens.mem_supᵢ.mp
131+
(show f x ∈ supᵢ U by
132+
rw [hU]
133+
triv)
134+
erw [← OpenEmbedding.map_nhds_eq (h.1 _ (U i).2).openEmbedding_subtype_val ⟨x, hi⟩]
135+
rw [(H i) ⟨x, hi⟩, Filter.subtype_coe_map_comap, Function.comp_apply, Subtype.coe_mk,
136+
inf_eq_left, Filter.le_principal_iff]
137+
exact Filter.preimage_mem_comap ((U i).2.mem_nhds hi)
138+
#align inducing_iff_inducing_of_supr_eq_top inducing_iff_inducing_of_supᵢ_eq_top
139+
140+
theorem embedding_iff_embedding_of_supᵢ_eq_top (h : Continuous f) :
141+
Embedding f ↔ ∀ i, Embedding ((U i).1.restrictPreimage f) := by
142+
simp_rw [embedding_iff]
143+
rw [forall_and]
144+
apply and_congr
145+
· apply inducing_iff_inducing_of_supᵢ_eq_top <;> assumption
146+
· apply Set.injective_iff_injective_of_unionᵢ_eq_univ
147+
convert congr_arg SetLike.coe hU
148+
simp
149+
#align embedding_iff_embedding_of_supr_eq_top embedding_iff_embedding_of_supᵢ_eq_top
150+
151+
theorem openEmbedding_iff_openEmbedding_of_supᵢ_eq_top (h : Continuous f) :
152+
OpenEmbedding f ↔ ∀ i, OpenEmbedding ((U i).1.restrictPreimage f) := by
153+
simp_rw [openEmbedding_iff]
154+
rw [forall_and]
155+
apply and_congr
156+
· apply embedding_iff_embedding_of_supᵢ_eq_top <;> assumption
157+
· simp_rw [Set.range_restrictPreimage]
158+
apply isOpen_iff_coe_preimage_of_supᵢ_eq_top hU
159+
#align open_embedding_iff_open_embedding_of_supr_eq_top openEmbedding_iff_openEmbedding_of_supᵢ_eq_top
160+
161+
theorem closedEmbedding_iff_closedEmbedding_of_supᵢ_eq_top (h : Continuous f) :
162+
ClosedEmbedding f ↔ ∀ i, ClosedEmbedding ((U i).1.restrictPreimage f) := by
163+
simp_rw [closedEmbedding_iff]
164+
rw [forall_and]
165+
apply and_congr
166+
· apply embedding_iff_embedding_of_supᵢ_eq_top <;> assumption
167+
· simp_rw [Set.range_restrictPreimage]
168+
apply isClosed_iff_coe_preimage_of_supᵢ_eq_top hU
169+
#align closed_embedding_iff_closed_embedding_of_supr_eq_top closedEmbedding_iff_closedEmbedding_of_supᵢ_eq_top

0 commit comments

Comments
 (0)