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