Ribbon Tableaux

sage.combinat.ribbon_tableau.MultiSkewTableau

A multi skew tableau which is a tuple of skew tableaux.

EXAMPLES:

sage: s = MultiSkewTableau([ [[None,1],[2,3]], [[1,2],[2]] ])
sage: s.size()
6
sage: s.weight()
[2, 3, 1]
sage: s.shape()
[[2, 2] / [1], [2, 1] / []]
sage.combinat.ribbon_tableau.MultiSkewTableaux

Multiskew tableaux.

sage.combinat.ribbon_tableau.RibbonTableau

A ribbon tableau.

A ribbon is a connected skew shape which does not contain any \(2 \times 2\) boxes. A ribbon tableau is a skew tableau whose shape is partitioned into ribbons, each of which is filled with identical entries.

EXAMPLES:

sage: rt = RibbonTableau([[None, 1],[2,3]]); rt
[[None, 1], [2, 3]]
sage: rt.inner_shape()
[1]
sage: rt.outer_shape()
[2, 2]

sage: rt = RibbonTableau([[None, None, 0, 0, 0], [None, 0, 0, 2], [1, 0, 1]]); rt.pp()
  .  .  0  0  0
  .  0  0  2
  1  0  1

In the previous example, each ribbon is uniquely determined by a non-zero entry. The 0 entries are used to fill in the rest of the skew shape.

Note

Sanity checks are not performed; lists can contain any object.

sage: RibbonTableau(expr=[[1,1],[[5],[3,4],[1,2]]])
[[None, 1, 2], [None, 3, 4], [5]]
sage.combinat.ribbon_tableau.RibbonTableau_class

This exists solely for unpickling RibbonTableau_class objects.

sage.combinat.ribbon_tableau.RibbonTableaux

Ribbon tableaux.

A ribbon tableau is a skew tableau whose skew shape shape is tiled by ribbons of length length. The weight weight is calculated from the labels on the ribbons.

Note

Here we impose the condition that the ribbon tableaux are semistandard.

INPUT(Optional):

  • shape – skew shape as a list of lists or an object of type SkewPartition
  • length – integer, shape is partitioned into ribbons of length length
  • weight – list of integers, computed from the values of non-zero entries labeling the ribbons

EXAMPLES:

sage: RibbonTableaux([[2,1],[]], [1,1,1], 1)
Ribbon tableaux of shape [2, 1] / [] and weight [1, 1, 1] with 1-ribbons

sage: R = RibbonTableaux([[5,4,3],[2,1]], [2,1], 3)
sage: for i in R: i.pp(); print("\n")
  .  .  0  0  0
  .  0  0  2
  1  0  1

  .  .  1  0  0
  .  0  0  0
  1  0  2

  .  .  0  0  0
  .  1  0  1
  2  0  0

REFERENCES:

[vanLeeuwen91]Marc. A. A. van Leeuwen, Edge sequences, ribbon tableaux, and an action of affine permutations. Europe J. Combinatorics. 20 (1999). http://wwwmathlabo.univ-poitiers.fr/~maavl/pdf/edgeseqs.pdf
sage.combinat.ribbon_tableau.RibbonTableaux_shape_weight_length

Ribbon tableaux of a given shape, weight, and length.

sage.combinat.ribbon_tableau.SemistandardMultiSkewTableaux

Semistandard multi skew tableaux.

A multi skew tableau is a \(k\)-tuple of skew tableaux of given shape with a specified total weight.

EXAMPLES:

sage: S = SemistandardMultiSkewTableaux([ [[2,1],[]], [[2,2],[1]] ], [2,2,2]); S
Semistandard multi skew tableaux of shape [[2, 1] / [], [2, 2] / [1]] and weight [2, 2, 2]
sage: S.list()
[[[[1, 1], [2]], [[None, 2], [3, 3]]],
 [[[1, 2], [2]], [[None, 1], [3, 3]]],
 [[[1, 3], [2]], [[None, 2], [1, 3]]],
 [[[1, 3], [2]], [[None, 1], [2, 3]]],
 [[[1, 1], [3]], [[None, 2], [2, 3]]],
 [[[1, 2], [3]], [[None, 2], [1, 3]]],
 [[[1, 2], [3]], [[None, 1], [2, 3]]],
 [[[2, 2], [3]], [[None, 1], [1, 3]]],
 [[[1, 3], [3]], [[None, 1], [2, 2]]],
 [[[2, 3], [3]], [[None, 1], [1, 2]]]]
sage.combinat.ribbon_tableau.cospin_polynomial(part, weight, length)

Return the cospin polynomial associated to part, weight, and length.

EXAMPLES:

sage: from sage.combinat.ribbon_tableau import cospin_polynomial
sage: cospin_polynomial([6,6,6],[4,2],3)
t^4 + t^3 + 2*t^2 + t + 1
sage: cospin_polynomial([3,3,3,2,1], [3,1], 3)
1
sage: cospin_polynomial([3,3,3,2,1], [2,2], 3)
t + 1
sage: cospin_polynomial([3,3,3,2,1], [2,1,1], 3)
t^2 + 2*t + 2
sage: cospin_polynomial([3,3,3,2,1], [1,1,1,1], 3)
t^3 + 3*t^2 + 5*t + 3
sage: cospin_polynomial([5,4,3,2,1,1,1], [2,2,1], 3)
2*t^2 + 6*t + 2
sage: cospin_polynomial([[6]*6, [3,3]], [4,4,2], 3)
3*t^4 + 6*t^3 + 9*t^2 + 5*t + 3
sage.combinat.ribbon_tableau.count_rec(nexts, current, part, weight, length)

