Package sage :: Package combinat :: Package root_system :: Module root_system :: Class RootSystem
[hide private]
[frames] | no frames]

Class RootSystem

source code

                      object --+    
                               |    
structure.sage_object.SageObject --+
                                   |
                                  RootSystem


Returns the root system associated to the Cartan type t.

EXAMPLES:
  We construct the root system for type $B_3$

    sage: R=RootSystem(['B',3]); R
    Root system of type ['B', 3]

  R models the root system abstractly. It comes equipped with
  various realizations of the root and weight lattices, where all
  computation take place. Let us play first with the root lattice.

    sage: space = R.root_lattice()
    sage: space
    Root lattice of the Root system of type ['B', 3]

  It is the free \ZZ module $\bigoplus_i \ZZ.\alpha_i$ spanned by
  the simple roots:
    
    sage: space.base_ring()
    Integer Ring
    sage: list(space.basis())              # FIXME: should return [alpha[1], alpha[2], alpha[3]]
    [alpha(1), alpha(2), alpha(3)]
    
  Let us do some computations with the simple roots:

    sage: alpha = space.simple_roots()
    sage: alpha[1] + alpha[2]              # FIXME: should return alpha[1] + alpha[2]
    alpha(1) + alpha(2)

  There is a canonical pairing between the root lattice and the
  coroot lattice:
    sage: R.coroot_lattice()
    The coroot lattice of the Root system of type ['B', 3]

  We construct the simple coroots, and do some computations (see
  comments about duality below for some caveat).
    sage: alphacheck = space.simple_coroots()
    sage: list(alphacheck)                 # FIXME: should return [alphacheck[1], alphacheck[2], alphacheck[3]]
    [alphacheck(1), alphacheck(2), alphacheck(3)]

  We can carry over the same computations in any of the other
  realizations of the root lattice, like the root space
  $\bigoplus_i \QQ.\alpha_i$, the weight lattice $\bigoplus_i
  \ZZ.\Lambda_i$, the weight space $\bigoplus_i \QQ.\Lambda_i$.
  For example:

    sage: space = R.weight_space()
    sage: space
    The weight space over the Rational Field of the Root system of type ['B', 3]

    sage: space.base_ring()
    Rational Field
    sage: list(space.basis())
    [Lambda(1), Lambda(2), Lambda(3)]

    sage: alpha = space.simple_roots()
    sage: alpha[1] + alpha[2]
    Lambda(1) + Lambda(2) - 2*Lambda(3)

  The fundamental weights are the dual basis of the coroots:

    sage: Lambda = space.fundamental_weights()
    sage: Lambda[1]
    Lambda(1)

    sage: alphacheck = space.simple_coroots()
    sage: list(alphacheck)                 # FIXME: should return [alphacheck[1], alphacheck[2], alphacheck[3]]
    [alphacheck(1), alphacheck(2), alphacheck(3)]

    sage: [Lambda[i].scalar(alphacheck[1]) for i in space.index_set()]
    [1, 0, 0]
    sage: [Lambda[i].scalar(alphacheck[2]) for i in space.index_set()]
    [0, 1, 0]
    sage: [Lambda[i].scalar(alphacheck[3]) for i in space.index_set()]
    [0, 0, 1]

  Let us us use the simple reflections. In the weight space, they
  work as in the \emph{number game}: firing the node $i$ on an
  element x adds $c$ times the simple root $\alpha_i$, where $c$
  is the coefficient of $i$ in $x$:
  
    sage: s = space.simple_reflections()
    sage: Lambda[1].simple_reflection(1)
    -Lambda(1) + Lambda(2)
    sage: Lambda[2].simple_reflection(1)
    Lambda(2)
    sage: Lambda[3].simple_reflection(1)
    Lambda(3)
    sage: (-2*Lambda[1] + Lambda[2] + Lambda[3]).simple_reflection(1)
    2*Lambda(1) - Lambda(2) + Lambda(3)

  It can be convenient to manipulate the simple reflections
  themselves:

    sage: s = space.simple_reflections()
    sage: s[1](Lambda[1])
    -Lambda(1) + Lambda(2)
    sage: s[1](Lambda[2])
    Lambda(2)
    sage: s[1](Lambda[3])
    Lambda(3)

  The root system may also come equipped with an ambient space,
  that is a simultaneous realization of the weight lattice and the
  coroot lattice in an euclidean vector space. This is implemented
  on a type by type basis, and is not always available. When the
  coefficients permit it, this is also available as an ambient
  lattice.

  TODO: Demo: signed permutations realization of type B
  


  The root system is aware of its dual root system:
    sage: R.dual
    Dual of root system of type ['B', 3]

  R.dual is really the root system of type $C_3$:
    sage: R.dual.cartan_type()
    ['C', 3]

  And the coroot lattice that we have been manipulating before is
  really implemented as the root lattice of the dual root system:

    sage: R.dual.root_lattice()
    The coroot lattice of the Root system of type ['B', 3]

  In particular, the coroots for the root lattice are in fact the
  roots of the coroot lattice:

    sage: list(R.root_lattice().simple_coroots())
    [alphacheck(1), alphacheck(2), alphacheck(3)]
    sage: list(R.coroot_lattice().simple_roots())
    [alphacheck(1), alphacheck(2), alphacheck(3)]
    sage: list(R.dual.root_lattice().simple_roots())
    [alphacheck(1), alphacheck(2), alphacheck(3)]

  The coweight lattice and space are defined similarly. Note
  that, to limit confusion, all the output have been tweaked
  appropriately.


