Coxeter Group Algebras

class sage.categories.coxeter_group_algebras.CoxeterGroupAlgebras(category, *args)[source]

Bases: AlgebrasCategory

class ParentMethods[source]

Bases: object

demazure_lusztig_eigenvectors(q1, q2)[source]

Return the family of eigenvectors for the Cherednik operators.

INPUT:

  • self – a finite Coxeter group \(W\)

  • q1, q2 – two elements of the ground ring \(K\)

The affine Hecke algebra \(H_{q_1,q_2}(\tilde W)\) acts on the group algebra of \(W\) through the Demazure-Lusztig operators \(T_i\). Its Cherednik operators \(Y^\lambda\) can be simultaneously diagonalized as long as \(q_1/q_2\) is not a small root of unity [HST2008].

This method returns the family of joint eigenvectors, indexed by \(W\).

EXAMPLES:

sage: W = WeylGroup(["B",2])
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
sage: K = QQ['q1,q2'].fraction_field()
sage: q1, q2 = K.gens()
sage: KW = W.algebra(K)
sage: E = KW.demazure_lusztig_eigenvectors(q1,q2)
sage: E.keys()                                                          # needs sage.rings.number_field
Weyl Group of type ['B', 2] (as a matrix group acting on the ambient space)
sage: w = W.an_element()
sage: E[w]                                                              # needs sage.rings.number_field
(q2/(-q1+q2))*2121 + ((-q2)/(-q1+q2))*121 - 212 + 12
>>> from sage.all import *
>>> W = WeylGroup(["B",Integer(2)])
>>> W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
>>> K = QQ['q1,q2'].fraction_field()
>>> q1, q2 = K.gens()
>>> KW = W.algebra(K)
>>> E = KW.demazure_lusztig_eigenvectors(q1,q2)
>>> E.keys()                                                          # needs sage.rings.number_field
Weyl Group of type ['B', 2] (as a matrix group acting on the ambient space)
>>> w = W.an_element()
>>> E[w]                                                              # needs sage.rings.number_field
(q2/(-q1+q2))*2121 + ((-q2)/(-q1+q2))*121 - 212 + 12
W = WeylGroup(["B",2])
W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
K = QQ['q1,q2'].fraction_field()
q1, q2 = K.gens()
KW = W.algebra(K)
E = KW.demazure_lusztig_eigenvectors(q1,q2)
E.keys()                                                          # needs sage.rings.number_field
w = W.an_element()
E[w]                                                              # needs sage.rings.number_field
demazure_lusztig_operator_on_basis(w, i, q1, q2, side='right')[source]

Return the result of applying the \(i\)-th Demazure Lusztig operator on w.

INPUT:

  • w – an element of the Coxeter group

  • i – an element of the index set

  • q1, q2 – two elements of the ground ring

  • bar – boolean (default: False)

See demazure_lusztig_operators() for details.

EXAMPLES:

sage: W = WeylGroup(["B",3])
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
sage: K = QQ['q1,q2']
sage: q1, q2 = K.gens()
sage: KW = W.algebra(K)
sage: w = W.an_element()
sage: KW.demazure_lusztig_operator_on_basis(w, 0, q1, q2)
(-q2)*323123 + (q1+q2)*123
sage: KW.demazure_lusztig_operator_on_basis(w, 1, q1, q2)
q1*1231
sage: KW.demazure_lusztig_operator_on_basis(w, 2, q1, q2)
q1*1232
sage: KW.demazure_lusztig_operator_on_basis(w, 3, q1, q2)
(q1+q2)*123 + (-q2)*12
>>> from sage.all import *
>>> W = WeylGroup(["B",Integer(3)])
>>> W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
>>> K = QQ['q1,q2']
>>> q1, q2 = K.gens()
>>> KW = W.algebra(K)
>>> w = W.an_element()
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(0), q1, q2)
(-q2)*323123 + (q1+q2)*123
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(1), q1, q2)
q1*1231
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(2), q1, q2)
q1*1232
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(3), q1, q2)
(q1+q2)*123 + (-q2)*12
W = WeylGroup(["B",3])
W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
K = QQ['q1,q2']
q1, q2 = K.gens()
KW = W.algebra(K)
w = W.an_element()
KW.demazure_lusztig_operator_on_basis(w, 0, q1, q2)
KW.demazure_lusztig_operator_on_basis(w, 1, q1, q2)
KW.demazure_lusztig_operator_on_basis(w, 2, q1, q2)
KW.demazure_lusztig_operator_on_basis(w, 3, q1, q2)

At \(q_1=1\) and \(q_2=0\) we recover the action of the isobaric divided differences \(\pi_i\):

