If the module was created as a direct sum, tensor product, of Hom-module, then the expression will reflect that. In each case, the result is a function application, and the sequence of arguments is easily obtained.
i1 : M = ZZ^2 ++ ZZ^3 5 o1 = ZZ o1 : ZZ-module, free |
i2 : t = formation M 2 3 o2 = directSum (ZZ , ZZ ) o2 : Expression of class FunctionApplication |
i3 : peek t 2 3 o3 = FunctionApplication{directSum, (ZZ , ZZ )} |
i4 : t#1 2 3 o4 = (ZZ , ZZ ) o4 : Sequence |
i5 : value t 5 o5 = ZZ o5 : ZZ-module, free |
i6 : M = directSum(ZZ^2, ZZ^3, ZZ^4) 9 o6 = ZZ o6 : ZZ-module, free |
i7 : t = formation M 2 3 4 o7 = directSum (ZZ , ZZ , ZZ ) o7 : Expression of class FunctionApplication |
i8 : t#1 2 3 4 o8 = (ZZ , ZZ , ZZ ) o8 : Sequence |
i9 : M = ZZ^2 ** ZZ^3 6 o9 = ZZ o9 : ZZ-module, free |
i10 : t = formation M 2 3 o10 = tensor (ZZ , ZZ ) o10 : Expression of class FunctionApplication |
i11 : t#1 2 3 o11 = (ZZ , ZZ ) o11 : Sequence |
If the module was not obtained that way, then null is returned.
i12 : formation ZZ^6 |
The same remarks apply to certain other types of objects, such as chain complexes.
i13 : R = QQ[x,y]; |
i14 : C = res coker vars R; |
i15 : D = C ++ C 2 4 2 o15 = R <-- R <-- R <-- 0 0 1 2 3 o15 : ChainComplex |
i16 : formation D 1 2 1 1 2 1 o16 = directSum (R <-- R <-- R <-- 0, R <-- R <-- R <-- 0) 0 1 2 3 0 1 2 3 o16 : Expression of class FunctionApplication |
The object formation is a method function.