|  |  A.7.1 Left and two-sided Groebner bases 
For a set of polynomials (resp. vectors) Sin a non-commutative G-algebra, SINGULAR:PLURAL provides two algorithms for computing Groebner bases. 
The command stdcomputes a left Groebner basis of a left module, generated by the setS(see  std (plural)).
The commandtwostd (plural)computes a  two-sided Groebner basis (which is in particular also a left Groebner basis) of a two-sided ideal, generated by the setS(see  twostd (plural)). 
In the example below, we consider a particular set Sin the algebra with the degree reverse lexicographic ordering.
We compute a left Groebner basis Lof the left ideal generated bySand a two-sided Groebner basisTof the two-sided ideal generated byS.Then, we read off the information on the vector space dimension of the
factor modules
 A/LandA/Tusing the commandvdim(see  vdim (plural)).Further on, we use the command
 reduce(see  reduce (plural)) to compare the left ideals generated
byLandT. 
We set option(redSB)andoption(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
 | 
 
 |