Kazhdan-Lusztig Polynomials

AUTHORS:

  • Daniel Bump (2008): initial version

  • Alan J.X. Guo (2014-03-18): R_tilde() method.

class sage.combinat.kazhdan_lusztig.KazhdanLusztigPolynomial(W, q, trace=False)[source]

Bases: UniqueRepresentation, SageObject

A Kazhdan-Lusztig polynomial.

INPUT:

  • W – a Weyl Group

  • q – an indeterminate

OPTIONAL:

  • trace – if True, then this displays the trace: the intermediate results. This is instructive and fun.

The parent of q may be a PolynomialRing or a LaurentPolynomialRing.

EXAMPLES:

sage: W = WeylGroup("B3",prefix='s')
sage: [s1,s2,s3] = W.simple_reflections()
sage: R.<q> = LaurentPolynomialRing(QQ)
sage: KL = KazhdanLusztigPolynomial(W,q)
sage: KL.P(s2,s3*s2*s3*s1*s2)
1 + q
>>> from sage.all import *
>>> W = WeylGroup("B3",prefix='s')
>>> [s1,s2,s3] = W.simple_reflections()
>>> R = LaurentPolynomialRing(QQ, names=('q',)); (q,) = R._first_ngens(1)
>>> KL = KazhdanLusztigPolynomial(W,q)
>>> KL.P(s2,s3*s2*s3*s1*s2)
1 + q

A faster implementation (using the optional package Coxeter 3) is given by:

sage: W = CoxeterGroup(['B', 3], implementation='coxeter3') # optional - coxeter3
sage: W.kazhdan_lusztig_polynomial([2], [3,2,3,1,2])        # optional - coxeter3
q + 1
>>> from sage.all import *
>>> W = CoxeterGroup(['B', Integer(3)], implementation='coxeter3') # optional - coxeter3
>>> W.kazhdan_lusztig_polynomial([Integer(2)], [Integer(3),Integer(2),Integer(3),Integer(1),Integer(2)])        # optional - coxeter3
q + 1
P(x, y)[source]

Return the Kazhdan-Lusztig \(P\) polynomial.

If the rank is large, this runs slowly at first but speeds up as you do repeated calculations due to the caching.

INPUT:

  • x, y – elements of the underlying Coxeter group

See also

kazhdan_lusztig_polynomial for a faster implementation using Fokko Ducloux’s Coxeter3 C++ library.

EXAMPLES:

sage: R.<q> = QQ[]
sage: W = WeylGroup("A3", prefix='s')
sage: [s1,s2,s3] = W.simple_reflections()
sage: KL = KazhdanLusztigPolynomial(W, q)
sage: KL.P(s2,s2*s1*s3*s2)
q + 1
>>> from sage.all import *
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> W = WeylGroup("A3", prefix='s')
>>> [s1,s2,s3] = W.simple_reflections()
>>> KL = KazhdanLusztigPolynomial(W, q)
>>> KL.P(s2,s2*s1*s3*s2)
q + 1
R(x, y)[source]

Return the Kazhdan-Lusztig \(R\) polynomial.

INPUT:

  • x, y – elements of the underlying Coxeter group

EXAMPLES:

sage: R.<q>=QQ[]
sage: W = WeylGroup("A2", prefix='s')
sage: [s1,s2]=W.simple_reflections()
sage: KL = KazhdanLusztigPolynomial(W, q)
sage: [KL.R(x,s2*s1) for x in [1,s1,s2,s1*s2]]
[q^2 - 2*q + 1, q - 1, q - 1, 0]
>>> from sage.all import *
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> W = WeylGroup("A2", prefix='s')
>>> [s1,s2]=W.simple_reflections()
>>> KL = KazhdanLusztigPolynomial(W, q)
>>> [KL.R(x,s2*s1) for x in [Integer(1),s1,s2,s1*s2]]
[q^2 - 2*q + 1, q - 1, q - 1, 0]
R_tilde(x, y)[source]

Return the Kazhdan-Lusztig \(\tilde{R}\) polynomial.

Information about the \(\tilde{R}\) polynomials can be found in [Dy1993] and [BB2005].

INPUT:

  • x, y – elements of the underlying Coxeter group

EXAMPLES:

sage: R.<q> = QQ[]
sage: W = WeylGroup("A2", prefix='s')
sage: [s1,s2] = W.simple_reflections()
sage: KL = KazhdanLusztigPolynomial(W, q)
sage: [KL.R_tilde(x,s2*s1) for x in [1,s1,s2,s1*s2]]
[q^2, q, q, 0]
>>> from sage.all import *
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> W = WeylGroup("A2", prefix='s')
>>> [s1,s2] = W.simple_reflections()
>>> KL = KazhdanLusztigPolynomial(W, q)
>>> [KL.R_tilde(x,s2*s1) for x in [Integer(1),s1,s2,s1*s2]]
[q^2, q, q, 0]