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