Spracherkennung für: .tst vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]
gap> START_TEST("NMO functions");
gap> ######################### BEGIN COPYRIGHT MESSAGE #########################
gap> # GBNP - computing Gröbner bases of noncommutative polynomials
gap> # Copyright
2001-
2010 by Arjeh M. Cohen, Dié A.H. Gijsbers, Jan Willem
gap> # Knopper, Chris Krook. Address: Discrete Algebra and Geometry (DAM) group
gap> # at the Department of Mathematics and Computer Science of Eindhoven
gap> # University of Technology.
gap> #
gap> # For acknowledgements see the manual. The manual can be found in several
gap> # formats in the doc subdirectory of the GBNP distribution. The
gap> # acknowledgements formatted as text can be found in the file chap0.txt.
gap> #
gap> # GBNP is free software; you can redistribute it and/or modify it under
gap> # the terms of the Lesser GNU General Public License as published by the
gap> # Free Software Foundation (FSF); either version
2.
1 of the License, or
gap> # (at your option) any later version. For details, see the file 'LGPL' in
gap> # the doc subdirectory of the GBNP distribution or see the FSF's own site:
gap> #
https://www.gnu.org/licenses/lgpl.html
gap> ########################## END COPYRIGHT MESSAGE ##########################
gap>
gap> # First load the gap package (before the example)
gap>
gap> LoadPackage("gbnp", false);
true
gap>
gap> # NMO Example
1 is taken from Dr. Edward Green's paper
gap> # Noncommutative Gröbner Bases, and Projective Resolutions,
gap> # and is referenced as Example
2.
7 there;
gap> # please see <Cite Key="Green1997"/> for more information.
gap> #
gap> # remove any previous orderings
gap> UnpatchGBNP();
LtNP restored.
GtNP restored.
gap> # Create a noncommutative free algebra on
4 gens over the Rationals
gap> A := FreeAssociativeAlgebraWithOne(Rationals,"a","b","c","d");
<algebra-with-one over Rationals, with
4 generators>
gap> # Label the generators of the algebra:
gap> a := A.a; b := A.b; c := A.c; d := A.d;
(
1)*a
(
1)*b
(
1)*c
(
1)*d
gap> # Set up our polynomials, and convert them to NP format:
gap> polys := [ c*d*a*b-c*b, b*c-d*a ];
[ (-
1)*c*b+(
1)*c*d*a*b, (
1)*b*c+(-
1)*d*a ]
gap> reps := GP2NPList( polys );
[ [ [ [
3,
4,
1,
2 ], [
3,
2 ] ], [
1, -
1 ] ],
[ [ [
4,
1 ], [
2,
3 ] ], [ -
1,
1 ] ] ]
gap> # Compute the Gröbner basis via GBNP using its default
gap> # (length left-lexicographic) ordering; that is,
gap> # without patching GBNP with an NMO ordering:
gap> gbreps := Grobner( reps );;
gap> gb := NP2GPList( gbreps, A );
[ (
1)*d*a+(-
1)*b*c, (
1)*(c*b)^
2+(-
1)*c*b ]
gap>
gap> # Create a length left-lexicographic ordering,
gap> # with generators ordered: a < b < c < d.
gap> # Note: this is the default ordering of generators by NMO,
gap> # if none is provided:
gap> ml := NCMonomialLeftLengthLexOrdering( A );
NCMonomialLeftLengthLexicographicOrdering([ (
1)*a, (
1)*b, (
1)*c, (
1)*d ])
gap>
gap> # Patch GBNP with the ordering <C>ml</C>, and then run the same example.
gap> # We should get the same answer as above:
gap> PatchGBNP( ml );
LtNP patched.
GtNP patched.
gap> gbreps := Grobner( reps );;
gap> gb := NP2GPList( gbreps, A );
[ (
1)*d*a+(-
1)*b*c, (
1)*(c*b)^
2+(-
1)*c*b ]
gap>
gap> # Now create a Length-Lexicographic ordering on the generators
gap> # such that d < c < b < a
gap> ml2 := NCMonomialLeftLengthLexOrdering( A, [
4,
3,
2,
1] );
NCMonomialLeftLengthLexicographicOrdering([ (
1)*d, (
1)*c, (
1)*b, (
1)*a ])
gap>
gap> # Compute the Gröbner basis w.r.t this new ordering on the same algebra:
gap> PatchGBNP( ml2 );
LtNP patched.
GtNP patched.
gap> gbreps2 := SGrobner( reps );;
gap> gb2 := NP2GPList( gbreps2, A );
[ (
1)*b*c+(-
1)*d*a, (
1)*c*d*a*b+(-
1)*c*b, (
1)*(d*a)^
2*b+(-
1)*d*a*b,
(
1)*c*(d*a)^
2+(-
1)*c*d*a, (
1)*(d*a)^
3+(-
1)*(d*a)^
2 ]
gap>
gap>
gap> # NMO Example
2 is the same as Example
1 above, except that the length
gap> # and left-lexicographic orderings are created independently and then
gap> # chained to form the usual length left-lexicographic ordering.
gap> # Hence, all results should be the same.
gap>
gap> # remove any previous orderings
gap> UnpatchGBNP();
LtNP restored.
GtNP restored.
gap> # Create a noncommutative free algebra on
4 generators over the
gap> # Rationals, label, and set up the example:
gap> A := FreeAssociativeAlgebraWithOne(Rationals,"a","b","c","d");;
gap> a := A.a;; b := A.b;; c := A.c;; d := A.d;;
gap> polys := [ c*d*a*b-c*b, b*c-d*a ];;
gap> reps := GP2NPList( polys );;
gap> # Create left-lexicographic ordering with a < b < c < d:
gap> lexord := NCMonomialLeftLexicographicOrdering( A );
NCMonomialLeftLexicographicOrdering([ (
1)*a, (
1)*b, (
1)*c, (
1)*d ])
gap> # Create a length ordering on monomials in <M>A</M>,
gap> # with ties broken by the lexicographic order lexord:
gap> lenlex := NCMonomialLengthOrdering( A, lexord );
NCMonomialLengthOrdering([ (
1)*a, (
1)*b, (
1)*c, (
1)*d ])
gap>
gap> # Patch GBNP and proceed with our example:
gap> PatchGBNP( lenlex );;
LtNP patched.
GtNP patched.
gap> gbreps := Grobner( reps );;
gap> gb := NP2GPList( gbreps, A );
[ (
1)*d*a+(-
1)*b*c, (
1)*(c*b)^
2+(-
1)*c*b ]
gap>
gap> # Now, proceed similarly, with the lexicographic order
gap> # such that d < c < b < a:
gap> lexord2 := NCMonomialLeftLexicographicOrdering( A, [
4,
3,
2,
1] );
NCMonomialLeftLexicographicOrdering([ (
1)*d, (
1)*c, (
1)*b, (
1)*a ])
gap> lenlex2 := NCMonomialLengthOrdering( A, lexord2 );
NCMonomialLengthOrdering([ (
1)*a, (
1)*b, (
1)*c, (
1)*d ])
gap> PatchGBNP( lenlex2 );;
LtNP patched.
GtNP patched.
gap> gbreps2 := Grobner( reps );;
gap> gb2 := NP2GPList( gbreps2, A );
[ (
1)*b*c+(-
1)*d*a, (
1)*c*d*a*b+(-
1)*c*b, (
1)*(d*a)^
2*b+(-
1)*d*a*b,
(
1)*c*(d*a)^
2+(-
1)*c*d*a, (
1)*(d*a)^
3+(-
1)*(d*a)^
2 ]
gap> # An important point can be made here. Notice that when the lenlex2
gap> # length ordering is created, a lexicographic (generator) ordering
gap> # table is assigned internally to the ordering since one was not
gap> # provided to it.
gap> # This is justa convenience for lexicographically-dependent orderings,
gap> # and in the case of the length order, it is not used.
gap> # Only the lex table for <C>lexord2</C> is ever used.
gap> # Some clarification may be provided in examining:
gap> HasNextOrdering( lenlex2 );
true
gap> NextOrdering( lenlex2 );
NCMonomialLeftLexicographicOrdering([ (
1)*d, (
1)*c, (
1)*b, (
1)*a ])
gap> LexicographicTable( NextOrdering( lenlex2 ) );
[ (
1)*d, (
1)*c, (
1)*b, (
1)*a ]
gap>
gap>
gap> # NMO Example
3 is taken from the book
gap> # 'Ideals, Varieties, and Algorithms', (<Cite Key="CLO97"/>,
gap> # Example
2, p.
93-
94); it is a commutative example.
gap> # First, set up the problem and find a Gröbner basis w.r.t. the length
gap> # left-lexicographic ordering implicitly assumed in GBNP:
gap> # remove any previous orderings
gap> UnpatchGBNP();
LtNP restored.
GtNP restored.
gap> A3 := FreeAssociativeAlgebraWithOne( Rationals, "x", "y", "z" );;
gap> x := A3.x;; y := A3.y;; z := A3.z;; id := One(A3);;
gap> polys3 := [ x^
2 + y^
2 + z^
2 - id, x^
2 + z^
2 - y, x-z,
> x*y-y*x, x*z-z*x, y*z-z*y];;
gap> reps3 := GP2NPList( polys3 );;
gap> gb3 := Grobner( reps3 );;
gap> NP2GPList( gb3, A3 );
[ (
1)*z+(-
1)*x, (
1)*x^
2+(-
1/
2)*y, (
1)*y*x+(-
1)*x*y,
(
1)*y^
2+(
1)*y+(-
1)*<identity ...> ]
gap>
gap> # The example, as presented in the book, uses a left-lexicographic
gap> # ordering with z < y < x. We create the ordering in NMO,
gap> # patch GBNP,and get the result expected:
gap> ml3 := NCMonomialLeftLexicographicOrdering( A3, [
3,
2,
1] );
NCMonomialLeftLexicographicOrdering([ (
1)*z, (
1)*y, (
1)*x ])
gap> PatchGBNP( ml3 );
LtNP patched.
GtNP patched.
gap> gb3 := Grobner( reps3 );;
gap> NP2GPList( gb3, A3 );
[ (
1)*z^
4+(
1/
2)*z^
2+(-
1/
4)*<identity ...>, (
1)*y+(-
2)*z^
2, (
1)*x+(-
1\
)*z ]
gap>
gap>
gap> # NMO Example
4 was taken from page
339 of the book
gap> # 'Some Tapas of Computer Algebra' by A.M. Cohen, H. Cuypers, H. Sterk,
gap> # <Cite Key="CohenCuypersSterk1999"/>;
gap> # it also appears as Example
6 in the GBNP example set.
gap> # A noncommutative free algebra on
6 generators over the Rationals
gap> # is created in GAP, and the generators are labeled:
gap> # remove any previous orderings
gap> UnpatchGBNP();
LtNP restored.
GtNP restored.
gap> A4 := FreeAssociativeAlgebraWithOne(Rationals,"a","b","c","d","e","f");;
gap> a := A4.a;; b := A4.b;; c := A4.c;; d := A4.d;; e := A4.e;; f := A4.f;;
gap> # Set up list of noncommutative polynomials:
gap> polys4 := [ e*a, a^
3 + f*a, a^
9 + c*a^
3, a^
81 + c*a^
9 + d*a^
3,
> a^
27 + d*a^
81 + e*a^
9 + f*a^
3, b + c*a^
27 + e*a^
81 + f*a^
9,
> c*b + d*a^
27 + f*a^
81, a + d*b + e*a^
27, c*a + e*b + f*a^
27,
> d*a + f*b, b^
3 - b, a*b - b*a, a*c - c*a, a*d - d*a,
> a*e - e*a, a*f - f*a, b*c - c*b, b*d - d*b, b*e - e*b,
> b*f - f*b, c*d - d*c, c*e - e*c, c*f - f*c, d*e - e*d,
> d*f - f*d, e*f - f*e ];;
gap> reps4 := GP2NPList( polys4 );;
gap> # Create a length left-lex ordering with the following (default)
gap> # ordering on the generators: a < b < c < d < e < f:
gap> ml4 := NCMonomialLeftLengthLexOrdering( A4 );
NCMonomialLeftLengthLexicographicOrdering([ (
1)*a, (
1)*b, (
1)*c, (
1)*d,
(
1)*e, (
1)*f ])
gap> # Patch GBNP and compute the Gröbner basis w.r.t the ordering ml4:
gap> PatchGBNP( ml4 );
LtNP patched.
GtNP patched.
gap> gb4 := Grobner( reps4 );;
gap> NP2GPList( gb4, A4 );
[ (
1)*a, (
1)*b, (
1)*d*c+(-
1)*c*d, (
1)*e*c+(-
1)*c*e,
(
1)*e*d+(-
1)*d*e, (
1)*f*c+(-
1)*c*f,
(
1)*f*d+(-
1)*d*f, (
1)*f*e+(-
1)*e*f ]
gap>
gap> STOP_TEST("NMO functions",
10000);