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.