# rightKernelBergman -- Methods for computing kernels of matrices over noncommutative rings using Bergman

## Synopsis

• Usage:
rightKernelBergman(M,DegreeLimit=>n)
• Inputs:
• M, an instance of the type NCMatrix, a homogeneous matrix interpreted as a map of free right modules
• Optional inputs:
• DegreeLimit => an integer, default value 10, the maximum degree in which to compute the kernel
• Outputs:
• an instance of the type NCMatrix, the kernel of the matrix (considered as a right module map) to degree n

## Description

Let M be a matrix with homogeneous entries in an NCRing. If the degrees of the entries of M satisfy certain consistency conditions, one can define a graded homomorphism of free right modules via left multiplication by M. If isHomogeneous(M) returns true, these conditions have been verified for M and M is a valid input for rightKernelBergman. Otherwise, an error is returned stating that M is not homogeneous. To set the isHomogeneous flag to true, use assignDegrees.

For valid inputs, this method computes the first n homogeneous components of the (right) kernel of the homomorphism determined by M. If n is not specified by the user, the default maximum degree is 10. The method returns a minimal set of generators for the kernel in these degrees.

The results of this command are cached in the input matrix M in M.cache#rightKernel, and the maximum degree used in this computation is in M.cache#rightKernelDegreeLimit.

 i1 : B = threeDimSklyanin(QQ,{1,1,-1},{x,y,z}) --Calling Bergman for NCGB calculation. Complete! o1 = B o1 : NCQuotientRing i2 : A = ambient B o2 = A o2 : NCPolynomialRing i3 : g = -y^3-x*y*z+y*x*z+x^3 3 3 o3 = -y +yxz-xyz+x o3 : A i4 : C = A/(ideal B + ncIdeal g) --Calling Bergman for NCGB calculation. Complete! o4 = C o4 : NCQuotientRing i5 : M3 = ncMatrix {{x,y,z,0}, {-y*z-2*x^2,-y*x,z*x-x*z,x},{x*y-2*y*x,x*z,-x^2,y}, {-y^2-z*x,x^2,-x*y,z}} o5 = | x y z 0 | | -y*z-2*x^2 -y*x y^2-2*x*z x | | -2*y*x+x*y x*z -x^2 y | | -2*y^2+x*z x^2 -x*y z | o5 : NCMatrix i6 : assignDegrees(M3,{1,0,0,0},{2,2,2,1}) o6 = | x y z 0 | | -y*z-2*x^2 -y*x y^2-2*x*z x | | -2*y*x+x*y x*z -x^2 y | | -2*y^2+x*z x^2 -x*y z | o6 : NCMatrix i7 : ker1M3 = rightKernelBergman(M3) --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! o7 = | -z -x y -y*z-x^2 | | y z x y^2 | | -x y -z 2*y*x-x*y | | -2*y^2 -2*x^2 -2*y*x+2*x*y -2*x*y*z | o7 : NCMatrix i8 : M3*ker1M3 == 0 o8 = true i9 : ker2M3 = rightKernelBergman(ker1M3) --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! o9 = | -y x^2 -x*z -x*y | | x y^2 -y*x+2*x*y -y*z+2*x^2 | | z -x*y x^2 -x*z | | 0 -z -y -x | o9 : NCMatrix i10 : ker1M3*ker2M3 == 0 o10 = true i11 : ker3M3 = rightKernelBergman(ker2M3) --Calling Bergman for NCGB calculation. Complete! --Calling Bergman for NCGB calculation. Complete! o11 = | 0 -2*y*x -2*y^2+2*x*z -y*x*z+x^3 | | -y -z -x -x*y | | -z x y x*z | | x y -z 0 | o11 : NCMatrix i12 : ker2M3*ker3M3 == 0 o12 = true