A tensor module is a module that is a tensor product of smaller modules, which "remembers" that it is a tensor product. Mathematically, one could define a tensor module as a module M augmented with a list of other modules M1...Mn and a choice of isomorphism to M’=M1**...**Mn. In Macaulay2, this isomoprhism is implicit in that M and M’ are == as modules, and the isomorphism is accessible as inducedMap(M,M’).
i1 : R=QQ[x] o1 = R o1 : PolynomialRing |
i2 : M=R^3 ** R^3 ** R^4 -- doesn't remember it's a tensor product, but
36
o2 = R
o2 : R-module, free
|
i3 : N=tensorModule(R,{3,3,4}) -- does.
36
o3 = R {3x3x4}
o3 : Free R-TensorModule of order 3, dimensions {3, 3, 4}
|
i4 : (class M,class N) o4 = (Module, TensorModule) o4 : Sequence |
i5 : M==N -- they are equal as modules, o5 = true |
i6 : M'===M -- but not as typed objects, and o6 = false |
i7 : O=tensorModule(R,{4,3,4})
48
o7 = R {4x3x4}
o7 : Free R-TensorModule of order 3, dimensions {4, 3, 4}
|
i8 : not M==O -- tensor modules with different factors are considered different o8 = true |
i9 : N.factors
3 3 4
o9 = {R , R , R }
o9 : List
|
i10 : O.factors
4 3 4
o10 = {R , R , R }
o10 : List
|
The object TensorModule is a type, with ancestor classes Module < ImmutableType < HashTable < Thing.