Given $R$-modules $M$ and $N$, there exists a canonical isomorphism $f \colon M \otimes_R N \to N \otimes_R M$ interchanging the factors. This method implements this isomorphism.
Even for free modules, this map is not simply given by the identity matrix.
i1 : R = ZZ/101[x,y]; |
i2 : M = R^2
2
o2 = R
o2 : R-module, free
|
i3 : N = R^3
3
o3 = R
o3 : R-module, free
|
i4 : f = tensorCommutativity(M, N)
o4 = | 1 0 0 0 0 0 |
| 0 0 0 1 0 0 |
| 0 1 0 0 0 0 |
| 0 0 0 0 1 0 |
| 0 0 1 0 0 0 |
| 0 0 0 0 0 1 |
6 6
o4 : Matrix R <--- R
|
i5 : assert isWellDefined f |
i6 : assert isIsomorphism f |
By giving the generators of $M$ and $N$ sufficiently different degrees, we see that the canonical generators for the two tensor products come in different orders. The isomorphism is given by the corresponding permutation matrix.
i7 : M = R^{1,2}
2
o7 = R
o7 : R-module, free, degrees {-1, -2}
|
i8 : N = R^{100,200,300}
3
o8 = R
o8 : R-module, free, degrees {-100, -200, -300}
|
i9 : M ** N
6
o9 = R
o9 : R-module, free, degrees {-101, -201, -301, -102, -202, -302}
|
i10 : N ** M
6
o10 = R
o10 : R-module, free, degrees {-101, -102, -201, -202, -301, -302}
|
i11 : tensorCommutativity(M, N)
o11 = {-101} | 1 0 0 0 0 0 |
{-102} | 0 0 0 1 0 0 |
{-201} | 0 1 0 0 0 0 |
{-202} | 0 0 0 0 1 0 |
{-301} | 0 0 1 0 0 0 |
{-302} | 0 0 0 0 0 1 |
6 6
o11 : Matrix R <--- R
|
For completeness, we include an example when neither module is free.
i12 : g = tensorCommutativity(coker vars R ++ coker vars R, image vars R)
o12 = {1} | 1 0 0 0 |
{1} | 0 0 1 0 |
{1} | 0 1 0 0 |
{1} | 0 0 0 1 |
o12 : Matrix
|
i13 : source g
o13 = cokernel {1} | -y 0 x y 0 0 0 0 0 0 |
{1} | x 0 0 0 0 0 x y 0 0 |
{1} | 0 -y 0 0 x y 0 0 0 0 |
{1} | 0 x 0 0 0 0 0 0 x y |
4
o13 : R-module, quotient of R
|
i14 : target g
o14 = cokernel {1} | x y 0 0 0 0 0 0 -y 0 |
{1} | 0 0 x y 0 0 0 0 0 -y |
{1} | 0 0 0 0 x y 0 0 x 0 |
{1} | 0 0 0 0 0 0 x y 0 x |
4
o14 : R-module, quotient of R
|
i15 : assert isWellDefined g |
i16 : assert isIsomorphism g |