sage: KW.demazure_lusztig_operator_on_basis(w, 0, 1, 0)
123
sage: KW.demazure_lusztig_operator_on_basis(w, 1, 1, 0)
1231
sage: KW.demazure_lusztig_operator_on_basis(w, 2, 1, 0)
1232
sage: KW.demazure_lusztig_operator_on_basis(w, 3, 1, 0)
123
>>> from sage.all import *
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(0), Integer(1), Integer(0))
123
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(1), Integer(1), Integer(0))
1231
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(2), Integer(1), Integer(0))
1232
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(3), Integer(1), Integer(0))
123
KW.demazure_lusztig_operator_on_basis(w, 0, 1, 0)
KW.demazure_lusztig_operator_on_basis(w, 1, 1, 0)
KW.demazure_lusztig_operator_on_basis(w, 2, 1, 0)
KW.demazure_lusztig_operator_on_basis(w, 3, 1, 0)

At \(q_1=1\) and \(q_2=-1\) we recover the action of the simple reflection \(s_i\):

sage: KW.demazure_lusztig_operator_on_basis(w, 0, 1, -1)
323123
sage: KW.demazure_lusztig_operator_on_basis(w, 1, 1, -1)
1231
sage: KW.demazure_lusztig_operator_on_basis(w, 2, 1, -1)
1232
sage: KW.demazure_lusztig_operator_on_basis(w, 3, 1, -1)
12
>>> from sage.all import *
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(0), Integer(1), -Integer(1))
323123
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(1), Integer(1), -Integer(1))
1231
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(2), Integer(1), -Integer(1))
1232
>>> KW.demazure_lusztig_operator_on_basis(w, Integer(3), Integer(1), -Integer(1))
12
KW.demazure_lusztig_operator_on_basis(w, 0, 1, -1)
KW.demazure_lusztig_operator_on_basis(w, 1, 1, -1)
KW.demazure_lusztig_operator_on_basis(w, 2, 1, -1)
KW.demazure_lusztig_operator_on_basis(w, 3, 1, -1)
demazure_lusztig_operators(q1, q2, side='right', affine=True)[source]

Return the Demazure Lusztig operators acting on self.

INPUT:

  • q1, q2 – two elements of the ground ring \(K\)

  • side'left' or 'right' (default: 'right'); which side to act upon

  • affine – boolean (default: True)

The Demazure-Lusztig operator \(T_i\) is the linear map \(R \to R\) obtained by interpolating between the simple projection \(\pi_i\) (see CoxeterGroups.ElementMethods.simple_projection()) and the simple reflection \(s_i\) so that \(T_i\) has eigenvalues \(q_1\) and \(q_2\):

\[(q_1 + q_2) \pi_i - q_2 s_i.\]

The Demazure-Lusztig operators give the usual representation of the operators \(T_i\) of the \(q_1,q_2\) Hecke algebra associated to the Coxeter group.

For a finite Coxeter group, and if affine=True, the Demazure-Lusztig operators \(T_1,\dots,T_n\) are completed by \(T_0\) to implement the level \(0\) action of the affine Hecke algebra.

EXAMPLES:

sage: W = WeylGroup(["B",3])
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
sage: K = QQ['q1,q2']
sage: q1, q2 = K.gens()
sage: KW = W.algebra(K)
sage: T = KW.demazure_lusztig_operators(q1, q2, affine=True)
sage: x = KW.monomial(W.an_element()); x
123
sage: T[0](x)
(-q2)*323123 + (q1+q2)*123
sage: T[1](x)
q1*1231
sage: T[2](x)
q1*1232
sage: T[3](x)
(q1+q2)*123 + (-q2)*12

sage: T._test_relations()
>>> from sage.all import *
>>> W = WeylGroup(["B",Integer(3)])
>>> W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
>>> K = QQ['q1,q2']
>>> q1, q2 = K.gens()
>>> KW = W.algebra(K)
>>> T = KW.demazure_lusztig_operators(q1, q2, affine=True)
>>> x = KW.monomial(W.an_element()); x
123
>>> T[Integer(0)](x)
(-q2)*323123 + (q1+q2)*123
>>> T[Integer(1)](x)
q1*1231
>>> T[Integer(2)](x)
q1*1232
>>> T[Integer(3)](x)
(q1+q2)*123 + (-q2)*12

>>> T._test_relations()
W = WeylGroup(["B",3])
W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
K = QQ['q1,q2']
q1, q2 = K.gens()
KW = W.algebra(K)
T = KW.demazure_lusztig_operators(q1, q2, affine=True)
x = KW.monomial(W.an_element()); x
T[0](x)
T[1](x)
T[2](x)
T[3](x)
T._test_relations()

Note

For a finite Weyl group \(W\), the level 0 action of the affine Weyl group \(\tilde W\) only depends on the Coxeter diagram of the affinization, not its Dynkin diagram. Hence it is possible to explore all cases using only untwisted affinizations.