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