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