#include <weyl.h>
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 WeylWord & | wordPiece (EltPiece x) const |
| Reduced decomposition in W (or W_r) of minimal coset representative x. | |
Private Attributes | |
| std::vector< ShiftRow > | d_shift |
| Right multiplication by $s_j$ gives transition |i -> d_shift[i][j]|. | |
| std::vector< OutRow > | d_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< WeylWord > | d_piece |
| Reduced expressions of the minimal coset representatives. | |
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.
|
|
|
|
||||||||||||
|
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$ :
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. |
|
|
|
|
|
Length of minimal coset representative x.
|
|
|
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}. |
|
||||||||||||
|
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. |
|
||||||||||||
|
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(). |
|
|
Number of cosets W_{r-1}\W_r.
|
|
|
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(). |
|
|
Lengths of the minimal coset representatives $x_i$.
Definition at line 267 of file weyl.h. Referenced by Transducer(). |
|
|
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(). |
|
|
Reduced expressions of the minimal coset representatives.
Definition at line 272 of file weyl.h. Referenced by Transducer(). |
|
|
Right multiplication by $s_j$ gives transition |i -> d_shift[i][j]|.
Definition at line 254 of file weyl.h. Referenced by Transducer(). |
1.3.9.1