Skip to content

Commit cd4c002

Browse files
zw810-ctrlocfnashthemathqueenADedeckerpre-commit-ci-lite[bot]
committed
feat: API and proof of isStrictMap_prodMap (#38937)
Co-authored-by: Oliver Nash <github@olivernash.org> Co-authored-by: Monica Omar <23701951+themathqueen@users.noreply.github.com> Co-authored-by: ADedecker <anatolededecker@gmail.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Anatole Dedecker <anatolededecker@gmail.com>
1 parent a4bf45d commit cd4c002

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

Mathlib/Topology/Algebra/Group/Basic.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -914,6 +914,13 @@ lemma MonoidHom.isOpenQuotientMap_of_isQuotientMap {A : Type*} [Group A]
914914
use x * k, hx
915915
rw [map_mul, hk, mul_one]
916916

917+
@[to_additive]
918+
lemma MonoidHom.isOpenQuotientMap_iff_isQuotientMap {A : Type*} [Group A]
919+
[TopologicalSpace A] [ContinuousMul A] {B : Type*} [Group B] [TopologicalSpace B]
920+
{F : Type*} [FunLike F A B] [MonoidHomClass F A B] {φ : F} :
921+
IsOpenQuotientMap φ ↔ IsQuotientMap φ :=
922+
fun hf => hf.isQuotientMap, MonoidHom.isOpenQuotientMap_of_isQuotientMap⟩
923+
917924
@[to_additive]
918925
theorem IsTopologicalGroup.ext {G : Type*} [Group G] {t t' : TopologicalSpace G}
919926
(tg : @IsTopologicalGroup G t _) (tg' : @IsTopologicalGroup G t' _)

Mathlib/Topology/Maps/Strict/Basic.lean

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public import Mathlib.Topology.Maps.Basic
99
public import Mathlib.Topology.Homeomorph.Quotient
1010
public import Mathlib.Topology.Constructions
1111
public import Mathlib.Data.Setoid.Basic
12+
public import Mathlib.Topology.Algebra.Group.Quotient
13+
1214
/-!
1315
# Bourbaki Strict Maps
1416
@@ -33,6 +35,18 @@ We provide several equivalent ways to characterize a strict map `f`:
3335
the canonical bijection `Quotient (Setoid.ker f) ≃ Set.range f` is a homeomorphism.
3436
* `Topology.isStrictMap_iff_isEmbedding_kerLift`: `f` is strict if and only if
3537
the canonical injection `Quotient (Setoid.ker f) → Y` (`Setoid.kerLift f`) is an embedding.
38+
39+
### Group homomorphisms
40+
41+
In general, the product (in the sense of `Prod.map`) of two strict maps need not be strict.
42+
But thanks to `MonoidHom.isOpenQuotientMap_of_isQuotientMap`, we can replace `IsQuotientMap`
43+
by `IsOpenQuotientMap` in the setting of group homomorphisms. Therefore we provide several
44+
important properties of strict group homomorphisms :
45+
46+
* `isStrictMap_iff_isOpenQuotientMap_rangeRestrict`: `f` is a strict group homomorphism if
47+
and only if the `rangeRestrict` of `f` is an open quotient map.
48+
* `isStrictMap_prodMap`: The product (in the sense of Prod.map) of strict group homomorphisms
49+
is strict.
3650
-/
3751

3852
@[expose] public section
@@ -153,4 +167,39 @@ lemma isEmbedding_iff_isStrictMap_injective :
153167
(Homeomorph.Quotient.congrRight <| by simp [f_inj.eq_iff]).trans Homeomorph.quotientBot
154168
exact f_strict.comp Φ.symm.isEmbedding
155169

170+
/-- Strict maps are preserved when precomposing with a homeomorphism. -/
171+
lemma Homeomorph.isStrictMap_comp_iff (e : X ≃ₜ Y) {f : Y → Z} :
172+
IsStrictMap (f ∘ e) ↔ IsStrictMap f :=
173+
e.isQuotientMap.isStrictMap_iff.symm
174+
175+
/-- Strict maps are preserved when postcomposing with a homeomorphism. -/
176+
lemma Homeomorph.comp_isStrictMap_iff (e : Y ≃ₜ Z) {f : X → Y} :
177+
IsStrictMap (e ∘ f) ↔ IsStrictMap f :=
178+
e.isEmbedding.isStrictMap_iff.symm
179+
156180
end Topology
181+
182+
namespace MonoidHom
183+
184+
variable {G H G' H' : Type*} [Group G'] [Group H'] [Group G] [Group H] (f : G →* H) (g : G' →* H')
185+
[TopologicalSpace G] [IsTopologicalGroup G] [TopologicalSpace H]
186+
187+
/-- A group homomorphism is strict if and only if its `rangeRestrict` is an open quotient map. -/
188+
@[to_additive] lemma isStrictMap_iff_isOpenQuotientMap_rangeRestrict :
189+
IsStrictMap f ↔ IsOpenQuotientMap f.rangeRestrict := by
190+
rw [isOpenQuotientMap_iff_isQuotientMap]
191+
rfl
192+
193+
variable {f g} [TopologicalSpace G'] [IsTopologicalGroup G'] [TopologicalSpace H']
194+
195+
/-- The product (in the sense of `Prod.map`) of strict group homomorphisms is strict -/
196+
@[to_additive isStrictMap_prodMap] lemma isStrictMap_prodMap (hf : IsStrictMap f)
197+
(hg : IsStrictMap g) : IsStrictMap (f.prodMap g) := by
198+
rw [isStrictMap_iff_isOpenQuotientMap_rangeRestrict] at hf hg ⊢
199+
let aux : (f.prodMap g).range ≃ₜ f.range × g.range :=
200+
(Homeomorph.setCongr (by simp [Subgroup.coe_prod])).trans (Homeomorph.Set.prod _ _)
201+
exact aux.symm.isOpenQuotientMap.comp (hf.prodMap hg)
202+
203+
-- TODO Add the lemma `isStrictMap_piMap` once `MonoidHom.piMap` has been defined.
204+
205+
end MonoidHom

0 commit comments

Comments
 (0)