### A.7.1 Left and two-sided Groebner bases

For a set of polynomials (resp. vectors) `S` in a non-commutative G-algebra, 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 two-sided Groebner basis (which is in particular also a left Groebner basis) of a two-sided 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 two-sided Groebner basis `T` of the two-sided 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 G-algebras 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]=h3-4h ==> L[2]=fh2-2fh ==> L[3]=eh2+2eh ==> L[4]=2efh-h2-2h ==> 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]=h3-4h ==> T[2]=fh2-2fh ==> T[3]=eh2+2eh ==> T[4]=f2h-2f2 ==> T[5]=2efh-h2-2h ==> T[6]=e2h+2e2 ==> T[7]=f3 ==> T[8]=ef2-fh ==> T[9]=e2f-eh-2e ==> 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,f2h-2f2,0,e2h+2e2,0,ef2-fh,e2f-eh-2e,0 // the non-zero elements belong to T only ideal LT = twostd(L); // the two-sided Groebner basis of L // LT and T coincide as left ideals: size(reduce(LT,T)); ==> 0 size(reduce(T,LT)); ==> 0 ```

User manual for Singular version 4.3.1, 2022, generated by texi2html.