# Basic operations on noncommutative algebras

The AssociativeAlgebras package contains a number of methods for studying noncommutative rings - primarily graded rings. The following three extended examples highlight the capabilities of the package.

Our first example concerns a three-dimensional Sklyanin algebra. This example is a PI-ring. We define the ring as a quotient of the tensor algebra on three generators by the two-sided ideal generated by the three elements listed.

 i1 : A = QQ<|x,y,z|> o1 = A o1 : FreeAlgebra i2 : f = y*z + z*y - x^2 2 o2 = - x + y*z + z*y o2 : A i3 : g = x*z + z*x - y^2 2 o3 = x*z - y + z*x o3 : A i4 : h = z^2 - x*y - y*x 2 o4 = - x*y - y*x + z o4 : A i5 : B = A/ideal{f,g,h} o5 = B o5 : FreeAlgebraQuotient

It is known that this algebra has a unique (up to rescaling) central element of degree 3. We can verify this claim computationally using centralElements and check that the element is regular to a given degree. See isLeftRegular.

 i6 : centralElements(B,3) o6 = | -y3+yzx-zyx+z3 | 1 1 o6 : Matrix B <--- B i7 : j = z^3+y*z*x-z*y*x-y^3 3 3 o7 = - y + y*z*x - z*y*x + z o7 : B i8 : isCentral j o8 = true i9 : apply(5,i->isLeftRegular(j,i+1)) o9 = {true, true, true, true, true} o9 : List

In fact, we can see that j is (up to scaling) the only normal element of degree 3. See the discussion above for interpreting the output of normalElements.

 i10 : normalElements(B,3,n) o10 = ({}, {| n_(z^2*y) n_(z^2*x) n_(z*y*z) n_(z*y^2) n_(z*y*x)+n_(z^3) ----------------------------------------------------------------------- n_(y*z*y) n_(y*z*x)-n_(z^3) n_(y^3)+n_(z^3) n_(y^2*x) |}) o10 : Sequence i11 : ncBasis(3,B) o11 = | y2x y3 yzx yzy zyx zy2 zyz z2x z2y z3 | 1 10 o11 : Matrix B <--- B

The user can create noncommutative rings in ways other than specifying a presentation. For our second example, consider a skew polynomial ring on four generators, where generators skew-commute (but are not nilpotent). See skewPolynomialRing for more details.

 i12 : C = skewPolynomialRing(QQ,(-1)_QQ,{x,y,z,w}) o12 = C o12 : FreeAlgebraQuotient

Let us briefly note that the user can also define a skew polynomial ring with coefficients in a commutative ring.

 i13 : R = QQ[q]/ideal{q^4+q^3+q^2+q+1} o13 = R o13 : QuotientRing i14 : B = skewPolynomialRing(R,q,{x,y,z,w}) Using GC ring in VectorArithmetic. o14 = B o14 : FreeAlgebraQuotient i15 : x*y == q*y*x o15 = true

Returning to the main example, we can define a graded Ore extension of C by specifying an automorphism. The function map is used to define a ring map. Note that ring maps are linear and multiplicative by definition but are not assumed to be well-defined.

 i16 : use C o16 = C o16 : FreeAlgebraQuotient i17 : sigma = map(C,C,{y,z,w,x}) o17 = map (C, C, {y, z, w, x}) o17 : RingMap C <--- C

We form the Ore extension of C by sigma. See oreExtension.

 i18 : D = oreExtension(C,sigma,a) o18 = D o18 : FreeAlgebraQuotient

The new generator a is normal and regular in D. Regularity (on the left or right) can be checked one homogeneous degree at a time. See isLeftRegular. Thus a determines a graded automorphism f:D->D via a*r=f(r)*a.

 i19 : isNormal a o19 = true i20 : apply(5,i-> isLeftRegular(a,i+1)) o20 = {true, true, true, true, true} o20 : List i21 : sigmaD = normalAutomorphism a o21 = map (D, D, {y, z, w, x, a}) o21 : RingMap D <--- D

Given an automorphism, one can check to see which elements it normalizes in any given degree.

 i22 : normalElements(sigmaD,1) o22 = | a | 1 1 o22 : Matrix D <--- D i23 : normalElements(sigmaD,2) o23 = 0 1 o23 : Matrix QQ <--- 0

One can check for the presence of normal elements more generally. In our example, since a is normal, a^2 will also be normal. It is the only normal monomial of degree 2. A complete description of the normal elements in a given degree is given by normalElements.

 i24 : normalElements(D,2,P) 2 o24 = ({a }, {| P_(a*w) P_(a*z) P_(a*y) P_(a*x) P_(w*z) P_(w*y) P_(w*x) ----------------------------------------------------------------------- P_(z*y) P_(z*x) P_(y*x) P_(z^2)^2-P_(y^2)P_(w^2) ----------------------------------------------------------------------- P_(y^2)P_(z^2)-P_(x^2)P_(w^2) P_(x^2)P_(z^2)-P_(w^2)^2 ----------------------------------------------------------------------- P_(y^2)^2-P_(w^2)^2 P_(x^2)P_(y^2)-P_(z^2)P_(w^2) ----------------------------------------------------------------------- P_(x^2)^2-P_(y^2)P_(w^2) |}) o24 : Sequence

Each component of the "normal variety" is a set of polynomial equations which must be satisfied by the coefficients of the monomial basis for an element expressed in that basis to be normal. In this case, the basis of D in degree 2 is

 i25 : ncBasis(2,D) o25 = | x2 yx y2 zx zy z2 wx wy wz w2 ax ay az aw a2 | 1 15 o25 : Matrix D <--- D

The output of normalElements tells us that in order for a degree 2 element of D to be normal, it must be an expression in powers of the generators, and that the coefficients of these powers must satisfy the six nontrivial equations listed.

 i26 : isNormal (x^2+z^2-y^2-w^2) o26 = true

Of course, one has been able to define (graded) commutative algebras in Macaulay2 for a long time. Specifying graded commutativity is usually done with the SkewCommutative option when creating the ring. The user can convert such rings (and their quotients) to a FreeAlgebraQuotient by using the command toFreeAlgebraQuotient:

 i27 : E' = QQ[x,y,z,w,SkewCommutative=>true] o27 = E' o27 : PolynomialRing, 4 skew commutative variables i28 : E = toFreeAlgebraQuotient E' o28 = E o28 : FreeAlgebraQuotient i29 : f = map(E,C,gens E) o29 = map (E, C, {x, y, z, w}) o29 : RingMap E <--- C i30 : use C o30 = C o30 : FreeAlgebraQuotient i31 : f x^2 o31 = 0 o31 : E i32 : use E o32 = E o32 : FreeAlgebraQuotient i33 : x^2 == 0 o33 = true