feat: define C^n submersions#35122
feat: define C^n submersions#35122Marygold-Dusk wants to merge 26 commits intoleanprover-community:masterfrom
Conversation
PR summary 3138261609Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
✅ PR Title Formatted CorrectlyThe title of this PR has been updated to match our commit style conventions. |
grunweg
left a comment
There was a problem hiding this comment.
Two small comments I noticed already.
…athlib4 into submersion_basic
grunweg
left a comment
There was a problem hiding this comment.
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.
grunweg
left a comment
There was a problem hiding this comment.
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.
|
I pushed a fix for one of the |
- remove superfluous noncomputable - golf one proof very slightly - a few wording improvements to the module doc-string (content-neutral) Noticed while reviewing #35122.
…y#38162) - remove superfluous noncomputable - golf one proof very slightly - a few wording improvements to the module doc-string (content-neutral) Noticed while reviewing leanprover-community#35122.
…y#38162) - remove superfluous noncomputable - golf one proof very slightly - a few wording improvements to the module doc-string (content-neutral) Noticed while reviewing leanprover-community#35122.
chrisflav
left a comment
There was a problem hiding this comment.
Thanks! Everything looks quite clean and as far as I can see, faithfully mirrors the Immersion file. I have left some comments below, feel free to ping me again when this is ready for review again.
| ## Implementation notes | ||
|
|
||
| * In most applications, there is no need to control the choice of complement in the definition of a | ||
| submersion, so `IsSubmersion(At)` is perfectly adequate. Nevertheless, explicit control over |
There was a problem hiding this comment.
I think we can safely refer to the (almost identical) implementation notes in the Immersion file here instead of repeating them.
| immersion or a submersion. | ||
| Unless you have a particular reason, prefer to use `IsSubmersionAt` instead. | ||
| -/ | ||
| irreducible_def IsSubmersionAtOfComplement (f : M → N) (x : M) : Prop := |
There was a problem hiding this comment.
Can we use @[no_expose] here instead of irreducible_def? With this the slightly unfortunate rw in a definition in domChart below would no longer be needed (you will also have to add a @[no_expose] there or just drop the @[expose] from the public section above).
I am aware that this is deviating from the Immersion implementation, but immersions might have landed before the module system switch.
There was a problem hiding this comment.
irreducible_def works also without the module system; this was important for IsImmersion.prod at some point...
Making lots of things no_expose is nice, though. Hm...
There was a problem hiding this comment.
I don't understand the statement about IsImmersion.prod. What do you mean by "this was important"? We won't remove the module system anytime soon.
There was a problem hiding this comment.
This is how the analogous change for immersions would look: #39002
If not for the module system questions, I'd take it immediately.
There was a problem hiding this comment.
After some thought, I think this PR should make the changes analogous to #39002.
@Marygold-Dusk I'll be happy to walk to through that PR tomorrow.
| /-- If `f = g` and `f` is a submersion, so is `g`. -/ | ||
| theorem congr (h : IsSubmersionOfComplement F I J n f) (heq : f = g) : |
There was a problem hiding this comment.
I don't think this lemma is necessary (I think I made the same remark for Immersions back then). What was the reason why it was still added?
There was a problem hiding this comment.
I believe it was "you didn't care strongly about having it and I didn't care strongly about changing the PR". I'm happy to drop it (also from immersions) if you prefer.
There was a problem hiding this comment.
Now you should have some more practical experience with this definition: Did you ever use this lemma?
Instead of using an `irreducible_def`, make it an unexposed definition. This has the same effect in other modules, but leads to much shorter code as we can remove all `rw [foo_def]` for the immersion definitions. It also allows removing the `@[expose]` section from the file (which is nice). There is a small downside: in downstream projects not using the module system, the definition of immersions will be unfolded now. At this point, this is a mostly hypothetical risk (and weighs lower than the real benefits of this change). The [discussion](#28793 (comment)) leading to this change did not have substantial evidence either. Inspired by the discussion in #35122.
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:
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.