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.