%
% This is a plain TeX file. 
%
\hsize=5.4truein\hoffset=0.55truein
\vsize=7.5truein\voffset=0.75truein
\font\bold=cmbx10 at 14pt
\font\small=cmr8
\vglue 0.2truein
\centerline{\bold A Maple Package for}
\smallskip
\centerline{\bold Root Systems and Finite Coxeter Groups}
\medskip
\centerline{\bf Version 1}
\medskip
\centerline{March 25, 1992}
\bigskip
\centerline{John R. Stembridge\footnote{$^1$}{\small
  Partially supported by the Sloan Foundation and the NSF.}}
\centerline{Department of Mathematics}
\centerline{University of Michigan}
\centerline{Ann Arbor, Michigan 48109--1003 USA}
\centerline{Internet: jrs@math.lsa.umich.edu}
\bigskip

\def\mysec#1{\bigskip\centerline{\bf #1}\nobreak\par}
\def\subsec#1{\medskip\noindent{\it #1}.\nobreak}
\def\cite#1{~[{\bf #1}]}
\def\ttline#1{\line{\tt\qquad #1\hfil}}
\def\dgr{$^*$}
\def\maple{{\sl Maple}}
\def\cox{{\tt coxeter}}
\def\weyl{{\tt weyl}}
\def\homelib{/usr/local/maple/packages}
\def\R{{\bf R}}
\def\Z{{\bf Z}}
\def\Q{{\bf Q}}

