11/-
22Copyright (c) 2026 Ziyan Wei. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
4- Authors: Ziyan Wei
4+ Authors: Ziyan Wei, Anatole Dedecker
55-/
66module
77
88public import Mathlib.Topology.Maps.Basic
9- public import Mathlib.Topology.Homeomorph.Lemmas
9+ public import Mathlib.Topology.Homeomorph.Quotient
1010public import Mathlib.Topology.Constructions
1111public import Mathlib.Data.Setoid.Basic
1212/-!
1313# Bourbaki Strict Maps
1414
1515This file defines Bourbaki strict maps (`Topology.IsStrictMap`) and proves some of their
16- basic properties. ?
16+ basic properties.
1717
1818A map `f : X → Y` between topological spaces is called *strict* in the sense of Bourbaki
1919if the natural corestriction to its image (i.e., `Set.rangeFactorization f`) is a quotient map.
@@ -37,11 +37,12 @@ We provide several equivalent ways to characterize a strict map `f`:
3737
3838@[expose] public section
3939
40- open Function Set Topology
40+ open Function Set Topology Setoid
4141
4242namespace Topology
4343
44- variable {X Y : Type *} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y)
44+ variable {X Y Z : Type *} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
45+ (f : X → Y) {g : Y → Z}
4546
4647/-- A map is a strict map in the sense of Bourbaki if the natural map to its image
4748is a quotient map. -/
@@ -96,5 +97,60 @@ lemma IsClosedMap.isStrictMap (hc : IsClosedMap f) (h_cont : Continuous f) :
9697 exact (hc.subtype_mk fun x => ⟨x, rfl⟩).isQuotientMap
9798 h_cont.rangeFactorization Set.rangeFactorization_surjective
9899
100+ /-- A homeomorphism is a strict map. -/
101+ lemma IsHomeomorph.isStrictMap (f_homeo : IsHomeomorph f) :
102+ IsStrictMap f :=
103+ f_homeo.isOpenMap.isStrictMap f_homeo.continuous
104+
105+ /-- The identity is a strict map. -/
106+ lemma IsStrictMap.id : IsStrictMap (id : X → X) := IsHomeomorph.id.isStrictMap
107+
108+ /-- Assume that `f : X → Y` is a quotient map. Then `g : Y → Z` is strict
109+ if and only if `g ∘ f` is strict. -/
110+ lemma IsQuotientMap.isStrictMap_iff (f_quot : IsQuotientMap f) :
111+ IsStrictMap g ↔ IsStrictMap (g ∘ f) := by
112+ set Φ : range (g ∘ f) ≃ₜ range g := .setCongr <| f_quot.surjective.range_comp g
113+ have key : rangeFactorization g ∘ f = Φ ∘ rangeFactorization (g ∘ f) := rfl
114+ simp_rw [isStrictMap_iff_isQuotientMap_rangeFactorization, ← f_quot.of_comp_iff, key]
115+ exact ⟨fun H ↦ by simpa using Φ.symm.isQuotientMap.comp H, fun H ↦ Φ.isQuotientMap.comp H⟩
116+
117+ /-- A quotient map is strict. See also `isQuotientMap_iff_isStrictMap_surjective`. -/
118+ lemma IsQuotientMap.isStrictMap (f_quot : IsQuotientMap f) :
119+ IsStrictMap f :=
120+ f_quot.isStrictMap_iff.mp .id
121+
122+ /-- Assume that `g : Y → Z` is an embedding. Then `f : X → Y` is strict
123+ if and only if `g ∘ f` is strict. -/
124+ lemma IsEmbedding.isStrictMap_iff (g_emb : IsEmbedding g) :
125+ IsStrictMap f ↔ IsStrictMap (g ∘ f) := by
126+ set Φ : Quotient (Setoid.ker (g ∘ f)) ≃ₜ Quotient (Setoid.ker (f)) :=
127+ Homeomorph.Quotient.congrRight (fun _ _ ↦ by simp [g_emb.injective.eq_iff])
128+ have key : g ∘ kerLift f ∘ Φ = kerLift (g ∘ f) :=
129+ funext <| Quotient.ind fun _ ↦ rfl
130+ simp_rw [isStrictMap_iff_isEmbedding_kerLift, ← g_emb.of_comp_iff, ← key]
131+ exact ⟨fun H ↦ H.comp Φ.isEmbedding,
132+ fun H ↦ by simpa [comp_assoc] using H.comp Φ.symm.isEmbedding⟩
133+
134+ /-- An embedding is strict. See also `isEmbedding_iff_isStrictMap_injective`. -/
135+ lemma IsEmbedding.isStrictMap (f_emb : IsEmbedding f) :
136+ IsStrictMap f :=
137+ f_emb.isStrictMap_iff.mp .id
138+
139+ /-- Quotient maps are precisely surjective strict maps. -/
140+ lemma isQuotientMap_iff_isStrictMap_surjective :
141+ IsQuotientMap f ↔ IsStrictMap f ∧ Surjective f := by
142+ refine ⟨fun H ↦ ⟨H.isStrictMap, H.surjective⟩, fun ⟨f_strict, f_surj⟩ ↦ ?_⟩
143+ rw [isStrictMap_iff_isQuotientMap_rangeFactorization] at f_strict
144+ set Φ : range f ≃ₜ Y := .trans (.setCongr f_surj.range_eq) (Homeomorph.Set.univ Y)
145+ exact Φ.isQuotientMap.comp f_strict
146+
147+ /-- Embeddings are precisely injective strict maps. -/
148+ lemma isEmbedding_iff_isStrictMap_injective :
149+ IsEmbedding f ↔ IsStrictMap f ∧ Injective f := by
150+ refine ⟨fun H ↦ ⟨H.isStrictMap, H.injective⟩, fun ⟨f_strict, f_inj⟩ ↦ ?_⟩
151+ rw [isStrictMap_iff_isEmbedding_kerLift] at f_strict
152+ set Φ : Quotient (ker f) ≃ₜ X :=
153+ (Homeomorph.Quotient.congrRight <| by simp [f_inj.eq_iff]).trans Homeomorph.quotientBot
154+ exact f_strict.comp Φ.symm.isEmbedding
99155
100156end Topology
0 commit comments