Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

atlas::weyl::Transducer Class Reference

Right multiplication action of simple reflections on a Weyl group modulo a maximal parabolic subgroup. More...

#include <weyl.h>

List of all members.

Public Member Functions

 Transducer ()
 Transducer (const latticetypes::LatticeMatrix &, size_t)
 Constructs subquotient #r for the Coxeter matrix c.
 ~Transducer ()
unsigned long length (EltPiece x) const
 Length of minimal coset representative x.
unsigned long maxlength () const
 Maximal length of minimal coset representatives.
Generator out (EltPiece x, Generator s) const
 Simple reflection t (strictly preceding s) so that xs = tx, if any.
EltPiece shift (EltPiece x, Generator s) const
 Right coset x' defined by x' = xs.
unsigned long size () const
 Number of cosets W_{r-1}\W_r.
const WeylWordwordPiece (EltPiece x) const
 Reduced decomposition in W (or W_r) of minimal coset representative x.

Private Attributes

std::vector< ShiftRowd_shift
 Right multiplication by $s_j$ gives transition |i -> d_shift[i][j]|.
std::vector< OutRowd_out
 If |d_shift[i][j]==i| then $s_j$ transduces in state $i$ to $s_k$ with $k=d_out[i][j]$ (otherwise |d_out[i][j]==UndefGenerator|).
std::vector< unsigned long > d_length
 Lengths of the minimal coset representatives $x_i$.
std::vector< WeylWordd_piece
 Reduced expressions of the minimal coset representatives.


Detailed Description

Right multiplication action of simple reflections on a Weyl group modulo a maximal parabolic subgroup.

In the notation from the description of the class WeylGroup, there will be one Transducer object for each parabolic subquotient W_{r-1}\W_r. List the shortest length coset representatives for this subquotient as x_0,...,x_{N_r-1}. Recall that the simple roots were ordered to guarantee that N_r-1 fits in an unsigned char, so each coset representative can be indexed by an unsigned char. We wish to compute the product x_i.s_j for j between 1 and r. The key theoretical fact about multiplication is that there are two mutually exclusive possibilities:

x_i.s_j = x_{i'} (some i' ne i)

OR

x_i.s_j = s_k.x_i (some k < r).

The first possibility is called _transition_ and the second _transduction_. (Confusingly Fokko's 1999 paper interchanges these terms at their definition, but their usual meaning and the sequel makes clear that this was an error).

The Transducer has tables to describe the two cases. the first table |d_shift| describes the transistions, namely |d_shift[i][j]==i'| in the first case; the cases that are tranductions can be distinguished from these by the fact that |d_shift[i][j]==i|. In these cases, the value |k| emitted by the transduction is stored in |d_out[i][j]|, which otherwise contains the value |UndefGenerator|

Definition at line 245 of file weyl.h.


Constructor & Destructor Documentation

atlas::weyl::Transducer::Transducer  )  [inline]
 

Definition at line 277 of file weyl.h.

atlas::weyl::Transducer::Transducer const latticetypes::LatticeMatrix c,
size_t  r
 

Constructs subquotient #r for the Coxeter matrix c.

This uses the Coxeter matrix only up to index r. In fact we can behave as if generator |r| is the final one, since we ignore any higher ones for now.

Precondition : c is a _normalized_ Coxeter matrix (meaning that all the parabolic subquotients W_{r-1}\W_r are small enough to fit in an unsigned char); and r is < rank(c);

Algorithm :

The algorithm is a version of my favorite bootstrapping procedure for the construction of Weyl groups and parabolic quotients. We start with a partially defined automaton containing only one element, and for which all shifts by the final generator $r$ are not yet defined (generators $i<r$ give transduction of $i$). At each point in time, all shifts for all elements in the automaton that do _not_ take the length up are defined; and we maintain a queue of elements that may have as yet undefined shifts.