{\openup 1\jot
\mysec{Contents}
\item{1.} Introduction
\item{2.} System Requirements: UNIX and {\sl\maple~V}
\item{3.} Getting Started
\item{4.} Definitions
\item{5.} Data Structures
\item{6.} Short Synopses of the Procedures
\item{7.} The Non-Crystallographic Kludge
\item{8.} Miscellany
\item{9.} Copyleft
\item{10.} References

\mysec{1. Introduction}
This document is an introduction to \cox{} and \weyl{}, two packages of~37
\maple{} programs that provide assistance in the study of root systems and
finite Coxeter groups. The \cox{} package contains 30 basic procedures for
working with the roots themselves, for computing reduced expressions for group
elements, generating permutation representations and characters, computing
various combinatorial invariants, such as generating functions for length, and
retrieving information such as what appears in the appendices of
Bourbaki\cite{1}. The \weyl{} package is a supplement to \cox{} that
contains 7 procedures for manipulating weight vectors and computing weight
multiplicities for irreducible representations of semisimple Lie algebras. It
is capable of reproducing essentially the entire contents of the book of
tables by Bremner, Moody and Patera\cite{2}.

I'm not about to claim that these packages will answer every question one
might want to know about a root system or Coxeter group. However, even if it
doesn't do exactly what you want, there is a good chance you can build the
procedures you need out of the raw materials provided here.
Also, I do not intend to claim that the algorithms used here represent
spectacular advances over what is already known. And don't send me
complaints if you think it is too slow. If speed is a major consideration,
then you probably shouldn't be using \maple{}---a better alternative would
be to use the {\sl LiE} package from CWI\cite{5}.

\mysec{2. System Requirements: UNIX and {\sl\maple~V}}
In principle, there is no reason that these packages cannot be run on any
system that has {\sl\maple~V}. However, I find it hard to avoid taking
advantage of the UNIX file system structure when I write Maple code, and hence
users of non-UNIX systems will have to do some non-trivial work in order to
reproduce on their systems the file structures I've created on mine.

If you have somehow acquired this document, but not the software itself, then
you will also need to have access to the Internet. If you send a message to
my e-mail address on page~1, I can send you instructions for obtaining the
software over the Internet by anonymous ftp.

\mysec{3. Getting Started}
Let's assume that the \cox{} and \weyl{} packages have been unpacked and
compiled according to the instructions provided in the accompanying
documentation.  If your system manager has already done this, then you'll need
to find out the name of the directory where the packages have been installed.
For the purposes of this discussion, let's assume that the directory name is
{\tt\homelib}. You can check this by verifying that {\tt\homelib} has
subdirectories named \cox{} and \weyl.

Next, you need to create a file named {\tt .mapleinit} in your home directory.
Or add to it, if you already have one.\footnote{$^2$}{\small Users who are
already running one of my previous packages can skip this step.}
In this file you should insert the following two lines:

\ttline{HomeLib:=`\homelib`:}
\ttline{\_$\,$liblist:=[HomeLib]:}

\noindent
Be careful to correctly type the left quotemarks and underscore character.
Each time \maple{} is invoked, these statements will define where the packages
are located.

You are now ready to run the packages. Simply type {\tt with(coxeter);} or
{\tt with(weyl);} during a \maple{} session. Although \weyl{} calls many of
the procedures in \cox, it is not necessary to explicitly load \cox{} if all
you want to do is use \weyl{}. 

The rest of this document is concerned with giving an overview of the workings
of the packages, explaining the types of data structures used, and defining a
few fundamental items of terminology. The detailed description of the syntax
and purpose of the individual commands is provided in text files located in

\ttline{\homelib/coxeter/help}\ttline{\homelib/weyl/help}

\noindent
You may want to print out hard copies of these files if you plan to use the
packages extensively. The source code is located in 

\ttline{\homelib/coxeter/src}\ttline{\homelib/weyl/src}

\noindent
I have also provided some additional \maple{} procedures that you may find 
to be useful. Their source code and documentation and can be found in

\ttline{\homelib/coxeter/examples}\ttline{\homelib/weyl/examples}

\noindent
Finally, there is a subdirectory {\tt \homelib/coxeter/lib} that
contains pre-stored '{\tt .m}' files containing information about the
conjugacy classes and permutation representations of the exceptional groups.

\mysec{4. Definitions}
This is not an appropriate place to give a thorough survey of root systems
and finite Coxeter groups. Nevertheless, we need to define a few of the basic
terms so as to be sure that the conventions we have adopted are clear. For
more information, including the definitions of terms we have omitted, the
standard reference is Bourbaki\cite{1}. There is also a recent book by
Humphreys\cite{4} which I highly recommend. For the details of representations
of Lie algebras (and also a good resource for root systems), see Humphreys'
previous book\cite{3}.

I assume you already know what a reflection is, and that a root system is
a finite subset of $\R^n$ (whose members are {\it roots}) satisfying a certain
short list of axioms, including the fact that if one root is reflected
across the hyperplane perpendicular to another, you get another root. Certain
root systems, said to be {\it crystallographic}, have the property that their
roots generate a lattice in $\R^n$. This is a valuable property from the point
of view of explicit computation, since the existence of such a lattice implies
that there exists a choice of basis for which the coordinates of the roots
are rational (or even integral).

Let me remind you that a {\it base} for a root system $R$ is a linearly
independent set of roots $S=\{\alpha_1,\ldots,\alpha_n\}$ with the property
that every root $\alpha$ is a linear combination $\sum_ic_i\alpha_i$ such
that either every $c_i\ge0$, or every $c_i\le0$. A root is said to be
{\it positive} or {\it negative} (with respect to $S$), according to which of
the two alternatives is satisfied. The base roots are also referred to as
{\it simple roots}.

I also assume you know that the reflections $r_\alpha$ for $\alpha\in R$
generate a finite group~$W$. Moreover, the reflections $r_1,\ldots,r_n$
corresponding to the base vectors $\alpha_1,\ldots,\alpha_n$ (the so-called
{\it simple reflections}) suffice to generate~$W$. In the crystallographic
case, the groups~$W$ are the {\it Weyl groups}, and in the general case they
turn out to be precisely the finite {\it Coxeter groups}; i.e., the finite
groups having presentations of the form
$$
\langle r_1,\ldots,r_n: (r_ir_j)^{m_{ij}}=1\rangle,
$$
where the $m_{ij}$ are integers such that $m_{ii}=1$. It is often convenient
to regard elements of $W$ as words in the alphabet of simple reflections.
Such a word $w=r_{i_1}\cdots r_{i_l}$ is said to be {\it reduced} if the
length $l$ is as small as possible among all such representations of a given
element $w\in W$.

\mysec{5. Data Structures}
Now we come to the point where I explain (and attempt to justify) the
choices I made in representing the basic structures in \cox{} and \weyl.

\subsec{Vectors}
Perhaps the most important decision one has to make is how to represent 
vectors. Most of the efficient algorithms in this subject rely on the
geometry of reflections acting on vectors, and the innermost core of many
of the procedures in \cox{} and \weyl{} amount to computations of inner
products and sums of vectors, and so on.

In these packages, a {\it vector} is defined to be a linear combination of
the {\it standard coordinates} {\tt e1,e2,e3,...}. The coefficients should be
integral, rational, or floating-point. Thus, {\tt 2*e2-e4/3} is a vector,
but {\tt sqrt(5)*e1+x*e2} is not. Note that one implication of this is that
\cox{} and \weyl{} have reserved {\tt e1,e2,e3,...} as global variables,
and so these should not be assigned values by the user.

I have three reasons for treating vectors this way. First, the basic
operations of addition and scalar multiplication are now trivial and fast for
\maple{}. If {\tt u} and {\tt v} are vectors and {\tt c} is a scalar then
{\tt u+v} is a vector sum and {\tt c*v} is a scalar multiplication. Second, one
frequently needs to compute inner products $u\cdot v$, where $u$ is
potentially arbitrary, and $v$ is a root. Most root systems have a
standard basis with the property that the roots have relatively few nonzero
coordinates. In fact, most roots have only two nonzero coordinates.
(The worst offender is {\tt E8}, where some roots have 8 nonzero coordinates.)
In this type of data structure, we can take advantage of the ``sparseness''
of the roots so that the cost of computing an inner product with {\tt v}
is proportional to the number of nonzero coordinates in~{\tt v}. Third and
last is the fact that when one sees an expression such as {\tt 2e1-e2-e3},
there is no ambiguity as to what it means---it is simply a vector in standard
coordinates. If we were using lists, or \maple's {\tt vector} structure,
then an expression such as {\tt [2, -1, -1]}, when ouput by a procedure, 
would give no clue as to the coordinate system being used. One might wonder:
are these the coefficients with respect to the base? with respect to the
fundamental weights? something else?

\subsec{Naming a root system}
Many of the procedures of \cox{} and \weyl{} accept the names of root systems
as all or part of their input. The names reserved for the irreducible root
systems are
$$\vbox{
\ttline{A1, A2,...; B1, B2, B3,...; C1, C2, C3,...; D3, D4, D5,...;}
\ttline{E6, E7, E8, F4, G2, H3, H4, I2[3], I2[4], I2[5],...}}
$$
In particular \cox{} and \weyl{} use these as global variables, so they
should not be assigned values by the user. To specify a reducible root system,
one merely forms a monomial out of the names of the irreducible components.
Thus {\tt A1*A1*C4} specifies a root system of rank~6 whose irreducible
components consist of two copies of {\tt A1} and one copy of~{\tt C4}. We also
allow the use of~{\tt 1} to designate the empty root system of rank~0.

Note that although the above names all specify well-defined root systems,
there are some isomorphisms among them. For example, {\tt B2} $\cong$ {\tt C2},
and {\tt A3} $\cong$ {\tt D3}. The user should also be warned that the series
names of each of the above root systems, namely {\tt A,B,C,D,E,F,G,H,I2,} are
used by \cox{} and \weyl{}, and hence should not be assigned values by the
user. I've made this mistake myself on at least one occasion.

The conventions we have adopted for ordering the base vectors of a root system
are described in the {\tt help} files for {\tt base} and {\tt diagram}.

For added flexibility, some procedures of \cox{} and \weyl{} also allow the
user to specify a root system by means of a list of base vectors. Some
procedures do not have this extra flexibility, but this is not a serious
problem---the name of a root system can be recovered from a list of base
vectors via the procedure {\tt name\_of}.

\subsec{Group elements}
There are a variety of ways that the elements of a reflection group $W$ can be
identified: (1) as words in the simple reflections; (2) as permutations of
sets of roots or weight vectors; or (3) as linear transformations (or matrices)
acting on the vector space spanned by the roots.

If $r_1,\ldots,r_n$ are the simple reflections of $W$, then one may
represent the group element (or word) $w=r_{i_1}\cdots r_{i_l}$ in \cox{}
by means of the list {\tt [i\_1,i\_2,...,i\_l]}. In particular, {\tt [$\,$]}
represents the identity element. It is easy to multiply or invert words.
For example, if {\tt w1} and {\tt w2} are two words, then {\tt [op(w1),op(w2)]}
is their product, and the inverse of {\tt w} is
{\tt [seq(w[-i],i=-nops(w)..-1)]}. There are several procedures in \cox{} for
processing words; e.g., to decide if two words represent the same element,
one can use {\tt reduce}.

There is a compact way to label the elements of a reflection group, based on
the fact that every vector $v$ in general position (not orthogonal to any of
the roots) has a trivial stabilizer. Hence there is a one-to-one
correspondence between elements in the $W$-orbit of $v$ and $W$ itself; i.e.,
one can use the vector $w.v$ as a ``label'' for $w$. This trick is used
by some of the procedures in \cox{}, and you may find it useful if you write
your own programs. In \cox{}, one can do this by using {\tt interior\_pt}
to produce a vector {\tt v} in the interior of the fundamental chamber (i.e.,
on the positive side of the basic hyperplanes). Then, given a word {\tt w},
one can use {\tt reflect} to obtain the vector {\tt w.v} that serves to
label~{\tt w}. To invert this procedure and recover the word that a vector
labels, one can use {\tt vec2fc}. Care must be exercised when floating point
coordinates are used, since two labeling vectors must be presumed equal if
the distance separating them is small.

There are also facilities in \cox{} for representing group elements as
permutations. The main tool for this purpose is {\tt perm\_rep}. This
procedure produces the permutation representation induced by the maximal
parabolic subgroup obtained by deleting the last node in the Dynkin
diagram. It is faithful for irreducible root systems. The format
of the output is compatible with \maple's {\tt group} package. For the
exceptional groups, these representations are obtained instantaneously, as
they are pre-stored in \cox's library. Also, since the representation of
{\tt E8} is so massive (degree 240), one can also retrieve from the library
a smaller (degree 120) representation that is sufficient for many purposes.
It has a kernel of order 2, and is isomorphic to the action on the 120
hyperplanes, rather than the 240 roots.

There is also a procedure {\tt multperm} for converting from the word-%
representation of a group element to a permutation. Although I have written
\maple{} code for the inverse operation (it amounts to constructing strong
generators for the permutation group), I have not yet added it to \cox{}.

In the {\tt examples} subdirectory of \cox, there is a procedure {\tt
refl\_rep} that takes as input a word {\tt w}, and then produces the explicit
matrix representing the action of {\tt w} on the vector space spanned by the
roots.

\subsec{Weight vectors}
Recall that the {\it fundamental weights\/} $\omega_1,\ldots,\omega_n$ of a
crystallographic root system $R$ are the vectors defined by the condition
$2\omega_i\!\cdot\!\alpha_j =(\alpha_j\!\cdot\!\alpha_j)\delta_{ij}$, where
$\alpha_1,\ldots,\alpha_n$ is a chosen list of base vectors. A {\it weight
vector} is an integer linear combination of the fundamental weights. The
irreducible, finite dimensional representations of the Lie algebra associated
with~$R$ are indexed by the {\it dominant weights}; i.e., the vectors that
are nonnegative integer combinations of the fundamental weights.

In keeping with the vector philosophy described earlier, a weight vector,
according to \weyl, is just another vector. It is up to the user to be sure
that it is an integer combination of the fundamental weights. Thanks to the
procedures in \weyl, this is actually quite easy to do. For example, to
compute weight multiplicities for {\tt C4}, one could first use {\tt weights}
to produce a list of the fundamental weights for {\tt C4}, and then take
integer combinations of this list of vectors to create the desired weight
vectors; e.g.,

\ttline{with(weyl);}
\ttline{W:=weights(C4);}
\ttline{weight\_mults(2*W[1]+W[3],C4);}
\ttline{weight\_mults(2*W[2],C4);}

\noindent
The coordinates of a vector with respect to the fundamental weights can be
obtained via the {\tt weight\_coords} procedure.

\settabs\+\tt {\tt weight\_coords}\ \ &\cr
\mysec{6. Short Synopses of the Procedures}
Here is a brief indication of the purpose of each procedure in \cox{} and
\weyl. For the full details, including syntax, definitions and examples,
consult the {\tt help} files. The procedures marked with a `$\,$\dgr$\,$'
are the ones that allow the user to specify a root system either by name or
by a list of base vectors.

The \cox{} package:
\+\tt base& base vectors for a root system\cr
\+\tt char\_poly\dgr& characteristic polynomial of a group element\cr
\+\tt class\_rep& conjugacy class representatives for individual elements
  or entire groups\cr
\+\tt class\_size& sizes of conjugacy classes for individual elements or
   entire groups\cr
\+\tt cox\_matrix\dgr& Coxeter matrix of a root system\cr
\+\tt cox\_number& Coxeter number of a reflection group\cr
\+\tt degrees& degrees of the fundamental polynomial invariants\cr
\+\tt descent\_gf& generating function for descent sets\cr
\+\tt diagram& Dynkin diagram of a root system\cr
\+\tt exponents& exponents of a root system\cr
\+\tt highest\_root\dgr& highest root in an irreducible root system\cr
\+\tt interior\_pt\dgr& find a vector in the interior of the fundamental
  chamber\cr
\+\tt iprod& inner product of vectors\cr
\+\tt length\_gf& length generating function for Coxeter groups\cr
\+\tt longest\_elt\dgr& longest element of a Coxeter group\cr
\+\tt multperm& multiply permutations representing simple reflections\cr
\+\tt name\_of& name of a root system with given base or Coxeter matrix\cr
\+\tt num\_refl& number of reflections (or positive roots) in a Coxeter
  group\cr
\+\tt orbit\dgr& orbit of a vector under the action of a Weyl group\cr
\+\tt orbit\_size\dgr& size of the orbit generated by a vector\cr
\+\tt perm\_char& permutation character induced by a reflection subgroup\cr
\+\tt perm\_rep\dgr& permutation representation of a Coxeter group\cr
\+\tt pos\_roots\dgr& positive roots of a (crystallographic) root system\cr
\+\tt presentation\dgr& generators and relations for a Coxeter group\cr
\+\tt rank& rank of a root system\cr
\+\tt reduce\dgr& find a reduced expression for a word in the simple
  reflections\cr
\+\tt reflect& apply reflections to a vector\cr
\+\tt root\_coords\dgr& coordinates of a vector with respect to the simple
  roots\cr
\+\tt size& size of a Coxeter group\cr
\+\tt vec2fc\dgr& map a vector to the fundamental chamber by a series of simple
  reflections\cr

\medskip The \weyl{} package:
\+\tt rho\dgr& half the sum of the positive roots\cr
\+\tt store& pre-store data for weight multiplicity computations\cr
\+\tt weight\_coords\dgr& coordinates of a vector with respect to the
  fundamental weights\cr
\+\tt weight\_mults& weight multiplicities in irreducible representations\cr
\+\tt weight\_sys& weight vectors dominated by a given highest weight\cr
\+\tt weights\dgr& fundamental weights of a (crystallographic) root system\cr
\+\tt weyl\_dim\dgr& Weyl dimension formula for irreducible representations\cr

\medskip
Here also are short descriptions of the procedures in the {\tt examples}
subdirectories. These must be explicitly loaded by the user.

\medskip In {\tt coxeter/examples}:
\+\tt cartan\_matrix\dgr&  Cartan matrix of a (crystallographic) root system\cr
\+\tt coset\_reps\dgr& create the list of minimum-length coset representatives
  of a parabolic subgroup\cr
\+\tt ct\_chains& count maximal chains (reduced expressions) in the Bruhat
  order\cr
\+\tt redex\dgr& produce all reduced expressions for a given word\cr
\+\tt refl\_rep\dgr& matrices for the reflection representation of a Coxeter
  group\cr
\+\tt root\_poset& partial order of positive roots in a root system\cr

\medskip In {\tt weyl/examples}:
\+\tt dim\_table& produce a list of dimensions of irreducible
  representations\cr

\vfill\eject
\mysec{7. The Non-Crystallographic Kludge}
The non-crystallographic root systems pose a special challenge for those
who wish to do machine computations. The crux of the problem is that in these
cases, there is no lattice containing the roots. Thus if one wishes to
work directly with the roots, one cannot avoid vectors that have irrational
coordinates. In the cases of {\tt H3} and {\tt H4}, the minimum extension of
$\Q$ required is $\Q[\sqrt{5}]$, and for the dihedral cases {\tt I2[m]}, the
minimum extension is $\Q[\cos(\pi/m),\sin(\pi/m)]$.

\maple{} does have facilities for working with algebraic extensions of $\Q$,
so in principle it would be possible to write the core procedures of \cox{}
so that vectors with algebraic coefficients are correctly processed. However,
in order to be able to recognize when two vectors are equal, it would be
necessary to frequently convert vectors to a normal form. This would impose a
severe computational burden on the system, and would seriously degrade the
performance of \cox{}.

Faced with these difficulties, I decided to take the coward's approach and
use floating-point coordinates for the non-crystallographic root systems. This
of course introduces unpleasant side effects, the main one being that we
cannot determine when two vectors with floating-point coordinates are
orthogonal. In particular, this means that some of the procedures of
\cox{} cannot be used with non-crystallographic root systems. The list of
offenders with this unfortunate property is as follows:

\smallskip
\ttline{orbit, orbit\_size, pos\_roots, {\rm and to a limited extent}
  reduce, vec2fc}

\smallskip\noindent
The limitations on {\tt reduce} and {\tt vec2fc} are as follows: {\tt reduce}
is still capable of finding reduced expressions for words in non-%
crystallographic reflection groups, but it is unable to find reduced
{\it subwords} in those cases; {\tt vec2fc} will fail only for vectors that
are close to being orthogonal to one or more of the roots.

I have set up the syntax of the {\tt base} procedure in a way that provides
the user with a constant reminder of the floating-point compromise. If one
desires a list of base vectors for a crystallographic root system, say
{\tt F4}, one simply types {\tt base(F4)}. On the other hand, if one does the
same for a non-crystallographic root system, such as {\tt H4}, the result is
an error message.  In order to force {\tt base} into divulging a list of
floating-point base vectors, the user is required to add an arbitrary second
(dummy) argument. Thus for example, {\tt base(H4,kludge)} would suffice.

There are also a few procedures of \cox, namely,

\smallskip
\ttline{char\_poly, interior\_pt, root\_coords, vec2fc}
 
\smallskip\noindent
with the property that they return error messages when supplied with the name
of a non-crystallographic root system. Again, this behavior is intended to
remind the user that floating-point coordinates must be used. So how do you
get an answer, rather than an error message? The above procedures belong to
the group that allows the user to specify a root system by means of a list
of base vectors (cf. the discussion in~\S5). Thus one could use the following
to produce an interior point of the fundamental chamber for {\tt H3}:

\ttline{with(coxeter);}
\ttline{S:=base(H3,kludge);}
\ttline{interior\_pt(S);}

\mysec{8. Miscellany}
\subsec{Global Warning}
The following names have been reserved for use by \cox{} and \weyl:\smallskip

\item{1.} {\tt e1,e2,e3,...}\quad (The standard coordinates.)
\item{2.} {\tt A1,A2,...,B2,...}\quad  (The names of root systems.)
\item{3.} {\tt A,B,...,H,I2}\quad (The series names of root systems.)
\item{4.} {\tt s1,s2,s3,...}\quad (The names for generators used by
  {\tt perm\_rep} and {\tt presentation}.)
\item{5.} {\tt M}\quad (A table name used to format the output of
  {\tt weight\_mults}.) 

\smallskip
The variable {\tt q} is used as the default by {\tt char\_poly, descent\_gf}
and {\tt length\_gf} in cases where no variable is supplied by the user.

\subsec{Improvements}
There are a number of things I would like to add to \cox{} and \weyl{} if I
find the time and energy. At the top of my wish list are: (a) character tables
for all of the finite Coxeter groups; (b) more extensive procedures in \weyl{}
for various things like tensor product multiplicities, decomposing formal
characters into sums of irreducible characters, and so on. It would also be
interesting to see how far this package can go in the computation of
Kazhdan-Lusztig polynomials before \maple's voracious appetite for memory
gets out of control.

\subsec{Bugs}
Please send reports of reproducible bugs to my e-mail address on page~1.
Be sure to include an example, preferably as small as possible.

\subsec{Mailing list} I would like to maintain a mailing list of users of
\cox, \weyl, and my previously released packages {\tt SF} (symmetric
functions) and {\tt posets} (partially ordered sets). If you would like to
be kept informed of new versions, new packages, or (god forbid) bugs, please
send a message to my e-mail address on page~1, and I will add you to the list.

\subsec{Compensation}
If \cox{} and \weyl{} prove to be useful in your own research, I would
appreciate an acknowledgment in publications derived from that research.

\subsec{Acknowledgement}
I would like to thank Arjeh Cohen for a number of valuable discussions we had
that suggested to me the feasibility of creating a \maple{} package for root
systems and Coxeter groups.

\mysec{9. Copyleft}
Copyleft \copyright 1992 by John R. Stembridge.

Permission is granted to anyone to to use, modify, or redistribute this
software freely, subject to the following restrictions:\medskip

{\openup -1\jot
\item{1.} The author accepts no responsibility for any consequences of this
software and makes no guarantee that the software is free of defects.
\smallskip
\item{2.} The origin of this software must not be misrepresented, either by
explicit claim or by omission.
\smallskip
\item{3.} This notice and the copyleft must be included in all copies or
altered versions of this software.
\smallskip
\item{4.} This software may not be included or redistributed as part of any
package to be sold for profit without the explicit written permission of the
author.\par}
\par}

\mysec{10. References}
{\frenchspacing\raggedbottom
\def\myref#1{\smallskip\item{[{\bf #1}]}}
\myref{1}
  N. Bourbaki, ``Groupes et Alg\`ebres de Lie, Chp. IV--VI,''
  Hermann, Paris, 1968.
\myref{2} M. R. Bremner, R. V. Moody, J. Patera, ``Tables of dominant weight
  multiplicities for representations of simple Lie algebras,''
  Marcel Dekker, New York, 1985.
\myref{3}
  J. E. Humphreys, ``Introduction to Lie Algebras and Representation Theory,''
  Springer Verlag, Berlin-New York, 1972.
\myref{4}
  J. E. Humphreys, ``Reflection groups and Coxeter groups,''
  Cambridge Univ. Press, Cambridge, 1990.
\myref{5}
  M. A. A. van Leeuwen, A. M. Cohen, and B. Lisser, ``LiE, A package for Lie
  group computations,'' CAN (Computer Algebra Nederland), Amsterdam, 1992.
\par}
\end
