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 | -11x-42y -34x+33y -22x-38y -28x+46y -28x-48y -22x+35y 22x+3y 47x-27y |
| -23x-44y -17x-28y -50x+45y 11x-20y -2x-3y -45x-15y 17x+41y -43x-36y |
| 17x-38y 45x+2y 45x+26y -24x+34y -37x-31y -41x+13y 25x+31y 47x+20y |
| -27x+2y 21x+21y -31x+41y 11x+44y 23x+4y -45x-2y 33x-33y -43x-40y |
| 31x-17y 32x-19y -2x+49y -25x-22y -28x-36y -x -5x-44y -38x-45y |
5
o3 : R-module, quotient of R
|
i4 : (N,f) = decomposeModule M
o4 = (cokernel | y x 0 0 0 0 0 0 |, | 42 26 -31 29 -3 |)
| 0 0 x 0 y 0 0 0 | | 34 2 7 -4 42 |
| 0 0 0 y x 0 0 0 | | 26 -23 -14 19 -18 |
| 0 0 0 0 0 x 0 y | | -25 46 -4 -7 15 |
| 0 0 0 0 0 0 y x | | 1 0 0 0 0 |
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
|