TESTS:

    sage: R = RootSystem(['C',3])
    sage: R == loads(dumps(R))
    True
    sage: L = R.ambient_space()
    sage: s = L.simple_reflections()
    sage: s = L.simple_projections() # todo: not implemented
    sage: L == loads(dumps(L))
    True
    sage: L = R.root_space()
    sage: s = L.simple_reflections()
    sage: L == loads(dumps(L))
    True

    sage: for T in CartanType.samples(finite=True,crystalographic=True):
    ...       RootSystem(T).check()



Instance Methods [hide private]
 
__init__(self, cartan_type, as_dual_of=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
TESTS:...
source code
 
check(self) source code
 
__repr__(self)
EXAMPLES:...
source code
 
cartan_type(self)
Returns the Cartan type of the root system.
source code
 
dynkin_diagram(self)
Returns the Dynkin diagram of the root system.
source code
 
cartan_matrix(self)
EXAMPLES:...
source code
 
index_set(self)
EXAMPLES:...
source code
 
is_finite(self) source code
 
is_irreducible(self) source code
 
__cmp__(self, other)
EXAMPLES:...
source code
 
root_lattice(self) source code
 
root_space(self, base_ring=Rational Field) source code
 
coroot_lattice(self) source code
 
coroot_space(self, base_ring=Rational Field) source code
 
weight_lattice(self) source code
 
weight_space(self, base_ring=Rational Field) source code
 
coweight_lattice(self) source code
 
coweight_space(self, base_ring=Rational Field) source code
 
ambient_lattice(self)
Returns the usual ambient lattice for this root_system, if it exists and is implemented, and None otherwise.
source code
 
ambient_space(self, base_ring=Rational Field)
Returns the usual ambient space for this root_system, if it is implemented, and None otherwise.
source code

Inherited from structure.sage_object.SageObject: __hash__, __new__, _axiom_, _axiom_init_, _gap_, _gap_init_, _gp_, _gp_init_, _interface_, _interface_init_, _interface_is_cached_, _kash_, _kash_init_, _macaulay2_, _macaulay2_init_, _magma_, _magma_init_, _maple_, _maple_init_, _mathematica_, _mathematica_init_, _maxima_, _maxima_init_, _octave_, _octave_init_, _pari_, _pari_init_, _r_init_, _sage_, _singular_, _singular_init_, category, db, dump, dumps, plot, rename, reset_name, save, version

Inherited from object: __delattr__, __getattribute__, __reduce__, __reduce_ex__, __setattr__, __str__

Properties [hide private]

Inherited from object: __class__

Method Details [hide private]

__init__(self, cartan_type, as_dual_of=['4ti2-20061025', 'R-2.6.0', 'atlas-3.7.37', 'atlas-3.8.1', 'a...)
(Constructor)

source code 

TESTS:
    sage: R = RootSystem(['A',3])
    sage: R
    Root system of type ['A', 3]

Overrides: object.__init__

__repr__(self)
(Representation operator)

source code 

EXAMPLES:
    sage: RootSystem(['A',3])
    Root system of type ['A', 3]

Overrides: structure.sage_object.SageObject.__repr__

cartan_type(self)

source code 

Returns the Cartan type of the root system.

EXAMPLES:
    sage: R = RootSystem(['A',3])
    sage: R.cartan_type()
    ['A', 3]

dynkin_diagram(self)

source code 

Returns the Dynkin diagram of the root system.

EXAMPLES:
    sage: R = RootSystem(['A',3])
    sage: R.dynkin_diagram()
    Dynkin diagram of type ['A', 3]

cartan_matrix(self)

source code 

EXAMPLES:
    sage: RootSystem(['A',3]).cartan_matrix()
    [ 2 -1  0]
    [-1  2 -1]
    [ 0 -1  2]

index_set(self)

source code 

EXAMPLES:
    sage: RootSystem(['A',3]).index_set()
    [1, 2, 3]

__cmp__(self, other)
(Comparison operator)

source code 

EXAMPLES:
    sage: r1 = RootSystem(['A',3])
    sage: r2 = RootSystem(['B',3])
    sage: r1 == r1
    True
    sage: r1 == r2
    False

ambient_lattice(self)

source code 

Returns the usual ambient lattice for this root_system, if it
exists and is implemented, and None otherwise. This is a
Z-module, endowed with its canonical euclidean scalar product,
which embeds simultaneously the root lattice and the coroot
lattice (what about the weight lattice?)

EXAMPLES:
    sage: RootSystem(['A',4]).ambient_lattice()
    Ambient lattice for the Root system of type ['A', 4]

    sage: RootSystem(['B',4]).ambient_lattice()
    sage: RootSystem(['C',4]).ambient_lattice()
    sage: RootSystem(['D',4]).ambient_lattice()
    sage: RootSystem(['E',6]).ambient_lattice()
    sage: RootSystem(['F',4]).ambient_lattice()
    sage: RootSystem(['G',2]).ambient_lattice()

ambient_space(self, base_ring=Rational Field)

source code 

Returns the usual ambient space for this root_system, if it is
implemented, and None otherwise. This is a QQ-module, endowed
with its canonical euclidean scalar product, which embeds
simultaneously the root lattice and the coroot lattice (what
about the weight lattice?). An alternative base ring can be
provided as an option; it must contain the smallest ring over
which the ambient space can be defined (ZZ or QQ, depending on
the type).

EXAMPLES:
    sage: RootSystem(['A',4]).ambient_space()
    Ambient space for the Root system of type ['A', 4]

    sage: RootSystem(['B',4]).ambient_space()
    Ambient space for the Root system of type ['B', 4]

    sage: RootSystem(['C',4]).ambient_space()
    Ambient space for the Root system of type ['C', 4]

    sage: RootSystem(['D',4]).ambient_space()
    Ambient space for the Root system of type ['D', 4]

    sage: RootSystem(['E',6]).ambient_space()
    Ambient space for the Root system of type ['E', 6]

    sage: RootSystem(['F',4]).ambient_space()
    Ambient space for the Root system of type ['F', 4]

    sage: RootSystem(['G',2]).ambient_space()
    Ambient space for the Root system of type ['G', 2]