Skip to content

[Merged by Bors] - feat: define C^n submersions - #35122

Closed
Marygold-Dusk wants to merge 37 commits into
leanprover-community:masterfrom
Marygold-Dusk:submersion_basic
Closed

[Merged by Bors] - feat: define C^n submersions#35122
Marygold-Dusk wants to merge 37 commits into
leanprover-community:masterfrom
Marygold-Dusk:submersion_basic

Conversation

@Marygold-Dusk

@Marygold-Dusk Marygold-Dusk commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:

  • being a submersion is a local property,
  • products of submersions are submersions,
  • the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang rothgang@math.uni-bonn.de


Most of the design is analogues to immersions.

@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 11, 2026
@github-actions

github-actions Bot commented Feb 11, 2026

Copy link
Copy Markdown

PR summary bb7d1ba4d9

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Geometry.Manifold.Submersion (new file) 2176

Declarations diff (regex)

+ IsSubmersion
+ IsSubmersionAt
+ IsSubmersionAtOfComplement
+ IsSubmersionOfComplement
+ SubmersionAtProp
+ _root_.isOpen_isSubmersionAt
+ _root_.isOpen_isSubmersionAtOfComplement
+ congr_iff
+ congr_iff_of_eventuallyEq
+ instance (h : IsSubmersion I J n f) : NormedAddCommGroup h.complement
+ instance (h : IsSubmersion I J n f) : NormedSpace 𝕜 h.complement
+ instance (h : IsSubmersionAt I J n f x) : NormedAddCommGroup h.complement
+ instance (h : IsSubmersionAt I J n f x) : NormedSpace 𝕜 h.complement
+ instance (hf : IsSubmersionAtOfComplement F I J n f x) : NormedAddCommGroup hf.smallComplement
+ instance (hf : IsSubmersionAtOfComplement F I J n f x) : NormedSpace 𝕜 hf.smallComplement
+ isLocalSourceTargetProperty_submmersionAtProp
+ isSubmersion
+ isSubmersionAtOfComplement_complement
+ isSubmersionOfComplement_complement
+ small
+ smallComplement
+ smallEquiv
++ codChart
++ codChart_mem_maximalAtlas
++ complement
++ congr_F
++ congr_of_eventuallyEq
++ domChart
++ domChart_mem_maximalAtlas
++ equiv
++ id
++ image_target_subset_target
++ mem_codChart_source
++ mem_domChart_source
++ mk_of_charts
++ mk_of_continuousAt
++ property
++ source_subset_preimage_source
++ target_subset_preimage_target
++ trans_F
++ writtenInCharts
+++ isSubmersionAt
++++ prodMap

You can run this locally as follows
## from your `mathlib4` directory:
git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci

## summary with just the declaration names:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh <optional_commit>

## more verbose report:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh long <optional_commit>

The doc-module for scripts/pr_summary/declarations_diff.sh in the mathlib-ci repository contains some details about this script.

Declarations diff (Lean)

Lean-aware diff — post-build, computed from the Lean environment (commit bb7d1ba).

  • +70 new declarations
  • −0 removed declarations
