
A.7.1 Left and twosided Groebner bases
For a set of polynomials (resp. vectors) S in a noncommutative Galgebra, SINGULAR:PLURAL provides two algorithms for computing Groebner bases.
The command std computes a left Groebner basis of a left module, generated by the set S (see std (plural)).
The command twostd (plural) computes a twosided Groebner basis (which is in particular also a left Groebner basis) of a twosided ideal, generated by the set S (see twostd (plural)).
In the example below, we consider a particular set S
in the algebra
with the degree reverse lexicographic ordering.
We compute a left Groebner basis L of the left ideal generated by S
and a twosided Groebner basis T of the twosided ideal generated by S .
Then, we read off the information on the vector space dimension of the
factor modules A/L and A/T using the command vdim
(see vdim (plural)).
Further on, we use the command reduce
(see reduce (plural)) to compare the left ideals generated
by L and T .
We set option(redSB) and option(redTail) to make SINGULAR
compute completely reduced minimal bases of ideals
(see option and Groebner bases in Galgebras for definitions
and further details).
For long running computations, it is always
recommended to set option(prot) to make SINGULAR display some information on the performed computations (see option for an interpretation of
the displayed symbols).
 //  1. setting up the algebra
ring R = 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;
//  equivalently, you may use the following:
// LIB "ncalg.lib";
// def A = makeUsl2();
// setring A;
//  2. defining the set S
ideal S = e^3, f^3, h^3  4*h;
option(redSB);
option(redTail);
option(prot); // let us activate the protocol
ideal L = std(S);
==> 3(2)s
==> s
==> s
==> 5s
==> s
==> (4)s
==> 4(5)(4)s
==> (6)(5)(4)s
==> 3(7)4(5)(4)(3)s
==> 3(4)(3)4(2)s
==> (3)(2)s
==> 3(5)(4)4(2)5
==> (S:5)
==> product criterion:7 chain criterion:12
L;
==> L[1]=h34h
==> L[2]=fh22fh
==> L[3]=eh2+2eh
==> L[4]=2efhh22h
==> L[5]=f3
==> L[6]=e3
vdim(L); // the vector space dimension of the module A/L
==> 15
option(noprot); // turn off the protocol
ideal T = twostd(S);
T;
==> T[1]=h34h
==> T[2]=fh22fh
==> T[3]=eh2+2eh
==> T[4]=f2h2f2
==> T[5]=2efhh22h
==> T[6]=e2h+2e2
==> T[7]=f3
==> T[8]=ef2fh
==> T[9]=e2feh2e
==> T[10]=e3
vdim(T); // the vector space dimension of the module A/T
==> 10
print(matrix(reduce(L,T))); // reduce L with respect to T
==> 0,0,0,0,0,0
// as we see, L is included in the left ideal generated by T
print(matrix(reduce(T,L))); // reduce T with respect to L
==> 0,0,0,f2h2f2,0,e2h+2e2,0,ef2fh,e2feh2e,0
// the nonzero elements belong to T only
ideal LT = twostd(L); // the twosided Groebner basis of L
// LT and T coincide as left ideals:
size(reduce(LT,T));
==> 0
size(reduce(T,LT));
==> 0

