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