next | previous | forward | backward | up | top | index | toc | Macaulay2 website
NCAlgebra :: rightKernel

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

Synopsis

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

See also

Ways to use rightKernel :

For the programmer

The object rightKernel is a method function with options.