### 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.4.1, 2025, generated by texi2html.