Skip to content
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: local existence of integral curves of vector field #8483

Closed
wants to merge 126 commits into from

Conversation

winstonyin
Copy link
Collaborator

@winstonyin winstonyin commented Nov 17, 2023

Port of mathlib#17140 plus much more. Comments therein addressed.

For any continuously differentiable vector field (section of tangent bundle) on a manifold M and any chosen interior point x₀ : M, there exists an integral curve γ : ℝ → M such that γ t₀ = x₀ for any real number t₀ and the tangent vector of γ at t coincides with the vector field at γ t for all t within an open interval around t₀.

As a corollary, such an integral curve exists for any starting point x₀ if M is a manifold without boundary.

We define three Props:

  1. IsIntegralCurveOn γ v s means γ t is tangent to v (γ t) for all t within s : Set ℝ.
  2. IsIntegralCurveAt γ v t₀ means γ is a local integral curve to v. That is, γ t is tangent to v (γ t) for all t within some open interval of t₀.
  3. IsIntegralCurve γ v means γ is a global integral curve to v. That is, γ t is tangent to v (γ t) for all t : ℝ.

Lemmas about rescaling and translation of integral curves are proven:

  • If γ solves v at t₀, then γ (t + dt) is tangent to v at t₀ - dt.
  • If γ solves v at t₀, then γ (a * t) is tangent to a • v at t₀ / a for any non-zero a.
  • The constant function at x₀ solves any v with v x₀ = 0.

We also shuffle the position of ∃ ε > (0 : ℝ) in PicardLindelof to one that makes more sense, since f t₀ = x₀ does not depend on ε yet.


Open in Gitpod

@winstonyin winstonyin added the WIP Work in progress label Nov 17, 2023
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Nov 17, 2023
@winstonyin winstonyin removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Nov 17, 2023
Copy link
Collaborator

@grunweg grunweg left a comment

Choose a reason for hiding this comment

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

I know this is still work in progress - I still have some comments and suggestions, perhaps they're helpful. As with the other PR: I'm really glad you're working on this! Don't let my number of comments discourage you; rather take that as a sign that I read your code closely :-)

I haven't looked at the big proof in detail yet.

Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
@grunweg grunweg added the t-differential-geometry Manifolds etc label Nov 18, 2023
@grunweg
Copy link
Collaborator

grunweg commented Nov 18, 2023

