# NCMatrix -- Type of a matrix over a noncommutative ring

## Description

This is the type of a matrix over a noncommutative ring. These represent homomorphisms between two free modules in chosen bases (whether you think of it as a map of left or right modules is up you). Modules themselves are not implemented yet in the NCAlgebra package, but are slated for a later release.

Common ways to make (and use) a matrix include

Common ways to get information about matrices

Common operations on matrices:

This is the type of a matrix with entries in an NCRing. Many of the basic operations one can perform on a Matrix are also allowed with an NCMatrix, and the behavior of the functions should be similar to the corresponding 'usual' command. Some examples of creating and using NCMatrices are given below.

 i1 : A = QQ{a,b,c,d} o1 = A o1 : NCPolynomialRing i2 : M = ncMatrix {{a,b,c,d}} o2 = | a b c d | o2 : NCMatrix i3 : N = ncMatrix {{M,2*M,3*M},{4*M,5*M,6*M}} o3 = | a b c d 2*a 2*b 2*c 2*d 3*a 3*b 3*c 3*d | | 4*a 4*b 4*c 4*d 5*a 5*b 5*c 5*d 6*a 6*b 6*c 6*d | o3 : NCMatrix i4 : B = QQ{x,y,z} o4 = B o4 : NCPolynomialRing i5 : f = y*z + z*y - x^2 2 o5 = zy+yz-x o5 : B i6 : g = x*z + z*x - y^2 2 o6 = zx-y +xz o6 : B i7 : h = z^2 - x*y - y*x 2 o7 = z -yx-xy o7 : B i8 : I = ncIdeal {f,g,h} 2 2 2 o8 = Two-sided ideal {zy+yz-x , zx-y +xz, z -yx-xy} o8 : NCIdeal i9 : Igb = ncGroebnerBasis I --Calling Bergman for NCGB calculation. Complete! 2 2 2 o9 = y x-xy ; Lead Term = (y x, 1) 2 2 2 yx -x y; Lead Term = (yx , 1) 2 zx-y +xz; Lead Term = (zx, 1) 2 zy+yz-x ; Lead Term = (zy, 1) 2 2 z -yx-xy; Lead Term = (z , 1) o9 : NCGroebnerBasis i10 : M = ncMatrix {{x, y, z}} o10 = | x y z | o10 : NCMatrix i11 : sigma = ncMap(B,B,{y,z,x}) o11 = NCRingMap B <--- B o11 : NCRingMap i12 : N = ncMatrix {{M},{sigma M}, {sigma sigma M}} o12 = | x y z | | y z x | | z x y | o12 : NCMatrix i13 : Nred = N^3 % Igb o13 = | -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 | | y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y | | 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 | o13 : NCMatrix i14 : C = B/I o14 = C o14 : NCQuotientRing i15 : phi = ncMap(C,B,gens C) o15 = NCRingMap C <--- B o15 : NCRingMap i16 : NC = phi N o16 = | x y z | | y z x | | z x y | o16 : NCMatrix i17 : N3C = NC^3 o17 = | -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 | | y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y | | 2*y^2*z+y^3+y*x*y+x*y*x+2*x^2*z+x^3 -y^2*z+y^3+y*x*z-y*x*y+x*y*z+x*y^2+2*x*y*x+x^2*z+3*x^2*y y^2*z+y*x*z+2*y*x*y+x*y*z+3*x*y^2-x*y*x-x^2*z+x^2*y+x^3 | o17 : NCMatrix i18 : X = NC + 3*NC o18 = | 4*x 4*y 4*z | | 4*y 4*z 4*x | | 4*z 4*x 4*y | o18 : NCMatrix i19 : Y = NC | 2*NC o19 = | x y z 2*x 2*y 2*z | | y z x 2*y 2*z 2*x | | z x y 2*z 2*x 2*y | o19 : NCMatrix i20 : Z = X || NC o20 = | 4*x 4*y 4*z | | 4*y 4*z 4*x | | 4*z 4*x 4*y | | x y z | | y z x | | z x y | o20 : NCMatrix

## For the programmer

The object NCMatrix is a type, with ancestor classes MutableHashTable < HashTable < Thing.