\(\mathcal{B}(\infty)\) Crystal Of PBW Monomials#

AUTHORS:

  • Dinakar Muthiah (2015-05-11): initial version

See also

For information on PBW datum, see PBW Data.

class sage.combinat.crystals.pbw_crystal.PBWCrystal(cartan_type)[source]#

Bases: Parent, UniqueRepresentation

Crystal of \(\mathcal{B}(\infty)\) given by PBW monomials.

A model of the crystal \(\mathcal{B}(\infty)\) whose elements are PBW datum up to equivalence by the tropical Plücker relations. The crystal structure on Lusztig data \(x = (x_1, \ldots, x_m)\) for the reduced word \(s_{i_1} \cdots s_{i_m} = w_0\) is given as follows. Suppose \(i_1 = j\), then \(f_j x = (x_1 + 1, x_2, \ldots, x_m)\). If \(i_1 \neq j\), then we use the tropical Plücker relations to change the reduced expression such that \(i_1' = j\) and then we change back to the original word.

EXAMPLES:

sage: PBW = crystals.infinity.PBW(['B', 3])
sage: hw = PBW.highest_weight_vector()
sage: x = hw.f_string([1,2,2,3,3,1,3,3,2,3,2,1,3,1,2,3,1,2,1,3,2]); x
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)
>>> from sage.all import *
>>> PBW = crystals.infinity.PBW(['B', Integer(3)])
>>> hw = PBW.highest_weight_vector()
>>> x = hw.f_string([Integer(1),Integer(2),Integer(2),Integer(3),Integer(3),Integer(1),Integer(3),Integer(3),Integer(2),Integer(3),Integer(2),Integer(1),Integer(3),Integer(1),Integer(2),Integer(3),Integer(1),Integer(2),Integer(1),Integer(3),Integer(2)]); x
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)

Elements are expressed in terms of Lusztig datum for a fixed reduced expression of \(w_0\):

sage: PBW.default_long_word()
[1, 3, 2, 3, 1, 2, 3, 1, 2]
sage: PBW.set_default_long_word([2,1,3,2,1,3,2,3,1])
sage: x
PBW monomial with Lusztig datum (3, 1, 1, 0, 1, 0, 1, 3, 4)
sage: PBW.set_default_long_word([1, 3, 2, 3, 1, 2, 3, 1, 2])
>>> from sage.all import *
>>> PBW.default_long_word()
[1, 3, 2, 3, 1, 2, 3, 1, 2]
>>> PBW.set_default_long_word([Integer(2),Integer(1),Integer(3),Integer(2),Integer(1),Integer(3),Integer(2),Integer(3),Integer(1)])
>>> x
PBW monomial with Lusztig datum (3, 1, 1, 0, 1, 0, 1, 3, 4)
>>> PBW.set_default_long_word([Integer(1), Integer(3), Integer(2), Integer(3), Integer(1), Integer(2), Integer(3), Integer(1), Integer(2)])

We can construct elements by giving it Lusztig data (with respect to the default long word):

sage: PBW([1,1,1,3,1,0,0,1,1])
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)
>>> from sage.all import *
>>> PBW([Integer(1),Integer(1),Integer(1),Integer(3),Integer(1),Integer(0),Integer(0),Integer(1),Integer(1)])
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)

We can also construct elements by passing in a reduced expression for a long word:

sage: x = PBW([1,1,1,3,1,0,0,1,1], [3,2,1,3,2,3,2,1,2]); x
PBW monomial with Lusztig datum (1, 1, 1, 0, 1, 0, 5, 1, 1)
sage: x.to_highest_weight()[1]
[1, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 2, 1, 3]
>>> from sage.all import *
>>> x = PBW([Integer(1),Integer(1),Integer(1),Integer(3),Integer(1),Integer(0),Integer(0),Integer(1),Integer(1)], [Integer(3),Integer(2),Integer(1),Integer(3),Integer(2),Integer(3),Integer(2),Integer(1),Integer(2)]); x
PBW monomial with Lusztig datum (1, 1, 1, 0, 1, 0, 5, 1, 1)
>>> x.to_highest_weight()[Integer(1)]
[1, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 2, 1, 3]
Element[source]#

alias of PBWCrystalElement

