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