Zulip Chat Archive
Stream: Is there code for X?
Topic: R^m tensor R^n = R^{m x n}
Kevin Buzzard (Aug 21 2024 at 20:43):
Do we have any of the following? (given one, the others should be straightforward I hope...)
import Mathlib.RingTheory.TensorProduct.Basic
open scoped TensorProduct
variable {R : Type*} [CommRing R] (m n : Type*)
def isom [Finite m] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] ((m × n) → R) := sorry
def isom' [Finite n] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] ((m × n) → R) := sorry
def isom'' [Finite m] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] (m → n → R) := sorry
def isom''' [Finite n] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] (m → n → R) := sorry
I only need the variant where both m and n are finite, but my instinct is that you only need one of them to be finite. Just to be clear, I don't want a random isomorphism (if m and n are finite then one can construct such a thing via a dimension count), I want the map sending f : m -> R
tensor g : n -> R
to the function sending (a,b) to f a * g b.
Eric Wieser (Aug 21 2024 at 20:46):
I think this is basically docs#Basis.tensorProduct, right?
Eric Wieser (Aug 21 2024 at 20:47):
... maybe with quite a few extra steps
Eric Wieser (Aug 21 2024 at 20:50):
docs#finsuppTensorFinsupp is much closer
Eric Wieser (Aug 21 2024 at 20:50):
and docs#finsuppTensorFinsuppLid even more so
Kevin Buzzard (Aug 21 2024 at 20:56):
The problem with these is that in the examples above one of m -> R
and n -> R
may not be a finsupp.
Kevin Buzzard (Aug 21 2024 at 20:56):
Aah, I can use docs#finsuppTensorFinsuppLid with kappa={1} and N=n->R :-)
Kevin Buzzard (Aug 21 2024 at 20:59):
or docs#TensorProduct.finsuppScalarLeft and then I don't need an artificial singleton type. Thanks!
Kevin Buzzard (Aug 21 2024 at 21:04):
PS shame this doesn't work:
def isom'' [Finite m] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] (m → n → R) := calc
((m → R) ⊗[R] (n → R)) ≃ₗ[R] ((m →₀ R) ⊗[R] (n → R)) := by sorry
_ ≃ₗ[R] (m →₀ (n → R)) := by sorry
_ ≃ₗ[R] m → n → R := by sorry
(errors everywhere)
Eric Wieser (Aug 21 2024 at 21:10):
There's a PR somewhere that makes (a worse version of) that work
Kevin Buzzard (Aug 21 2024 at 21:56):
noncomputable def isom'' [Finite m] [DecidableEq m] : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] (m → n → R) :=
(LinearEquiv.rTensor (n → R) (Finsupp.linearEquivFunOnFinite R R m).symm : ((m → R) ⊗[R] (n → R)) ≃ₗ[R] ((m →₀ R) ⊗[R] (n → R))).trans
((TensorProduct.finsuppScalarLeft _ _ _ : ((m →₀ R) ⊗[R] (n → R)) ≃ₗ[R] (m →₀ (n → R))).trans
((Finsupp.linearEquivFunOnFinite R _ m) : (m →₀ (n → R)) ≃ₗ[R] m → n → R))
Last updated: May 02 2025 at 03:31 UTC