Difference between revisions of "ApCoCoA-1:NC.GB"

From ApCoCoAWiki
m (replaced <quotes> tag by real quotes)
 
(44 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 +
{{Version|1}}
 
<command>
 
<command>
 
<title>NC.GB</title>
 
<title>NC.GB</title>
 
<short_description>
 
<short_description>
Compute (inter)reduced (partial) two-sided Groebner basis of finitely generated ideal (through Buchberger's procedure).
+
Enumerate (partial) Groebner bases of finitely generated two-sided ideals in a non-commutative polynomial ring via the Buchberger procedure.
 
</short_description>
 
</short_description>
 
<syntax>
 
<syntax>
NC.GB(Polynomials:LIST[, DegreeBound:INT, LoopBound:INT, Flag:INT]):LIST
+
NC.GB(G:LIST[, Optimize:INT, OFlag:INT, DB:INT, LB:INT]):LIST
 
</syntax>
 
</syntax>
 
<description>
 
<description>
 +
Given a word ordering and a two-sided ideal <tt>I</tt>, a set of non-zero polynomials <tt>Gb</tt> is called a <em>Groebner basis</em> of <tt>I</tt> if the leading word set <tt>LW{Gb}</tt> generates the leading word ideal <tt>LW(I)</tt>. Note that it may not exist finite Groebner basis of the ideal <tt>I</tt>.
 +
<par/>
 
<em>Please note:</em> The function(s) explained on this page is/are using the <em>ApCoCoAServer</em>. You will have to start the ApCoCoAServer in order to use it/them.
 
<em>Please note:</em> The function(s) explained on this page is/are using the <em>ApCoCoAServer</em>. You will have to start the ApCoCoAServer in order to use it/them.
 
<par/>
 
<par/>
Before calling the function, please set ring environment coefficient field <tt>K</tt>, alphabet <tt>X</tt> and ordering through the functions <ref>NC.SetFp</ref>(Prime) (or <ref>NC.UnsetFp</ref>()), <ref>NC.SetX</ref>(X) and <ref>NC.SetOrdering</ref>(Ordering) respectively. Default coefficient field is <tt>Q</tt>. Default ordering is length-lexicographic ordering (<quotes>LLEX</quotes>). For more information, please check the relevant functions.
+
Please set non-commutative polynomial ring (via the command <ref>ApCoCoA-1:Use|Use</ref>) and word ordering (via the function <ref>ApCoCoA-1:NC.SetOrdering|NC.SetOrdering</ref>) before calling this function. The default word ordering is the length-lexicographic ordering ("LLEX"). For more information, please check the relevant commands and functions.
 
<itemize>
 
<itemize>
<item>@param <em>Polynomials</em>: a LIST of polynomials generating a two-sided ideal in <tt>K&lt;X&gt;</tt>. Each polynomial in <tt>K&lt;X&gt;</tt> is represented as a LIST of LISTs, which are pairs of form [c, w] where c is in <tt>K</tt> and w is a word in <tt>X*</tt>.  Unit in <tt>X*</tt> is empty word represented as an empty STRING <quotes></quotes>. <tt>0</tt> polynomial is represented as an empty LIST []. For example, polynomial <tt>F:=xy-y+1</tt> in <tt>K&lt;x,y&gt;</tt> is represented as F:=[[1,<quotes>xy</quotes>], [-1, <quotes>y</quotes>], [1,<quotes></quotes>]].</item>
+
<item>@param <em>G</em>: a LIST of non-zero non-commutative polynomials that generate a two-sided ideal. Each polynomial is represented as a LIST of LISTs, and each element in every inner LIST involves only one indeterminate or none (a constant). For example, the polynomial <tt>f=2x[2]y[1]x[2]^2-9y[2]x[1]^2x[2]^3+5</tt> is represented as F:=[[2x[1],y[1],x[2]^2], [-9y[2],x[1]^2,x[2]^3], [5]]. The zero polynomial <tt>0</tt> is represented as the empty LIST [].</item>
<item>@return: a LIST of polynomials, which is a reduced Groebner basis if a finite Groebner basis exists or a interreduced partial Groebner basis.</item>
+
 
 +
<item>@return: a LIST of non-zero non-commutative polynomials, which form a Groebner basis of the two-sided ideal generated by G if (1) there exists a finite Groebner basis and (2) the enumerating procedure was not interrupted by the degree bound DB or the loop bound LB, and form a partial Groebner basis otherwise.</item>
 
</itemize>
 
</itemize>
About the optional parameters: For most of cases we don't know whether there exists a finite Groebner basis. In stead of forcing computer yelling and informing nothing valuable, the function has 3 optional parameters to control the computation. Note that at the moment all of the following 3 additional optional parameters must be used at the same time.
+
About 4 optional parameters:
 
<itemize>
 
<itemize>
<item>@param <em>DegreeBound:</em> (optional) a INT (natural number) which gives a limitation on the degree of polynomials during Buchberger's procedure. When the degree of normal remainder of some <tt>S-element</tt> reaches <tt>DegreeBound</tt>, the function finishes the loop and returns a interreduced partial Groebner basis.</item>
+
<item>@param <em>Optimize:</em> an INT between 0 and 31. The value of Optimize indicates which criteria are used in the Buchberger procedure. For the time being, the function supports 5 criteria as follows.
<item>@param <em>LoopBound:</em> (optional) a INT (natural number) which gives a a limitation on the loop of Buchberger's procedure. When it runs through the main loop <tt>LoopBound</tt> times, the function stops the loop and returns a interreduced partial Groebner basis.</item>
+
  The multiply criterion: Optimize=1;
<item>@param <em>Flag:</em> (optional) a INT (natural number) which is a multi-switch for the output of ApCoCoAServer. If <tt>Flag=0</tt>, the server prints nothing on the screen. If <tt>Flag=1</tt>, the server prints basic information about computing procedure, such as number of S-elements has been checked and to be checked. If <tt>Flag=2</tt>, the server prints current partial Groebner basis before each loop as well. Note that the initial idea is to use <tt>Flag</tt> as a tool for debugging and tracing the computing process.</item>
+
  The leading word criterion: Optimize=2;
 +
  The tail reduction criterion: Optimize=4;
 +
  The backward criterion: Optimize=8;
 +
  Discarding redundant generators: Optimize=16;
 +
  (Reference: M. Kreuzer and X. Xiu, Non-Commutative Gebauer-Moeller Criteria, 2013.)
 +
One can choose none, one, or more than one criterion in the function. For instance, Optimize=0 means no criterion is used, Optimize=1 means applying the multiply criterion, Optimize=3 (1+2) means applying the multiply and the leading word criteria, etc. By default, Optimize=31, i.e. the function applies all criteria.</item>
 +
 
 +
<item>@param <em>OFlag:</em> an INT that indicates which information will be output by the ApCoCoAServer during the Buchberger enumerating procedure. If OFlag=1, the server outputs basic information, such as the number of enumerating steps that has been proceeded, the number of elements in partial Groebner basis, the degree of current selected obstruction, the number of unselected obstructions, the total number of obstructions, the number of selected obstructions, and the number of unnecessary obstructions. If OFlag=2, besides the information as OFlag=1, the server also displays explicitly the elements in partial Groebner basis and the current selected S-polynonial. Otherwise, the server outputs nothing during the procedure.</item>
 +
 
 +
<item>@param <em>DB:</em> a positive INT, which gives a degree bound of S-polynomials (or obstructions) during the Buchberger enumerating procedure. When the degree bound is reached, the procedure will be interrupted and return a partial Groebner basis.</item>
 +
 
 +
<item>@param <em>LB:</em> a positive INT, which gives a loop bound of enumerating steps. When the LB-th enumerating step finishes, the procedure will be interrupted and return a partial Groebner basis.</item>
 
</itemize>
 
</itemize>
 
<example>
 
<example>
NC.SetX(<quotes>xyzt</quotes>);  
+
Use ZZ/(2)[t,x,y];
F1 := [[1,<quotes>xx</quotes>], [-1,<quotes>yx</quotes>]];
+
NC.SetOrdering("ELIM");  
F2 := [[1,<quotes>xy</quotes>], [-1,<quotes>ty</quotes>]];
+
F1 := [[x^2], [y,x]]; -- x^2+yx
F3 := [[1,<quotes>xt</quotes>], [-1, <quotes>tx</quotes>]];
+
F2 := [[x,y], [t,y]]; -- xy+ty
F4 := [[1,<quotes>yt</quotes>], [-1, <quotes>ty</quotes>]];
+
F3 := [[x,t], [t,x]]; -- xt+tx
Generators := [F1, F2,F3,F4];  
+
F4 := [[y,t], [t,y]]; -- yt+ty
NC.GB(Generators); -- over Q (default field), LLEX ordering (default ordering)
+
G := [F1, F2,F3,F4];  
[[[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>]],  
+
NC.GB(G);
[[1, <quotes>tyy</quotes>], [-1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [-1, <quotes>tyx</quotes>]]]
+
Len(It);
-------------------------------
+
 
NC.SetFp(); -- set default Fp=F2
+
[[[x^2], [y, x]], [[t, y], [x, y]], [[y, t], [x, y]], [[t, x], [x, t]],  
NC.GB(Generators); -- over F2, LLEX ordering
+
[[x, y, x], [y^2, x]], [[x, y^2], [y, x, y]], [[y, x, t], [y^2, x]]]
[[[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);
+
7
NC.GB(Generators); -- 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>]]]
 
 
-------------------------------
 
-------------------------------
 
</example>
 
</example>
 
</description>
 
</description>
<seealso>
+
<seealso>e>
<see>NC.Add</see>
+
<see>ApCoCoA-1:Use|Use</see>
<see>NC.BP</see>
+
<see>ApCoCoA-1:NC.IsGB|NC.IsGB</see>
<see>NC.Deg</see>
+
<see>ApCoCoA-1:NC.LW|NC.LW</see>
<see>NC.Intersection</see>
+
<see>ApCoCoA-1:NC.RedGB|NC.RedGB</see>
<see>NC.IsGB</see>
+
<see>ApCoCoA-1:NC.SetOrdering|NC.SetOrdering</see>
<see>NC.KernelOfHomomorphism</see>
+
<see>ApCoCoA-1:NC.TruncatedGB|NC.TruncatedGB</see>
<see>NC.LC</see>
+
<see>ApCoCoA-1:Introduction to CoCoAServer|Introduction to CoCoAServer</see>
<see>NC.LT</see>
 
<see>NC.LTIdeal</see>
 
<see>NC.MinimalPolynomial</see>
 
<see>NC.Multiply</see>
 
<see>NC.NR</see>
 
<see>NC.SetFp</see>
 
<see>NC.SetOrdering</see>
 
<see>NC.SetRelations</see>
 
<see>NC.SetRules</see>
 
<see>NC.SetX</see>
 
<see>NC.Subtract</see>
 
<see>NC.UnsetFp</see>
 
<see>NC.UnsetOrdering</see>
 
<see>NC.UnsetRelations</see>
 
<see>NC.UnsetRules</see>
 
<see>NC.UnsetX</see>
 
<see>NC.MRAdd</see>
 
<see>NC.MRBP</see>
 
<see>NC.MRIntersection</see>
 
<see>NC.MRKernelOfHomomorphism</see>
 
<see>NC.MRMinimalPolynomials</see>
 
<see>NC.MRMultiply</see>
 
<see>NC.MRSubtract</see>
 
<see>Introduction to CoCoAServer</see>
 
 
</seealso>
 
</seealso>
 
<types>
 
<types>
 
<type>apcocoaserver</type>
 
<type>apcocoaserver</type>
 +
<type>ideal</type>
 
<type>groebner</type>
 
<type>groebner</type>
 +
<type>non_commutative</type>
 
</types>
 
</types>
<key>gbmr.GB</key>
+
<key>ncpoly.GB</key>
 
<key>NC.GB</key>
 
<key>NC.GB</key>
 
<key>GB</key>
 
<key>GB</key>
<wiki-category>Package_gbmr</wiki-category>
+
<wiki-category>ApCoCoA-1:Package_ncpoly</wiki-category>
 
</command>
 
</command>

Latest revision as of 13:33, 29 October 2020

This article is about a function from ApCoCoA-1.

NC.GB

Enumerate (partial) Groebner bases of finitely generated two-sided ideals in a non-commutative polynomial ring via the Buchberger procedure.

Syntax

NC.GB(G:LIST[, Optimize:INT, OFlag:INT, DB:INT, LB:INT]):LIST

Description

Given a word ordering and a two-sided ideal I, a set of non-zero polynomials Gb is called a Groebner basis of I if the leading word set LW{Gb} generates the leading word ideal LW(I). Note that it may not exist finite Groebner basis of the ideal I.

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 non-commutative polynomial ring (via the command Use) and word ordering (via the function NC.SetOrdering) before calling this function. The default word ordering is the length-lexicographic ordering ("LLEX"). For more information, please check the relevant commands and functions.

  • @param G: a LIST of non-zero non-commutative polynomials that generate a two-sided ideal. Each polynomial is represented as a LIST of LISTs, and each element in every inner LIST involves only one indeterminate or none (a constant). For example, the polynomial f=2x[2]y[1]x[2]^2-9y[2]x[1]^2x[2]^3+5 is represented as F:=[[2x[1],y[1],x[2]^2], [-9y[2],x[1]^2,x[2]^3], [5]]. The zero polynomial 0 is represented as the empty LIST [].

  • @return: a LIST of non-zero non-commutative polynomials, which form a Groebner basis of the two-sided ideal generated by G if (1) there exists a finite Groebner basis and (2) the enumerating procedure was not interrupted by the degree bound DB or the loop bound LB, and form a partial Groebner basis otherwise.

About 4 optional parameters:

  • @param Optimize: an INT between 0 and 31. The value of Optimize indicates which criteria are used in the Buchberger procedure. For the time being, the function supports 5 criteria as follows.

     The multiply criterion: Optimize=1;
     The leading word criterion: Optimize=2;
     The tail reduction criterion: Optimize=4;
     The backward criterion: Optimize=8;
     Discarding redundant generators: Optimize=16;
     (Reference: M. Kreuzer and X. Xiu, Non-Commutative Gebauer-Moeller Criteria, 2013.)
    

    One can choose none, one, or more than one criterion in the function. For instance, Optimize=0 means no criterion is used, Optimize=1 means applying the multiply criterion, Optimize=3 (1+2) means applying the multiply and the leading word criteria, etc. By default, Optimize=31, i.e. the function applies all criteria.

  • @param OFlag: an INT that indicates which information will be output by the ApCoCoAServer during the Buchberger enumerating procedure. If OFlag=1, the server outputs basic information, such as the number of enumerating steps that has been proceeded, the number of elements in partial Groebner basis, the degree of current selected obstruction, the number of unselected obstructions, the total number of obstructions, the number of selected obstructions, and the number of unnecessary obstructions. If OFlag=2, besides the information as OFlag=1, the server also displays explicitly the elements in partial Groebner basis and the current selected S-polynonial. Otherwise, the server outputs nothing during the procedure.

  • @param DB: a positive INT, which gives a degree bound of S-polynomials (or obstructions) during the Buchberger enumerating procedure. When the degree bound is reached, the procedure will be interrupted and return a partial Groebner basis.

  • @param LB: a positive INT, which gives a loop bound of enumerating steps. When the LB-th enumerating step finishes, the procedure will be interrupted and return a partial Groebner basis.

Example

Use ZZ/(2)[t,x,y];
NC.SetOrdering("ELIM"); 
F1 := [[x^2], [y,x]]; -- x^2+yx
F2 := [[x,y], [t,y]]; -- xy+ty
F3 := [[x,t], [t,x]]; -- xt+tx
F4 := [[y,t], [t,y]]; -- yt+ty
G := [F1, F2,F3,F4]; 
NC.GB(G);
Len(It);

[[[x^2], [y, x]], [[t, y], [x, y]], [[y, t], [x, y]], [[t, x], [x, t]], 
[[x, y, x], [y^2, x]], [[x, y^2], [y, x, y]], [[y, x, t], [y^2, x]]]
-------------------------------
7
-------------------------------

See also

e>

Use

NC.IsGB

NC.LW

NC.RedGB

NC.SetOrdering

NC.TruncatedGB

Introduction to CoCoAServer