-
Notifications
You must be signed in to change notification settings - Fork 298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Merged by Bors] - feat(analysis/calculus/times_cont_diff, analysis/calculus/inverse): smooth inverse function theorem #4407
Conversation
Co-authored-by: Bryan Gin-ge Chen <bryangingechen@gmail.com>
I have some golfing in mind but it requires moving code between files. I'll try it later. |
@sgouezel What do you think about merging this as is? I want to have |
* `linear_map.unique_of_left`, `linear_map.unique_of_right`, `continuous_linear_map.unique_of_left`, `continuous_linear_map.unique_of_right`: if either `M` or `M₂` is a `subsingleton`, then both `M →ₗ[R] M₂` and `M →L[R] M₂` are `unique`; * `pi.unique`: if each `β a` is `unique`, then `Π a, β a` is `unique`; * rename `function.injective.comap_subsingleton` to `function.injective.subsingleton`; * add `unique.mk'` and `function.injective.unique`; * add a few `simp` lemmas for `default`; * drop `nonempty_unique_or_exists_ne` and `subsingleton_or_exists_ne`.
* `linear_map.unique_of_left`, `linear_map.unique_of_right`, `continuous_linear_map.unique_of_left`, `continuous_linear_map.unique_of_right`: if either `M` or `M₂` is a `subsingleton`, then both `M →ₗ[R] M₂` and `M →L[R] M₂` are `unique`; * `pi.unique`: if each `β a` is `unique`, then `Π a, β a` is `unique`; * rename `function.injective.comap_subsingleton` to `function.injective.subsingleton`; * add `unique.mk'` and `function.injective.unique`; * add a few `simp` lemmas for `default`; * drop `nonempty_unique_or_exists_ne` and `subsingleton_or_exists_ne`; * rename `linear_map.coe_inj` to `coe_injective` and `continuous_linear_map.coe_inj` to `coe_fn_injective`, make them use `function.injective`. Motivated by #4407
* `linear_map.unique_of_left`, `linear_map.unique_of_right`, `continuous_linear_map.unique_of_left`, `continuous_linear_map.unique_of_right`: if either `M` or `M₂` is a `subsingleton`, then both `M →ₗ[R] M₂` and `M →L[R] M₂` are `unique`; * `pi.unique`: if each `β a` is `unique`, then `Π a, β a` is `unique`; * rename `function.injective.comap_subsingleton` to `function.injective.subsingleton`; * add `unique.mk'` and `function.injective.unique`; * add a few `simp` lemmas for `default`; * drop `nonempty_unique_or_exists_ne` and `subsingleton_or_exists_ne`; * rename `linear_map.coe_inj` to `coe_injective` and `continuous_linear_map.coe_inj` to `coe_fn_injective`, make them use `function.injective`. Motivated by #4407
* `linear_map.unique_of_left`, `linear_map.unique_of_right`, `continuous_linear_map.unique_of_left`, `continuous_linear_map.unique_of_right`: if either `M` or `M₂` is a `subsingleton`, then both `M →ₗ[R] M₂` and `M →L[R] M₂` are `unique`; * `pi.unique`: if each `β a` is `unique`, then `Π a, β a` is `unique`; * rename `function.injective.comap_subsingleton` to `function.injective.subsingleton`; * add `unique.mk'` and `function.injective.unique`; * add a few `simp` lemmas for `default`; * drop `nonempty_unique_or_exists_ne` and `subsingleton_or_exists_ne`; * rename `linear_map.coe_inj` to `coe_injective` and `continuous_linear_map.coe_inj` to `coe_fn_injective`, make them use `function.injective`. Motivated by #4407
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good.
There are two obvious refactors that are calling here:
- do not deduce the continuity of bounded bilinear maps from their differentiability, to be able to put several facts at more natural places
- Generalize real stuff to
is_R_or_C
fields (or another typeclass if necessary)
All this can wait for later PRs.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
bors r+ |
…mooth inverse function theorem (#4407) The inverse function theorem, in the C^k and smooth categories. Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
Pull request successfully merged into master. Build succeeded: |
…continuity (#9390) Previously `is_bounded_bilinear_map.continuous`, the continuity of a bounded bilinear map, was deduced from its differentiability and lived in `analysis.calculus.fderiv`. This PR gives a direct proof so it can live in `analysis.normed_space.bounded_linear_maps`. Two consequences of this lemma are also moved earlier in the hierarchy: - `continuous_linear_equiv.is_open`, the openness of the set of continuous linear equivalences in the space of continuous linear maps, moves from `analysis.calculus.fderiv` to `analysis.normed_space.bounded_linear_maps` - `continuous_inner`, the continuity of the inner product, moves from `analysis.inner_product_space.calculus` to `analysis.inner_product_space.basic`. Previously discussed at #4407 (review) Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
The inverse function theorem, in the C^k and smooth categories.
Co-authored-by: Yury G. Kudryashov urkud@urkud.name
There are a couple of lemmas which seem like they should be much shorter if approached the right way, or refactored to extract the right simp-lemmas:(Update: these lemmas have been cleaned up thanks to @urkud.)continuous_linear_equiv.is_open
,image_to_local_homeomorph_image_basepoint
. Perhaps @urkud or @sgouezel could take a look.unique
instances #4511