This function computes a minimal generating set of the kernel (up to a specified degree) of a map defined by the matrix $M$, which must be a homogeneous matrix defined over a noncommutative ring. At the moment, this is done by computing two Groebner bases; one to compute the kernel, and another to compute the minimal generators of the kernel.
This (rather slow) way of doing this will be replaced with a version of Anick's resolution for modules that will be implemented in the future. We offer this version in the meantime, since it is still quite useful for investigations.
i1 : A = fourDimSklyanin(ZZ/32003, {a,b,c,d}, DegreeLimit => 10)
o1 = A
o1 : FreeAlgebraQuotient
|
i2 : k = vars A
o2 = | a b c d |
1 4
o2 : Matrix A <--- A
|
i3 : d1 = rightKernel(k, DegreeLimit => 10)
o3 = {1} | 3145c 6051d -4786b -6050d 3144c -4785b |
{1} | 3146d -6050c 4785a 6049c 3145d 4786a |
{1} | a b d 0 0 0 |
{1} | 0 0 0 a b c |
4 6
o3 : Matrix A <--- A
|
i4 : d2 = rightKernel(d1, DegreeLimit => 10)
o4 = {2} | -4785b -3145d -4026c 0 |
{2} | 4786a -479c 6050d 0 |
{2} | c 3624a 10076b 0 |
{2} | 0 3145c 6051d -4786b |
{2} | 0 3146d -6050c 4785a |
{2} | 0 a b d |
6 4
o4 : Matrix A <--- A
|
i5 : d3 = rightKernel(d2, DegreeLimit => 10)
o5 = {3} | -d |
{3} | -4785b |
{3} | 4786a |
{3} | c |
4 1
o5 : Matrix A <--- A
|
i6 : d4 = rightKernel(d3, DegreeLimit => 10)
o6 = 0
1
o6 : Matrix A <--- 0
|
As a warning, note that matrix multiplication over noncommutative rings currently takes place in the opposite ring as a result of existing code over the exterior and Weyl algebras. As a result, one should check computations coming from rightKernel with ncMatrixMult until this is fixed.
i7 : d1*d2
o7 = {1} | 5340cb+82da -7248cd-2dc 0 2851ca+2409db |
{1} | -2409ca-5194db 0 11851cd-2dc 2261cb-5340da |
{1} | 2cd -958cb -8052ca 0 |
{1} | 0 6292db 12102da 2dc |
4 4
o7 : Matrix A <--- A
|
i8 : ncMatrixMult(d1,d2)
o8 = 0
4 4
o8 : Matrix A <--- A
|
The object rightKernel is a method function with options.