Safe Haskell | None |
---|---|

Language | Haskell2010 |

Young tableaux and similar gadgets.

See e.g. William Fulton: Young Tableaux, with Applications to Representation theory and Geometry (CUP 1997).

The convention is that we use the English notation, and we store the tableaux as lists of the rows.

That is, the following standard Young tableau of shape [5,4,1]

1 3 4 6 7 2 5 8 10 9

is encoded conveniently as

[ [ 1 , 3 , 4 , 6 , 7 ] , [ 2 , 5 , 8 ,10 ] , [ 9 ] ]

- type Tableau a = [[a]]
- asciiTableau :: Show a => Tableau a -> ASCII
- _tableauShape :: Tableau a -> [Int]
- tableauShape :: Tableau a -> Partition
- tableauWeight :: Tableau a -> Int
- dualTableau :: Tableau a -> Tableau a
- tableauContent :: Tableau a -> [a]
- hooks :: Partition -> Tableau (Int, Int)
- hookLengths :: Partition -> Tableau Int
- rowWord :: Tableau a -> [a]
- rowWordToTableau :: Ord a => [a] -> Tableau a
- columnWord :: Tableau a -> [a]
- columnWordToTableau :: Ord a => [a] -> Tableau a
- isLatticeWord :: [Int] -> Bool
- isSemiStandardTableau :: Tableau Int -> Bool
- semiStandardYoungTableaux :: Int -> Partition -> [Tableau Int]
- countSemiStandardYoungTableaux :: Int -> Partition -> Integer
- isStandardTableau :: Tableau Int -> Bool
- standardYoungTableaux :: Partition -> [Tableau Int]
- countStandardYoungTableaux :: Partition -> Integer

# Basic stuff

_tableauShape :: Tableau a -> [Int] Source #

tableauShape :: Tableau a -> Partition Source #

The shape of a tableau

tableauWeight :: Tableau a -> Int Source #

Number of entries

dualTableau :: Tableau a -> Tableau a Source #

The dual of the tableau is the mirror image to the main diagonal.

tableauContent :: Tableau a -> [a] Source #

The content of a tableau is the list of its entries. The ordering is from the left to the right and then from the top to the bottom

hooks :: Partition -> Tableau (Int, Int) Source #

An element `(i,j)`

of the resulting tableau (which has shape of the
given partition) means that the vertical part of the hook has length `i`

,
and the horizontal part `j`

. The *hook length* is thus `i+j-1`

.

Example:

> mapM_ print $ hooks $ toPartition [5,4,1] [(3,5),(2,4),(2,3),(2,2),(1,1)] [(2,4),(1,3),(1,2),(1,1)] [(1,1)]

# Row and column words

rowWord :: Tableau a -> [a] Source #

The *row word* of a tableau is the list of its entry read from the right to the left and then
from the top to the bottom.

rowWordToTableau :: Ord a => [a] -> Tableau a Source #

*Semistandard* tableaux can be reconstructed from their row words

columnWord :: Tableau a -> [a] Source #

The *column word* of a tableau is the list of its entry read from the bottom to the top and then from the left to the right

columnWordToTableau :: Ord a => [a] -> Tableau a Source #

*Standard* tableaux can be reconstructed from either their column or row words

isLatticeWord :: [Int] -> Bool Source #

Checks whether a sequence of positive integers is a *lattice word*,
which means that in every initial part of the sequence any number `i`

occurs at least as often as the number `i+1`

# Semistandard Young tableaux

isSemiStandardTableau :: Tableau Int -> Bool Source #

A tableau is *semistandard* if its entries are weekly increasing horizontally
and strictly increasing vertically

semiStandardYoungTableaux :: Int -> Partition -> [Tableau Int] Source #

Semistandard Young tableaux of given shape, "naive" algorithm

countSemiStandardYoungTableaux :: Int -> Partition -> Integer Source #

Stanley's hook formula (cf. Fulton page 55)

# Standard Young tableaux

isStandardTableau :: Tableau Int -> Bool Source #

A tableau is *standard* if it is semistandard and its content is exactly `[1..n]`

,
where `n`

is the weight.

standardYoungTableaux :: Partition -> [Tableau Int] Source #

Standard Young tableaux of a given shape. Adapted from John Stembridge, http://www.math.lsa.umich.edu/~jrs/software/SFexamples/tableaux.

countStandardYoungTableaux :: Partition -> Integer Source #

hook-length formula