|
| TwistedWeylGroup (const WeylGroup &, const Twist &) |
|
| TwistedWeylGroup (const TwistedWeylGroup &, tags::DualTag) |
|
const WeylGroup & | weylGroup () const |
|
size_t | rank () const |
|
int | mult (WeylElt &w, Generator s) const |
|
void | mult (WeylElt &w, const WeylElt &v) const |
|
void | mult (WeylElt &w, const WeylWord &ww) const |
|
int | leftMult (WeylElt &w, Generator s) const |
|
void | leftMult (WeylElt &w, const WeylWord &ww) const |
|
WeylWord | word (const WeylElt &w) const |
|
WeylElt | prod (const WeylElt &w, Generator s) const |
|
WeylElt | prod (Generator s, const WeylElt &w) const |
|
WeylElt | prod (const WeylElt &w, const WeylElt &v) const |
|
WeylElt | prod (const WeylElt &w, const WeylWord &ww) const |
|
WeylElt | prod (const WeylWord &ww, const WeylElt &w) const |
|
bool | hasDescent (Generator s, const WeylElt &w) const |
|
bool | hasDescent (const WeylElt &w, Generator s) const |
|
Generator | twisted (Generator s) const |
|
WeylElt | twisted (const WeylElt &w) const |
|
Generator | dual_twisted (Generator s) const |
|
WeylElt | dual_twisted (const WeylElt &w) const |
|
const Twist & | twist () const |
|
void | twist (WeylElt &w) const |
|
std::vector< ext_gen > | twist_orbits () const |
|
Twist | dual_twist () const |
|
int | twistedConjugate (TwistedInvolution &tw, Generator s) const |
|
int | twistedConjugate (TwistedInvolution &tw, const WeylWord &ww) const |
|
int | inverseTwistedConjugate (TwistedInvolution &tw, const WeylWord &ww) const |
|
TwistedInvolution | twistedConjugated (TwistedInvolution tw, Generator s) const |
|
void | twistedConjugacyClass (TwistedInvolutionList &, const TwistedInvolution &) const |
| Puts in c the twistes conjugacy class of w. More...
|
|
void | twistedConjugate (TwistedInvolution &tw, const WeylElt &w) const |
| Twisted conjugates element |tw| by |w|: . More...
|
|
bool | hasTwistedCommutation (Generator, const TwistedInvolution &) const |
| Tells whether |w| twisted-commutes with |s|: $s.w.(s)=w$. More...
|
|
unsigned long | involutionLength (const TwistedInvolution &tw) const |
| Returns the length of |tw| as a twisted involution. More...
|
|
InvolutionWord | involution_expr (TwistedInvolution tw) const |
| Returns a reduced expression of |tw| as a twisted involution. The second form assures the lexicographically first possible form is used. More...
|
|
InvolutionWord | canonical_involution_expr (TwistedInvolution tw) const |
|
InvolutionWord | extended_involution_expr (TwistedInvolution tw) const |
|
RootNbrList | simple_images (const RootSystem &rs, const TwistedInvolution &tw) const |
| Roots that are images of the simple roots under involution of |tw|. More...
|
|
WeightInvolution | involution_matrix (const RootSystem &rs, const TwistedInvolution &tw) const |
| Matrix of involution of |tw| in adjoint coordinates. More...
|
|
Tells whether |w| twisted-commutes with |s|: $s.w.(s)=w$.
Precondition: |w| is a twisted involution: $w^{-1}=(w)$. Therefore twisted commutation is equivalent to $s.w$ being a twisted involution.
This is in fact the case if and only if $s.w.(s)$ has the same length as $w$, by the following reasoning. Suppose first that $s.w$ is reduced, then its twisted inverse $w.(s)$ is reduced as well. Then the only possible reduction in $s.w.(s)$ is cancellation of the extremal generators; whether this reduction applies is equivalent to having twisted commutation. If $s.w$ is not reduced, then neither is $w.(s)$, and $w'=s.w.(s)$ is a twisted involution not longer than $w$. If it is strictly shorter then obviously twisted commutation fails. In the remaining case that $l(s.w.(s))=l(w)$, let $v=s.w$ so that $w=s.v$ and $w'=v.(s)$ are reduced, but $w.(s)=s.v.(s)$ does reduce, which can only be by cancelling the extremal generators: $s.v.(s)=v$ which implies $w'=w$, and one has twisted commutation.
Returns a reduced expression of |tw| as a twisted involution. The second form assures the lexicographically first possible form is used.
Precondition: tw is a twisted involution: $tw^{-1}=(tw)$.
The argument given under |hasTwistedCommutation| shows that for every generator |s| exactly one of $s.tw$ and $s.tw.(s)$ is a twisted involution distinct from $tw$, and that if $l(s.tw)<l(tw)$ (for the usual length function on the Weyl group) then the length of this new twisted involution is less than that of $tw$ (by 1 or 2, respectively). A "reduced
expression as a twisted involution" for $tw$ is obtained by iterating this to bring the length down to $0$. Working back from the identity (so reading our expression from right to left), it can be determined for each letter to which if the two types of transformation it corresponds; nevertheless, we encode which case prevails in the sign of the generator recorded: we bitwise-complement for the case of conjugation.
Although not immediately obvious, all such reduced expressions do have the same length.
The code below chooses the first possible generator (for the internal numbering, as returned by |leftDescent|) at each step, so the reduced expression found is lexicographically first for the internal renumbering.
unsigned long atlas::weyl::TwistedWeylGroup::involutionLength |
( |
const TwistedInvolution & |
tw | ) |
const |
Returns the length of |tw| as a twisted involution.
Returns the length of tw as a twisted involution.
Precondition: tw is a twisted involution;
Algorithm: this is a simplified version of |involutionOut| that records only the length. This statistic plays a predominant role in the kgb and block structures; avoid calling this in sorting routines, since it is inefficient in such circumstances; instead do with the stored length information there.