-
Notifications
You must be signed in to change notification settings - Fork 839
feat: local frames in a vector bundle #30338
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
base: master
Are you sure you want to change the base?
Conversation
This depends on the custom elaborators added in leanprover-community#27021; for some reason, using these fails. To be investigated!
PR summary c7bb7934b2Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
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.
Thanks, just a bunch of nitpicks!
bors d+
Outside of `u`, this returns the junk value 0. -/ | ||
-- NB. We don't use simps here, as we prefer to have dedicated `_apply` lemmas for the separate | ||
-- cases. | ||
def repr (hs : IsLocalFrameOn I F n s u) (i : ι) : (Π x : M, V x) →ₗ[𝕜] M → 𝕜 where |
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.
I have never been a fan of the name repr
in Basis
and this is also pretty far from Basis.repr
(which is an equivalence singling no one coord).
I'd prefer almost anything else here. What do you think of:
def repr (hs : IsLocalFrameOn I F n s u) (i : ι) : (Π x : M, V x) →ₗ[𝕜] M → 𝕜 where | |
def toLin (hs : IsLocalFrameOn I F n s u) (i : ι) : (Π x : M, V x) →ₗ[𝕜] M → 𝕜 where |
(or maybe coeff
or coord
)
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.
Good point! I went by analogy with Basis.repr
, but indeed Basis.coord
is a better analogy. So, certainly coord
would already be a better name, and perhaps coeff
is even better. I'll think about it!
Why did you pick toLin
? To me, that seems "type-correct", but carries little semantic information (unlike coeff or coord).
|
||
/-- A local frame locally spans the space of sections for `V`: for each local frame `s i` on an open | ||
set `u` around `x`, we have `t = ∑ i, (hs.repr i t) • (s i x)` near `x`. -/ | ||
lemma repr_spec [Fintype ι] (hs : IsLocalFrameOn I F n s u) (t : Π x : M, V x) (hu'' : u ∈ 𝓝 x) : |
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.
How about:
lemma repr_spec [Fintype ι] (hs : IsLocalFrameOn I F n s u) (t : Π x : M, V x) (hu'' : u ∈ 𝓝 x) : | |
lemma eventually_eq_sum_repr_smul [Fintype ι] (hs : IsLocalFrameOn I F n s u) (t : Π x : M, V x) (hu'' : u ∈ 𝓝 x) : |
(or even better if you agree with my comment above and pick something other than repr
)
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.
I'll do both!
basis of `V x` for each `x ∈ e.baseSet`. Any section `s` of `e` can be uniquely written as | ||
`s = ∑ i, f^i sᵢ` near `x`, and `s` is smooth at `x` iff the functions `f^i` are. | ||
|
||
The latter statement holds in many cases, but not for every vector bundle. In this file, we prove |
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.
If you're raising explicitly the failure to capture smoothness by smoothness of coefficients (IIUC), then I think you need to add a sentence saying when it can fail.
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.
I guess the key point is that IsLocalFrame
is only really useful in finite-dimensions?
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.
Indeed, that's mostly it. The subsequent sentences describe better when this holds. Do you see a way to reword this? (Otherwise, I'll think about it when I'm done with my teaching this week.)
✌️ grunweg can now approve this pull request. To approve and merge a pull request, simply reply with |
Co-authored-by: Oliver Nash <7734364+ocfnash@users.noreply.github.com>
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.
Thank you for the careful review. I'm still learning something new every time. I have some comments on your comments (and will fully address them once I'm out of my teaching cave for the week).
basis of `V x` for each `x ∈ e.baseSet`. Any section `s` of `e` can be uniquely written as | ||
`s = ∑ i, f^i sᵢ` near `x`, and `s` is smooth at `x` iff the functions `f^i` are. | ||
|
||
The latter statement holds in many cases, but not for every vector bundle. In this file, we prove |
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.
Indeed, that's mostly it. The subsequent sentences describe better when this holds. Do you see a way to reword this? (Otherwise, I'll think about it when I'm done with my teaching this week.)
Outside of `u`, this returns the junk value 0. -/ | ||
-- NB. We don't use simps here, as we prefer to have dedicated `_apply` lemmas for the separate | ||
-- cases. | ||
def repr (hs : IsLocalFrameOn I F n s u) (i : ι) : (Π x : M, V x) →ₗ[𝕜] M → 𝕜 where |
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.
Good point! I went by analogy with Basis.repr
, but indeed Basis.coord
is a better analogy. So, certainly coord
would already be a better name, and perhaps coeff
is even better. I'll think about it!
Why did you pick toLin
? To me, that seems "type-correct", but carries little semantic information (unlike coeff or coord).
|
||
/-- A local frame locally spans the space of sections for `V`: for each local frame `s i` on an open | ||
set `u` around `x`, we have `t = ∑ i, (hs.repr i t) • (s i x)` near `x`. -/ | ||
lemma repr_spec [Fintype ι] (hs : IsLocalFrameOn I F n s u) (t : Π x : M, V x) (hu'' : u ∈ 𝓝 x) : |
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.
I'll do both!
We define a predicate
IsLocalFrameOn
, for a collection of sections of a vector bundle to be a local frame.We provide some basic API, such as the coefficients of a section
t
w.r.t. a local frame, or proving smoothness oft
via proving the smoothness of its local frame coefficients.A future PR will construct actual local frames, and use these to define the local extension of a tangent vector to a vector field near a point.
From the path towards geodesics and the Levi-Civita connection.
Co-authored-by: Patrick Massot patrickmassot@free.fr