Difference between revisions of "ApCoCoA-1:NCo.ReducedGB"

From ApCoCoAWiki
(New page: <command> <title>NCo.ReducedGB</title> <short_description> Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a free monoid ring. <par/> Note that, gi...)
 
m (replaced <quotes> tag by real quotes)
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{Version|1}}
 
<command>
 
<command>
 
<title>NCo.ReducedGB</title>
 
<title>NCo.ReducedGB</title>
 
<short_description>
 
<short_description>
 
Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a free monoid ring.  
 
Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a free monoid ring.  
<par/>
 
Note that, given an ideal <tt>I</tt> and an admissible ordering <tt>Ordering</tt>, a set of non-zero polynomials <tt>Gb</tt> is called a <em>Groebner basis</em> of <tt>I</tt> w.r.t. <tt>Ordering</tt> if the leading term set <tt>LT{Gb}</tt> (w.r.t. <tt>Ordering</tt>) generates the leading term ideal <tt>LT(I)</tt> (w.r.t. <tt>Ordering</tt>). A Groebner basis w.r.t. <tt>Ordering</tt> is called a <em> reduced Groebner basis</em> w.r.t. <tt>Ordering</tt> 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. <tt>Ordering</tt>. However, it is not necessarily finite.
 
 
</short_description>
 
</short_description>
 
<syntax>
 
<syntax>
NCo.ReducedGB(G:LIST):LIST
+
NCo.ReducedGB(G:LIST[, DB:INT, LB:INT, OFlag:INT]):LIST
NCo.ReducedGB(G:LIST, DegreeBound:INT, LoopBound:INT, Flag:INT):LIST
 
 
</syntax>
 
</syntax>
 
<description>
 
<description>
 +
Given a two-sided ideal <tt>I</tt> and a word ordering <tt>Ordering</tt>, a set of non-zero polynomials <tt>G</tt> is called a <em>Groebner basis</em> of <tt>I</tt> with respect to <tt>Ordering</tt> if the leading word set <tt>LW{G}</tt> generates the leading word ideal <tt>LW(I)</tt>. A Groebner basis <tt>G</tt> is called a <em> reduced Groebner basis</em> if <tt>G</tt> is interreduced (see <ref>ApCoCoA-1:NCo.Interreduction|NCo.Interreduction</ref>) and all polynomials in <tt>G</tt> are monic. Note that each ideal has a unique reduced Groebner basis. However, it is not necessarily finite.
 +
<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/>
Please set ring environment <em>coefficient field</em> <tt>K</tt>, <em>alphabet</em> (or set of indeterminates) <tt>X</tt> and <em>ordering</em> via the functions <ref>NCo.SetFp</ref>, <ref>NCo.SetX</ref> and <ref>NCo.SetOrdering</ref>, respectively, before calling the function. The default coefficient field is <tt>Q</tt>. The default ordering is length-lexicographic ordering (<quotes>LLEX</quotes>). For more information, please check the relevant functions.
+
Please set ring environment <em>coefficient field</em> <tt> K</tt>, <em>alphabet</em> (or set of indeterminates) <tt>X</tt> and <em>ordering</em> via the functions <ref>ApCoCoA-1:NCo.SetFp|NCo.SetFp</ref>, <ref>ApCoCoA-1:NCo.SetX|NCo.SetX</ref> and <ref>ApCoCoA-1:NCo.SetOrdering|NCo.SetOrdering</ref>, respectively, before using this function. The default coefficient field is <tt>Q</tt>, and the default ordering is the length-lexicographic ordering ("LLEX"). For more information, please check the relevant functions.
 
<itemize>
 
<itemize>
<item>@param <em>G</em>: a LIST of non-zero polynomials generating a two-sided ideal in <tt>K&lt;X&gt;</tt>. Each polynomial is represented as a LIST of monomials, which are pairs of the form [C, W] where W is a word in <tt>&lt;X&gt;</tt> and C is the coefficient of W. For example, the polynomial <tt>F=xy-y+1</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 polynomials generating a two-sided ideal in <tt>K&lt;X&gt;</tt>. Each polynomial is represented as a LIST of monomials, which are LISTs of the form [C, W] where W is a word in <tt>&lt;X&gt;</tt> and C is the coefficient of W. For example, the polynomial <tt>f=xy-y+1</tt> is represented as F:=[[1,"xy"], [-1, "y"], [1,""]].</item>
 +
 
 +
<item>@return: a LIST of polynomials, which is a reduced Groebner basis with respect to the current word ordering if there exists a finite Groebner basis and the enumerating procedure doesn't terminate due to reaching the degree bound <tt>DB</tt> or the loop bound LB, and is a reduced partial Groebner basis otherwise.</item>
 
</itemize>
 
</itemize>
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 <em>all</em> of the following three optional parameters must be used at the same time.
+
About 3 optional parameters: for most cases we do not know whether or not there exists a finite Groebner basis beforehand. Thus, the function offers 3 optional parameters for the enumerating procedure. Note that at the moment <em>all</em> of the following 3 optional parameters must be used at the same time.
 
<itemize>
 
<itemize>
<item>@param <em>DegreeBound:</em> a positive integer which gives a degree bound during the enumerating procedure. When the degree of the normal remainder of some <tt>S-polynomial</tt> reaches DegreeBound, the function stops the loop and returns a partial Groebner basis.</item>
+
<item>@param <em>DB:</em> a positive INT, which gives a degree bound of S-polynomials (or obstructions) during the enumerating procedure. When the degree bound is reached, the procedure will be interrupted and return a partial Groebner basis.</item>
<item>@param <em>LoopBound:</em> 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.</item>
+
 
<item>@param <em>Flag:</em> 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 <tt>S-polynonial</tt>. Note that the initial idea of using Flag is to trace and debug the enumerating procedure.</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>
<item>@return: a LIST of polynomials, which is a reduced Groebner basis (w.r.t. the current ordering) of the two-sided ideal generated by <tt>G</tt> if (1) there exists a finite Groebner basis and (2) the enumerating procedure doesn't terminate due to reaching <tt>DegreeBound</tt> or <tt>LoopBound</tt>, and is a reduced partial Groebner basis otherwise.</item>
+
 
 +
<item>@param <em>OFlag:</em> a non-negative INT, which is a multi-switch for the output of the ApCoCoAServer. If OFlag=0, the server displaces nothing on the screen. If OFlag=1, the server prints basic information on the enumerating procedure, such as the number of enumerating steps 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 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. Note that the initial idea of using OFlag is to trace and debug the enumerating procedure.</item>
 
</itemize>
 
</itemize>
 
<example>
 
<example>
NCo.SetX(<quotes>xyzt</quotes>);  
+
NCo.SetX("xyzt");  
F1 := [[1,<quotes>xx</quotes>], [-1,<quotes>yx</quotes>]];
+
F1 := [[1,"xx"], [-1,"yx"]];
F2 := [[1,<quotes>xy</quotes>], [-1,<quotes>ty</quotes>]];
+
F2 := [[1,"xy"], [-1,"ty"]];
F3 := [[1,<quotes>xt</quotes>], [-1, <quotes>tx</quotes>]];
+
F3 := [[1,"xt"], [-1, "tx"]];
F4 := [[1,<quotes>yt</quotes>], [-1, <quotes>ty</quotes>]];
+
F4 := [[1,"yt"], [-1, "ty"]];
 
G := [F1, F2,F3,F4];  
 
G := [F1, F2,F3,F4];  
 
NCo.ReducedGB(G); -- over Q (default field), LLEX ordering (default ordering)
 
NCo.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, "yt"], [-1, "ty"]], [[1, "xt"], [-1, "tx"]], [[1, "xy"], [-1, "ty"]], [[1, "xx"], [-1, "yx"]],  
[[1, <quotes>tyy</quotes>], [-1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [-1, <quotes>tyx</quotes>]]]
+
[[1, "tyy"], [-1, "tty"]], [[1, "yyx"], [-1, "tyx"]]]
 
-------------------------------
 
-------------------------------
 
NCo.SetFp(); -- set default Fp=F2
 
NCo.SetFp(); -- set default Fp=F2
 
NCo.ReducedGB(G); -- over F2, LLEX ordering
 
