# rightKernel -- Right kernel of a matrix

## Synopsis

• Usage:
K = rightKernel M
• Inputs:
• M, ,
• Optional inputs:
• DegreeLimit => ..., default value 10
• Outputs:
• N, ,

## Description

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

## Ways to use rightKernel :

• "rightKernel(Matrix)"

## For the programmer

The object rightKernel is .