atlas  0.6
Public Member Functions | Private Member Functions | Private Attributes | List of all members
atlas::tits::TitsGroup Class Reference

#include <tits.h>

Inheritance diagram for atlas::tits::TitsGroup:
Inheritance graph
[legend]
Collaboration diagram for atlas::tits::TitsGroup:
Collaboration graph
[legend]

Public Member Functions

 TitsGroup (const RootDatum &, const WeylGroup &W, const WeightInvolution &d)
 
 TitsGroup (const int_Matrix &Cartan_matrix, const WeylGroup &W, const weyl::Twist &twist)
 
 TitsGroup (const TitsGroup &Tg, const WeylGroup &W)
 
const size_t rank () const
 
const size_t semisimple_rank () const
 
TorusPart m_alpha (size_t j) const
 
TorusPart dual_m_alpha (size_t j) const
 
void reflect (TorusPart &x, weyl::Generator s) const
 
TorusPart push_across (TorusPart x, const WeylElt &w) const
 find torus part $x'$ so that $x.w=w.x'$ More...
 
TorusPart pull_across (const WeylElt &w, TorusPart y) const
 
TorusPart twisted (const TorusPart x) const
 
TorusPart dual_twisted (const TorusPart x) const
 
TitsElt twisted (const TitsElt &te) const
 
TitsElt dual_twisted (const TitsElt &te, const TorusPart shift) const
 
void twist (TorusPart x) const
 
BinaryMap involutionMatrix (const WeylWord &tw) const
 
unsigned long length (const TitsElt &a) const
 
TorusPart left_torus_part (const TitsElt &a) const
 
TorusPart right_torus_part (const TitsElt &a) const
 
void sigma_mult (weyl::Generator s, TitsElt &a) const
 Left multiplication of |a| by the canonical generator $$. More...
 
void sigma_inv_mult (weyl::Generator s, TitsElt &a) const
 
void mult_sigma (TitsElt &, weyl::Generator) const
 Right multiplication of |a| by the canonical generator $sigma_s$. More...
 
void mult_sigma_inv (TitsElt &, weyl::Generator) const
 
TitsElt prod (const TitsElt &a, TitsElt b) const
 Product of general Tits group elements. More...
 
void mult (TitsElt &a, const TitsElt &b) const
 
void right_add (TitsElt &a, TorusPart t) const
 
void left_add (TorusPart t, TitsElt &a) const
 
void sigma_conjugate (TitsElt &a, weyl::Generator s) const
 
void sigma_inv_conjugate (TitsElt &a, weyl::Generator s) const
 
void twistedConjugate (TitsElt &a, weyl::Generator s) const
 
void inverseTwistedConjugate (TitsElt &a, weyl::Generator s) const
 

Private Member Functions

 TitsGroup (const TitsGroup &)
 
TitsGroupoperator= (const TitsGroup &)
 

Private Attributes

size_t d_rank
 
std::vector< TorusPartd_simpleRoot
 
std::vector< TorusPartd_simpleCoroot
 
BinaryMap d_involution
 
BinaryMap dual_involution
 

Constructor & Destructor Documentation

atlas::tits::TitsGroup::TitsGroup ( const TitsGroup )
private
atlas::tits::TitsGroup::TitsGroup ( const RootDatum &  rd,
const WeylGroup &  W,
const WeightInvolution delta 
)

Constructs the Tits group corresponding to the root datum |rd|, and the fundamental involution |d| (which also defines the twist).

atlas::tits::TitsGroup::TitsGroup ( const int_Matrix Cartan_matrix,
const WeylGroup &  W,
const weyl::Twist twist 
)

Constructs the Tits group corresponding to the adjoint group of type given by |Cartan_matrix| and distinguished involution given by |twist|

atlas::tits::TitsGroup::TitsGroup ( const TitsGroup Tg,
const WeylGroup &  W 
)
inline

Member Function Documentation

