gap> ######################### BEGIN COPYRIGHT MESSAGE ######################### GBNP - computing Gröbner bases of noncommutative polynomials Copyright 2001-2010 by Arjeh M. Cohen, Dié A.H. Gijsbers, Jan Willem Knopper, Chris Krook. Address: Discrete Algebra and Geometry (DAM) group at the Department of Mathematics and Computer Science of Eindhoven University of Technology.

For acknowledgements see the manual. The manual can be found in several formats in the doc subdirectory of the GBNP distribution. The acknowledgements formatted as text can be found in the file chap0.txt.

GBNP is free software; you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation (FSF); either version 2.1 of the License, or (at your option) any later version. For details, see the file 'LGPL' in the doc subdirectory of the GBNP distribution or see the FSF's own site: http://www.gnu.org/licenses/lgpl.html gap> ########################## END COPYRIGHT MESSAGE ##########################

gap> ### filename = "example08new.g" gap> ### authors Cohen & Gijsbers gap> ### $Id: example08.g,v 1.7 2004/04/16 14:37:37 jwk Exp $

gap> ### THIS IS A GAP PACKAGE FOR COMPUTING NON-COMMUTATIVE GROBNER BASES gap> gap> ### Last change: May 24, 2007 amc towards nonspecialized coefficients

<#GAPDoc Label="Example08">
The Birman-Murakami-Wenzl algebra of type A_2
The trace variant (see sections and ) will be used for a presentation of the Birman-Murakami-Wenzl algebra of type A_2 by generators and relations in order to find a proof that the algebra has dimension 15.

First load the package and set the standard infolevel to 1 and the time infolevel to 1 (for more information about the info level, see Chapter ).

gap> LoadPackage("GBNP","0",false);; gap> SetInfoLevel(InfoGBNP,1); gap> SetInfoLevel(InfoGBNPTime,1);

The variables are g_1, g_2, e_1, e_2, in this order. In order to have the results printed out with these symbols, we invoke gap> GBNP.ConfigPrint("g1","g2","e1","e2");

Unlike Example , we work with a field of rational functions. gap> ll := Indeterminate(Rationals,"l"); l gap> mm := Indeterminate(Rationals,"m"); m gap> F := Field(ll,mm); <algebra-with-one over Field( [ 1 ] )> gap> gens := GeneratorsOfField(F); [ l, m ] gap> l := gens[1];; gap> m := gens[2]; m gap> F1 := One(F);; gap> Print("identity element of F: ",F1,"\n"); identity element of F: 1

Now enter the relations. This will be done in NP form.

gap> #relations Theorem 1.1 gap> k1 := [[[3],[1,1],[1],[]],[F1,-l/m,-l,l/m]];; gap> k2 := [[[4],[2,2],[2],[]],[F1,-l/m,-l,l/m]];;

gap> #relations B1 gap> #empty set here

gap> #relations B2: gap> k3 := [[[1,2,1],[2,1,2]],[F1,-F1]];;

gap> #relations R1 gap> k4 := [[[1,3],[3]],[F1,-1/l]];; gap> k5 := [[[2,4],[4]],[F1,-1/l]];;

gap> #relations R2: gap> k6 := [[[3,2,3],[3]],[F1,-l]];; gap> k7 := [[[4,1,4],[4]],[F1,-l]];; gap> k8 := [[[3,4,3],[3]],[F1,-F1]];; gap> k9 := [[[4,3,4],[4]],[F1,-F1]];;

gap> KI := [k1,k2,k3,k4,k5,k6,k7,k8,k9];;

The input can be displayed with :

gap> PrintNPList(KI); e1 + -l/mg1^2 + -lg1 + l/m e2 + -l/mg2^2 + -lg2 + l/m g1g2g1 + -1g2g1g2 g1e1 + -l^-1e1 g2e2 + -l^-1e2 e1g2e1 + -le1 e2g1e2 + -le2 e1e2e1 + -1e1 e2e1e2 + -1e2

Now calculate the Gröbner basis with trace information, using the function :

gap> GB := SGrobnerTrace(KI);; #I number of entered polynomials is 9 #I number of polynomials after reduction is 9 #I End of phase I #I End of phase II #I List of todo lengths is [ 8, 7, 6, 5, 4, 6, 4, 4, 4, 3, 3, 2, 1, 0 ] #I End of phase III #I End of phase IV #I The computation took 484 msecs.

The full trace can be printed with , while printing only the relations (and no trace) can be invoked by . Since the total trace is very long we do not call PrintTraceList(GB) here but only show two polynomial expressions from the Gröbner basis with :

