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 = "example14.g" 
gap> ### authors Cohen & Gijsbers & Krook
gap> ### This example was added by Chris Krook.
gap>  
gap> ### THIS IS A GAP PACKAGE GBNP
gap> ### FOR COMPUTING WITH NON-COMMUTATIVE POLYNOMIALS
gap> ### ADD-ON: STUDY GROWTH OF FACTOR ALGEBRA

gap> ### $Id: example14.g,v 1.6 2004/04/16 14:37:38 jwk Exp $

<#GAPDoc Label="Example14">
<Section Label="Example14"><Heading>Preprocessing for Weyl group computations</Heading>
This example extends Example <Ref Sect="Example03"/> with the
following action: after the Gröbner basis computation, we first check if the
quotient algebra is finite dimensional or infinite dimensional before we
possibly try to compute that dimension. Preprocessing of the set of leading
terms of the Gröbner basis is used to speed up the check.
The functions <Ref Func="PreprocessAnalysisQA" Style="Text"/>
and <Ref Func="FinCheckQA" Style="Text"/> are used for the computations. Even
without preprocessing this already goes fast. Still, preprocessing can speed
up more involved cases. For instance, after adapting this example to run 
for E7,  we found that
preprocessing speeds up the computation from 400 secs to about 40 secs. (Be
aware that Gröbner basis computation will take a while for E7.)
<P/>
More information about the preprocessing can be found in the preprint <Q>The 
dimensionality of quotient algebras</Q> <Cite Key="Krook2003"/> which is part
of the documentation.
<P/>
Note:	there is no information on the amount of preprocessing which is
optimal, but in general for big examples, even full preprocessing is better
than using no preprocessing at all.
<P/>
Note:	Example <Ref Sect="Example13"/> also determines if the
quotient algebra appearing
here is finite or infinite dimensional but does not use
preprocessing.
<P/>
First load the package and set the standard infolevel <Ref
InfoClass="InfoGBNP" Style="Text"/> to 0 and the time infolevel <Ref
Func="InfoGBNPTime" Style="Text"/> to 2 (for more information about the info
level, see Chapter <Ref Chap="Info"/>).

<Listing><![CDATA[
gap> LoadPackage("GBNP","0",false);;
gap> SetInfoLevel(InfoGBNP,0);
gap> SetInfoLevel(InfoGBNPTime,2);
]]></Listing>

Then input the relations in NP format (see Section <Ref Sect="NP"/>). They
will be assigned to <C>KI</C>.

<Listing><![CDATA[
gap> k1 := [[[1,3,1],[3,1,3]],[1,-1]];;
gap> k2 := [[[4,3,4],[3,4,3]],[1,-1]];;
gap> k3 := [[[4,2,4],[2,4,2]],[1,-1]];;
gap> k4 := [[[4,5,4],[5,4,5]],[1,-1]];;
gap> k5 := [[[6,5,6],[5,6,5]],[1,-1]];;
gap> k6 := [[[1,2],[2,1]],[1,-1]];;
gap> k7 := [[[1,4],[4,1]],[1,-1]];;
gap> k8 := [[[1,5],[5,1]],[1,-1]];;
gap> k9 := [[[1,6],[6,1]],[1,-1]];;
gap> k10 := [[[2,3],[3,2]],[1,-1]];;
gap> k11 := [[[2,5],[5,2]],[1,-1]];;
gap> k12 := [[[2,6],[6,2]],[1,-1]];;
gap> k13 := [[[3,5],[5,3]],[1,-1]];;
gap> k14 := [[[3,6],[6,3]],[1,-1]];;
gap> k15 := [[[4,6],[6,4]],[1,-1]];;
gap> k16 := [[[1,1],[]],[1,-1]];;
gap> k17 := [[[2,2],[]],[1,-1]];;
gap> k18 := [[[3,3],[]],[1,-1]];;
gap> k19 := [[[4,4],[]],[1,-1]];;
gap> k20 := [[[5,5],[]],[1,-1]];;
gap> k21 := [[[6,6],[]],[1,-1]];;
gap> KI := [k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,
>        k11,k12,k13,k14,k15,k16,k17,k18,k19,k20,k21
>       ];;
]]></Listing>

The Gröbner basis can now be calculated with 
<Ref Func="SGrobner" Style="Text"/>:

<Listing><![CDATA[
gap> GB := SGrobner(KI);;
#I  Time needed to clean G :0
#I  The computation took 104 msecs.
]]></Listing>

Check the dimensionality of the quotient algebra.
We will check whether it is finite dimensional or infinite
dimensional. In case of finite dimensionality we can compute this dimension.
<P/>
The function <Ref Func="FinCheckQA" Style="Text"/>, which is used to check
finite dimensionality has as first argument the list of
leading monomials of a
Gröbner basis and as second argument the number of symbols. The monomials
can be calculated with <Ref Func="LMonsNP" Style="Text"/>. They then will be 
preprocessed using 4 recursions. If you want full preprocessing, use 0 
instead of 4 as a parameter for the number of recursions.

<Listing><![CDATA[
gap> L:=LMonsNP(GB);;
gap> L:=PreprocessAnalysisQA(L,6,4);;
gap> time;
4
gap> fd:=FinCheckQA(L,6);
true
gap> time;
4
]]></Listing>

If a quotient algebra is finite dimensional, the dimension can be calculated
with <Ref Func="DimQA" Style="Text"/>, the arguments are the Gröbner basis 
<C>GB</C> and the number of symbols <C>6</C>. Since <Ref
InfoClass="InfoGBNPTime" Style="Text"/> is set to 2, we get timing
information from <Ref Func="DimQA" Style="Text"/>:

<Listing><![CDATA[
gap> dim := DimQA(GB,6);
#I  The computation took 176 msecs.
51840
]]></Listing>
</Section>
<#/GAPDoc>
