feat: add ChartedSpace structure on orbit space#35653
feat: add ChartedSpace structure on orbit space#35653pepamontero wants to merge 19 commits intoleanprover-community:masterfrom
Conversation
Welcome new contributor!Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR. Thank you again for joining our community. |
PR summary 7f14c97098Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
Rida-Hamadani
left a comment
There was a problem hiding this comment.
Thank you! Some comments:
|
|
||
| /-- A chosen local homeomorphism for the quotient map | ||
| `Quotient.mk : M → M⧸G` at a point `p : M`. -/ | ||
| noncomputable def localHomeomorphAt (p : M) : |
There was a problem hiding this comment.
Since this is being called every time with (G := G), perhaps it is better to have G as an explicit variable here.
| · simp only [localInverseAt, | ||
| OpenPartialHomeomorph.map_target (localHomeomorphAt p) h'] |
There was a problem hiding this comment.
| · simp only [localInverseAt, | |
| OpenPartialHomeomorph.map_target (localHomeomorphAt p) h'] | |
| · simp [localInverseAt, (localHomeomorphAt p).map_target h'] |
A few points here:
- the style guide recommends against terminal
simp only, usesimpinstead. - replace
OpenPartialHomeomorphwithlocalHomeomorphAt pdirectly. - this can fit on one line instead of two.
These points apply to other places in this PR too, please apply them everywhere.
| (mem_localHomeomorphAt_source) | ||
| (mem_localInverseAt_source) |
There was a problem hiding this comment.
These don't need parenthesis.
| variable {M : Type*} [TopologicalSpace M] | ||
| variable {G : Type*} [Group G] [MulAction G M] | ||
| [ProperlyDiscontinuousSMul G M] [ContinuousConstSMul G M] [IsCancelSMul G M] | ||
| [T2Space M] [LocallyCompactSpace M] | ||
| variable {H : Type*} [TopologicalSpace H] | ||
| variable [ChartedSpace H M] |
There was a problem hiding this comment.
Make this a single variable block.
| is a covering map. -/ | ||
| lemma isCoveringMap_quotientMk_of_properlyDiscontinuousSMul : | ||
| IsCoveringMap (Quotient.mk _ : M → orbitRel.Quotient G M) := | ||
| IsQuotientCoveringMap.isCoveringMap (G:=_) (f:=_) |
There was a problem hiding this comment.
| IsQuotientCoveringMap.isCoveringMap (G:=_) (f:=_) | |
| IsQuotientCoveringMap.isCoveringMap (G := _) (f := _) |
|
|
||
| end MulAction | ||
|
|
||
| noncomputable section |
There was a problem hiding this comment.
| noncomputable section | |
| section |
since only one def needs noncomputable.
| manifold inherits a `ChartedSpace` structure modeled on the same space. -/ | ||
| instance instChartedSpaceQuotient : ChartedSpace H (orbitRel.Quotient G M) where | ||
| atlas := {(localInverseAt q.out).trans (chartAt H q.out) | q : orbitRel.Quotient G M} | ||
| chartAt := fun q => (localInverseAt q.out).trans (chartAt H q.out) |
There was a problem hiding this comment.
| chartAt := fun q => (localInverseAt q.out).trans (chartAt H q.out) | |
| chartAt q := (localInverseAt q.out).trans (chartAt H q.out) |
Also please use ↦ instead of =>.
| simp only [OpenPartialHomeomorph.trans_toPartialEquiv, | ||
| PartialEquiv.trans_source, OpenPartialHomeomorph.toFun_eq_coe, | ||
| Set.mem_inter_iff, Set.mem_preimage] | ||
| set p := q.out |
There was a problem hiding this comment.
This is only used once and I think it is okay to just use q.out instead of introducing a new variable, since q.out is already used in the instance before.
|
|
||
| noncomputable section | ||
|
|
||
| open scoped Manifold |
There was a problem hiding this comment.
| open scoped Manifold |
This is never used.
| variable {M : Type*} [TopologicalSpace M] | ||
| variable {G : Type*} [Group G] [MulAction G M] |
There was a problem hiding this comment.
These also could be merged.
Add topological preliminaries for properly discontinuous group actions, and use them to equip the orbit space
orbitRel.Quotient G Mwith aChartedSpacestructure.In particular:
Quotient.mk _ : M → orbitRel.Quotient G Mis a covering map and hence a local homeomorphism.ChartedSpaceinstance on the quotient by composing these local inverses with charts of M.This started as an ItaLean2025 project; here is the Zulip thread dedicated to it.