This function decomposes a module into a direct sum of simple modules, given some fairly strong assumptions on the ring which acts on the ring which acts on the module. This ring must only have two variables, and the square of each of those variables must kill the module.
i1 : Q = ZZ/101[x,y]
o1 = Q
o1 : PolynomialRing
|
i2 : R = Q/(x^2,y^2)
o2 = R
o2 : QuotientRing
|
i3 : M = coker random(R^5, R^8 ** R^{-1})
o3 = cokernel | 46x-47y -12x-18y -11x+8y -15x-31y 13x+3y -10x-47y 18x-7y -17x+14y |
| 41x-24y -16x-15y -32x-3y -34x-34y 44x-15y -13x-11y 48x+26y -28x-7y |
| -25x+27y 8x+22y -14x+8y x+20y -45x+14y -17x-33y -14x-31y -15x+9y |
| -x-3y -24x-23y -29x+6y 8x-10y -26x-49y 34x-40y 9x+48y 5x-22y |
| -26x-12y -5x-23y 22x-18y 23x+8y 48x+45y 22x+12y -33x+9y -17x-47y |
5
o3 : R-module, quotient of R
|
i4 : (N,f) = decomposeModule M
o4 = (cokernel | y x 0 0 0 0 0 0 |, | -19 -49 -48 -46 12 |)
| 0 0 x 0 y 0 0 0 | | -14 -23 17 49 40 |
| 0 0 0 y x 0 0 0 | | -46 40 -36 -35 -17 |
| 0 0 0 0 0 x 0 y | | 1 0 0 0 0 |
| 0 0 0 0 0 0 y x | | -41 19 13 -29 4 |
o4 : Sequence
|
i5 : components N
o5 = {cokernel | y x |, cokernel | x 0 y |, cokernel | x 0 y |}
| 0 y x | | 0 y x |
o5 : List
|
i6 : ker f == 0
o6 = true
|
i7 : coker f == 0
o7 = true
|