NCo.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, "yt"], [1, "ty"]], [[1, "xt"], [1, "tx"]], [[1, "xy"], [1, "ty"]], [[1, "xx"], [1, "yx"]],  
[[1, <quotes>tyy</quotes>], [1, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [1, <quotes>tyx</quotes>]]]
+
[[1, "tyy"], [1, "tty"]], [[1, "yyx"], [1, "tyx"]]]
 
-------------------------------
 
-------------------------------
 
NCo.SetFp(3);
 
NCo.SetFp(3);
 
NCo.ReducedGB(G); -- over F3, LLEX ordering
 
NCo.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, "yt"], [2, "ty"]], [[1, "xt"], [2, "tx"]], [[1, "xy"], [2, "ty"]], [[1, "xx"], [2, "yx"]],  
[[1, <quotes>tyy</quotes>], [2, <quotes>tty</quotes>]], [[1, <quotes>yyx</quotes>], [2, <quotes>tyx</quotes>]]]
+
[[1, "tyy"], [2, "tty"]], [[1, "yyx"], [2, "tyx"]]]
 
-------------------------------
 
-------------------------------
NCo.SetX(<quotes>xyzt</quotes>);  
+
NCo.SetX("xyzt");  
F1 := [[1,<quotes>xx</quotes>], [-1,<quotes>yx</quotes>]];   
+
F1 := [[1,"xx"], [-1,"yx"]];   
F2 := [[1,<quotes>xy</quotes>], [-1,<quotes>ty</quotes>]];   
+
F2 := [[1,"xy"], [-1,"ty"]];   
F3 := [[1,<quotes>xt</quotes>], [-1, <quotes>tx</quotes>]];   
+
F3 := [[1,"xt"], [-1, "tx"]];   
F4 := [[1,<quotes>yt</quotes>], [-1, <quotes>ty</quotes>]];   
+
F4 := [[1,"yt"], [-1, "ty"]];   
 
F:= [F1, F2,F3,F4];  
 
F:= [F1, F2,F3,F4];  
 
G1:=NCo.ReducedGB(F);
 
G1:=NCo.ReducedGB(F);
 
G1;
 
G1;
 
NCo.IsGB(G1); -- G1 is a reduced Groebner basis
 
NCo.IsGB(G1); -- G1 is a reduced Groebner basis
Fa:=[[1,<quotes>ytx</quotes>],[-1,<quotes></quotes>]];  
+
Fa:=[[1,"ytx"],[-1,""]];  
 
Append(G1,Fa); -- add one element to G1
 
Append(G1,Fa); -- add one element to G1
 
G1;
 
G1;
Line 60: Line 63:
 
G2:=NCo.ReducedGB(G1); -- compute reduced Groebner basis G2 generated by G1
 
G2:=NCo.ReducedGB(G1); -- compute reduced Groebner basis G2 generated by G1
 
G2;
 
G2;
G3:=NCo.IsGB(G2);
 
 
G3:=NCo.ReducedGB(G2); -- compute reduced Groebner basis G3 generated by G2
 
G3:=NCo.ReducedGB(G2); -- compute reduced Groebner basis G3 generated by G2
 
G3;
 
G3;
 
NCo.IsGB(G3);
 
NCo.IsGB(G3);
G2=G3; -- of course
+
[[[1, "yt"], [-1, "ty"]], [[1, "xt"], [-1, "tx"]], [[1, "xy"], [-1, "ty"]], [[1, "xx"], [-1, "yx"]], [[1, "tyy"], [-1, "tty"]], [[1, "yyx"], [-1, "tyx"]]]
[[[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
 
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>]]]
+
[[[1, "yt"], [-1, "ty"]], [[1, "xt"], [-1, "tx"]], [[1, "xy"], [-1, "ty"]], [[1, "xx"], [-1, "yx"]], [[1, "tyy"], [-1, "tty"]], [[1, "yyx"], [-1, "tyx"]], [[1, "ytx"], [-1, ""]]]
 
-------------------------------
 
-------------------------------
 
False
 
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, "x"], [-1, "t"]], [[1, "ttt"], [-1, ""]], [[1, "y"], [-1, "t"]]]
-------------------------------
 
[[[1, <quotes>y</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>x</quotes>], [-1, <quotes>t</quotes>]], [[1, <quotes>ttt</quotes>], [-1, <quotes></quotes>]]]
 
 
-------------------------------
 