We start up with one element in the automaton, with just one undefined shift, the one by r. Then run through the elements $x$ of the automaton in order of generation (which will also be in ShortLex order), and for each as yet undefined shift of $x$ by $s$ :

  • add a new element $xs$ (this increases the size of the automaton, during the loop!). At this point it is sure that this element is really new, and that its normal form is obtained by adding $s$ to that of $x$

  • then find all other elements $x'$ already in the automaton and $t$ such that $xs==x't$ (so $x't$ gives a non-canonical but reduced expression for $xs$). Do this by trying generators $t\neq s$: if $xst$ goes down (has the same length as $x$) then $x'==xst$ gives such a case. The trick for this is to look at the orbit of x under the dihedral group <s,t>. In the full group, this has necessarily cardinality 2m, with m = m(s,t) the coefficient in the Coxeter matrix, and $l(xst)==l(x)$ iff $xs$ is the unique elt. of maximal length in the orbit, hence to have this $x$ must goes down $m-1$ times when applying successively $t$, $s$, $t$, ... In the parabolic quotient, the orbit of the dihedral group (which is not reduced to a point) can either have cardinality $2m$ or cardinality $m$, and in the latter case it is a string with $m-1$ steps between the bottom and the top, with a stationary step at either extreme (to see this, note that on one hand each step up in the full group gives a step in the quotient that is either up or stationary, while on the other hand a stationary step in the quotient causes then next step to be the reverse of the previous one). So we have one of the following cases: (1) $x$ goes down $m-1$ times; then the image of the orbit has $2m$ elements and $xs==x't$ for $x'=x.(ts)^(m-1)$. (2) $x$ goes down $m-2$ times to some element $a$ and is then stationary (if $s'\in\{s,t\}$ is the next to apply, then $a.s'=g.a$ for some generator $g\in W_{r-1}$); then the orbit has $m$ elements, and if $v$ is the alternating word in $\{s,t\}$ of length $m-2$ not starting with $s'$, so that $a.v=x$, one has $v.st=s'vs$ whence $x.st=a.v.st=a.s'vs=g.a.vs=g.xs$ so that $xs$ has a transduction for $t$ that outputs the generator $g$. (3) either $x$ goes down less than $m-2$ times, or $m-2$ times followed by an upward step; then $xst$ goes up.

Definition at line 781 of file weyl.cpp.

References d_length, d_out, d_piece, d_shift, atlas::dihedralMin(), atlas::dihedralShift(), atlas::weyl::EltPiece, atlas::weyl::Generator, atlas::latticetypes::LatticeCoeff, atlas::latticetypes::LatticeMatrix, atlas::weyl::OutRow, atlas::weyl::ShiftRow, and atlas::weyl::WeylWord.

atlas::weyl::Transducer::~Transducer  )  [inline]
 

Definition at line 282 of file weyl.h.


Member Function Documentation

unsigned long atlas::weyl::Transducer::length EltPiece  x  )  const [inline]
 

Length of minimal coset representative x.

Definition at line 291 of file weyl.h.

unsigned long atlas::weyl::Transducer::maxlength  )  const [inline]
 

Maximal length of minimal coset representatives.

This is the number of positive roots for the Levi subgroup L_r, minus the number of positive roots for L_{r-1}.

Definition at line 302 of file weyl.h.

Generator atlas::weyl::Transducer::out EltPiece  x,
Generator  s
const [inline]
 

Simple reflection t (strictly preceding s) so that xs = tx, if any.

In case of a transition, this returns UndefGenerator.

Definition at line 312 of file weyl.h.

References atlas::weyl::Generator.

EltPiece atlas::weyl::Transducer::shift EltPiece  x,
Generator  s
const [inline]
 

Right coset x' defined by x' = xs.

When x' is not equal to s, this is an equality of minimal coset representatives. When x'=x, the equation for minimal coset representatives is out(x,s).x = x.s.

Definition at line 323 of file weyl.h.

References atlas::weyl::EltPiece.

Referenced by atlas::dihedralMin(), and atlas::dihedralShift().

unsigned long atlas::weyl::Transducer::size  )  const [inline]
 

Number of cosets W_{r-1}\W_r.

Definition at line 330 of file weyl.h.

const WeylWord& atlas::weyl::Transducer::wordPiece EltPiece  x  )  const [inline]
 

Reduced decomposition in W (or W_r) of minimal coset representative x.

Definition at line 338 of file weyl.h.

References atlas::weyl::WeylWord.

Referenced by atlas::weyl::WeylGroup::wordPiece().


Member Data Documentation

std::vector<unsigned long> atlas::weyl::Transducer::d_length [private]
 

Lengths of the minimal coset representatives $x_i$.

Definition at line 267 of file weyl.h.

Referenced by Transducer().

std::vector<OutRow> atlas::weyl::Transducer::d_out [private]
 

If |d_shift[i][j]==i| then $s_j$ transduces in state $i$ to $s_k$ with $k=d_out[i][j]$ (otherwise |d_out[i][j]==UndefGenerator|).

In this case $x_i.s_j = s_k.x_i$, so the state $i$ remains unchanged.

Definition at line 262 of file weyl.h.

Referenced by Transducer().

std::vector<WeylWord> atlas::weyl::Transducer::d_piece [private]
 

Reduced expressions of the minimal coset representatives.

Definition at line 272 of file weyl.h.

Referenced by Transducer().

std::vector<ShiftRow> atlas::weyl::Transducer::d_shift [private]
 

Right multiplication by $s_j$ gives transition |i -> d_shift[i][j]|.

Definition at line 254 of file weyl.h.

Referenced by Transducer().


The documentation for this class was generated from the following files:
Generated on Wed Mar 26 16:53:11 2008 for atlas by  doxygen 1.3.9.1