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