# Singular

### A.7.2 Right Groebner bases and syzygies

Most of the SINGULAR:PLURAL commands correspond to the left-sided computations, that is left Groebner bases, left syzygies, left resolutions and so on. However, the right-sided computations can be done, using the left-sided functionality and opposite algebras.

In the example below, we consider the algebra and a set of generators .

We will compute a left Groebner basis `LI` and a left syzygy module `LS` of a left ideal, generated by the set .

Then, we define the opposite algebra `Aop` of `A`, set it as a basering, and create opposite objects of already computed ones.

Further on, we compute a right Groebner basis `RI` and a right syzygy module `RS` of a right ideal, generated by the set in .

 ```// ----- setting up the algebra: LIB "ncalg.lib"; def A = makeUsl2(); setring A; A; ==> // coefficients: QQ ==> // number of vars : 3 ==> // block 1 : ordering dp ==> // : names e f h ==> // block 2 : ordering C ==> // noncommutative relations: ==> // fe=ef-h ==> // he=eh+2e ==> // hf=fh-2f // ----- equivalently, you may use // ring AA = 0,(e,f,h),dp; // matrix D[3][3]; // D[1,2]=-h; D[1,3]=2*e; D[2,3]=-2*f; // def A=nc_algebra(1,D); setring A; option(redSB); option(redTail); matrix T; // --- define a generating set ideal I = e2,f; ideal LI = std(I); // the left Groebner basis of I LI; // we see that I was not a Groebner basis ==> LI[1]=f ==> LI[2]=h2+h ==> LI[3]=eh+e ==> LI[4]=e2 module LS = syz(I); // the left syzygy module of I print(LS); ==> -ef-2h+6,-f3, -ef2-fh+4f, -e2f2-4efh+16ef-6h2+42h-72\ , ==> e3, e2f2-6efh-6ef+6h2+18h+12,e3f-3e2h-6e2,e4f // check: LS is a left syzygy, if T=0: T = transpose(LS)*transpose(I); print(T); ==> 0, ==> 0, ==> 0, ==> 0 // --- let us define the opposite algebra of A def Aop = opposite(A); setring Aop; Aop; // see how Aop looks like ==> // coefficients: QQ ==> // number of vars : 3 ==> // block 1 : ordering a ==> // : names H F E ==> // : weights 1 1 1 ==> // block 2 : ordering ls ==> // : names H F E ==> // block 3 : ordering C ==> // noncommutative relations: ==> // FH=HF-2F ==> // EH=HE+2E ==> // EF=FE-H // --- we "oppose" (transfer) objects from A to Aop ideal Iop = oppose(A,I); ideal RIop = std(Iop); // the left Groebner basis of Iop in Aop module RSop = syz(Iop); // the left syzygy module of Iop in Aop module LSop = oppose(A,LS); module RLS = syz(transpose(LSop)); // RLS is the left syzygy of transposed LSop in Aop // --- let us return to A and transfer (i.e. oppose) // all the computed objects back setring A; ideal RI = oppose(Aop,RIop); // the right Groebner basis of I RI; // it differs from the left Groebner basis LI ==> RI[1]=f ==> RI[2]=h2-h ==> RI[3]=eh+e ==> RI[4]=e2 module RS = oppose(Aop,RSop); // the right syzygy module of I print(RS); ==> -ef+3h+6,-f3, -ef2+3fh,-e2f2+4efh+4ef, ==> e3, e2f2+2efh-6ef+2h2-10h+12,e3f, e4f // check: RS is a right syzygy, if T=0: T = matrix(I)*RS; T; ==> T[1,1]=0 ==> T[1,2]=0 ==> T[1,3]=0 ==> T[1,4]=0 module RLS; RLS = transpose(oppose(Aop,RLS)); // RLS is the right syzygy of a left syzygy of I // it is I itself ? print(RLS); ==> e2,f ```