(Taking the liberty to tag this as differential geometry; hope you don't mind.)

I think the definition of interior and boundary of a manifold would make a nice little section; would you be interested if I try to flesh that out a little? (For instance, I could push a commit to your PR, or make a separate PR with you as co-author.)

@grunweg
Copy link
Collaborator

grunweg commented Nov 18, 2023

(Taking the liberty to tag this as differential geometry; hope you don't mind.)

I think the definition of interior and boundary of a manifold would make a nice little section; would you be interested if I try to flesh that out a little? (For instance, I could push a commit to your PR, or make a separate PR with you as co-author.)

FYI, I started a section outlining these things on a branch. I think that is close to the right abstraction for mathlib; a number of sorries are still open. If you'd like, we can join forces in filling them in :-).

@winstonyin
Copy link
Collaborator Author

I’d love to work together on this. You should just push to my branch! Thanks for all the detailed comments :)

@grunweg
Copy link
Collaborator

grunweg commented Nov 19, 2023

I just pushed a commit with my skeleton for interior and boundary. I'll work a little while more on it (30mins perhaps), then I'll leave it to you. By the way, did you forget to push local changes?

Edit: done for today; feel free to take over!

- use lowerCamelCase for our definitions, per the naming convention.
- sketch how to prove a few more sorries.
@winstonyin
Copy link
Collaborator Author

Yes I did forget to push local changes. Will merge them with your commits!

mathlib-bors bot pushed a commit that referenced this pull request Jan 5, 2024
We define `tangentCoordChange` as a convenient abbreviation for coordinate changes on the tangent bundle. We also restate the axioms of `VectorBundleCore` as lemmas involving `extChartAt`.

Currently, we need to write `(tangentBundleCore I M).coordChange (achart H x) (achart H y)`, referring explicitly to the atlas of `M`. Since `tangentBundleCore` uses the same base sets as the preferred charts of the base manifold, we wish to work directly with points `x y : M` and the preferred extended charts at those points (`extChartAt`).

We find this definition and related lemmas useful in #8483 in shortening proofs.
mathlib-bors bot pushed a commit that referenced this pull request Jan 5, 2024
We define `tangentCoordChange` as a convenient abbreviation for coordinate changes on the tangent bundle. We also restate the axioms of `VectorBundleCore` as lemmas involving `extChartAt`.

Currently, we need to write `(tangentBundleCore I M).coordChange (achart H x) (achart H y)`, referring explicitly to the atlas of `M`. Since `tangentBundleCore` uses the same base sets as the preferred charts of the base manifold, we wish to work directly with points `x y : M` and the preferred extended charts at those points (`extChartAt`).

We find this definition and related lemmas useful in #8483 in shortening proofs.
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot removed the blocked-by-other-PR This PR depends on another PR to Mathlib (this label is automatically managed by a bot) label Jan 5, 2024
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Jan 5, 2024
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Jan 5, 2024
Copy link
Collaborator

@grunweg grunweg left a comment

Choose a reason for hiding this comment

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

A last collection of comments. Looks good from my side (I don't know if the main proof can be simplified; certainly time will tell also).
This has come a long way - thank you for your perseverance.

Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
@grunweg
Copy link
Collaborator

grunweg commented Jan 8, 2024

And I just pushed a comment making I in range_mem_nhds implicit again: that was an oversight on my side.

Copy link
Contributor

@ocfnash ocfnash 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 both for all this work and for your persistence; it's great to see differential geometry begin to move.

Please apply my suggestions and then feel free to merge.

bors d+

Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
Mathlib/Geometry/Manifold/IntegralCurve.lean Outdated Show resolved Hide resolved
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Jan 8, 2024

✌️ winstonyin can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

local integral curve of `v` in a neighbourhood containing `t₀`. The value of `γ` outside of this
interval is irrelevant and considered junk. -/
def IsIntegralCurveAt (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (t₀ : ℝ) : Prop :=
∀ᶠ t in 𝓝 t₀, HasMFDerivAt 𝓘(ℝ, ℝ) I γ t ((1 : ℝ →L[ℝ] ℝ).smulRight <| v (γ t))
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is now stated in terms of Filter.Eventually to make the three definitions more symmetric.

lemma isIntegralCurve_iff_isIntegralCurveOn : IsIntegralCurve γ v ↔ IsIntegralCurveOn γ v univ :=
fun h ↦ h.isIntegralCurveOn _, fun h t ↦ h t (mem_univ _)⟩

lemma isIntegralCurveAt_iff :
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The lemma @ocfnash suggested above, before I changed the definition of IsIntegralCurveAt.

@winstonyin
Copy link
Collaborator Author

Merging this now, moving on to #8886! If there's disagreement on the last-minute change in IsIntegralCurveAt, we can fix it over there.

It's hard to overstate how happy I am that this is getting merged. It's my first new file / new API! I finished the first draft of this over a year ago (before the port began), and the detailed reviews by @grunweg and @ocfnash have been very supportive and encouraging. Thank you!

bors r+

mathlib-bors bot pushed a commit that referenced this pull request Jan 9, 2024
Port of [mathlib#17140](leanprover-community/mathlib3#17140) plus much more. Comments therein addressed.

For any continuously differentiable vector field (section of tangent bundle) on a manifold `M` and any chosen interior point `x₀ : M`, there exists an integral curve `γ : ℝ → M` such that `γ t₀ = x₀` for any real number `t₀` and the tangent vector of `γ` at `t` coincides with the vector field at `γ t` for all `t` within an open interval around `t₀`.

As a corollary, such an integral curve exists for any starting point `x₀` if `M` is a manifold without boundary.

We define three `Prop`s:
1. `IsIntegralCurveOn γ v s` means `γ t` is tangent to `v (γ t)` for all `t` within `s : Set ℝ`.
2. `IsIntegralCurveAt γ v t₀` means `γ` is a local integral curve to `v`. That is, `γ t` is tangent to `v (γ t)` for all `t` within some open interval of `t₀`.
3. `IsIntegralCurve γ v` means `γ` is a global integral curve to `v`. That is, `γ t` is tangent to `v (γ t)` for all `t : ℝ`.

Lemmas about rescaling and translation of integral curves are proven:
* If `γ` solves `v` at `t₀`, then `γ (t + dt)` is tangent to `v` at `t₀ - dt`.
* If `γ` solves `v` at `t₀`, then `γ (a * t)` is tangent to `a • v` at `t₀ / a` for any non-zero `a`.
* The constant function at `x₀` solves any `v` with `v x₀ = 0`.

We also shuffle the position of `∃ ε > (0 : ℝ)` in `PicardLindelof` to one that makes more sense, since `f t₀ = x₀` does not depend on `ε` yet.



Co-authored-by: Michael Rothgang <[email protected]>
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Jan 9, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat: local existence of integral curves of vector field [Merged by Bors] - feat: local existence of integral curves of vector field Jan 9, 2024
@mathlib-bors mathlib-bors bot closed this Jan 9, 2024
@mathlib-bors mathlib-bors bot deleted the integral_curve branch January 9, 2024 02:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

Successfully merging this pull request may close these issues.

6 participants