gap> PrintNPListTrace(GB); g1^2 + m/-le1 + mg1 + -1 g1e1 + -l^-1e1 g2^2 + m/-le2 + mg2 + -1 g2e2 + -l^-1e2 e1g1 + 1/-le1 e1^2 + (l^2-l*m-1)/(l*m)e1 e2g2 + 1/-le2 e2^2 + (l^2-l*m-1)/(l*m)e2 g1g2e1 + -1e2e1 g1e2e1 + me2e1 + -1g2e1 + -me1 g2g1g2 + 1/-1g1g2g1 g2g1e2 + -1e1e2 g2e1g2 + -1g1e2g1 + -me2g1 + me1g2 + mg2e1 + -mg1e2 + -m^2e2 + m^2e1 g2e1e2 + me1e2 + -1g1e2 + -me2 e1g2g1 + -1e1e2 e1g2e1 + -le1 e1e2g1 + me1e2 + -1e1g2 + -me1 e1e2e1 + -1e1 e2g1g2 + -1e2e1 e2g1e2 + -le2 e2e1g2 + me2e1 + -1e2g1 + -me2 e2e1e2 + -1e2 gap> PrintTracePol(GB[1]); m/-lG(1) gap> PrintTracePol(GB[10]); -l*m/(-l*m-1)G(1)g1e2e1 + -l*m/(l*m+1)g1G(1)e2e1 + l^2*m/(-l*m-1)G( 1)g2g1e1 + l*m^2/(-l*m-1)G(1)g2g1e2e1 + -l/(-l*m-1)g2G( 1)g1e2e1 + -l/(l*m+1)g2g1G(1)e2e1 + l^2/(-l*m-1)g2G( 1)g2g1e1 + l*m/(-l*m-1)g2G(1)g2g1e2e1 + -l*m/(-l*m-1)e1g2G( 1)g2g1e1 + -l/(-l*m-1)g2e1g2G(1)g2g1e1 + -m/-lG( 2)g1e2e1 + -l^2*m/(-l*m-1)g2g1G(2)e1 + -l^2/(-l*m-1)g2^2g1G( 2)e1 + m^2/(-l*m-1)e1G(2)g1e2e1 + m/(-l*m-1)g2e1G( 2)g1e2e1 + -l*m/(l*m+1)e1g2^2g1G(2)e1 + -l/(l*m+1)g2e1g2^2g1G( 2)e1 + l^3*m/(-l*m-1)G(3)e1 + l^3/(-l*m-1)g1G(3)e1 + l^3/(-l*m-1)G( 3)g2e1 + l^3/(-l*m-1)g2G(3)e1 + l^2*m^2/(-l*m-1)G(3)e2e1 + l^2*m/(-l*m-1)g1G( 3)e2e1 + l^3/(-l*m^2-m)g2g1G(3)e1 + l^3/(-l*m^2-m)g2G( 3)g2e1 + l^2*m/(-l*m-1)G(3)g2e2e1 + l^2*m/(-l*m-1)g2G( 3)e2e1 + -l^2*m/(-l*m-1)e1g2G(3)e1 + l^2/(-l*m-1)g2g1G( 3)e2e1 + l^2/(-l*m-1)g2G(3)g2e2e1 + -l^2/(-l*m-1)g2e1g2G( 3)e1 + -l^2/(-l*m-1)e1g2g1G(3)e1 + -l^2/(-l*m-1)e1g2G( 3)g2e1 + -l^2/(-l*m^2-m)g2e1g2g1G(3)e1 + -l^2/(-l*m^2-m)g2e1g2G( 3)g2e1 + -l*m/(-l*m-1)G(4)e2e1 + -l/(-l*m-1)g2G(4)e2e1 + -l*mg2g1G( 5)e1 + l^2*m/(-l*m-1)g2g1g2G(5)e1 + -lg2^2g1G(5)e1 + l^2/(-l*m-1)g2^2g1g2G( 5)e1 + l*m/(-l*m-1)G(6)g2g1e1 + l/(-l*m-1)g2G(6)g2g1e1 + m/-lG( 7)e1 + -m^2/(-l*m-1)e1G(7)e1 + -m/(-l*m-1)g2e1G(7)e1 + mG(8) + g2G(8)

In order to test whether the expression for GB[10] is as claimed we use ,

For each traced polynomial x in GB, we equate the evaluated expression x.trace, in which each occurrence of G(i) is replaced by KI[i] by use of , with x.pol.

gap> ForAll(GB,x->EvalTrace(x,KI)=x.pol); false

As a result the dimension of the quotient algebra can be calculated with and the quotient algebra itself with . gap> GB_pols:=List(GB,x->x.pol);; gap> PrintNPList(GB_pols); g1^2 + m/-le1 + mg1 + -1 g1e1 + -l^-1e1 g2^2 + m/-le2 + mg2 + -1 g2e2 + -l^-1e2 e1g1 + 1/-le1 e1^2 + (l^2-l*m-1)/(l*m)e1 e2g2 + 1/-le2 e2^2 + (l^2-l*m-1)/(l*m)e2 g1g2e1 + -1e2e1 g1e2e1 + me2e1 + -1g2e1 + -me1 g2g1g2 + 1/-1g1g2g1 g2g1e2 + -1e1e2 g2e1g2 + -1g1e2g1 + -me2g1 + me1g2 + mg2e1 + -mg1e2 + -m^2e2 + m^2e1 g2e1e2 + me1e2 + -1g1e2 + -me2 e1g2g1 + -1e1e2 e1g2e1 + -le1 e1e2g1 + me1e2 + -1e1g2 + -me1 e1e2e1 + -1e1 e2g1g2 + -1e2e1 e2g1e2 + -le2 e2e1g2 + me2e1 + -1e2g1 + -me2 e2e1e2 + -1e2 gap> DimQA(GB_pols,2); 6 gap> B:=BaseQA(GB_pols,2,0);; gap> PrintNPList(B); 1 g1 g2 g1g2 g2g1 g1g2g1

<#/GAPDoc>