+Manifold.IsSubmersion
+Manifold.IsSubmersion.complement
+Manifold.IsSubmersion.id
+Manifold.IsSubmersion.instNormedAddCommGroupComplement
+Manifold.IsSubmersion.instNormedSpaceComplement
+Manifold.IsSubmersion.isSubmersionAt
+Manifold.IsSubmersion.isSubmersionOfComplement_complement
+Manifold.IsSubmersion.prodMap
+Manifold.IsSubmersionAt
+Manifold.IsSubmersionAt.codChart
+Manifold.IsSubmersionAt.codChart_mem_maximalAtlas
+Manifold.IsSubmersionAt.complement
+Manifold.IsSubmersionAt.congr_iff
+Manifold.IsSubmersionAt.congr_of_eventuallyEq
+Manifold.IsSubmersionAt.domChart
+Manifold.IsSubmersionAt.domChart_mem_maximalAtlas
+Manifold.IsSubmersionAt.equiv
+Manifold.IsSubmersionAt.image_target_subset_target
+Manifold.IsSubmersionAt.instNormedAddCommGroupComplement
+Manifold.IsSubmersionAt.instNormedSpaceComplement
+Manifold.IsSubmersionAt.isSubmersionAtOfComplement_complement
+Manifold.IsSubmersionAt.mem_codChart_source
+Manifold.IsSubmersionAt.mem_domChart_source
+Manifold.IsSubmersionAt.mk_of_charts
+Manifold.IsSubmersionAt.mk_of_continuousAt
+Manifold.IsSubmersionAt.prodMap
+Manifold.IsSubmersionAt.property
+Manifold.IsSubmersionAt.source_subset_preimage_source
+Manifold.IsSubmersionAt.target_subset_preimage_target
+Manifold.IsSubmersionAt.writtenInCharts
+Manifold.IsSubmersionAtOfComplement
+Manifold.IsSubmersionAtOfComplement.codChart
+Manifold.IsSubmersionAtOfComplement.codChart.congr_simp
+Manifold.IsSubmersionAtOfComplement.codChart_mem_maximalAtlas
+Manifold.IsSubmersionAtOfComplement.congr_F
+Manifold.IsSubmersionAtOfComplement.congr_iff_of_eventuallyEq
+Manifold.IsSubmersionAtOfComplement.congr_of_eventuallyEq
+Manifold.IsSubmersionAtOfComplement.domChart
+Manifold.IsSubmersionAtOfComplement.domChart.congr_simp
+Manifold.IsSubmersionAtOfComplement.domChart_mem_maximalAtlas
+Manifold.IsSubmersionAtOfComplement.equiv
+Manifold.IsSubmersionAtOfComplement.equiv.congr_simp
+Manifold.IsSubmersionAtOfComplement.image_target_subset_target
+Manifold.IsSubmersionAtOfComplement.instNormedAddCommGroupSmallComplement
+Manifold.IsSubmersionAtOfComplement.instNormedSpaceSmallComplement
+Manifold.IsSubmersionAtOfComplement.isSubmersionAt
+Manifold.IsSubmersionAtOfComplement.mem_codChart_source
+Manifold.IsSubmersionAtOfComplement.mem_domChart_source
+Manifold.IsSubmersionAtOfComplement.mk_of_charts
+Manifold.IsSubmersionAtOfComplement.mk_of_continuousAt
+Manifold.IsSubmersionAtOfComplement.prodMap
+Manifold.IsSubmersionAtOfComplement.property
+Manifold.IsSubmersionAtOfComplement.small
+Manifold.IsSubmersionAtOfComplement.smallComplement
+Manifold.IsSubmersionAtOfComplement.smallEquiv
+Manifold.IsSubmersionAtOfComplement.source_subset_preimage_source
+Manifold.IsSubmersionAtOfComplement.target_subset_preimage_target
+Manifold.IsSubmersionAtOfComplement.trans_F
+Manifold.IsSubmersionAtOfComplement.writtenInCharts
+Manifold.IsSubmersionOfComplement
+Manifold.IsSubmersionOfComplement.congr_F
+Manifold.IsSubmersionOfComplement.id
+Manifold.IsSubmersionOfComplement.isSubmersion
+Manifold.IsSubmersionOfComplement.isSubmersionAt
+Manifold.IsSubmersionOfComplement.prodMap
+Manifold.IsSubmersionOfComplement.trans_F
+Manifold.SubmersionAtProp
+Manifold.isLocalSourceTargetProperty_submmersionAtProp
+isOpen_isSubmersionAt
+isOpen_isSubmersionAtOfComplement

Increase in strong tech debt: (relative, absolute) = (1.00, 0.00)
Current number Change Type (strong)
5676 1 backward.isDefEq.respectTransparency
No changes to weak technical debt.

Current commit bb7d1ba4d9
Reference commit d925b897b5

This script lives in the mathlib-ci repository. To run it locally, from your mathlib4 directory:

git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci
../mathlib-ci/scripts/reporting/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).

@github-actions

github-actions Bot commented Feb 11, 2026

Copy link
Copy Markdown

✅ PR Title Formatted Correctly

The title of this PR has been updated to match our commit style conventions.
Thank you!

@github-actions github-actions Bot added the t-differential-geometry Manifolds etc label Feb 11, 2026
@Marygold-Dusk Marygold-Dusk changed the title submersions between manifolds feat(geometry/manifold): define C^n submersions Feb 11, 2026
@grunweg grunweg self-assigned this Feb 11, 2026
@grunweg grunweg changed the title feat(geometry/manifold): define C^n submersions feat: define C^n submersions Feb 11, 2026

@grunweg grunweg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Two small comments I noticed already.

Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated

@grunweg grunweg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I just tweaked the module doc-string, by comparing it closely with the immersions one. Some phrasings of yours I preferred (and copied to the immersions doc-string); some I disagree with stylistically. A few were slightly wrong, so I changed these also.

Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated

@grunweg grunweg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the PR! I looked at the code in detail, also comparing it to the Immersions file to make sure there are no unnecessary differences. I have a number of comments, but most of them are very minor.

Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean
Comment thread Mathlib/Geometry/Manifold/Submersion.lean
@grunweg

grunweg commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

I pushed a fix for one of the backward options --- I'll be happy to walk you through it in person.

@grunweg

grunweg commented May 18, 2026

Copy link
Copy Markdown
Contributor

