Skew Partitions

A skew partition skp of size \(n\) is a pair of partitions \([p_1, p_2]\) where \(p_1\) is a partition of the integer \(n_1\), \(p_2\) is a partition of the integer \(n_2\), \(p_2\) is an inner partition of \(p_1\), and \(n = n_1 - n_2\). We say that \(p_1\) and \(p_2\) are respectively the inner and outer partitions of skp.

A skew partition can be depicted by a diagram made of rows of cells, in the same way as a partition. Only the cells of the outer partition \(p_1\) which are not in the inner partition \(p_2\) appear in the picture. For example, this is the diagram of the skew partition [[5,4,3,1],[3,3,1]].

sage: print(SkewPartition([[5,4,3,1],[3,3,1]]).diagram())
   **
   *
 **
*

A skew partition can be connected, which can easily be described in graphic terms: for each pair of consecutive rows, there are at least two cells (one in each row) which have a common edge. This is the diagram of the connected skew partition [[5,4,3,1],[3,1]]:

sage: print(SkewPartition([[5,4,3,1],[3,1]]).diagram())
   **
 ***
***
*
sage: SkewPartition([[5,4,3,1],[3,1]]).is_connected()
True

The first example of a skew partition is not a connected one.

Applying a reflection with respect to the main diagonal yields the diagram of the conjugate skew partition, here [[4,3,3,2,1],[3,3,2]]:

sage: SkewPartition([[5,4,3,1],[3,3,1]]).conjugate()
[4, 3, 3, 2, 1] / [3, 2, 2]
sage: print(SkewPartition([[5,4,3,1],[3,3,1]]).conjugate().diagram())
   *
  *
  *
**
*

The outer corners of a skew partition are the corners of its outer partition. The inner corners are the internal corners of the outer partition when the inner partition is taken off. Shown below are the coordinates of the inner and outer corners.

sage: SkewPartition([[5,4,3,1],[3,3,1]]).outer_corners()
[(0, 4), (1, 3), (2, 2), (3, 0)]
sage: SkewPartition([[5,4,3,1],[3,3,1]]).inner_corners()
[(0, 3), (2, 1), (3, 0)]

EXAMPLES:

There are 9 skew partitions of size 3, with no empty row nor empty column:

sage: SkewPartitions(3).cardinality()
9
sage: SkewPartitions(3).list()
[[3] / [],
 [2, 1] / [],
 [3, 1] / [1],
 [2, 2] / [1],
 [3, 2] / [2],
 [1, 1, 1] / [],
 [2, 2, 1] / [1, 1],
 [2, 1, 1] / [1],
 [3, 2, 1] / [2, 1]]

There are 4 connected skew partitions of size 3:

sage: SkewPartitions(3, overlap=1).cardinality()
4
sage: SkewPartitions(3, overlap=1).list()
[[3] / [], [2, 1] / [], [2, 2] / [1], [1, 1, 1] / []]

This is the conjugate of the skew partition [[4,3,1], [2]]

sage: SkewPartition([[4,3,1], [2]]).conjugate()
[3, 2, 2, 1] / [1, 1]

Geometrically, we just applied a reflection with respect to the main diagonal on the diagram of the partition. Of course, this operation is an involution:

sage: SkewPartition([[4,3,1],[2]]).conjugate().conjugate()
[4, 3, 1] / [2]

The jacobi_trudi() method computes the Jacobi-Trudi matrix. See [Mac95] for a definition and discussion.

sage: SkewPartition([[4,3,1],[2]]).jacobi_trudi()
[h[2]  h[]    0]
[h[5] h[3]  h[]]
[h[6] h[4] h[1]]

This example shows how to compute the corners of a skew partition.

sage: SkewPartition([[4,3,1],[2]]).inner_corners()
[(0, 2), (1, 0)]
sage: SkewPartition([[4,3,1],[2]]).outer_corners()
[(0, 3), (1, 2), (2, 0)]

REFERENCES:

[Mac95]Macdonald I.-G., (1995), “Symmetric Functions and Hall Polynomials”, Oxford Science Publication

AUTHORS:

  • Mike Hansen: Initial version
  • Travis Scrimshaw (2013-02-11): Factored out CombinatorialClass
sage.combinat.skew_partition.SkewPartition

A skew partition.

A skew partition of shape \(\lambda / \mu\) is the Young diagram from the partition \(\lambda\) and removing the partition \(\mu\) from the upper-left corner in English convention.

sage.combinat.skew_partition.SkewPartitions

Skew partitions.

Warning

The iterator of this class only yields skew partitions which are reduced, in the sense that there are no empty rows before the last nonempty row, and there are no empty columns before the last nonempty column.

EXAMPLES:

sage: SkewPartitions(4)
Skew partitions of 4
sage: SkewPartitions(4).cardinality()
28
sage: SkewPartitions(row_lengths=[2,1,2])
Skew partitions with row lengths [2, 1, 2]
sage: SkewPartitions(4, overlap=2)
Skew partitions of 4 with a minimum overlap of 2
sage: SkewPartitions(4, overlap=2).list()
[[4] / [], [2, 2] / []]
sage.combinat.skew_partition.SkewPartitions_all

Class of all skew partitions.

sage.combinat.skew_partition.SkewPartitions_n

The set of skew partitions of n with overlap at least overlap and no empty row.

INPUT:

  • n – a non-negative integer
  • overlap – an integer (default: \(0\))

Caveat: this set is stable under conjugation only for overlap equal to 0 or 1. What exactly happens for negative overlaps is not yet well specified and subject to change (we may want to introduce vertical overlap constraints as well).

Todo

As is, this set is essentially the composition of Compositions(n) (which give the row lengths) and SkewPartition(n, row_lengths=...), and one would want to “inherit” list and cardinality from this composition.

sage.combinat.skew_partition.SkewPartitions_rowlengths

All skew partitions with given row lengths.

sage.combinat.skew_partition.row_lengths_aux(skp)

EXAMPLES:

sage: from sage.combinat.skew_partition import row_lengths_aux
sage: row_lengths_aux([[5,4,3,1],[3,3,1]])
[2, 1, 2]
sage: row_lengths_aux([[5,4,3,1],[3,1]])
[2, 3]