The NCAlgebra package contains a number of methods for studying noncommutative rings  primarily graded rings. The following three extended examples highlight the capabilities of the package. For a detailed account of the Groebner basis calculations underlying nearly all of these methods, see Using the Bergman interface.
Our first example concerns a threedimensional Sklyanin algebra. This example is a PIring. We define the ring as a quotient of the tensor algebra on three generators by the twosided ideal generated by the three elements listed.

Users familiar with Macaulay2 will recognize the notation for a ring of noncommutative polynomials is identical to that for local rings, see Ring List. Thus the previous line does not generate an error if you forget to load the NCAlgebra package.




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.




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.


Recently, we studied noncommutative matrix factorizations over noncommutative hypersurfaces. Here is a simple example. The hypersurface is B/(j). However, iterated quotients are not yet implemented, so we define this ring as a quotient of the tensor algebra. Note the use of "promote" to ensure j is thought of as an element of the tensor algebra.




As in the commutative case, any minimal free resolution of a finitely generated module over a noncommutative hypersurface is eventually given by a matrix factorization. We resolve the trivial module for B' by expressing it as the cokernel of a homogeneous matrix.



As discussed in Using the Bergman interface, the method rightKernelBergman only computes the kernel of a module map to a certain homogeneous degree. Applying a theorem of Cassidy and Shelton, we can be sure the matrices in any minimal graded free resolution of the trivial module of B' will have entries of homogeneous degree at most 3. Thus we conclude M is the third syzygy module and N is the fourth. If we lift these matrices we see that M and N are nearly a factorization of the central element j.




It appears that a change of basis will produce a matrix factorization. In general, Bergman returns a generating set for the kernel, but it need not have any nice properties. Here the NCAlgebra package can help by factoring a map. We would like M*M' = M'*M = j*I where I is the identity matrix.


The matrix jId is diagonal, and we have assigned degrees to make it compatible with M. Now we factor the lift of M through jId.


We see that M' and N describe the same submodule and we check that the factorization worked:


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 skewcommute (but are not nilpotent). See skewPolynomialRing for more details.

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



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



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

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.



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


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.

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

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. The coefficients of these powers must satisfy the six equations listed.

In Macaulay2, the user can define a polynomial ring to be commutative or skewcommutative (the exterior algebra). The user can convert these rings (and their quotients) to a type compatible with the NCAlgebra package using toNCRing.






Conversely, the user can convert an NCRing to a (quotient of a) polynomial ring in the usual sense of Macaulay2 using toM2Ring. This method works on any NCRing  the result is the abelianization or "exteriorization" of the given ring. For example, if we abelianize the skew polynomial ring C, we get a ring in which only powers of the generators are nonzero. On the other hand, if we "exteriorize" C, we get the exterior algebra.






Finally, we can construct the opposite ring. The opposite ring of D will be the Ore extension by the inverse of sigma. See oppositeRing.




Our last extended example illustrates how to obtain a presentation for the endomorphism ring of a module over a commutative ring. First we define a hypersurface ring and a high syzygy module.




The endomorphism ring is computed using endomorphismRing. This method computes a presentation, but the presentation is typically not minimal. We see from the following calculation that X_3 = X_0X_2.


To eliminate redundant generators and relations, use minimizeRelations. This method makes several passes through the presentation, and stops if no minimization occurs.

We see a substantial reduction in the number of relations and that X_1 and X_3 are redundant generators. The endomorphisms themselves are cached, and can be accessed via endomorphismRingGens. As an example, we explicitly verify that X_3 is redundant.

