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