TorusPart atlas::tits::TitsGroup::dual_m_alpha ( size_t  j) const
inline
TorusPart atlas::tits::TitsGroup::dual_twisted ( const TorusPart  x) const
inline
TitsElt atlas::tits::TitsGroup::dual_twisted ( const TitsElt te,
const TorusPart  shift 
) const
void atlas::tits::TitsGroup::inverseTwistedConjugate ( TitsElt a,
weyl::Generator  s 
) const
inline
BinaryMap atlas::tits::TitsGroup::involutionMatrix ( const WeylWord &  tw) const
void atlas::tits::TitsGroup::left_add ( TorusPart  t,
TitsElt a 
) const
inline
TorusPart atlas::tits::TitsGroup::left_torus_part ( const TitsElt a) const
inline
unsigned long atlas::tits::TitsGroup::length ( const TitsElt a) const
inline
TorusPart atlas::tits::TitsGroup::m_alpha ( size_t  j) const
inline
void atlas::tits::TitsGroup::mult ( TitsElt a,
const TitsElt b 
) const
inline
void atlas::tits::TitsGroup::mult_sigma ( TitsElt a,
weyl::Generator  s 
) const

Right multiplication of |a| by the canonical generator $sigma_s$.

Algorithm: similar to above, but omitting the |reflect| (since the torus part is at the left), and using |weyl::mult| instead of |weyl::leftMult|, and |right_add| to add the possible contribution $m_s$ instead of |left_add|; the latter implicitly involves a call to |pull_across|.

void atlas::tits::TitsGroup::mult_sigma_inv ( TitsElt a,
weyl::Generator  s 
) const
TitsElt atlas::tits::TitsGroup::prod ( const TitsElt a,
TitsElt  b 
) const

Product of general Tits group elements.

Algorithm: The algorithm is to multiply the second factors successively by the generators in a reduced expression for |a.w()|, then left-add |a.t()|.

Since we have torus parts on the left, we prefer left-multiplication here.

TorusPart atlas::tits::TitsGroup::pull_across ( const WeylElt &  w,
TorusPart  y 
) const
TorusPart atlas::tits::TitsGroup::push_across ( TorusPart  x,
const WeylElt &  w 
) const

find torus part $x'$ so that $x.w=w.x'$

Algorithm: for simple reflections this is |reflect|; repeat left-to-right

Note: a more sophisticated algorithm would involve precomputing the conjugation matrices for the various pieces of w. Don't do it unless it turns out to really matter.

const size_t atlas::tits::TitsGroup::rank ( ) const
inline
void atlas::tits::TitsGroup::reflect ( TorusPart x,
weyl::Generator  s 
) const
inline
void atlas::tits::TitsGroup::right_add ( TitsElt a,
TorusPart  t 
) const
inline
TorusPart atlas::tits::TitsGroup::right_torus_part ( const TitsElt a) const
inline
const size_t atlas::tits::TitsGroup::semisimple_rank ( ) const
inline
void atlas::tits::TitsGroup::sigma_conjugate ( TitsElt a,
weyl::Generator  s 
) const
inline
void atlas::tits::TitsGroup::sigma_inv_conjugate ( TitsElt a,
weyl::Generator  s 
) const
inline
void atlas::tits::TitsGroup::sigma_inv_mult ( weyl::Generator  s,
TitsElt a 
) const
void atlas::tits::TitsGroup::sigma_mult ( weyl::Generator  s,
TitsElt a 
) const

Left multiplication of |a| by the canonical generator $$.

This is the basic case defining the group structure in the Tits group (since left-multiplication by an element of $T(2)$ just adds to the torus part).

Algorithm: This is surprisingly simple: multiplying by $$ just amounts to reflecting the torus part through |s|, then left-multiplying the Weyl group part $w$ by |s| in the Weyl group, and if the length goes down in the latter step, add a factor of $()^2=m_s$ to the torus part. (To see this, write in the length-decreasing case $w=s.w'$ with $w'$ reduced; then $=m_s{w'}$, so we need to add $m_s$ to the reflected left torus part in that case.

The upshot is a multiplication algorithm almost as fast as in the Weyl group!

void atlas::tits::TitsGroup::twist ( TorusPart  x) const
inline
TorusPart atlas::tits::TitsGroup::twisted ( const TorusPart  x) const
inline
TitsElt atlas::tits::TitsGroup::twisted ( const TitsElt te) const
void atlas::tits::TitsGroup::twistedConjugate ( TitsElt a,
weyl::Generator  s 
) const
inline

Member Data Documentation

BinaryMap atlas::tits::TitsGroup::d_involution
private
size_t atlas::tits::TitsGroup::d_rank
private
std::vector<TorusPart> atlas::tits::TitsGroup::d_simpleCoroot
private
std::vector<TorusPart> atlas::tits::TitsGroup::d_simpleRoot
private
BinaryMap atlas::tits::TitsGroup::dual_involution
private

The documentation for this class was generated from the following files: