Home Online Manual
Top
Back: Non-commutative Algebra
Forward: Right Groebner bases and syzygies
FastBack: Geometric Invariant Theory
FastForward: Applications
Up: Non-commutative Algebra
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

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 $A:=U(sl_2)$ 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