Anders Skovsted Buch and Niels Lauritzen
September 1998

The programs in this package were written for the purpose of proving or disproving Lusztigs conjecture in the case A4, p=5. Participants in the project were Anders S. Buch (abuch@imf.au.dk) and Niels Lauritzen (niels@imf.au.dk). In the project we were able to verify that Lusztig's conjecture is correct in the above case, by April, 1995. We hope that you may find any of the programs in the package useful.

A. Command line argument types

A typical specification of command line syntax (synopsis) for a program looks as follows:

% alcove rsys-p wge

This means that the program alcove expects an argument describing the root system and characteristics (rsys-p) followed by an element in the affine Weyl group (wge). To invoke the command for A2, p=7, and with the longest element in the finite Weyl group, you can write:

% alcove A2-5 2 1 2

This section describes the different argument types (except for filenames, etc.).

Root system (rsys or rsys-p)

Specification of the root system, and possibly the characteristics to work with. If the program is independent of the characteristic, then rsys will appear in the synopsis, otherwise rsys-p will appear.

In any case, the valid arguments are one of the root system types, possibly followed by a dash and a prime number. If no prime number is specified, the internal calculations will use the Coxeter number. This works whenever an rsys argument is required, but may produce unexpected results when rsys-p is required.

If the shell environment variable ROOTSYSTEM is set to a valid root system name, any root system argument may be omitted, which means that the value of ROOTSYSTEM will be used in place.


A4    :  Root system A4.
A2-3  :  A2 in characteristic 3.
B3-7  :  B3 in characteristic 7.
E8-19 :  E8 in characteristic 19.

Weight (weight)

Element in the weight lattice expressed in coordinates of the fundamental dominant weights.


3 3 3 3 :  The top alcove for A4, p=5.

Weyl group element (wge)

Element in the affine Weyl-group expressed in terms of simple reflection numbers. Simple reflections are numbered 0, 1, ..., n, with n = rank of root system and the numbering of nodes in the Dynkin diagram in Bourbaki. The affine reflection has number 0.

The word long can be given to specify the longest element in the (finite) Weyl group. Similarly the word top means the affine Weyl group element corresponding to the top alcove. Both long and top are valid subexpressions as well.


1 2 1    :  Longest element for A2.
long     :  Longest element for root system in use.
long 0   :  Longest element composed with affine reflection.
long top :  Product of longest element and element for top alcove.

B. Root numbering (from Bourbaki)

A_n:  1 --- 2 --- 3 --- . . . --- n

B_n:  1 --- 2 --- 3 --- . . . =>= n

C_n:  1 --- 2 --- 3 --- . . . =<= n

D_n:  1 --- 2 --- . . . --- (n-2) 

E_8:  1 --- 3 --- 4 --- 5 --- 6 --- 7 --- 8

F_4:  1 --- 2 =>= 3 --- 4

G_2:  1 =<= 2

C. Description of commands

1) Information about root systems

% calcdata rsys-p
Calculates and prints lots of useful information about a root system. Smaller pieces of this information can also be obtained by the next few commands.

Example: calcdata A4-7

% longelem rsys
Prints longest element in the Weyl group.

Example: longelem A4

% plusroots rsys
Prints the positive roots for the root system.

Example: plusroots A4

% intweights rsys-p
Prints out translates of 0 in the restricted alcoves for the root system/prime number.

Example: intweights A4-5

% nmat rsys
Prints out matrices of numbers N(a,b) and N(a,-b), where a and b are positive roots. The N-matrices appear in the Gilkey-Seitz algorithm for computing weight multiplicities.

Example: nmat A5

2) Calculations with weights and Weyl group elements

% minexp rsys wge
Calculates a reduced expression for an element in the affine Weyl group.

Example: minexp A4 long 0 long

% alcove rsys-p wge
Calculates the 0-translate corresponding to an affine Weyl group element.

Example: alcove A4-7 0 1 2 3

% alctoexp rsys-p weight
Computes the reduced word in the affine Weyl group corresponding to the weight.

Example: alctoexp A4-5 3 3 3 3

% klpoly rsys wge1 - wge2
Computes the KL polynomial between the two Weyl group elements.

Example: klpoly A4 - long ## first wge is the identity.

% kltable [-s] rsys
Prints out a table of all KL polynomials relevant for Lusztig's conjecture for the given root system. The KL polynomial for a pair of Weyl group elements whose lengths differ by less than three is always equal to 1. If the -s option is given, such polynomials are skipped.

Example: kltable A3

% lesseq rsys wge1 - wge2
Prints "YES" if wge1 is smaller than wge2 in the Bruhat order. Otherwise prints "NO".

Example: lesseq A4 long - 0 long 0

% bruhat [-drwc] rsys-p wge
Prints the Bruhat graph under the Weyl group element wge. Each Weyl group element is printed, followed by the list of elements directly below it.


only wge's for dominant weights are included.
only wge's for restricted weights are included.
weights are printed in place of reflection lists.
same as -w, except one is added to all weight coordinates.

Note: When -w or -c is used, the output depends on the characteristic, at least if the affine reflection is in use.

Example: bruhat -r A3 top
Example: bruhat -c A2 long

% figbruhat [-drwc] [-z pagesize] [-o file.fig] [-p permfile] rsys wge
Generates an .fig file with the tree output by bruhat above. The options -d, -r, -w, and -c are the same as for bruhat. Other options:
-z pagesize
Set page size. Valid values are Letter, Legal, A4, B5, and expressions like 9.5x8.3.
-o file.fig
Writes the output to the file, rather than printing it.
-p permfile
Permute the rows in the picture as specified in permfile. Useful for avoiding corssing lines in pictures. See the supplied files a4-dom.perm and a4-rest.perm and try the examples below.

In each of the following examples, a .fig file is created. This file can be viewed using xfig.

Example: figbruhat -c -z B5 -o a3-roots.fig a3-5 long
Example: figbruhat -rw -o a4-rest1.fig a4-5 top
Example: figbruhat -rw -o a4-rest2.fig -p a4-rest.perm a4-5 top
Example: figbruhat -d -o a4-dom.fig -p a4-dom.perm a4 top

% psbruhat [-drwc] [-z pagesize] [-m mag] [-o file.ps] [-p permfile] rsys wge
Same as figbruhat, but generates postscript. fig2dev version 3.1 or newer must be installed on the system. The -m option can be used to specify a magnification, which is passed to fig2dev.

Example: psbruhat -c a3-5 long | lp

% wdif rsys weight1 - weight2
Prints the inverse Cartan matrix multiplied to (weight1 - weight2).

Example: wdif A4 3 3 3 3 - 2 2 2 2

% kostant [-c] rsys weight
Prints all ways of writing weight as a sum of positive roots. If the -c option is used, only the number of ways is printed.

Example: kostant A4 1 1 1 1

% freudenthal rsys weight
Prints all multiplicities for dominant weights in the Weyl module of highest weight weight.

% jsum rsys-p weight
Calculates the right hand side in Jantzens sum formula.

3) Calculation of weight space dimensions

% redu rsys-p weight
Calculates weight multiplicities in the irreducible module with highest weight and root system/prime rsys-p.

% reduinfo rsys-p weight
Prints the dimensions of the matrices which redu needs to compute and find the ranks of.

% lusztig [-p] rsys-p weight
Calculates the conjectured dimensions of root spaces using KL polynomials. If the -p option is given, all used KL-polynomials are also printed.

The following programs do the same job as redu, except they can deal with larger matrices by storing matrix entries in .mat files. redumat and redumat2 calculate an interval of matrix entries (two versions, with redumat2 the newest). matmerge combines different partial .mat files into one. matrank calculates the rank. Please see this example on how to use these programs. These programs are useful if you want to break up the N-matrix and compute on several computers in parallel.

% redumat rsys-p weight1 weight2 [first [last]]
Calculates entries in a matrix necessary to calculate the dimension of the weight space between the two weights. The entries are stored in a matrix file with a name based on the input, e.g. "A3-5-323-000-0-1034.mat". By specifying first and last, you can make redumat calculate a range of matrix entries.

% redumat2 rsys-p weight1 weight2 [first [last]]
Same as redumat, but is faster and uses less memory. Only works if the number of E, F, or H symbols is at most 64.

% matrank file.mat
Calculates the rank of a matrix file.

% matrank2 file.mat
Same as matrank, but uses less memory.

% mathead file.mat
Prints out the header information in a matrix file.

% matcheck [-s] file.mat
Determines the range of entries in a matrix file. The -s option gives the output in short form.

% matprint [-s] file.mat
Prints the entries in a matrix file. Use -s for short form.

% matfix old.mat new.mat
Copies old.mat to new.mat, while skipping certain unneeded control information.

% matmerge file1.mat file2.mat ... filen.mat -o new.mat
Merges several matrix files with different ranges into one new file.

4) Misc. programs

% ispc 1234
Prints out "1 2 3 4". Useful for shell scripts, since this allows for writing e.g. "lusztig a4-5 `ispc 3333`".

% makelie rsys wge
Prints out a Lie program to calculate all KL-polynomials for Weyl group elements smaller than the given one. wge must be in the (finite) Weyl group (for Lie to work).

% makekl rsys wge
Prints out "klpoly" commands to calculate same KL-polynomials as above. This is useful for checking KL-polynomials in the (finite) Weyl group against Lie's.