INPUT:

  • nexts, current, part – skew partitions
  • weight – non-negative integer list
  • length – integer
sage.combinat.ribbon_tableau.graph_implementation_rec(skp, weight, length, function)
sage.combinat.ribbon_tableau.insertion_tableau(skp, perm, evaluation, tableau, length)

INPUT:

  • skp – skew partitions
  • perm, evaluation – non-negative integers
  • tableau – skew tableau
  • length – integer
sage.combinat.ribbon_tableau.list_rec(nexts, current, part, weight, length)

INPUT:

  • nexts, current, part – skew partitions
  • weight – non-negative integer list
  • length – integer
sage.combinat.ribbon_tableau.spin_polynomial(part, weight, length)

Returns the spin polynomial associated to part, weight, and length.

EXAMPLES:

sage: from sage.combinat.ribbon_tableau import spin_polynomial
sage: spin_polynomial([6,6,6],[4,2],3)
t^6 + t^5 + 2*t^4 + t^3 + t^2
sage: spin_polynomial([6,6,6],[4,1,1],3)
t^6 + 2*t^5 + 3*t^4 + 2*t^3 + t^2
sage: spin_polynomial([3,3,3,2,1], [2,2], 3)
t^(7/2) + t^(5/2)
sage: spin_polynomial([3,3,3,2,1], [2,1,1], 3)
2*t^(7/2) + 2*t^(5/2) + t^(3/2)
sage: spin_polynomial([3,3,3,2,1], [1,1,1,1], 3)
3*t^(7/2) + 5*t^(5/2) + 3*t^(3/2) + sqrt(t)
sage: spin_polynomial([5,4,3,2,1,1,1], [2,2,1], 3)
2*t^(9/2) + 6*t^(7/2) + 2*t^(5/2)
sage: spin_polynomial([[6]*6, [3,3]], [4,4,2], 3)
3*t^9 + 5*t^8 + 9*t^7 + 6*t^6 + 3*t^5
sage.combinat.ribbon_tableau.spin_polynomial_square(part, weight, length)

Returns the spin polynomial associated with part, weight, and length, with the substitution \(t \to t^2\) made.

EXAMPLES:

sage: from sage.combinat.ribbon_tableau import spin_polynomial_square
sage: spin_polynomial_square([6,6,6],[4,2],3)
t^12 + t^10 + 2*t^8 + t^6 + t^4
sage: spin_polynomial_square([6,6,6],[4,1,1],3)
t^12 + 2*t^10 + 3*t^8 + 2*t^6 + t^4
sage: spin_polynomial_square([3,3,3,2,1], [2,2], 3)
t^7 + t^5
sage: spin_polynomial_square([3,3,3,2,1], [2,1,1], 3)
2*t^7 + 2*t^5 + t^3
sage: spin_polynomial_square([3,3,3,2,1], [1,1,1,1], 3)
3*t^7 + 5*t^5 + 3*t^3 + t
sage: spin_polynomial_square([5,4,3,2,1,1,1], [2,2,1], 3)
2*t^9 + 6*t^7 + 2*t^5
sage: spin_polynomial_square([[6]*6, [3,3]], [4,4,2], 3)
3*t^18 + 5*t^16 + 9*t^14 + 6*t^12 + 3*t^10
sage.combinat.ribbon_tableau.spin_rec(t, nexts, current, part, weight, length)

Routine used for constructing the spin polynomial.

INPUT:

  • weight – list of non-negative integers
  • length – the length of the ribbons we’re tiling with
  • t – the variable

EXAMPLES:

sage: from sage.combinat.ribbon_tableau import spin_rec
sage: sp = SkewPartition
sage: t = ZZ['t'].gen()
sage: spin_rec(t, [], [[[], [3, 3]]], sp([[2, 2, 2], []]), [2], 3)
[t^4]
sage: spin_rec(t, [[0], [t^4]], [[[2, 1, 1, 1, 1], [0, 3]], [[2, 2, 2], [3, 0]]], sp([[2, 2, 2, 2, 1], []]), [2, 1], 3)
[t^5]
sage: spin_rec(t, [], [[[], [3, 3, 0]]], sp([[3, 3], []]), [2], 3)
[t^2]
sage: spin_rec(t, [[t^4], [t^3], [t^2]], [[[2, 2, 2], [0, 0, 3]], [[3, 2, 1], [0, 3, 0]], [[3, 3], [3, 0, 0]]], sp([[3, 3, 3], []]), [2, 1], 3)
[t^6 + t^4 + t^2]
sage: spin_rec(t, [[t^5], [t^4], [t^6 + t^4 + t^2]], [[[2, 2, 2, 2, 1], [0, 0, 3]], [[3, 3, 1, 1, 1], [0, 3, 0]], [[3, 3, 3], [3, 0, 0]]], sp([[3, 3, 3, 2, 1], []]), [2, 1, 1], 3)
[2*t^7 + 2*t^5 + t^3]