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