### 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 considered as a field
    ==> // 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 considered as a field
    ==> // 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

User manual for Singular version 4.4.1, 2025, generated by texi2html.