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