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