# rightKernel -- Method for computing kernels of matrices over noncommutative rings in a given degree without using Bergman

## Synopsis

• Usage:
rightKernel(M,n)
• Inputs:
• M, an instance of the type NCMatrix,
• n, an integer, the degree in which to compute the kernel
• Optional inputs:
• NumberOfBins => an integer, default value 1, an integer dividing the number of rows of M
• Verbosity => an integer, default value 0
• Outputs:

## Description

The method rightKernelBergman is a very effective tool for computing kernels of homogeneous matrices with entries in rings over QQ or ZZ/p. This method provides an alternative that can be used for NCMatrices over any ground ring. The method is also useful when one knows additional homological information - for example if the cokernel of M has a linear free resolution.

Given an NCMatrix M and an integer n, this method returns a basis for the kernel of the matrix (viewed as a linear map of free right modules) in homogeneous degree n. The method successively computes annihilators of columns of M and intersects them. For large matrices or large values of n, it may save memory to break the calculation into smaller pieces. Use the option NumberOfBins to reduce the memory (but increase the time) the program uses. Set Verbosity to 1 to see progress updates.

To avoid accidental calls to Bergman for normal form calculations, set the MAXSIZE environment variable fairly high, say 1000.

 i1 : B = threeDimSklyanin(QQ,{1,1,-1},{x,y,z}) --Calling Bergman for NCGB calculation. Complete! o1 = B o1 : NCQuotientRing i2 : sigma = ncMap(B,B,{y,z,x}) o2 = NCRingMap B <--- B o2 : NCRingMap i3 : C = oreExtension(B,sigma,w) --Calling Bergman for NCGB calculation. Complete! o3 = C o3 : NCQuotientRing i4 : D = (ambient C)/(ideal C + ncIdeal{promote(w^2,ambient C)}) --Calling Bergman for NCGB calculation. Complete! o4 = D o4 : NCQuotientRing

This algebra is an Ore extension of a 3-dimensional Sklyanin algebra, factored by the normal regular element w^2. This algebra is Koszul, hence it has a linear free resolution. The rightKernel method is significantly faster than rightKernelBergman in this case. Also note the two methods return different generating sets for the kernel.

 i5 : M1 = ncMatrix {{x,y,z,w}} o5 = | x y z w | o5 : NCMatrix i6 : M2 = rightKernel(M1,1) o6 = | z -x -y 0 0 -w 0 | | -y z -x -w 0 0 0 | | x y z 0 -w 0 0 | | 0 0 0 x y z w | o6 : NCMatrix i7 : M3 = rightKernel(M2,1) o7 = | -y 0 w 0 0 0 0 0 | | -x 0 0 -w 0 0 0 0 | | z -w 0 0 0 0 0 0 | | 0 z -x -y 0 0 -w 0 | | 0 -y z -x -w 0 0 0 | | 0 x y z 0 -w 0 0 | | 0 0 0 0 x y z w | o7 : NCMatrix i8 : rightKernelBergman(M2) --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! o8 = | 0 0 0 0 y 0 -w 0 | | 0 0 0 0 x w 0 0 | | 0 0 0 0 -z 0 0 w | | 0 w 0 0 0 y x -z | | 0 0 0 w 0 x -z y | | 0 0 w 0 0 -z -y -x | | w -z -y -x 0 0 0 0 | o8 : NCMatrix i9 : M4 = rightKernel(M3,1) o9 = | -w 0 0 0 0 0 0 0 | | -y 0 w 0 0 0 0 0 | | -x 0 0 -w 0 0 0 0 | | z -w 0 0 0 0 0 0 | | 0 z -x -y 0 0 -w 0 | | 0 -y z -x -w 0 0 0 | | 0 x y z 0 -w 0 0 | | 0 0 0 0 x y z w | o9 : NCMatrix i10 : rightKernelBergman(M3) --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! o10 = | 0 0 0 0 0 0 0 w | | 0 0 0 0 0 -w 0 y | | 0 0 0 0 w 0 0 x | | 0 0 0 0 0 0 w -z | | 0 w 0 0 y x -z 0 | | 0 0 0 w x -z y 0 | | 0 0 w 0 -z -y -x 0 | | w -z -y -x 0 0 0 0 | o10 : NCMatrix