Skip to content

Commit a0185a6

Browse files
committed
feat: trivial homeomorphisms between quotient spaces (#39266)
1 parent d163059 commit a0185a6

4 files changed

Lines changed: 79 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7723,6 +7723,7 @@ public import Mathlib.Topology.Hom.ContinuousEvalConst
77237723
public import Mathlib.Topology.Hom.Open
77247724
public import Mathlib.Topology.Homeomorph.Defs
77257725
public import Mathlib.Topology.Homeomorph.Lemmas
7726+
public import Mathlib.Topology.Homeomorph.Quotient
77267727
public import Mathlib.Topology.Homeomorph.TransferInstance
77277728
public import Mathlib.Topology.Homotopy.Affine
77287729
public import Mathlib.Topology.Homotopy.Basic

Mathlib/Data/Setoid/Basic.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,14 @@ def map_sInf {S : Set (Setoid α)} {s : Setoid α} (h : s ∈ S) :
228228
Quotient (sInf S) → Quotient s :=
229229
Setoid.map_of_le fun _ _ a ↦ a s h
230230

231+
/-- The quotient by the trivial relation is equivalent to the original space. -/
232+
def quotientBotEquiv :
233+
Quotient (⊥ : Setoid α) ≃ α where
234+
toFun := Quotient.lift id (fun _ _ ↦ id)
235+
invFun := Quotient.mk''
236+
left_inv := Quotient.ind fun _ ↦ rfl
237+
right_inv := fun _ ↦ rfl
238+
231239
section EqvGen
232240

233241
open Relation

Mathlib/Topology/Constructions.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,12 @@ theorem continuous_quot_lift {f : X → Y} (hr : ∀ a b, r a b → f a = f b) (
702702
Continuous (Quot.lift f hr : Quot r → Y) :=
703703
continuous_coinduced_dom.2 h
704704

705+
@[continuity, fun_prop]
706+
theorem continuous_quot_map {r' : Y → Y → Prop} {f : X → Y} (hr : ∀ a b, r a b → r' (f a) (f b))
707+
(h : Continuous f) :
708+
Continuous (Quot.map f hr : Quot r → Quot r') :=
709+
continuous_quot_lift _ (continuous_quot_mk.comp h)
710+
705711
theorem isQuotientMap_quotient_mk' : IsQuotientMap (@Quotient.mk' X s) :=
706712
isQuotientMap_quot_mk
707713

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/-
2+
Copyright (c) 2026 Anatole Dedecker. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Anatole Dedecker
5+
-/
6+
module
7+
8+
public import Mathlib.Topology.Homeomorph.Lemmas
9+
10+
/-!
11+
# Homeomorphisms between quotient spaces
12+
-/
13+
14+
@[expose] public section
15+
16+
namespace Homeomorph
17+
18+
variable {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y]
19+
20+
namespace Quot
21+
22+
/-- An homeomorphism `e : X ≃ₜ Y` generXtes an homeomorphism between quotient spaces,
23+
if `rX x₁ x₂ ↔ rY (e x₁) (e x₂)`. -/
24+
protected def congr {rX : X → X → Prop} {rY : Y → Y → Prop} (e : X ≃ₜ Y)
25+
(eq : ∀ x₁ x₂, rX x₁ x₂ ↔ rY (e x₁) (e x₂)) : Quot rX ≃ₜ Quot rY where
26+
toEquiv := _root_.Quot.congr e eq
27+
continuous_toFun := continuous_quot_map (fun x y ↦ by simp [eq]) e.continuous
28+
continuous_invFun := continuous_quot_map (fun x y ↦ by simp [eq]) e.symm.continuous
29+
30+
/-- Quotient spaces for equal relations are homeomorphic. -/
31+
protected def congrRight {r r' : X → X → Prop} (eq : ∀ x₁ x₂, r x₁ x₂ ↔ r' x₁ x₂) :
32+
Quot r ≃ₜ Quot r' := Quot.congr (Homeomorph.refl X) eq
33+
34+
/-- An homeomorphism `e : X ≃ₜ Y` generXtes an equivalence between the quotient space of `X`
35+
by a relation `rX` and the quotient space of `Y` by the image of this relation under `e`. -/
36+
protected def congrLeft {r : X → X → Prop} (e : X ≃ₜ Y) :
37+
Quot r ≃ₜ Quot fun y₁ y₂ ↦ r (e.symm y₁) (e.symm y₂) :=
38+
Quot.congr e fun _ _ ↦ by simp only [e.symm_apply_apply]
39+
40+
end Quot
41+
42+
namespace Quotient
43+
44+
/-- An homeomorphism `e : X ≃ₜ Y` generXtes an homeomorphism between quotient spaces,
45+
if `rX x₁ x₂ ↔ rY (e x₁) (e x₂)`. -/
46+
protected def congr {rX : Setoid X} {rY : Setoid Y} (e : X ≃ₜ Y)
47+
(eq : ∀ x₁ x₂, rX x₁ x₂ ↔ rY (e x₁) (e x₂)) :
48+
Quotient rX ≃ₜ Quotient rY := Quot.congr e eq
49+
50+
/-- Quotient spaces for equal relations are homeomorphic. -/
51+
protected def congrRight {r r' : Setoid X}
52+
(eq : ∀ x₁ x₂, r x₁ x₂ ↔ r' x₁ x₂) : Quotient r ≃ₜ Quotient r' :=
53+
Quot.congrRight eq
54+
55+
end Quotient
56+
57+
/-- The quotient by the trivial relation is homeomorphic to the original space. -/
58+
def quotientBot :
59+
Quotient (⊥ : Setoid X) ≃ₜ X where
60+
toEquiv := Setoid.quotientBotEquiv
61+
continuous_toFun := continuous_quot_lift _ continuous_id
62+
continuous_invFun := continuous_quot_mk
63+
64+
end Homeomorph

0 commit comments

Comments
 (0)