It seems this Pr is ready for review again. @chrisflav

@grunweg grunweg removed the awaiting-author A reviewer has asked the author a question or requested changes. label May 18, 2026
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated

@chrisflav chrisflav left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Modulo one comment, LGTM!

Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
@chrisflav chrisflav added the awaiting-author A reviewer has asked the author a question or requested changes. label Jun 10, 2026
@Marygold-Dusk
Marygold-Dusk requested a review from chrisflav June 10, 2026 12:32
@chrisflav

Copy link
Copy Markdown
Member

Great, thanks!

maintainer merge

@github-actions

Copy link
Copy Markdown

🚀 Pull request has been placed on the maintainer queue by chrisflav.

@mathlib-triage mathlib-triage Bot added the maintainer-merge A reviewer has approved the changed; awaiting maintainer approval. label Jun 10, 2026

@sgouezel sgouezel left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

bors d+
Thanks!

Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
Comment thread Mathlib/Geometry/Manifold/Submersion.lean Outdated
@mathlib-bors

mathlib-bors Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

✌️ Marygold-Dusk can now approve this pull request until 2026-06-24 19:27 UTC (in 2 weeks). To approve and merge, reply with bors r+. More detailed instructions are available here.

⚠️ This delegation only covers changes within Archive/**, Counterexamples/**, docs/**, DownstreamTest/**, Mathlib/**, MathlibTest/**, widget/**, Archive.lean, Counterexamples.lean, docs.lean, Mathlib.lean; an author commit touching anything else will revoke it. Bors also revokes it if a later push changes too many files for it to check the full list — even if it stays within scope.

@mathlib-triage mathlib-triage Bot added delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). and removed awaiting-author A reviewer has asked the author a question or requested changes. maintainer-merge A reviewer has approved the changed; awaiting maintainer approval. labels Jun 10, 2026
@Marygold-Dusk

Copy link
Copy Markdown
Contributor Author

bors r+

mathlib-bors Bot pushed a commit that referenced this pull request Jun 11, 2026
This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:
- being a submersion is a local property,
- products of submersions are submersions,
- the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang <rothgang@math.uni-bonn.de>
Co-authored-by: Samantha M. Naranjo <naranjosamantha1j@gmail.com>
Co-authored-by: Samantha Naranjo <naranjosamantha1j@gmail.com>
@mathlib-bors

mathlib-bors Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors Bot changed the title feat: define C^n submersions [Merged by Bors] - feat: define C^n submersions Jun 11, 2026
@mathlib-bors mathlib-bors Bot closed this Jun 11, 2026
xroblot pushed a commit to xroblot/mathlib4 that referenced this pull request Jun 13, 2026
This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:
- being a submersion is a local property,
- products of submersions are submersions,
- the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang <rothgang@math.uni-bonn.de>
Co-authored-by: Samantha M. Naranjo <naranjosamantha1j@gmail.com>
Co-authored-by: Samantha Naranjo <naranjosamantha1j@gmail.com>
xroblot pushed a commit to xroblot/mathlib4 that referenced this pull request Jun 18, 2026
This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:
- being a submersion is a local property,
- products of submersions are submersions,
- the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang <rothgang@math.uni-bonn.de>
Co-authored-by: Samantha M. Naranjo <naranjosamantha1j@gmail.com>
Co-authored-by: Samantha Naranjo <naranjosamantha1j@gmail.com>
ReemMelamed pushed a commit to ReemMelamed/mathlib4 that referenced this pull request Jun 20, 2026
This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:
- being a submersion is a local property,
- products of submersions are submersions,
- the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang <rothgang@math.uni-bonn.de>
Co-authored-by: Samantha M. Naranjo <naranjosamantha1j@gmail.com>
Co-authored-by: Samantha Naranjo <naranjosamantha1j@gmail.com>
bryangingechen pushed a commit to jcommelin/mathlib4 that referenced this pull request Jun 22, 2026
This PR defines submersions between C^n manifolds. In the infinite-dimensional setting, submersions are defined via local normal forms rather than surjectivity of the mfderiv. A map f is a submersion at x if, in suitable charts around x and f x, it has the form (u, v) ↦ u after identifying the model space with a product.

We prove a few basic properties:
- being a submersion is a local property,
- products of submersions are submersions,
- the set of submersed points is open

Future PRs will prove that submersions are C^n and deduce equivalence with the standard definition in finite dimensions. From the path towards the regular value theorem.

This file was developed under the supervision of Michael Rothgang.

Co-authored-by: Michael Rothgang <rothgang@math.uni-bonn.de>
Co-authored-by: Samantha M. Naranjo <naranjosamantha1j@gmail.com>
Co-authored-by: Samantha Naranjo <naranjosamantha1j@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). 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.

5 participants