This method computes the multiplication table of the endomorphism ring of a module $M$ over a commutative ring $R$, and returns this information as an ideal. Since Groebner bases do not (yet!) work for a FreeAlgebra with coefficients in a commutative ring, minimizing these generators and relations must be performed by the user. This will be fixed in a future release.
i1 : Q = QQ[a,b,c] o1 = Q o1 : PolynomialRing |
i2 : R = Q/ideal{a*b-c^2}
o2 = R
o2 : QuotientRing
|
i3 : kRes = res(coker vars R, LengthLimit=>7)
1 3 4 4 4 4 4 4
o3 = R <-- R <-- R <-- R <-- R <-- R <-- R <-- R
0 1 2 3 4 5 6 7
o3 : ChainComplex
|
i4 : M = coker kRes.dd_5
o4 = cokernel {4} | 0 -a 0 -c |
{4} | -b 0 -c 0 |
{4} | c 0 a 0 |
{4} | 0 c 0 b |
4
o4 : R-module, quotient of R
|
i5 : I = endomorphismRingIdeal(M,X)
Using GC ring in VectorArithmetic.
Using GC ring in VectorArithmetic.
Using GC ring in VectorArithmetic.
2 2
o5 = ideal (X , X X - X , X X - X , X X , X X , X - X , X X - X , X X ,
0 0 1 0 0 2 3 0 3 1 0 1 1 1 2 2 1 3
------------------------------------------------------------------------
2 2
X X - X , X X , X , X X - X , X X - X , X X , X X , X - X , - X -
2 0 1 2 1 2 2 3 2 3 0 0 3 1 3 2 3 3 1
------------------------------------------------------------------------
X + 1)
3
o5 : Ideal of R <|X , X , X , X |>
0 1 2 3
|
The endomorphisms corresponding to the variables chosen are cached in the ideal returned by this method, and can be accessed using the key "EndomorphismRingIdealGens".
i6 : maps = I.cache#"EndomorphismRingIdealGens"
o6 = {{4} | 0 0 1 0 |, {4} | 0 0 0 0 |, {4} | 0 0 0 0 |, {4} | 1 0 0 0 |}
{4} | 0 0 0 0 | {4} | 0 1 0 0 | {4} | 0 0 0 1 | {4} | 0 0 0 0 |
{4} | 0 0 0 0 | {4} | 0 0 1 0 | {4} | 1 0 0 0 | {4} | 0 0 0 0 |
{4} | 0 1 0 0 | {4} | 0 0 0 0 | {4} | 0 0 0 0 | {4} | 0 0 0 1 |
o6 : List
|
i7 : assert(maps_0*maps_2 == maps_3) |
The object endomorphismRingIdeal is a method function.