PBW Data#

This contains helper classes and functions which encode PBW data in finite type.

AUTHORS:

  • Dinakar Muthiah (2015-05): initial version

  • Travis Scrimshaw (2016-06): simplified code and converted to Cython

class sage.combinat.crystals.pbw_datum.PBWData(cartan_type)#

Bases: object

Helper class for the set of PBW data.

convert_to_new_long_word(pbw_datum, new_long_word)#

Convert the PBW datum pbw_datum from its long word to new_long_word.

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A2")
sage: datum = PBWDatum(P, (1,2,1), (1,0,1))
sage: new_datum = P.convert_to_new_long_word(datum,(2,1,2))
sage: new_datum
PBW Datum element of type ['A', 2] with long word (2, 1, 2)
 and Lusztig datum (0, 1, 0)
sage: new_datum.long_word
(2, 1, 2)
sage: new_datum.lusztig_datum
(0, 1, 0)
class sage.combinat.crystals.pbw_datum.PBWDatum(parent, long_word, lusztig_datum)#

Bases: object

Helper class which represents a PBW datum.

convert_to_long_word_with_first_letter(i)#

Return a new PBWDatum equivalent to self whose long word begins with i.

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A3")
sage: datum = PBWDatum(P, (1,2,1,3,2,1), (1,0,1,4,2,3))
sage: datum.convert_to_long_word_with_first_letter(1)
PBW Datum element of type ['A', 3] with long word (1, 2, 3, 1, 2, 1)
 and Lusztig datum (1, 0, 4, 1, 2, 3)
sage: datum.convert_to_long_word_with_first_letter(2)
PBW Datum element of type ['A', 3] with long word (2, 1, 2, 3, 2, 1)
 and Lusztig datum (0, 1, 0, 4, 2, 3)
sage: datum.convert_to_long_word_with_first_letter(3)
PBW Datum element of type ['A', 3] with long word (3, 1, 2, 3, 1, 2)
 and Lusztig datum (8, 1, 0, 4, 1, 2)
convert_to_new_long_word(new_long_word)#

Return a new PBWDatum equivalent to self whose long word is new_long_word.

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A2")
sage: datum = PBWDatum(P, (1,2,1), (1,0,1))
sage: new_datum = datum.convert_to_new_long_word((2,1,2))
sage: new_datum.long_word
(2, 1, 2)
sage: new_datum.lusztig_datum
(0, 1, 0)
is_equivalent_to(other_pbw_datum)#

Return whether self is equivalent to other_pbw_datum. modulo the tropical Plücker relations.

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A2")
sage: L1 = PBWDatum(P, (1,2,1), (1,0,1))
sage: L2 = PBWDatum(P, (2,1,2), (0,1,0))
sage: L1.is_equivalent_to(L2)
True
sage: L1 == L2
False
star()#

Return the starred version of self, i.e., with reversed \(long_word\) and \(lusztig_datum\)

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A2")
sage: L1 = PBWDatum(P, (1,2,1), (1,2,3))
sage: L1.star() == PBWDatum(P, (2,1,2), (3,2,1))
True
weight()#

Return the weight of self.

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
sage: P = PBWData("A2")
sage: L = PBWDatum(P, (1,2,1), (1,1,1))
sage: L.weight()
-2*alpha[1] - 2*alpha[2]
sage.combinat.crystals.pbw_datum.compute_new_lusztig_datum(enhanced_braid_chain, initial_lusztig_datum)#

Return the Lusztig datum obtained by applying tropical Plücker relations along enhanced_braid_chain starting with initial_lusztig_datum.

EXAMPLES:

sage: from sage.combinat.root_system.braid_move_calculator import BraidMoveCalculator
sage: from sage.combinat.crystals.pbw_datum import enhance_braid_move_chain
sage: from sage.combinat.crystals.pbw_datum import compute_new_lusztig_datum
sage: ct = CartanType(['A', 2])
sage: W = CoxeterGroup(ct)
sage: B = BraidMoveCalculator(W)
sage: chain = B.chain_of_reduced_words((1,2,1),(2,1,2))
sage: enhanced_braid_chain = enhance_braid_move_chain(chain, ct)
sage: compute_new_lusztig_datum(enhanced_braid_chain,(1,0,1))
(0, 1, 0)
sage.combinat.crystals.pbw_datum.enhance_braid_move_chain(braid_move_chain, cartan_type)#

Return a list of tuples that records the data of the long words in braid_move_chain plus the data of the intervals where the braid moves occur and the data of the off-diagonal entries of the \(2 \times 2\) Cartan submatrices of each braid move.

INPUT:

  • braid_move_chain – a chain of reduced words in the Weyl group of cartan_type

  • cartan_type – a finite Cartan type

OUTPUT:

A list of 2-tuples (interval_of_change, cartan_sub_matrix) where

  • interval_of_change is the (half-open) interval of indices where the braid move occurs; this is \(None\) for the first tuple

  • cartan_sub_matrix is the off-diagonal entries of the \(2 \times 2\) submatrix of the Cartan matrix corresponding to the braid move; this is \(None\) for the first tuple

For a matrix:

[2 a]
[b 2]

the cartan_sub_matrix is the pair (a, b).

sage.combinat.crystals.pbw_datum.tropical_plucker_relation(a, lusztig_datum)#

Apply the tropical Plücker relation of type a to lusztig_datum.

The relations are obtained by tropicalizing the relations in Proposition 7.1 of [BZ01].

INPUT:

  • a – a pair (x, y) of the off-diagonal entries of a \(2 \times 2\) Cartan matrix

EXAMPLES:

sage: from sage.combinat.crystals.pbw_datum import tropical_plucker_relation
sage: tropical_plucker_relation((0,0), (2,3))
(3, 2)
sage: tropical_plucker_relation((-1,-1), (1,2,3))
(4, 1, 2)
sage: tropical_plucker_relation((-1,-2), (1,2,3,4))
(8, 1, 2, 3)
sage: tropical_plucker_relation((-2,-1), (1,2,3,4))
(6, 1, 2, 3)