default_long_word()[source]#

Return the default long word used to express elements of self.

EXAMPLES:

sage: B = crystals.infinity.PBW(['E', 6])
sage: B.default_long_word()
[1, 3, 4, 5, 6, 2, 4, 5, 3, 4, 1, 3, 2, 4, 5, 6, 2, 4,
 5, 3, 4, 1, 3, 2, 4, 5, 3, 4, 1, 3, 2, 4, 1, 3, 2, 1]
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['E', Integer(6)])
>>> B.default_long_word()
[1, 3, 4, 5, 6, 2, 4, 5, 3, 4, 1, 3, 2, 4, 5, 6, 2, 4,
 5, 3, 4, 1, 3, 2, 4, 5, 3, 4, 1, 3, 2, 4, 1, 3, 2, 1]
set_default_long_word(word)[source]#

Set the default long word used to express elements of self.

EXAMPLES:

sage: B = crystals.infinity.PBW(['C', 3])
sage: B.default_long_word()
[1, 3, 2, 3, 1, 2, 3, 1, 2]
sage: x = B.highest_weight_vector().f_string([2,1,3,2,3,1,2,3,3,1])
sage: x
PBW monomial with Lusztig datum (1, 2, 2, 0, 0, 0, 0, 0, 1)
sage: B.set_default_long_word([2,1,3,2,1,3,2,3,1])
sage: B.default_long_word()
[2, 1, 3, 2, 1, 3, 2, 3, 1]
sage: x
PBW monomial with Lusztig datum (2, 0, 0, 0, 0, 0, 1, 3, 2)
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['C', Integer(3)])
>>> B.default_long_word()
[1, 3, 2, 3, 1, 2, 3, 1, 2]
>>> x = B.highest_weight_vector().f_string([Integer(2),Integer(1),Integer(3),Integer(2),Integer(3),Integer(1),Integer(2),Integer(3),Integer(3),Integer(1)])
>>> x
PBW monomial with Lusztig datum (1, 2, 2, 0, 0, 0, 0, 0, 1)
>>> B.set_default_long_word([Integer(2),Integer(1),Integer(3),Integer(2),Integer(1),Integer(3),Integer(2),Integer(3),Integer(1)])
>>> B.default_long_word()
[2, 1, 3, 2, 1, 3, 2, 3, 1]
>>> x
PBW monomial with Lusztig datum (2, 0, 0, 0, 0, 0, 1, 3, 2)
class sage.combinat.crystals.pbw_crystal.PBWCrystalElement(parent, lusztig_datum, long_word=None)[source]#

Bases: Element

A crystal element in the PBW model.

e(i)[source]#

Return the action of \(e_i\) on self.

EXAMPLES:

sage: B = crystals.infinity.PBW(['B', 3])
sage: b = B.highest_weight_vector()
sage: c = b.f_string([2,1,3,2,1,3,2,2]); c
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 2)
sage: c.e(2)
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 1)
sage: c.e_string([2,2,1,3,2,1,3,2]) == b
True
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['B', Integer(3)])
>>> b = B.highest_weight_vector()
>>> c = b.f_string([Integer(2),Integer(1),Integer(3),Integer(2),Integer(1),Integer(3),Integer(2),Integer(2)]); c
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 2)
>>> c.e(Integer(2))
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 1)
>>> c.e_string([Integer(2),Integer(2),Integer(1),Integer(3),Integer(2),Integer(1),Integer(3),Integer(2)]) == b
True
epsilon(i)[source]#

Return \(\varepsilon_i\) of self.

EXAMPLES:

sage: B = crystals.infinity.PBW(["A2"])
sage: s = B((3,0,0), (1,2,1))
sage: s.epsilon(1)
3
sage: s.epsilon(2)
0
>>> from sage.all import *
>>> B = crystals.infinity.PBW(["A2"])
>>> s = B((Integer(3),Integer(0),Integer(0)), (Integer(1),Integer(2),Integer(1)))
>>> s.epsilon(Integer(1))
3
>>> s.epsilon(Integer(2))
0
f(i)[source]#

Return the action of \(f_i\) on self.

EXAMPLES:

sage: B = crystals.infinity.PBW("D4")
sage: b = B.highest_weight_vector()
sage: c = b.f_string([1,2,3,1,2,3,4]); c
PBW monomial with Lusztig datum (0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0)
sage: c == b.f_string([1,2,4,1,2,3,3])
True
>>> from sage.all import *
>>> B = crystals.infinity.PBW("D4")
>>> b = B.highest_weight_vector()
>>> c = b.f_string([Integer(1),Integer(2),Integer(3),Integer(1),Integer(2),Integer(3),Integer(4)]); c
PBW monomial with Lusztig datum (0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0)
>>> c == b.f_string([Integer(1),Integer(2),Integer(4),Integer(1),Integer(2),Integer(3),Integer(3)])
True
lusztig_datum(word=None)[source]#

Return the Lusztig datum of self with respect to the reduced expression of the long word word.

EXAMPLES:

sage: B = crystals.infinity.PBW(['A', 2])
sage: u = B.highest_weight_vector()
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
sage: b.lusztig_datum()
(6, 0, 10)
sage: b.lusztig_datum(word=[2,1,2])
(4, 6, 0)
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['A', Integer(2)])
>>> u = B.highest_weight_vector()
>>> b = u.f_string([Integer(2),Integer(1),Integer(2),Integer(2),Integer(2),Integer(2),Integer(1),Integer(1),Integer(2),Integer(1),Integer(2),Integer(1),Integer(2),Integer(1),Integer(2),Integer(2)])
>>> b.lusztig_datum()
(6, 0, 10)
>>> b.lusztig_datum(word=[Integer(2),Integer(1),Integer(2)])
(4, 6, 0)
phi(i)[source]#

Return \(\varphi_i\) of self.

EXAMPLES:

sage: B = crystals.infinity.PBW(['A', 2])
sage: s = B((3,0,0), (1,2,1))
sage: s.phi(1)
-3
sage: s.phi(2)
3
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['A', Integer(2)])
>>> s = B((Integer(3),Integer(0),Integer(0)), (Integer(1),Integer(2),Integer(1)))
>>> s.phi(Integer(1))
-3
>>> s.phi(Integer(2))
3
star()[source]#

Return the starred crystal element corresponding to self.

Let \(b\) be an element of self with Lusztig datum \((b_1, \ldots, b_N)\) with respect to \(w_0 = s_{i_1} \cdots s_{i_N}\). Then \(b^*\) is the element with Lusztig datum \((b_N, \ldots, b_1)\) with respect to \(w_0 = s_{i_N^*} \cdots s_{i_1^*}\), where \(i_j^* = \omega(i_j)\) with \(\omega\) being the automorphism given by the action of \(w_0\) on the simple roots.

EXAMPLES:

sage: P = crystals.infinity.PBW(['A', 2])
sage: P((1,2,3), (1,2,1)).star() == P((3,2,1), (2,1,2))
True

sage: B = crystals.infinity.PBW(['E', 6])
sage: b = B.highest_weight_vector()
sage: c = b.f_string([1,2,6,3,4,2,5,2,3,4,1,6])
sage: c == c.star().star()
True
>>> from sage.all import *
>>> P = crystals.infinity.PBW(['A', Integer(2)])
>>> P((Integer(1),Integer(2),Integer(3)), (Integer(1),Integer(2),Integer(1))).star() == P((Integer(3),Integer(2),Integer(1)), (Integer(2),Integer(1),Integer(2)))
True

>>> B = crystals.infinity.PBW(['E', Integer(6)])
>>> b = B.highest_weight_vector()
>>> c = b.f_string([Integer(1),Integer(2),Integer(6),Integer(3),Integer(4),Integer(2),Integer(5),Integer(2),Integer(3),Integer(4),Integer(1),Integer(6)])
>>> c == c.star().star()
True
weight()[source]#

Return weight of self.

EXAMPLES:

sage: B = crystals.infinity.PBW(['A', 2])
sage: s = B((2,2,2), (1,2,1))
sage: s.weight()
(-4, 0, 4)
>>> from sage.all import *
>>> B = crystals.infinity.PBW(['A', Integer(2)])
>>> s = B((Integer(2),Integer(2),Integer(2)), (Integer(1),Integer(2),Integer(1)))
>>> s.weight()
(-4, 0, 4)