|
A.6.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;
==> // characteristic : 0
==> // 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
==> // characteristic : 0
==> // 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
|
|