feat(Manifold/VectorBundle): tensoriality construction#36277
feat(Manifold/VectorBundle): tensoriality construction#36277hrmacbeth wants to merge 14 commits intoleanprover-community:masterfrom
Conversation
Extend an element of a fiber at a point to a local section.
PR summary ee78550dfdImport changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
This PR/issue depends on:
|
ADedecker
left a comment
There was a problem hiding this comment.
Thanks! I'm not very familiar with this corner of the library, so let's ask for a second look.
maintainer delegate
| { add_left v₁ v₂ w := by | ||
| rw [← (hΦ₁ _ (mdifferentiableAt_extend ..)).add (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_extend ..)] | ||
| apply TensorialAt.pointwise₂ hΦ₁ hΦ₂ (mdifferentiableAt_extend ..) _ | ||
| (mdifferentiableAt_extend ..) (mdifferentiableAt_extend ..) _ rfl | ||
| · exact mdifferentiableAt_add_section (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_extend ..) | ||
| · simp | ||
| smul_left c v w := by | ||
| rw [← (hΦ₁ _ (mdifferentiableAt_extend ..)).smul (f := fun _ ↦ c) (mdifferentiable_const ..) | ||
| (mdifferentiableAt_extend ..)] | ||
| apply TensorialAt.pointwise₂ hΦ₁ hΦ₂ (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_const.smul_section (mdifferentiableAt_extend ..)) | ||
| (mdifferentiableAt_extend ..) (mdifferentiableAt_extend ..) | ||
| · simp | ||
| · rfl | ||
| add_right v w₁ w₂ := by | ||
| rw [← (hΦ₂ _ (mdifferentiableAt_extend ..)).add (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_extend ..)] | ||
| apply TensorialAt.pointwise₂ hΦ₁ hΦ₂ (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_extend ..) (mdifferentiableAt_extend ..) <| | ||
| mdifferentiableAt_add_section (mdifferentiableAt_extend ..) (mdifferentiableAt_extend ..) | ||
| · rfl | ||
| · simp | ||
| smul_right c v w := by | ||
| rw [← (hΦ₂ _ (mdifferentiableAt_extend ..)).smul (f := fun _ ↦ c) (mdifferentiable_const ..) | ||
| (mdifferentiableAt_extend ..)] | ||
| apply TensorialAt.pointwise₂ hΦ₁ hΦ₂ (mdifferentiableAt_extend ..) | ||
| (mdifferentiableAt_extend ..) (mdifferentiableAt_extend ..) <| | ||
| mdifferentiableAt_const.smul_section (mdifferentiableAt_extend ..) | ||
| · rfl | ||
| · simp } | ||
| H.toLinearMap.toContinuousBilinearMap |
There was a problem hiding this comment.
It makes me a bit sad that our API for quotients (e.g LinearMap.liftQ₂) doesn't apply to arbitrary linear surjections... (This is just a remark, I'm not asking for you to do anything)
|
Nice: I'm going to review right now. |
There was a problem hiding this comment.
I thought about this a bit because it's a bit sad that we are avoiding working with modules over germs of functions. I suppose to pursue this we'd need to have some type synonym for A that bound x so that it could also be seen as a module over germs of functions with scalar action f • a = (f x) • a (or equivalently turn and indeed this all does seem likely to be quite awkward.A into the trivial vector bundle)
So far the main cost seems to be that we are forced into proving results like TensorialAt.zero and TensorialAt.sum which is not so expensive.
In summary, I'm a bit dubious but I don't see a better design (except possibly by writing a very large API to support the germ-based approach).
bors d+
|
|
||
| /-- An operation `Φ` on sections of a vector bundle `V` over `M` is *tensorial* at `x : M`, if it | ||
| respects addition and scalar multiplication by germs of diffentiable functions at `f`. -/ | ||
| structure TensorialAt (Φ : (Π x : M, V x) → A) (x : M) : Prop where |
There was a problem hiding this comment.
Any chance I could persuade you of:
| structure TensorialAt (Φ : (Π x : M, V x) → A) (x : M) : Prop where | |
| structure IsTensorialAt (Φ : (Π x : M, V x) → A) (x : M) : Prop where |
There was a problem hiding this comment.
In fact, this very same question came up when Patrick, Heather and I were discussing this in person. Majority was in favour of TensorialAt (which is covered by the naming convention, as tensorial is an adjective.
I'll bring it up again. Why do you prefer the Is version - so I can pass this on?
There was a problem hiding this comment.
I'm very late replying but I like the Is version because it is a hint to the user that the definition is Prop-valued.
| smul : ∀ {f : M → 𝕜} {σ : Π x : M, V x}, MDiffAt f x → MDiffAt (T% σ) x → Φ (f • σ) = f x • Φ σ | ||
| add : ∀ {σ σ'}, MDiffAt (T% σ) x → MDiffAt (T% σ') x → Φ (σ + σ') = Φ σ + Φ σ' |
There was a problem hiding this comment.
No action required but just briefly noting that there is the possibility for difficulty in higher differentiability classes because the user might have constructed a Φ that only knows how to interact with smooth (say) sections and thus be unable to discharge these proof obligations.
After thinking a bit I decided it was OK to regard this as "user error" but I do wonder how large a burden we might be putting on people who only want to work in a smooth setting.
There was a problem hiding this comment.
You raise a very good point! I think it's not unlikely that this situation will happen and we'll need to change this definition. On the other hand, the current definition has served us well (supporting, e.g., the Levi-Civita connection or most of the work towards Ehresmann connections), so it's not too wrong either.
Let's merge this now, and revisit later if necessary.
|
✌️ hrmacbeth can now approve this pull request. To approve and merge a pull request, simply reply with |
Co-authored-by: Anatole Dedecker <anatolededecker@gmail.com> Co-authored-by: Oliver Nash <7734364+ocfnash@users.noreply.github.com>
Co-authored-by: Oliver Nash <7734364+ocfnash@users.noreply.github.com>
Co-authored-by: Anatole Dedecker <anatolededecker@gmail.com>
|
|
||
| /-- An operation `Φ` on sections of a vector bundle `V` over `M` is *tensorial* at `x : M`, if it | ||
| respects addition and scalar multiplication by germs of diffentiable functions at `f`. -/ | ||
| structure TensorialAt (Φ : (Π x : M, V x) → A) (x : M) : Prop where |
There was a problem hiding this comment.
In fact, this very same question came up when Patrick, Heather and I were discussing this in person. Majority was in favour of TensorialAt (which is covered by the naming convention, as tensorial is an adjective.
I'll bring it up again. Why do you prefer the Is version - so I can pass this on?
| smul : ∀ {f : M → 𝕜} {σ : Π x : M, V x}, MDiffAt f x → MDiffAt (T% σ) x → Φ (f • σ) = f x • Φ σ | ||
| add : ∀ {σ σ'}, MDiffAt (T% σ) x → MDiffAt (T% σ') x → Φ (σ + σ') = Φ σ + Φ σ' |
There was a problem hiding this comment.
You raise a very good point! I think it's not unlikely that this situation will happen and we'll need to change this definition. On the other hand, the current definition has served us well (supporting, e.g., the Levi-Civita connection or most of the work towards Ehresmann connections), so it's not too wrong either.
Let's merge this now, and revisit later if necessary.
|
I have made all remaining review comments in #36432, and just borsed that one. |
|
This PR has been merged in #36432; closing. |
…uous linear equivalences (leanprover-community#36435) and use this to remove mathematically superfluous typeclass hypotheses in the tensoriality criterion. Follow-up to leanprover-community#36277/leanprover-community#36432.
Given vector bundles
VandWover a manifold, one can construct a section of the hom-bundleΠ x, V x →L[𝕜] W xfrom a tensorial operation sending sections ofVto sections ofW. This PR provides this construction.Co-authored-by: Michael Rothgang rothgang@math.uni-bonn.de
Co-authored-by: Patrick Massot mailto:patrickmassot@free.fr