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