-
Notifications
You must be signed in to change notification settings - Fork 299
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(linear_algebra/multilinear/basis): multilinear maps on basis vectors #10090
Conversation
…tors Add two versions of the fact that a multilinear map on finitely many arguments is determined by its values on basis vectors. The precise requirements for each version follow from the results used in the proof: `basis.ext_multilinear_fin` uses the `curry` and `uncurry` results to deduce it from `basis.ext` and thus works for multilinear maps on a family of modules indexed by `fin n.succ`, while `basis.ext_multilinear` works for an arbitrary `fintype` index type but is limited to the case where the modules for all the arguments (and the bases used for those modules) are the same, since it's derived from the previous result using `dom_dom_congr` which only handles the case where all the modules are the same. This is in preparation for proving a corresponding result for alternating maps, for which the case of all argument modules the same suffices. There is probably room for both golfing (the proofs seem longer than should be necessary given the trivial content) and making more general. If the dependency of `linear_algebra.multilinear.basic` on `linear_algebra.basis` isn't desired, this code could of course go in a separate file.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
In the interest of not letting |
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
I've now moved the lemmas to such a new file. |
{ rw [←f.uncurry_curry_left, ←g.uncurry_curry_left], | ||
congr' 1, |
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.
{ rw [←f.uncurry_curry_left, ←g.uncurry_curry_left], | |
congr' 1, | |
{ apply function.left_inverse.injective uncurry_curry_left, |
although it might be better to add a standalone
lemma multilinear_map.curry_left_left_inverse :
left_inverse (linear_map.uncurry_left : _ → multilinear_map R M M₂) multilinear_map.curry_left :=
multilinear_map.uncurry_curry_left
next to uncurry_curry_left
first
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've applied that change (I've not done anything about adding that separate lemma).
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Could we add the following: def basis.pi {ι₁ : fin n → Type*} (e : Π i, basis (ι₁ i) R (M i)) :
basis (Π i, ι₁ i) R (Π i, M i) :=
sorry and obtain this result as a corollary? |
Co-authored-by: Oliver Nash <github@olivernash.org>
I don't think that |
Yes (the separate files for the different cases of tensor product confused me), but as well as the |
Oops, yes of course.
I think situations like this are the perfect time to fill in the missing bits of an API but I can appreciate you might feel this is too much of a diversion. Maybe at least add a TODO in the doc string, saying that this should eventually be refactored through the an API for bases of tensor products? |
I've added that TODO. |
Thanks! bors merge |
…tors (#10090) Add two versions of the fact that a multilinear map on finitely many arguments is determined by its values on basis vectors. The precise requirements for each version follow from the results used in the proof: `basis.ext_multilinear_fin` uses the `curry` and `uncurry` results to deduce it from `basis.ext` and thus works for multilinear maps on a family of modules indexed by `fin n`, while `basis.ext_multilinear` works for an arbitrary `fintype` index type but is limited to the case where the modules for all the arguments (and the bases used for those modules) are the same, since it's derived from the previous result using `dom_dom_congr` which only handles the case where all the modules are the same. This is in preparation for proving a corresponding result for alternating maps, for which the case of all argument modules the same suffices. There is probably room for making results more general.
Pull request successfully merged into master. Build succeeded: |
…tors (#10090) Add two versions of the fact that a multilinear map on finitely many arguments is determined by its values on basis vectors. The precise requirements for each version follow from the results used in the proof: `basis.ext_multilinear_fin` uses the `curry` and `uncurry` results to deduce it from `basis.ext` and thus works for multilinear maps on a family of modules indexed by `fin n`, while `basis.ext_multilinear` works for an arbitrary `fintype` index type but is limited to the case where the modules for all the arguments (and the bases used for those modules) are the same, since it's derived from the previous result using `dom_dom_congr` which only handles the case where all the modules are the same. This is in preparation for proving a corresponding result for alternating maps, for which the case of all argument modules the same suffices. There is probably room for making results more general.
Add two versions of the fact that a multilinear map on finitely many
arguments is determined by its values on basis vectors. The precise
requirements for each version follow from the results used in the
proof:
basis.ext_multilinear_fin
uses thecurry
anduncurry
results to deduce it from
basis.ext
and thus works for multilinearmaps on a family of modules indexed by
fin n
, whilebasis.ext_multilinear
works for an arbitraryfintype
index typebut is limited to the case where the modules for all the arguments
(and the bases used for those modules) are the same, since it's
derived from the previous result using
dom_dom_congr
which onlyhandles the case where all the modules are the same.
This is in preparation for proving a corresponding result for
alternating maps, for which the case of all argument modules the same
suffices.
There is probably room for making results more general.