-------------------------------
True
+
[[[1, "y"], [-1, "t"]], [[1, "x"], [-1, "t"]], [[1, "ttt"], [-1, ""]]]
 
-------------------------------
 
-------------------------------
 
True
 
True
Line 84: Line 83:
 
</description>
 
</description>
 
<seealso>
 
<seealso>
<see>NCo.GB</see>
+
<see>ApCoCoA-1:NCo.GB|NCo.GB</see>
<see>NCo.IsGB</see>
+
<see>ApCoCoA-1:NCo.Interreduction|NCo.Interreduction</see>
<see>NCo.SetFp</see>
+
<see>ApCoCoA-1:NCo.IsGB|NCo.IsGB</see>
<see>NCo.SetOrdering</see>
+
<see>ApCoCoA-1:NCo.LW|NCo.LW</see>
<see>NCo.SetX</see>
+
<see>ApCoCoA-1:NCo.SetFp|NCo.SetFp</see>
<see>NCo.TruncatedGB</see>
+
<see>ApCoCoA-1:NCo.SetOrdering|NCo.SetOrdering</see>
<see>Introduction to CoCoAServer</see>
+
<see>ApCoCoA-1:NCo.SetX|NCo.SetX</see>
 +
<see>ApCoCoA-1:NCo.TruncatedGB|NCo.TruncatedGB</see>
 +
<see>ApCoCoA-1:Introduction to CoCoAServer|Introduction to CoCoAServer</see>
 
</seealso>
 
</seealso>
 
<types>
 
<types>
 
<type>apcocoaserver</type>
 
<type>apcocoaserver</type>
 +
<type>ideal</type>
 
<type>groebner</type>
 
<type>groebner</type>
<type>ideal</type>
 
 
<type>non_commutative</type>
 
<type>non_commutative</type>
 
</types>
 
</types>
Line 101: Line 102:
 
<key>NCo.ReducedGB</key>
 
<key>NCo.ReducedGB</key>
 
<key>ReducedGB</key>
 
<key>ReducedGB</key>
<wiki-category>Package_gbmr</wiki-category>
+
<wiki-category>ApCoCoA-1:Package_gbmr</wiki-category>
 
</command>
 
</command>

Latest revision as of 13:44, 29 October 2020

This article is about a function from ApCoCoA-1.

NCo.ReducedGB

Enumerate a reduced (partial) Groebner basis of a finitely generated two-sided ideal in a free monoid ring.

Syntax

NCo.ReducedGB(G:LIST[, DB:INT, LB:INT, OFlag:INT]):LIST

Description

Given a two-sided ideal I and a word ordering Ordering, a set of non-zero polynomials G is called a Groebner basis of I with respect to Ordering if the leading word set LW{G} generates the leading word ideal LW(I). A Groebner basis G is called a reduced Groebner basis if G is interreduced (see NCo.Interreduction) and all polynomials in G are monic. Note that each ideal has a unique reduced Groebner basis. However, it is not necessarily finite.

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 NCo.SetFp, NCo.SetX and NCo.SetOrdering, respectively, before using this function. The default coefficient field is Q, and the default ordering is the 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 LISTs 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,""]].

  • @return: a LIST of polynomials, which is a reduced Groebner basis with respect to the current word ordering if there exists a finite Groebner basis and the enumerating procedure doesn't terminate due to reaching the degree bound DB or the loop bound LB, and is a reduced partial Groebner basis otherwise.

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

  • @param DB: a positive INT, which gives a degree bound of S-polynomials (or obstructions) during the 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.

  • @param OFlag: a non-negative INT, which is a multi-switch for the output of the ApCoCoAServer. If OFlag=0, the server displaces nothing on the screen. If OFlag=1, the server prints basic information on the enumerating procedure, such as the number of enumerating steps 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 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. Note that the initial idea of using OFlag is to trace and debug the enumerating procedure.

Example

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

See also

NCo.GB

NCo.Interreduction

NCo.IsGB

NCo.LW

NCo.SetFp

NCo.SetOrdering

NCo.SetX

NCo.TruncatedGB

Introduction to CoCoAServer