|
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 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).
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
|
|