Skip to content

Commit 12b4bd7

Browse files
committed
feat(Topology): restriction of a QuotientMap (#13228)
... to the preimage of an open set is a quotient map.
1 parent 2b726f5 commit 12b4bd7

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

Mathlib/Data/Set/Function.lean

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,19 @@ theorem range_restrictPreimage : range (t.restrictPreimage f) = Subtype.val ⁻
583583
simp only [← image_univ, ← image_restrictPreimage, preimage_univ]
584584
#align set.range_restrict_preimage Set.range_restrictPreimage
585585

586+
@[simp]
587+
theorem restrictPreimage_mk (h : a ∈ f ⁻¹' t) : t.restrictPreimage f ⟨a, h⟩ = ⟨f a, h⟩ := rfl
588+
589+
theorem image_val_preimage_restrictPreimage {u : Set t} :
590+
Subtype.val '' (t.restrictPreimage f ⁻¹' u) = f ⁻¹' (Subtype.val '' u) := by
591+
ext
592+
simp
593+
594+
theorem preimage_restrictPreimage {u : Set t} :
595+
t.restrictPreimage f ⁻¹' u = (fun a : f ⁻¹' t ↦ f a) ⁻¹' (Subtype.val '' u) := by
596+
rw [← preimage_preimage (g := f) (f := Subtype.val), ← image_val_preimage_restrictPreimage,
597+
preimage_image_eq _ Subtype.val_injective]
598+
586599
variable {U : ι → Set β}
587600

588601
lemma restrictPreimage_injective (hf : Injective f) : Injective (t.restrictPreimage f) :=

Mathlib/Topology/Constructions.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,6 +1229,15 @@ theorem DiscreteTopology.preimage_of_continuous_injective {X Y : Type*} [Topolog
12291229
DiscreteTopology.of_continuous_injective (β := s) (Continuous.restrict
12301230
(by exact fun _ x ↦ x) hc) ((MapsTo.restrict_inj _).mpr hinj.injOn)
12311231

1232+
/-- If `f : X → Y` is a quotient map,
1233+
then its restriction to the preimage of an open set is a quotient map too. -/
1234+
theorem QuotientMap.restrictPreimage_isOpen {f : X → Y} (hf : QuotientMap f)
1235+
{s : Set Y} (hs : IsOpen s) : QuotientMap (s.restrictPreimage f) := by
1236+
refine quotientMap_iff.2 ⟨hf.surjective.restrictPreimage _, fun U ↦ ?_⟩
1237+
rw [hs.openEmbedding_subtype_val.open_iff_image_open, ← hf.isOpen_preimage,
1238+
(hs.preimage hf.continuous).openEmbedding_subtype_val.open_iff_image_open,
1239+
image_val_preimage_restrictPreimage]
1240+
12321241
end Subtype
12331242

12341243
section Quotient

Mathlib/Topology/ContinuousOn.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,6 +1194,11 @@ theorem OpenEmbedding.map_nhdsWithin_preimage_eq {f : α → β} (hf : OpenEmbed
11941194
rw [inter_assoc, inter_self]
11951195
#align open_embedding.map_nhds_within_preimage_eq OpenEmbedding.map_nhdsWithin_preimage_eq
11961196

1197+
theorem QuotientMap.continuousOn_isOpen_iff {f : α → β} {g : β → γ} (h : QuotientMap f) {s : Set β}
1198+
(hs : IsOpen s) : ContinuousOn g s ↔ ContinuousOn (g ∘ f) (f ⁻¹' s) := by
1199+
simp only [continuousOn_iff_continuous_restrict, (h.restrictPreimage_isOpen hs).continuous_iff]
1200+
rfl
1201+
11971202
theorem continuousWithinAt_of_not_mem_closure {f : α → β} {s : Set α} {x : α} (hx : x ∉ closure s) :
11981203
ContinuousWithinAt f s x := by
11991204
rw [mem_closure_iff_nhdsWithin_neBot, not_neBot] at hx

0 commit comments

Comments
 (0)