schubmult.combinatorics.plactic¶
Plactic: skew semistandard tableaux with the plactic (Knuth) crystal structure, stored as a
grid with an optional inner (skew) shape of holes.
Plactic Objects¶
class Plactic(GridPrint, CrystalGraph)
A (skew) semistandard Young tableau stored as a grid, with the gl_n plactic crystal
structure (Knuth relations). inner_shape (a partition of leading holes per row) makes it a
skew tableau; construct directly from a grid or via classmethods like Plactic.yamanouchi.
evacuation¶
def evacuation(n)
Schutzenberger evacuation within the alphabet 1..n: insert the complemented row word n + 1 - a.
iter_boxes¶
@property
def iter_boxes()
Filled cells in row-word order (bottom row to top, left to right).
up_jdt_slide¶
def up_jdt_slide(row, col)
Perform an upward jeu de taquin slide starting from the given (row, col) position (0-indexed). Returns a new Plactic tableau.
down_jdt_slide¶
def down_jdt_slide(row, col)
Perform a jeu de taquin slide starting from the given (row, col) position (0-indexed). Returns a new Plactic tableau.
iter_outer_corners¶
@property
def iter_outer_corners()
Empty cells that can receive a reverse JDT slide.
iter_inner_corners¶
@property
def iter_inner_corners()
Holes of the inner shape that can receive a forward JDT slide.
__init__¶
def __init__(word=(), inner_shape=None)
Build from rows (tuple of tuples), a prebuilt grid, or empty; inner_shape gives the skew
holes. The grid is stored with one extra border row and column so outer corners always exist.
shiftup¶
def shiftup(k)
Return a new Plactic with all entries increased by k.
all_ss_tableaux¶
@classmethod
def all_ss_tableaux(cls, shape, max_entry, inner_shape=None)
Generate all semistandard tableaux of given shape (or skew shape) with entries <= max_entry.
Arguments:
shape- Sequence of row lengths (outer shape)max_entry- Maximum entry valueinner_shape- Optional sequence of left offsets per row (for skew shapes). If provided, positions [row][0:inner_shape[row]] are marked as 0.
Returns:
Set of Plactic instances representing all valid semistandard tableaux
row_word¶
@property
def row_word()
Return the row-reading word as a flat tuple.
column_word¶
@property
def column_word()
Entries read column by column, each column bottom to top.
transpose¶
def transpose()
Return the transpose of this Plactic tableau.
invert¶
def invert()
Return a Plactic whose entries are remapped so that standard (increasing) insertion order applies. If reverse_semistandard is True we negate entries (so larger original becomes smaller).
__mul__¶
def __mul__(other)
Plactic product: insert entries of other in row-reading order
(top-to-bottom, left-to-right) into a copy of self.
shape¶
@property
def shape()
Row lengths (filled cells per nonempty row).
skew_shape¶
@property
def skew_shape()
Return the skew shape as a tuple of (row_length, left_offset) pairs.
from_word¶
@classmethod
def from_word(cls, word)
RS insertion tableau of a word.
rs_insert¶
def rs_insert(*letters)
Insert one or more letters in sequence (row-insertion) and return a new Plactic.
raising_operator¶
def raising_operator(i)
Crystal raising operator e_i on the Plactic tableau (delegates to RCGraph).
lowering_operator¶
def lowering_operator(i)
Crystal lowering operator f_i on the Plactic tableau (delegates to RCGraph).
crystal_weight¶
@property
def crystal_weight()
Return the crystal weight of this tableau (delegated to RCGraph).
crystal_length¶
def crystal_length()
Return the length/number of rows used for the crystal
yamanouchi¶
@classmethod
def yamanouchi(cls, shape)
Return the Yamanouchi (highest-weight) tableau of the given shape.
is_increasing¶
@property
def is_increasing()
Check if the tableau is strictly increasing in rows and columns.
rectify¶
def rectify()
Jeu de taquin rectification of a skew tableau to a straight shape.
superstandard¶
@classmethod
def superstandard(cls, shape)
The standard tableau of the given shape filled 1, 2, ... row by row, left to right.
is_semistandard¶
@property
def is_semistandard()
Rows weakly increasing and columns strictly increasing (skipping holes).
reverse_rsk¶
def reverse_rsk(recording_tableau)
Inverse RSK (row-insertion) for the pair (P,Q) where self is P and
recording_tableau is the standard recording tableau Q of the same shape.
Returns the original word as a list of integers (in insertion order).
rsk_insert¶
@classmethod
def rsk_insert(cls, *letters)
Perform ordinary RSK (row insertion) on the given sequence of letters, starting from this Plactic as the initial P-tableau. Returns a pair (P_tableau, Q_tableau) where both are Plactic instances and Q is the standard recording tableau with entries 1..m (in insertion order).
Usage: P, Q = Plactic().rsk_insert(3,1,2,1) or P, Q = Plactic().rsk_insert([3,1,2,1])
reverse_rectify_to_outer¶
def reverse_rectify_to_outer(outer_shape)
Deterministic reverse-rectification to a given outer shape outer_shape.
Given a (straight) tableau self of shape lambda, produce a skew tableau
(represented as a Plactic whose rows may contain 0's for inner cells)
of outer shape outer_shape whose rectification is self.
outer_shape: iterable of nonnegative ints giving the desired outer row lengths (mu_0 >= mu_1 >= ...).
Algorithm (deterministic):
- Let mu be the set of cells (r,c) with 0 <= r < len(mu) and 0 <= c < mu[r].
-
While the current set of occupied cells (from the working tableau) is a strict subset of mu:
-
choose an outer corner cell (r,c) in mu\current_cells (no cell of mu to its right or below). Choose the maximal such (r,c) (deterministic).
- create a hole at (r,c) (extend rows/cols as needed, set that cell to 0), then perform an upward jeu-de-taquin slide from (r,c) using up_jdt_slide to move the hole inward.
-
adopt the resulting tableau and continue.
-
Return the resulting Plactic (with zeros marking inner/removed cells).
Notes:
- Raises ValueError if outer_shape does not dominate the current shape (i.e. mu must contain the current occupied cells).
- Raises RuntimeError if no suitable outer corner can be found or if an up_jdt_slide fails (this indicates the requested outer shape is not attainable by reverse-rectification).