Path Tableaux¶
This is an abstract base class for using local rules to construct rectification and the action of the cactus group [Wes2017].
This is a construction of the Henriques-Kamnitzer construction of the action of the cactus group on tensor powers of a crystal. This is also a generalisation of the Fomin growth rules, which are a version of the operations on standard tableaux which were previously constructed using jeu-de-taquin.
The basic operations are rectification, evacuation and promotion. Rectification of standard skew tableaux agrees with the rectification by jeu-de-taquin as does evacuation. Promotion agrees with promotion by jeu-de-taquin on rectangular tableaux but in general they are different.
REFERENCES:
AUTHORS:
Bruce Westbury (2018): initial version
- class sage.combinat.path_tableaux.path_tableau.CylindricalDiagram(T)¶
Bases:
sage.structure.sage_object.SageObject
Cylindrical growth diagrams.
EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: path_tableaux.CylindricalDiagram(t) [0, 1, 2, 3, 2, 1, 0] [ , 0, 1, 2, 1, 0, 1, 0] [ , , 0, 1, 0, 1, 2, 1, 0] [ , , , 0, 1, 2, 3, 2, 1, 0] [ , , , , 0, 1, 2, 1, 0, 1, 0] [ , , , , , 0, 1, 0, 1, 2, 1, 0] [ , , , , , , 0, 1, 2, 3, 2, 1, 0]
- pp()¶
A pretty print utility method.
EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: path_tableaux.CylindricalDiagram(t).pp() 0 1 2 3 2 1 0 0 1 2 1 0 1 0 0 1 0 1 2 1 0 0 1 2 3 2 1 0 0 1 2 1 0 1 0 0 1 0 1 2 1 0 0 1 2 3 2 1 0 sage: t = path_tableaux.FriezePattern([1,3,4,5,1]) sage: path_tableaux.CylindricalDiagram(t).pp() 0 1 3 4 5 1 0 0 1 5/3 7/3 2/3 1 0 0 1 2 1 3 1 0 0 1 1 4 5/3 1 0 0 1 5 7/3 2 1 0 0 1 2/3 1 1 1 0 0 1 3 4 5 1 0
- class sage.combinat.path_tableaux.path_tableau.PathTableau¶
Bases:
sage.structure.list_clone.ClonableArray
This is the abstract base class for a path tableau.
- cactus(i, j)¶
Return the action of the generator \(s_{i,j}\) of the cactus group on
self
.INPUT:
i
– a positive integerj
– a positive integer weakly greater thani
EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.cactus(1,5) [0, 1, 0, 1, 2, 1, 0] sage: t.cactus(1,6) [0, 1, 2, 1, 0, 1, 0] sage: t.cactus(1,7) == t.evacuation() True sage: t.cactus(1,7).cactus(1,6) == t.promotion() True
- commutor(other, verbose=False)¶
Return the commutor of
self
withother
.If
verbose=True
then the function will print the rectangle.EXAMPLES:
sage: t1 = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t2 = path_tableaux.DyckPath([0,1,2,1,0]) sage: t1.commutor(t2) ([0, 1, 2, 1, 0], [0, 1, 2, 3, 2, 1, 0]) sage: t1.commutor(t2,verbose=True) [0, 1, 2, 1, 0] [1, 2, 3, 2, 1] [2, 3, 4, 3, 2] [3, 4, 5, 4, 3] [2, 3, 4, 3, 2] [1, 2, 3, 2, 1] [0, 1, 2, 1, 0] ([0, 1, 2, 1, 0], [0, 1, 2, 3, 2, 1, 0])
- dual_equivalence_graph()¶
Return the graph with vertices the orbit of
self
and edges given by the action of the cactus group generators.In most implementations the generators \(s_{i,i+1}\) will act as the identity operators. The usual dual equivalence graphs are given by replacing the label \(i,i+2\) by \(i\) and removing edges with other labels.
EXAMPLES:
sage: s = path_tableaux.DyckPath([0,1,2,3,2,3,2,1,0]) sage: s.dual_equivalence_graph().adjacency_matrix() [0 1 1 1 0 1 0 1 1 0 0 0 0 0] [1 0 1 1 1 1 1 0 1 0 0 1 1 0] [1 1 0 1 1 1 0 1 0 1 1 1 0 0] [1 1 1 0 1 0 1 1 1 1 0 1 1 0] [0 1 1 1 0 0 1 0 0 1 1 0 1 1] [1 1 1 0 0 0 1 1 1 1 1 0 1 0] [0 1 0 1 1 1 0 1 0 1 1 1 0 1] [1 0 1 1 0 1 1 0 1 1 1 1 1 0] [1 1 0 1 0 1 0 1 0 1 0 1 1 0] [0 0 1 1 1 1 1 1 1 0 0 1 1 1] [0 0 1 0 1 1 1 1 0 0 0 1 1 1] [0 1 1 1 0 0 1 1 1 1 1 0 1 1] [0 1 0 1 1 1 0 1 1 1 1 1 0 1] [0 0 0 0 1 0 1 0 0 1 1 1 1 0] sage: s = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: sorted(s.dual_equivalence_graph().edges()) [([0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 2, 1, 0], '4,7'), ([0, 1, 0, 1, 0, 1, 0], [0, 1, 2, 1, 0, 1, 0], '2,5'), ([0, 1, 0, 1, 0, 1, 0], [0, 1, 2, 1, 2, 1, 0], '2,7'), ([0, 1, 0, 1, 2, 1, 0], [0, 1, 2, 1, 0, 1, 0], '2,6'), ([0, 1, 0, 1, 2, 1, 0], [0, 1, 2, 1, 2, 1, 0], '1,4'), ([0, 1, 0, 1, 2, 1, 0], [0, 1, 2, 3, 2, 1, 0], '2,7'), ([0, 1, 2, 1, 0, 1, 0], [0, 1, 2, 1, 2, 1, 0], '4,7'), ([0, 1, 2, 1, 0, 1, 0], [0, 1, 2, 3, 2, 1, 0], '3,7'), ([0, 1, 2, 1, 2, 1, 0], [0, 1, 2, 3, 2, 1, 0], '3,6')]
- evacuation()¶
Return the evacuation operator applied to
self
.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.evacuation() [0, 1, 2, 3, 2, 1, 0]
- final_shape()¶
Return the final shape of
self
.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.final_shape() 0
- initial_shape()¶
Return the initial shape of
self
.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.initial_shape() 0
- local_rule(i)¶
This is the abstract local rule defined in any coboundary category.
This has input a list of objects. This method first takes the list of objects of length three consisting of the \((i-1)\)-st, \(i\)-th and \((i+1)\)-term and applies the rule. It then replaces the \(i\)-th object by the object returned by the rule.
EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.local_rule(3) [0, 1, 2, 1, 2, 1, 0]
- orbit()¶
Return the orbit of
self
under the action of the cactus group.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.orbit() {[0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 2, 1, 0], [0, 1, 2, 1, 0, 1, 0], [0, 1, 2, 1, 2, 1, 0], [0, 1, 2, 3, 2, 1, 0]}
- promotion()¶
Return the promotion operator applied to
self
.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.promotion() [0, 1, 2, 1, 0, 1, 0]
- size()¶
Return the size or length of
self
.EXAMPLES:
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0]) sage: t.size() 7
- class sage.combinat.path_tableaux.path_tableau.PathTableaux¶
Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
The abstract parent class for PathTableau.