ApCoCoA-1:NC.RedGB

From ApCoCoAWiki
Revision as of 17:05, 25 April 2013 by Xiu (talk | contribs) (New page: <command> <title>NC.ReducedGB</title> <short_description> Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a non-commutative polynomial ring. <par/>...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

NC.ReducedGB

Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a non-commutative polynomial ring.

Note that, given an ideal I and an admissible ordering Ordering, a set of non-zero polynomials Gb is called a Groebner basis of I w.r.t. Ordering if the leading term set LT{Gb} (w.r.t. Ordering) generates the leading term ideal LT(I) (w.r.t. Ordering). A Groebner basis w.r.t. Ordering is called a reduced Groebner basis w.r.t. Ordering if (1) it is interreduced and (2) all polynomials in it are monic. Also note that each ideal has a unique reduced Groebner basis w.r.t. Ordering. However, it is not necessarily finite.

Syntax

NC.RedGB(G:LIST):LIST
NC.RedGB(G:LIST, DegreeBound:INT, LoopBound:INT, Flag:INT):LIST

Description

Please note: The function(s) explained on this page is/are using the ApCoCoAServer. You will have to start the ApCoCoAServer in order to use it/them.

Please set ring environment coefficient field K, alphabet (or set of indeterminates) X and ordering via the functions NC.SetFp, NC.SetX and NC.SetOrdering, respectively, before calling the function. The default coefficient field is Q. The default ordering is length-lexicographic ordering ("LLEX"). For more information, please check the relevant functions.

  • @param G: a LIST of non-zero polynomials generating a two-sided ideal in K<X>. Each polynomial is represented as a LIST of monomials, which are pairs of the form [C, W] where W is a word in <X> and C is the coefficient of W. For example, the polynomial F=xy-y+1 is represented as F:=[[1,"xy"], [-1, "y"], [1,""]].

About the optional parameters: for most cases we do not know whether or not there exists a finite Groebner basis. Thue, the function has three optional parameters to interrupt the enumerating procedure. Note that at the moment all of the following three optional parameters must be used at the same time.

  • @param DegreeBound: a positive integer which gives a degree bound during the enumerating procedure. When the degree of the normal remainder of some S-polynomial reaches DegreeBound, the function stops the loop and returns a partial Groebner basis.

  • @param LoopBound: a positive integer which gives a bound for the main loop of the enumerating procedure. When it runs through the main loop LoopBound times, the function stops and returns a partial Groebner basis.

  • @param Flag: a non-negative integer which is a multi-switch for the output of ApCoCoAServer. If Flag=0, the server prints nothing on the screen. If Flag=1, the server prints basic information on the enumerating procedure, such as the number of main loop that has been proceeded, the number of elements in partial Groebner basis, the number of unselected obstructions; the total number of obstructions, the number of selected obstructions, and the number of unnecessary obstructions. If Flag=2, beside the information as FLAG=1, the server also displays explicitly the elements in paritial Groebner basis and current selected S-polynonial. Note that the initial idea of using Flag is to trace and debug the enumerating procedure.

  • @return: a LIST of polynomials, which is a reduced Groebner basis (w.r.t. the current ordering) of the two-sided ideal generated by G if (1) there exists a finite Groebner basis and (2) the enumerating procedure doesn't terminate due to reaching DegreeBound or LoopBound, and is a reduced partial Groebner basis otherwise.

Example

NC.SetX(<quotes>xyzt</quotes>); 
F1 := [[1,<quotes>xx</quotes>], [-1,<quotes>yx</quotes>]];
F2 := [[1,<quotes>xy</quotes>], [-1,<quotes>ty</quotes>]];
F3 := [[1,<quotes>xt</quotes>], [-1, <quotes>tx</quotes>]];
F4 := [[1,<quotes>yt</quotes>], [-1, <quotes>ty</quotes>]];
G := [F1, F2,F3,F4]; 
NC.ReducedGB(G); -- over Q (default field), LLEX ordering (default ordering)
[[[1, <quotes>yt</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xt</quotes>], [-1, <quotes>tx</quotes>]], [[1, <quotes>xy</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xx</quotes>], [-1, <quotes>yx</quotes>]], 
[[1, <quotes>tyy</quotes>], [-1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [-1, <quotes>tyx</quotes>]]]
-------------------------------
NC.SetFp(); -- set default Fp=F2
NC.ReducedGB(G); -- over F2, LLEX ordering
[[[1, <quotes>yt</quotes>], [1, <quotes>ty</quotes>]], [[1, <quotes>xt</quotes>], [1, <quotes>tx</quotes>]], [[1, <quotes>xy</quotes>], [1, <quotes>ty</quotes>]], [[1, <quotes>xx</quotes>], [1, <quotes>yx</quotes>]], 
[[1, <quotes>tyy</quotes>], [1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [1, <quotes>tyx</quotes>]]]
-------------------------------
NC.SetFp(3);
NC.ReducedGB(G); -- over F3, LLEX ordering
[[[1, <quotes>yt</quotes>], [2, <quotes>ty</quotes>]], [[1, <quotes>xt</quotes>], [2, <quotes>tx</quotes>]], [[1, <quotes>xy</quotes>], [2, <quotes>ty</quotes>]], [[1, <quotes>xx</quotes>], [2, <quotes>yx</quotes>]], 
[[1, <quotes>tyy</quotes>], [2, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [2, <quotes>tyx</quotes>]]]
-------------------------------
NC.SetX(<quotes>xyzt</quotes>); 
F1 := [[1,<quotes>xx</quotes>], [-1,<quotes>yx</quotes>]];   
F2 := [[1,<quotes>xy</quotes>], [-1,<quotes>ty</quotes>]];  
F3 := [[1,<quotes>xt</quotes>], [-1, <quotes>tx</quotes>]];  
F4 := [[1,<quotes>yt</quotes>], [-1, <quotes>ty</quotes>]];  
F:= [F1, F2,F3,F4]; 
G1:=NC.ReducedGB(F);
G1;
NC.IsGB(G1); -- G1 is a reduced Groebner basis
Fa:=[[1,<quotes>ytx</quotes>],[-1,<quotes></quotes>]]; 
Append(G1,Fa); -- add one element to G1
G1;
NC.IsGB(G1); -- G1 is not a Groebner basis any longer
G2:=NC.ReducedGB(G1); -- compute reduced Groebner basis G2 generated by G1
G2;
G3:=NC.IsGB(G2);
G3:=NC.ReducedGB(G2); -- compute reduced Groebner basis G3 generated by G2
G3;
NC.IsGB(G3);
G2=G3; -- of course
[[[1, <quotes>yt</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xt</quotes>], [-1, <quotes>tx</quotes>]], [[1, <quotes>xy</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xx</quotes>], [-1, <quotes>yx</quotes>]], [[1, <quotes>tyy</quotes>], [-1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [-1, <quotes>tyx</quotes>]]]
-------------------------------
True
-------------------------------
[[[1, <quotes>yt</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xt</quotes>], [-1, <quotes>tx</quotes>]], [[1, <quotes>xy</quotes>], [-1, <quotes>ty</quotes>]], [[1, <quotes>xx</quotes>], [-1, <quotes>yx</quotes>]], [[1, <quotes>tyy</quotes>], [-1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [-1, <quotes>tyx</quotes>]], [[1, <quotes>ytx</quotes>], [-1, <quotes></quotes>]]]
-------------------------------
False
-------------------------------
[[[1, <quotes>y</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>x</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>ttt</quotes>], [-1, <quotes></quotes>]]]
-------------------------------
[[[1, <quotes>y</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>x</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>ttt</quotes>], [-1, <quotes></quotes>]]]
-------------------------------
True
-------------------------------
True
-------------------------------

See also

NC.GB

NC.IsGB

NC.SetOrdering

NC.TruncatedGB

Introduction to CoCoAServer