Skip to content

feat: add ChartedSpace structure on orbit space#35653

Open
pepamontero wants to merge 19 commits intoleanprover-community:masterfrom
pepamontero:orbit-space-charted
Open

feat: add ChartedSpace structure on orbit space#35653
pepamontero wants to merge 19 commits intoleanprover-community:masterfrom
pepamontero:orbit-space-charted

Conversation

@pepamontero
Copy link
Copy Markdown

@pepamontero pepamontero commented Feb 22, 2026

Add topological preliminaries for properly discontinuous group actions, and use them to equip the orbit space orbitRel.Quotient G M with a ChartedSpace structure.

In particular:

  • Show that the quotient map Quotient.mk _ : M → orbitRel.Quotient G M is a covering map and hence a local homeomorphism.
  • Construct chosen local inverses of the quotient map and establish properties over them.
  • Define a ChartedSpace instance 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.


@github-actions github-actions bot added the new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! label Feb 22, 2026
@github-actions
Copy link
Copy Markdown

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 awaiting-author tag, or another reason described in the Lifecycle of a PR.

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.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 22, 2026

PR summary 7f14c97098

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Topology.Algebra.OrbitSpace (new file) 1106
Mathlib.Geometry.Manifold.Instances.OrbitSpace (new file) 1852

Declarations diff

+ instChartedSpaceQuotient
+ isCoveringMap_quotientMk_of_properlyDiscontinuousSMul
+ isLocalHomeomorph_of_properlyDiscontinuousSMul
+ localHomeomorphAt
+ localHomeomorphAt_eq_quotientMk
+ localInverseAt
+ localInverseAt_apply_other
+ localInverseAt_apply_self
+ mem_localHomeomorphAt_source
+ mem_localHomeomorphAt_target
+ mem_localInverseAt_source

You can run this locally as follows
## summary with just the declaration names:
./scripts/declarations_diff.sh <optional_commit>

## more verbose report:
./scripts/declarations_diff.sh long <optional_commit>

The doc-module for scripts/declarations_diff.sh contains some details about this script.


No changes to technical debt.

You can run this locally as

./scripts/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@robin-carlier robin-carlier removed their assignment Feb 26, 2026
@grunweg grunweg self-assigned this Feb 27, 2026
@grunweg grunweg self-assigned this Mar 31, 2026
Copy link
Copy Markdown
Collaborator

@Rida-Hamadani Rida-Hamadani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) :
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is being called every time with (G := G), perhaps it is better to have G as an explicit variable here.

Comment on lines +101 to +102
· simp only [localInverseAt,
OpenPartialHomeomorph.map_target (localHomeomorphAt p) h']
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
· 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, use simp instead.
  • replace OpenPartialHomeomorph with localHomeomorphAt p directly.
  • this can fit on one line instead of two.
    These points apply to other places in this PR too, please apply them everywhere.

Comment on lines +110 to +111
(mem_localHomeomorphAt_source)
(mem_localInverseAt_source)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These don't need parenthesis.

Comment on lines +44 to +49
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]
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:=_)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
IsQuotientCoveringMap.isCoveringMap (G:=_) (f:=_)
IsQuotientCoveringMap.isCoveringMap (G := _) (f := _)


end MulAction

noncomputable section
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
open scoped Manifold

This is never used.

Comment on lines +26 to +27
variable {M : Type*} [TopologicalSpace M]
variable {G : Type*} [Group G] [MulAction G M]
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These also could be merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! t-differential-geometry Manifolds etc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants