This is SpechtModule.info, produced by Macaulay2, version 1.20

SpechtModule -- a package for constructing Specht Modules
*********************************************************

Description
===========

SpechtModule calculates many objects related to the irreducible representations
of the symmetric functions. This construction is used to implement an algorithm
in invariant theory which calculates efficiently the secondary invariants of
any permutation group.

The main features of the package include a method for calculating the character
table of $S_n$, algorithms for calculating list of tableaux given a partition
(tabloids, standard tableaux and semistandard tableaux among others) an
implementation of the straightening algorithm which includes an implementation
of the garnir element given a tableau an a row descent. Methods for calculating
Higher Specht Polynomials which give a basis of the Specht Modules that arrise
in the coinvariant ring of $S_n$ which is the quotient $k[x_1,..,x_n]/({\rm
Sym}(n)^+)$. And finally methods for calculating the secondary invariants
described above.

Caveat
======

An improvement can be made by finding an efficient way to calculate or
represent Schur Polynomials

Author
======

  * Jonathan Niño (see http://www.uniandes.edu.co )
    <ja.nino937@uniandes.edu.co>

Version
=======

This documentation describes version 1.0 of SpechtModule.

Source code
===========

The source code from which this documentation is derived is in the file
SpechtModule.m2 (see common/share/Macaulay2/SpechtModule.m2 ).

Exports
=======

  * Types
      * CharacterTable -- the class of character tables
      * SpechtModuleElement -- the class of Specht
        Module elements
      * TableauList -- the class of list of tableaux
      * YoungTableau -- the class of Young Tableaux
  * Functions and commands
      * "addTableau" -- see addTableau(TableauList,YoungTableau),
        -- adds a Young Tableau in
        the list
      * "cardinalityOfConjugacyClass" -- see
        cardinalityOfConjugacyClass(Partition),
        -- the size of the
        conjugacy classes of S_n
      * characterTable -- returns the character table of
        the symmetric group
      * "columnStabilizer" -- see columnStabilizer(YoungTableau),
        -- the column stabilizer of the
        tableau
      * "conjugacyClass" -- see conjugacyClass(List),
        -- the conjugacy class of a permutation
      * "cycleDecomposition" -- see cycleDecomposition(List),
        -- the cycle decomposition of a
        permutation
      * "elementarySymmetricPolynomials" -- see
        elementarySymmetricPolynomials(PolynomialRing),
        -- the elementary
        symmetric polynomials
      * "firstRowDescent" -- see firstRowDescent(YoungTableau),
        -- retrieves the first row descent
        of a young tableau
      * garnirElement -- a SpechtModuleElement that is
        equal to zero
      * "generalizedVandermondeMatrix" -- see
        generalizedVandermondeMatrix(List,List,PolynomialRing),
        -- the
        method for calculating generalized Vandermonde matrices
      * "generatePermutationGroup" -- see generatePermutationGroup(List),
        -- a method for generating a
        permutation group given a set of generators
      * "higherSpechtPolynomial" -- see
        higherSpechtPolynomial(YoungTableau,YoungTableau,PolynomialRing),
        -- the higher Specht polynomial index by the pair of standard
        tableaux (S,T)
      * higherSpechtPolynomials -- a method
        that gives sets of higher Specht polynomials
      * "hookLengthFormula" -- see hookLengthFormula(Partition),
        -- a formula for the number of
        standard tableaux
      * "indexMonomial" -- see
        indexMonomial(YoungTableau,YoungTableau,PolynomialRing),
        -- a
        monomial that represents an index tableau
      * "indexTableau" -- see indexTableau(YoungTableau),
        -- the index tableau for a given
        tableau
      * "innerProduct" -- see
        innerProduct(ZZ,MutableMatrix,MutableMatrix),
        -- calculates the
        inner product for the characters of S_n
      * "listToTableau" -- see listToTableau(List),
        -- constructs a Young Tableau from a doubly
        nested list of numbers
      * matrixRepresentation -- the matrix
        representation of a permutation in the Specht Module
      * multinomial -- a formula for the multinomial
        coefficient
      * "permutationMatrix" -- see permutationMatrix(List),
        -- a permutation matrix generator
      * permutationSign -- the sign of a permutation
      * permutePolynomial -- permutes a RingElement
        or a PolynomialExpression of RingElements
      * "powerSumSymmetricPolynomials" -- see
        powerSumSymmetricPolynomials(PolynomialRing),
        -- the power sum
        symmetric polynomials
      * "readingWord" -- see readingWord(YoungTableau),
        -- gives the reading word of a given
        tableau
      * representationMultiplicity -- the
        number of secondary invariants in a given irreducible representation
      * "rowPermutationTableaux" -- see
        rowPermutationTableaux(YoungTableau),
        -- the list of row
        permutations without repetitions in columns
      * "rowStabilizer" -- see rowStabilizer(YoungTableau),
        -- the row stabilizer of the tableau
      * "schurPolynomial" -- see
        schurPolynomial(List,Partition,PolynomialRing),
        -- a method for
        constructing Schur polynomials
      * "secondaryInvariants" -- see
        secondaryInvariants(List,PolynomialRing),
        -- the set of
        secondaryInvariants of a permutation group
      * "semistandardTableaux" -- see semistandardTableaux(Partition,ZZ),
        -- the list of semistandard
        tableaux of shape p and filling with the numbers from 0 to n-1.
      * "sortColumnsTableau" -- see
        sortColumnsTableau(SpechtModuleElement),
        -- a method for sorting
        the columns of the tableaux in a SpechtModuleElement
      * spechtModuleElement -- the constructor for
        the class SpechtModuleElement
      * "spechtPolynomial" -- see
        spechtPolynomial(YoungTableau,PolynomialRing),
        -- the Specht
        polynomial indexed by a standard tableau
      * "spechtPolynomials" -- see
        spechtPolynomials(Partition,PolynomialRing),
        -- the set of all
        Specht polynomial indexed by standard tableaux of shape p
      * "standardTableaux" -- see standardTableaux(Partition),
        -- the list of standard tableaux of
        shape p
      * straighteningAlgorithm -- an algorithm
        for expressing any polytabloid as linear combinations of standard
        polytabloids
      * "tableauList" -- see tableauList(Partition,ZZ),
        -- the constructor for the type
        TableauList
      * "tableauToList" -- see tableauToList(YoungTableau),
        -- converts a YoungTableau to list
        form
      * "tabloids" -- see tabloids(Partition),
        -- the list of tabloids for a given partition
      * "toListOfTableaux" -- see toListOfTableaux(TableauList),
        -- converts an object of type
        TableauList into a list of YoungTableau objects
      * vandermondeDeterminant -- the
        vandermonde determinant for a set of generators of a ring
      * youngTableau -- the constructor method for the
        class YoungTableau
  * Methods
      * "addTableau(TableauList,List)" -- see
        addTableau(TableauList,YoungTableau),
        -- adds a Young Tableau in
        the list
      * addTableau(TableauList,YoungTableau)
        -- adds a Young Tableau in
        the list
      * cardinalityOfConjugacyClass(Partition)
        -- the size of the
        conjugacy classes of S_n
      * "net(CharacterTable)" -- see CharacterTable, --
        the class of character tables
      * "characterTable(ZZ)" -- see characterTable, --
        returns the character table of the symmetric group
      * CharacterTable _ Sequence, --
        retrieves an entry from the character table
      * CharacterTable _ Sequence = Thing
        -- modifies an entry from the character table
      * columnStabilizer(YoungTableau)
        -- the column stabilizer of the
        tableau
      * conjugacyClass(List) -- the conjugacy
        class of a permutation
      * cycleDecomposition(List) -- the
        cycle decomposition of a permutation
      * elementarySymmetricPolynomials(PolynomialRing)
        -- the elementary
        symmetric polynomials
      * entries(YoungTableau) -- returns the
        filling of the tableau
      * firstRowDescent(YoungTableau),
        -- retrieves the first row descent of a young tableau
      * "garnirElement(YoungTableau)" -- see garnirElement,
        -- a SpechtModuleElement that is equal to zero
      * "garnirElement(YoungTableau,ZZ)" -- see garnirElement,
        -- a SpechtModuleElement that is equal to zero
      * "garnirElement(YoungTableau,ZZ,ZZ,ZZ)" -- see garnirElement,
        -- a SpechtModuleElement that is equal to zero
      * generalizedVandermondeMatrix(List,List,PolynomialRing)
        -- the
        method for calculating generalized Vandermonde matrices
      * generatePermutationGroup(List)
        -- a method for generating a
        permutation group given a set of generators
      * higherSpechtPolynomial(YoungTableau,YoungTableau,PolynomialRing)
        -- the higher Specht polynomial index by the pair of standard
        tableaux (S,T)
      * "higherSpechtPolynomials(Partition,PolynomialRing)" -- see
        higherSpechtPolynomials, -- a method that
        gives sets of higher Specht polynomials
      * "higherSpechtPolynomials(PolynomialRing)" -- see
        higherSpechtPolynomials, -- a method that
        gives sets of higher Specht polynomials
      * "higherSpechtPolynomials(YoungTableau,PolynomialRing)" -- see
        higherSpechtPolynomials, -- a method that
        gives sets of higher Specht polynomials
      * "higherSpechtPolynomials(YoungTableau,TableauList,PolynomialRing)" --
        see higherSpechtPolynomials, -- a method
        that gives sets of higher Specht polynomials
      * hookLengthFormula(Partition),
        -- a formula for the number of standard tableaux
      * indexMonomial(YoungTableau,YoungTableau,PolynomialRing)
        -- a
        monomial that represents an index tableau
      * indexTableau(YoungTableau), --
        the index tableau for a given tableau
      * innerProduct(ZZ,MutableMatrix,MutableMatrix)
        -- calculates the
        inner product for the characters of S_n
      * listToTableau(List) -- constructs a
        Young Tableau from a doubly nested list of numbers
      * "matrixRepresentation(List,Partition)" -- see
        matrixRepresentation, -- the matrix
        representation of a permutation in the Specht Module
      * "matrixRepresentation(List,TableauList)" -- see
        matrixRepresentation, -- the matrix
        representation of a permutation in the Specht Module
      * "matrixRepresentation(Partition)" -- see matrixRepresentation,
        -- the matrix representation of a permutation in
        the Specht Module
      * "matrixRepresentation(TableauList)" -- see matrixRepresentation,
        -- the matrix representation of a permutation in
        the Specht Module
      * "multinomial(List)" -- see multinomial, -- a formula
        for the multinomial coefficient
      * "multinomial(Partition)" -- see multinomial, -- a
        formula for the multinomial coefficient
      * "multinomial(Tally)" -- see multinomial, -- a
        formula for the multinomial coefficient
      * numColumns(YoungTableau), --
        returns the number of columns of a tableau
      * numRows(YoungTableau) -- returns the
        number of rows of a tableau
      * permutationMatrix(List) -- a
        permutation matrix generator
      * "permutationSign(List)" -- see permutationSign,
        -- the sign of a permutation
      * "permutationSign(Partition)" -- see permutationSign,
        -- the sign of a permutation
      * "permutePolynomial(List,Minus)" -- see permutePolynomial,
        -- permutes a RingElement or a PolynomialExpression
        of RingElements
      * "permutePolynomial(List,Power)" -- see permutePolynomial,
        -- permutes a RingElement or a PolynomialExpression
        of RingElements
      * "permutePolynomial(List,Product)" -- see permutePolynomial,
        -- permutes a RingElement or a PolynomialExpression
        of RingElements
      * "permutePolynomial(List,RingElement)" -- see permutePolynomial,
        -- permutes a RingElement or a PolynomialExpression
        of RingElements
      * "permutePolynomial(List,Sum)" -- see permutePolynomial,
        -- permutes a RingElement or a PolynomialExpression
        of RingElements
      * powerSumSymmetricPolynomials(PolynomialRing)
        -- the power sum
        symmetric polynomials
      * readingWord(YoungTableau), --
        gives the reading word of a given tableau
      * "representationMultiplicity(Tally,Partition)" -- see
        representationMultiplicity, -- the number
        of secondary invariants in a given irreducible representation
      * "representationMultiplicity(Tally,Partition,CharacterTable)" -- see
        representationMultiplicity, -- the
        number of secondary invariants in a given irreducible representation
      * rowPermutationTableaux(YoungTableau)
        -- the list of row
        permutations without repetitions in columns
      * rowStabilizer(YoungTableau), --
        the row stabilizer of the tableau
      * schurPolynomial(List,Partition,PolynomialRing)
        -- a method for
        constructing Schur polynomials
      * secondaryInvariants(List,PolynomialRing)
        -- the set of
        secondaryInvariants of a permutation group
      * semistandardTableaux(Partition,ZZ)
        -- the list of semistandard
        tableaux of shape p and filling with the numbers from 0 to n-1.
      * size(YoungTableau) -- returns the number
        of cells of a tableau
      * sortColumnsTableau(SpechtModuleElement)
        -- a method for sorting
        the columns of the tableaux in a SpechtModuleElement
      * sortColumnsTableau(YoungTableau)
        -- a method for
      * "List SpechtModuleElement" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "net(SpechtModuleElement)" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "QQ * SpechtModuleElement" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "SpechtModuleElement + SpechtModuleElement" -- see
        SpechtModuleElement, -- the class of Specht Module
        elements
      * "SpechtModuleElement - SpechtModuleElement" -- see
        SpechtModuleElement, -- the class of Specht Module
        elements
      * "terms(SpechtModuleElement)" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "trim(SpechtModuleElement)" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "ZZ * SpechtModuleElement" -- see SpechtModuleElement,
        -- the class of Specht Module elements
      * "spechtModuleElement(Partition,MutableHashTable)" -- see
        spechtModuleElement, -- the constructor for the
        class SpechtModuleElement
      * "spechtModuleElement(YoungTableau)" -- see spechtModuleElement,
        -- the constructor for the class
        SpechtModuleElement
      * "spechtModuleElement(YoungTableau,QQ)" -- see
        spechtModuleElement, -- the constructor for the
        class SpechtModuleElement
      * "spechtModuleElement(YoungTableau,ZZ)" -- see
        spechtModuleElement, -- the constructor for the
        class SpechtModuleElement
      * spechtPolynomial(YoungTableau,PolynomialRing)
        -- the Specht
        polynomial indexed by a standard tableau
      * spechtPolynomials(Partition,PolynomialRing)
        -- the set of all
        Specht polynomial indexed by standard tableaux of shape p
      * standardTableaux(Partition), --
        the list of standard tableaux of shape p
      * "straighteningAlgorithm(SpechtModuleElement)" -- see
        straighteningAlgorithm, -- an algorithm for
        expressing any polytabloid as linear combinations of standard
        polytabloids
      * "straighteningAlgorithm(YoungTableau)" -- see
        straighteningAlgorithm, -- an algorithm for
        expressing any polytabloid as linear combinations of standard
        polytabloids
      * "straighteningAlgorithm(YoungTableau,ZZ)" -- see
        straighteningAlgorithm, -- an algorithm for
        expressing any polytabloid as linear combinations of standard
        polytabloids
      * "net(TableauList)" -- see TableauList, -- the class
        of list of tableaux
      * TableauList _ ZZ -- a method that retrieves
        the tableaux from the list
      * "tableauList(Partition)" -- see tableauList(Partition,ZZ),
        -- the constructor for the type
        TableauList
      * tableauList(Partition,ZZ), --
        the constructor for the type TableauList
      * tableauToList(YoungTableau), --
        converts a YoungTableau to list form
      * tabloids(Partition) -- the list of
        tabloids for a given partition
      * toListOfTableaux(TableauList),
        -- converts an object of type TableauList into a list of YoungTableau
        objects
      * "vandermondeDeterminant(List,PolynomialRing)" -- see
        vandermondeDeterminant, -- the vandermonde
        determinant for a set of generators of a ring
      * "net(YoungTableau)" -- see YoungTableau, -- the
        class of Young Tableaux
      * "youngTableau(Partition)" -- see youngTableau, --
        the constructor method for the class YoungTableau
      * "youngTableau(Partition,List)" -- see youngTableau,
        -- the constructor method for the class YoungTableau
      * "youngTableau(Partition,MutableList)" -- see youngTableau,
        -- the constructor method for the class YoungTableau
      * YoungTableau == YoungTableau, --
        checks whether two tableaux are equivalent
      * YoungTableau ? YoungTableau -- an
        order of YoungTableaux
      * YoungTableau ^ ZZ -- retrieves a row from a
        Young Tableau
      * YoungTableau _ Sequence -- retrieves
        the entry in cell (a,b) from a Young Tableau
      * YoungTableau _ Sequence = Thing
        -- changes the entry in cell (a,b) from a Young Tableau
      * YoungTableau _ ZZ -- retrieves a column
        from a Young Tableau
      * youngTableau(YoungTableau), --
        creates a copy of a YoungTableau object
  * Symbols
      * AsExpression -- an optional argument that returns
        polynomials as expressions
      * Robust -- an optional argument for specifying the
        algorithm for calculating higherSpechtPolynomials

For the programmer
==================

The object SpechtModule, is a package (Macaulay2Doc).

addTableau(TableauList,YoungTableau) -- adds a Young Tableau in the list
************************************************************************

Synopsis
========

  * Function: addTableau,

Description
===========

The following is an example of how does the method addTableau work

+----------------------------------------------+
|i1 : p = new Partition from {2,1}             |
|                                              |
|o1 = Partition{2, 1}                          |
|                                              |
|o1 : Partition                                |
+----------------------------------------------+
|i2 : y1 = youngTableau(p,{0,1,2})             |
|                                              |
|o2 = | 0 1 |                                  |
|     | 2 |                                    |
|                                              |
|o2 : YoungTableau                             |
+----------------------------------------------+
|i3 : y2 = youngTableau(p,{0,2,1})             |
|                                              |
|o3 = | 0 2 |                                  |
|     | 1 |                                    |
|                                              |
|o3 : YoungTableau                             |
+----------------------------------------------+
|i4 : t = tableauList p                        |
|                                              |
|o4 = {}                                       |
|                                              |
|o4 : TableauList                              |
+----------------------------------------------+
|i5 : addTableau(t, y1)                        |
|                                              |
|o5 = {| 0 1 |}                                |
|      | 2 |                                   |
|                                              |
|o5 : TableauList                              |
+----------------------------------------------+
|i6 : addTableau(t, y2)                        |
|                                              |
|o6 = {| 0 1 |, | 0 2 |}                       |
|      | 2 |    | 1 |                          |
|                                              |
|o6 : TableauList                              |
+----------------------------------------------+
|i7 : addTableau(t, {1,2,0})                   |
|                                              |
|o7 = {| 0 1 |, | 0 2 |, | 1 2 |}              |
|      | 2 |    | 1 |    | 0 |                 |
|                                              |
|o7 : TableauList                              |
+----------------------------------------------+
|i8 : peek t                                   |
|                                              |
|o8 = TableauList{length => 3                 }|
|                 matrix => | 0 1 2 |          |
|                           | 0 2 1 |          |
|                           | 1 2 0 |          |
|                 partition => Partition{2, 1} |
+----------------------------------------------+

Ways to use this method:
========================

  * "addTableau(TableauList,List)"
  * addTableau(TableauList,YoungTableau)
    -- adds a Young Tableau in the
    list

AsExpression -- an optional argument that returns polynomials as expressions
****************************************************************************

Description
===========

The optional argument AsExpression specifies whether the polynomials should be
outputted as RingElement objects or as elements of type Expression

+-----------------------------------------------------------+
|i1 : R = QQ[x_0..x_3]                                      |
|                                                           |
|o1 = R                                                     |
|                                                           |
|o1 : PolynomialRing                                        |
+-----------------------------------------------------------+
|i2 : vandermondeDeterminant({0,2,3},R,AsExpression => true)|
|                                                           |
|o2 = (- x  + x )(- x  + x )(- x  + x )                     |
|         0    2     0    3     2    3                      |
|                                                           |
|o2 : Expression of class Product                           |
+-----------------------------------------------------------+

This allows to visualize some of the polynomials in a clearer way.

+-----------------------------------------------------------------------------+
|i3 : p = new Partition from {2,2}                                            |
|                                                                             |
|o3 = Partition{2, 2}                                                         |
|                                                                             |
|o3 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i4 : S = youngTableau(p,{0,2,1,3})                                           |
|                                                                             |
|o4 = | 0 2 |                                                                 |
|     | 1 3 |                                                                 |
|                                                                             |
|o4 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i5 : T = youngTableau(p,{0,1,2,3})                                           |
|                                                                             |
|o5 = | 0 1 |                                                                 |
|     | 2 3 |                                                                 |
|                                                                             |
|o5 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i6 : higherSpechtPolynomial(S,T,R,AsExpression => true)                      |
|                                                                             |
|o6 = (- x  + x )(- x  + x )((x )(x ) + (x )(x ))                             |
|         0    2     1    3    3   1      2   0                               |
|                                                                             |
|o6 : Expression of class Product                                             |
+-----------------------------------------------------------------------------+
|i7 : higherSpechtPolynomials(R,AsExpression => true)                         |
|                                                                             |
|o7 = HashTable{Partition{1, 1, 1, 1} => HashTable{{0, 1,                     |
|                                                                             |
|               Partition{2, 1, 1} => HashTable{{0, 1, 2,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                               {0, 2, 1,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                               {0, 3, 1,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{2, 2} => HashTable{{0, 1, 2, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 2, 1, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{3, 1} => HashTable{{0, 1, 2, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 1, 3, 2}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 2, 3, 1}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{4} => HashTable{{0, 1, 2, 3} =>                     |
|                                                                             |
|o7 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|2, 3} => HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )(- x  + x )(- x  +  |
|                                       0    1     0    2     0    3     1    |
|3} => HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )(- x  + x )}     }     |
|                                    0    2     0    3     2    3             |
|                {0, 2, 1, 3} => (- x  + x )(- x  + x )(- x  + x )            |
|                                    0    1     0    3     1    3             |
|                {0, 3, 1, 2} => (- x  + x )(- x  + x )(- x  + x )            |
|                                    0    1     0    2     1    2             |
|3} => HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )(- x  + x )(x )}       |
|                                    0    2     0    3     2    3   1         |
|                {0, 2, 1, 3} => (- x  + x )(- x  + x )(- x  + x )(x )        |
|                                    0    1     0    3     1    3   2         |
|                {0, 3, 1, 2} => (- x  + x )(- x  + x )(- x  + x )(x )        |
|                                    0    1     0    2     1    2   3         |
|                                                                     2       |
|2} => HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )(- x  + x )(x ) }      |
|                                    0    2     0    3     2    3   1         |
|                                                                     2       |
|                {0, 2, 1, 3} => (- x  + x )(- x  + x )(- x  + x )(x )        |
|                                    0    1     0    3     1    3   2         |
|                                                                     2       |
|                {0, 3, 1, 2} => (- x  + x )(- x  + x )(- x  + x )(x )        |
|                                    0    1     0    2     1    2   3         |
|=> HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )}                     }   |
|                                 0    2     1    3                           |
|             {0, 2, 1, 3} => (- x  + x )(- x  + x )                          |
|                                 0    1     2    3                           |
|=> HashTable{{0, 1, 2, 3} => (- x  + x )(- x  + x )((x )(x ) + (x )(x ))}    |
|                                 0    2     1    3    3   1      2   0       |
|             {0, 2, 1, 3} => (- x  + x )(- x  + x )((x )(x ) + (x )(x ))     |
|                                 0    1     2    3    3   2      1   0       |
|=> HashTable{{0, 1, 2, 3} => (- x  + x )}             }                      |
|                                 0    3                                      |
|             {0, 1, 3, 2} => (- x  + x )                                     |
|                                 0    2                                      |
|             {0, 2, 3, 1} => (- x  + x )                                     |
|                                 0    1                                      |
|=> HashTable{{0, 1, 2, 3} => (- x  + x )((x ) + (x ))}                       |
|                                 0    3    2      1                          |
|             {0, 1, 3, 2} => (- x  + x )((x ) + (x ))                        |
|                                 0    2    3      1                          |
|             {0, 2, 3, 1} => (- x  + x )((x ) + (x ))                        |
|                                 0    1    3      2                          |
|=> HashTable{{0, 1, 2, 3} => (- x  + x )(x )(x )}                            |
|                                 0    3   1   2                              |
|             {0, 1, 3, 2} => (- x  + x )(x )(x )                             |
|                                 0    2   1   3                              |
|             {0, 2, 3, 1} => (- x  + x )(x )(x )                             |
|                                 0    1   2   3                              |
|HashTable{{0, 1, 2, 3} => 1}}                                                |
|-----------------------------------------------------------------------------|
|x )(- x  + x )(- x  + x )}}}                                                 |
| 2     1    3     2    3                                                     |
+-----------------------------------------------------------------------------+

In some cases it also allows to work with polynomials whose term expansion is
very big.

Example R = QQ[x_1..x_10] p = new Partition from {1,1,1,1,1,1,1,1,1,1};
spechtPolynomial(youngTableau(p,{0,1,2,3,4,5,6,7,8,9}),R,AsExpression => true)
SeeAlso higherSpechtPolynomial

Functions with optional argument named AsExpression :
=====================================================

  * "higherSpechtPolynomial(...,AsExpression=>...)"
  * "higherSpechtPolynomials(...,AsExpression=>...)"
  * "schurPolynomial(...,AsExpression=>...)"
  * "secondaryInvariants(...,AsExpression=>...)"
  * "spechtPolynomial(...,AsExpression=>...)"
  * "spechtPolynomials(...,AsExpression=>...)"
  * "vandermondeDeterminant(...,AsExpression=>...)"

For the programmer
==================

The object AsExpression, is a symbol (Macaulay2Doc).

cardinalityOfConjugacyClass(Partition) -- the size of the conjugacy classes of S_n
**********************************************************************************

Synopsis
========

  * Function: cardinalityOfConjugacyClass,
  * Usage:
        cardinalityOfConjugacyClass p
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc), a
        partition that indexes a conjugacy class of S_n
  * Outputs:
      * an integer (Macaulay2Doc), the size of the conjugacy class

Description
===========

The formula for this classes is obtained by the Orbit-Stabilizer lemma applied
for S_n with the action of conjugation.

For a partition $p$ this formula is $n!/(\prod_i (\lambda_i )!i^\lambda_i$,
where $\lambda_i$ denotes the number of parts in $p$ that are equal to $i$.

+----------------------------------------+
|i1 : p1 = new Partition from {3,2,1}    |
|                                        |
|o1 = Partition{3, 2, 1}                 |
|                                        |
|o1 : Partition                          |
+----------------------------------------+
|i2 : cardinalityOfConjugacyClass p1     |
|                                        |
|o2 = 120                                |
+----------------------------------------+
|i3 : p2 = new Partition from {1,1,1,1,1}|
|                                        |
|o3 = Partition{1, 1, 1, 1, 1}           |
|                                        |
|o3 : Partition                          |
+----------------------------------------+
|i4 : cardinalityOfConjugacyClass p2     |
|                                        |
|o4 = 1                                  |
+----------------------------------------+

Ways to use this method:
========================

  * cardinalityOfConjugacyClass(Partition)
    -- the size of the conjugacy
    classes of S_n

CharacterTable -- the class of character tables
***********************************************

Description
===========

This type represents the character table of a symmetric group. It is
implemented as a hash table that stores the list of partitions, the size of the
table and a matrix which stores the values of the table.

+-----------------------------------------------------------------------+
|i1 : charTable = characterTable 5                                      |
|                                                                       |
|o1 = | 1  1  1  1  1  1  1 |                                           |
|     | -1 0  -1 1  0  2  4 |                                           |
|     | 0  -1 1  -1 1  1  5 |                                           |
|     | 1  0  0  0  -2 0  6 |                                           |
|     | 0  1  -1 -1 1  -1 5 |                                           |
|     | -1 0  1  1  0  -2 4 |                                           |
|     | 1  -1 -1 1  1  -1 1 |                                           |
|                                                                       |
|o1 : CharacterTable                                                    |
+-----------------------------------------------------------------------+
|i2 : a = new Partition from {3,1,1}; b = new Partition from {1,1,1,1,1}|
|                                                                       |
|o3 = Partition{1, 1, 1, 1, 1}                                          |
|                                                                       |
|o3 : Partition                                                         |
+-----------------------------------------------------------------------+
|i4 : peek charTable                                                    |
|                                                                       |
|o4 = CharacterTable{degree => 5                                      } |
|                    index => HashTable{Partition{1, 1, 1, 1, 1} => 6}  |
|                                       Partition{2, 1, 1, 1} => 5      |
|                                       Partition{2, 2, 1} => 4         |
|                                       Partition{3, 1, 1} => 3         |
|                                       Partition{3, 2} => 2            |
|                                       Partition{4, 1} => 1            |
|                                       Partition{5} => 0               |
|                    length => 7                                        |
|                    values => | 1  1  1  1  1  1  1 |                  |
|                              | -1 0  -1 1  0  2  4 |                  |
|                              | 0  -1 1  -1 1  1  5 |                  |
|                              | 1  0  0  0  -2 0  6 |                  |
|                              | 0  1  -1 -1 1  -1 5 |                  |
|                              | -1 0  1  1  0  -2 4 |                  |
|                              | 1  -1 -1 1  1  -1 1 |                  |
+-----------------------------------------------------------------------+

See also
========

  * characterTable -- returns the character table of the
    symmetric group

Functions and methods returning an object of class CharacterTable :
===================================================================

  * characterTable -- returns the character table of the
    symmetric group

Methods that use an object of class CharacterTable :
====================================================

  * "net(CharacterTable)"
  * CharacterTable _ Sequence -- retrieves
    an entry from the character table
  * CharacterTable _ Sequence = Thing
    -- modifies an entry from the character table
  * "representationMultiplicity(Tally,Partition,CharacterTable)" -- see
    representationMultiplicity, -- the number of
    secondary invariants in a given irreducible representation

For the programmer
==================

The object CharacterTable, is a type (Macaulay2Doc),
with ancestor classes MutableHashTable (Macaulay2Doc),
< HashTable (Macaulay2Doc) <
Thing (Macaulay2Doc).

characterTable -- returns the character table of the symmetric group
********************************************************************

Synopsis
========

  * Usage:
        characterTable n
  * Inputs:
      * n, an integer (Macaulay2Doc), the degree of the symmmetric
        group
  * Outputs:
      * an instance of the type CharacterTable, the
        character table with the irreducible characters of $S_n$ indexed by
        partitions

Description
===========

This method construct the irreducible characters of $S_n$. The method works by
recursively calculating the character tables for the permutation modules of
$S_n$. Then applying Gram-Schimdt algorithm to this characters using the inner
product of characters we obtain the irreducible characters of $S_n$

See also
========

  * CharacterTable -- the class of character tables

Ways to use characterTable :
============================

  * "characterTable(ZZ)"

For the programmer
==================

The object characterTable, is a method function (Macaulay2Doc).

CharacterTable _ Sequence -- retrieves an entry from the character table
************************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        charTable_(a,b)
  * Inputs:
      * charTable, an instance of the type CharacterTable,
      * pos, a sequence (Macaulay2Doc), the position (a,b) to
        be consulted. It can be given by either a number or a Partition
  * Outputs:
      * an integer (Macaulay2Doc), the number in the position

Description
===========

+-----------------------------------------------------------------------+
|i1 : charTable = characterTable 5                                      |
|                                                                       |
|o1 = | 1  1  1  1  1  1  1 |                                           |
|     | -1 0  -1 1  0  2  4 |                                           |
|     | 0  -1 1  -1 1  1  5 |                                           |
|     | 1  0  0  0  -2 0  6 |                                           |
|     | 0  1  -1 -1 1  -1 5 |                                           |
|     | -1 0  1  1  0  -2 4 |                                           |
|     | 1  -1 -1 1  1  -1 1 |                                           |
|                                                                       |
|o1 : CharacterTable                                                    |
+-----------------------------------------------------------------------+
|i2 : a = new Partition from {3,1,1}; b = new Partition from {1,1,1,1,1}|
|                                                                       |
|o3 = Partition{1, 1, 1, 1, 1}                                          |
|                                                                       |
|o3 : Partition                                                         |
+-----------------------------------------------------------------------+
|i4 : charTable_(0,0)                                                   |
|                                                                       |
|o4 = 1                                                                 |
+-----------------------------------------------------------------------+
|i5 : charTable_(a,b)                                                   |
|                                                                       |
|o5 = 6                                                                 |
+-----------------------------------------------------------------------+

See also
========

  * characterTable -- returns the character table of the
    symmetric group

Ways to use this method:
========================

  * CharacterTable _ Sequence -- retrieves
    an entry from the character table

CharacterTable _ Sequence = Thing -- modifies an entry from the character table
*******************************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        charTable_(a,b)=e
  * Inputs:
      * charTable, an instance of the type CharacterTable,
      * pos, a sequence (Macaulay2Doc), the position (a,b) to
        be consulted. It can be given by either a number or a Partition
      * e, a thing (Macaulay2Doc), the number to be put in the
        position
  * Outputs:
      * an integer (Macaulay2Doc), the number in the position

Description
===========

+-----------------------------------------------------------------------+
|i1 : charTable = characterTable 5                                      |
|                                                                       |
|o1 = | 1  1  1  1  1  1  1 |                                           |
|     | -1 0  -1 1  0  2  4 |                                           |
|     | 0  -1 1  -1 1  1  5 |                                           |
|     | 1  0  0  0  -2 0  6 |                                           |
|     | 0  1  -1 -1 1  -1 5 |                                           |
|     | -1 0  1  1  0  -2 4 |                                           |
|     | 1  -1 -1 1  1  -1 1 |                                           |
|                                                                       |
|o1 : CharacterTable                                                    |
+-----------------------------------------------------------------------+
|i2 : a = new Partition from {3,1,1}; b = new Partition from {1,1,1,1,1}|
|                                                                       |
|o3 = Partition{1, 1, 1, 1, 1}                                          |
|                                                                       |
|o3 : Partition                                                         |
+-----------------------------------------------------------------------+
|i4 : charTable_(0,0)=-100                                              |
|                                                                       |
|o4 = -100                                                              |
+-----------------------------------------------------------------------+
|i5 : charTable_(a,b)=100                                               |
|                                                                       |
|o5 = 100                                                               |
+-----------------------------------------------------------------------+
|i6 : charTable                                                         |
|                                                                       |
|o6 = | -100 1  1  1  1  1  1   |                                       |
|     | -1   0  -1 1  0  2  4   |                                       |
|     | 0    -1 1  -1 1  1  5   |                                       |
|     | 1    0  0  0  -2 0  100 |                                       |
|     | 0    1  -1 -1 1  -1 5   |                                       |
|     | -1   0  1  1  0  -2 4   |                                       |
|     | 1    -1 -1 1  1  -1 1   |                                       |
|                                                                       |
|o6 : CharacterTable                                                    |
+-----------------------------------------------------------------------+

See also
========

  * characterTable -- returns the character table of the
    symmetric group

Ways to use this method:
========================

  * CharacterTable _ Sequence = Thing
    -- modifies an entry from the character table

columnStabilizer(YoungTableau) -- the column stabilizer of the tableau
**********************************************************************

Synopsis
========

  * Function: columnStabilizer,
  * Usage:
        columnStabilizer(y)
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * a list (Macaulay2Doc), a doubly nested list with the
        permutations in the column stabilizer

Description
===========

+-----------------------------------------------------------------------------+
|i1 : p = new Partition from {2,2,1}                                          |
|                                                                             |
|o1 = Partition{2, 2, 1}                                                      |
|                                                                             |
|o1 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i2 : y = youngTableau(p,{0,3,1,4,2})                                         |
|                                                                             |
|o2 = | 0 3 |                                                                 |
|     | 1 4 |                                                                 |
|     | 2 |                                                                   |
|                                                                             |
|o2 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i3 : columnStabilizer y                                                      |
|                                                                             |
|o3 = {{0, 1, 2, 3, 4}, {0, 1, 2, 4, 3}, {0, 2, 1, 3, 4}, {0, 2, 1, 4, 3}, {1,|
|     ------------------------------------------------------------------------|
|     0, 2, 3, 4}, {1, 0, 2, 4, 3}, {1, 2, 0, 3, 4}, {1, 2, 0, 4, 3}, {2, 0,  |
|     ------------------------------------------------------------------------|
|     1, 3, 4}, {2, 0, 1, 4, 3}, {2, 1, 0, 3, 4}, {2, 1, 0, 4, 3}}            |
|                                                                             |
|o3 : List                                                                    |
+-----------------------------------------------------------------------------+

See also
========

  * rowStabilizer -- the row stabilizer
    of the tableau

Ways to use this method:
========================

  * columnStabilizer(YoungTableau),
    -- the column stabilizer of the tableau

conjugacyClass(List) -- the conjugacy class of a permutation
************************************************************

Synopsis
========

  * Function: conjugacyClass,
  * Usage:
        conjugacyClass perm
  * Inputs:
      * perm, a list (Macaulay2Doc), a permutation of the list of
        numbers from 0 to n-1
  * Outputs:
      * an instance of the type Partition (Macaulay2Doc), a
        partition that represents the conjugacy class of the permutation

Description
===========

The method first calculates the cycle decomposition of the permutation Then the
conjugacy class is the partition given by the lengths of the cycles in the
decomposition

+-----------------------------------+
|i1 : cycleDecomposition {0,1,2,3,4}|
|                                   |
|o1 = {{0}, {1}, {2}, {3}, {4}}     |
|                                   |
|o1 : List                          |
+-----------------------------------+
|i2 : conjugacyClass     {0,1,2,3,4}|
|                                   |
|o2 = Partition{1, 1, 1, 1, 1}      |
|                                   |
|o2 : Partition                     |
+-----------------------------------+
|i3 : cycleDecomposition {1,3,2,0,4}|
|                                   |
|o3 = {{0, 1, 3}, {2}, {4}}         |
|                                   |
|o3 : List                          |
+-----------------------------------+
|i4 : conjugacyClass     {0,1,2,3,4}|
|                                   |
|o4 = Partition{1, 1, 1, 1, 1}      |
|                                   |
|o4 : Partition                     |
+-----------------------------------+

Ways to use this method:
========================

  * conjugacyClass(List) -- the conjugacy
    class of a permutation

cycleDecomposition(List) -- the cycle decomposition of a permutation
********************************************************************

Synopsis
========

  * Function: cycleDecomposition,
  * Usage:
        cycleDecomposition perm
  * Inputs:
      * perm, a list (Macaulay2Doc), a permutation of the list of
        numbers from 0 to n-1
  * Outputs:
      * a list (Macaulay2Doc), a doubly nested list with cycles of
        the permutation

Description
===========

Every permutation has a decomposition as the concatenation of disjoint cycles.
This decomposition is used to calculate the conjugacy class of the permutation.

+-----------------------------------+
|i1 : cycleDecomposition {0,1,2,3,4}|
|                                   |
|o1 = {{0}, {1}, {2}, {3}, {4}}     |
|                                   |
|o1 : List                          |
+-----------------------------------+
|i2 : cycleDecomposition {1,3,2,0,4}|
|                                   |
|o2 = {{0, 1, 3}, {2}, {4}}         |
|                                   |
|o2 : List                          |
+-----------------------------------+

Ways to use this method:
========================

  * cycleDecomposition(List) -- the cycle
    decomposition of a permutation

elementarySymmetricPolynomials(PolynomialRing) -- the elementary symmetric polynomials
**************************************************************************************

Synopsis
========

  * Function: elementarySymmetricPolynomials,
  * Usage:
        elementarySymmetricPolynomials(R)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc), a
        polynomial ring
  * Outputs:
      * a list (Macaulay2Doc), the list of power elementary
        symmetric polynomials

Description
===========

As an example the elementary symmetric polynomials of a ring with three
variables are calculated. These polynomials form a basis for the ring of
symmetric polynomials.

+-----------------------------------------------+
|i1 : R = QQ[x_1..x_3]                          |
|                                               |
|o1 = R                                         |
|                                               |
|o1 : PolynomialRing                            |
+-----------------------------------------------+
|i2 : elementarySymmetricPolynomials R          |
|                                               |
|o2 = {x  + x  + x , x x  + x x  + x x , x x x }|
|       1    2    3   1 2    1 3    2 3   1 2 3 |
|                                               |
|o2 : List                                      |
+-----------------------------------------------+

See also
========

  * powerSumSymmetricPolynomials
    -- the power sum
    symmetric polynomials

Ways to use this method:
========================

  * elementarySymmetricPolynomials(PolynomialRing)
    -- the elementary
    symmetric polynomials

entries(YoungTableau) -- returns the filling of the tableau
***********************************************************

Synopsis
========

  * Function: entries (Macaulay2Doc),
  * Usage:
        entries y
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * a list (Macaulay2Doc), returns the filling of the tableau

Description
===========

+-------------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {3,1,1},{2,0,1,4,3})|
|                                                             |
|o1 = | 2 0 1 |                                               |
|     | 4 |                                                   |
|     | 3 |                                                   |
|                                                             |
|o1 : YoungTableau                                            |
+-------------------------------------------------------------+
|i2 : entries y                                               |
|                                                             |
|o2 = {2, 0, 1, 4, 3}                                         |
|                                                             |
|o2 : List                                                    |
+-------------------------------------------------------------+

Ways to use this method:
========================

  * entries(YoungTableau) -- returns the
    filling of the tableau

firstRowDescent(YoungTableau) -- retrieves the first row descent of a young tableau
***********************************************************************************

Synopsis
========

  * Function: firstRowDescent,
  * Usage:
        firstRowDescent y
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * a, an integer (Macaulay2Doc), the row of the row descent or
        -1 if there is no row descent
      * b, an integer (Macaulay2Doc), the column of the row descent
        or -1 if there is no row descent

Description
===========

A row descent is defined to be a cell (a,b) in a tableau $T$ such that
T_(a,b)>T_(a,b+1). This method reads by columns from left to right and each
column is read from the top down until the first row descent is found. If no
row descent is found the pair (a,b)= (-1,-1) is returned.

+---------------------------------------+
|i1 : p = new Partition from {3,2,1}    |
|                                       |
|o1 = Partition{3, 2, 1}                |
|                                       |
|o1 : Partition                         |
+---------------------------------------+
|i2 : y = youngTableau(p,{1,2,3,5,4,6}) |
|                                       |
|o2 = | 1 2 3 |                         |
|     | 5 4 |                           |
|     | 6 |                             |
|                                       |
|o2 : YoungTableau                      |
+---------------------------------------+
|i3 : firstRowDescent y                 |
|                                       |
|o3 = (1, 0)                            |
|                                       |
|o3 : Sequence                          |
+---------------------------------------+
|i4 : y2 = youngTableau(p,{1,2,4,3,5,6})|
|                                       |
|o4 = | 1 2 4 |                         |
|     | 3 5 |                           |
|     | 6 |                             |
|                                       |
|o4 : YoungTableau                      |
+---------------------------------------+
|i5 : firstRowDescent y2                |
|                                       |
|o5 = (-1, -1)                          |
|                                       |
|o5 : Sequence                          |
+---------------------------------------+

Ways to use this method:
========================

  * firstRowDescent(YoungTableau), --
    retrieves the first row descent of a young tableau

garnirElement -- a SpechtModuleElement that is equal to zero
************************************************************

Synopsis
========

  * Usage:
        garnirElement(y,coef,a,b)
        garnirElement(y,coef)
        garnirElement(y)
  * Inputs:
      * y, an instance of the type YoungTableau, a tableau
        that labels a polytabloid
      * a, an integer (Macaulay2Doc), the row of the descent
      * b, a rational number (Macaulay2Doc), the column of the
        descent
      * coef, an integer (Macaulay2Doc), the coefficient of the
        polytabloid
  * Outputs:
      * an instance of the type SpechtModuleElement,
        an element which is equal to zero.

Description
===========

A Garnir element is an element which is constructed to remove row descents from
a tableau. Given a tableau $T$, the Garnir element is defined for a subset $A$
of the $i$th column and a subset $B$ of the $i+1$ column. It is defined as $
\sum_{\pi} sgn(\pi)\pi(T)$. The  $\pi$ are called transversals. They are a set
of permutations such that $S_{A \cup B}$  is the disjoint union of  $\pi(S_A
\times S_B)$.

The identity can always be chosen as a transversal for any pair of sets.
Therefore the original tableau $T$ appears along side other tableaux which are
closer to being standard. Another property is that this element is equal to
zero. Therefore the original polytabloid $e_T$ can be written as $ e_T =
-\sum_{\pi \neq id} sgn(\pi)\pi(e_T)  $

In this implementation the $i$th column is taken to be the parameter b. The set
$A$ is all the cells in the $i$th column from the a-th row to the bottom. The
set $B$ is all the cells in the $i+1$ column from the a-th row to the top.

If the number (a,b) are not specified then they are taken as the coordinates of
the first row descent of $T$

+----------------------------------------------------------------------------+
|i1 : p = new Partition from {3,2,1}                                         |
|                                                                            |
|o1 = Partition{3, 2, 1}                                                     |
|                                                                            |
|o1 : Partition                                                              |
+----------------------------------------------------------------------------+
|i2 : y = youngTableau(p,{1,2,3,5,4,6})                                      |
|                                                                            |
|o2 = | 1 2 3 |                                                              |
|     | 5 4 |                                                                |
|     | 6 |                                                                  |
|                                                                            |
|o2 : YoungTableau                                                           |
+----------------------------------------------------------------------------+
|i3 : garnirElement y                                                        |
|                                                                            |
|o3 = - | 1 2 3 | + | 1 2 3 | + | 1 4 3 | - | 1 4 3 | + | 1 5 3 | + | 1 2 3 ||
|       | 4 5 |     | 4 6 |     | 2 5 |     | 2 6 |     | 2 6 |     | 5 4 |  |
|       | 6 |       | 5 |       | 6 |       | 5 |       | 4 |       | 6 |    |
|                                                                            |
|o3 : SpechtModuleElement                                                    |
+----------------------------------------------------------------------------+

See also
========

  * firstRowDescent -- retrieves the
    first row descent of a young tableau

Ways to use garnirElement :
===========================

  * "garnirElement(YoungTableau)"
  * "garnirElement(YoungTableau,ZZ)"
  * "garnirElement(YoungTableau,ZZ,ZZ,ZZ)"

For the programmer
==================

The object garnirElement, is a method function (Macaulay2Doc).

generalizedVandermondeMatrix(List,List,PolynomialRing) -- the method for calculating generalized Vandermonde matrices
*********************************************************************************************************************

Synopsis
========

  * Function: generalizedVandermondeMatrix,
  * Usage:
        generalizedVandermondeMatrix(indices,exponents,R)
  * Inputs:
      * indices, a list (Macaulay2Doc), a list of the variables
        that appear in each column of the matrix
      * exponents, a list (Macaulay2Doc), a list of the powers that
        appear in each row of the matrix
      * R, a polynomial ring (Macaulay2Doc),
  * Outputs:
      * a matrix (Macaulay2Doc),

Description
===========

Generalized vandermonde matrices allow the power in the rows to be different
from the numbers from 0 to n-1.

+--------------------------------------------------------+
|i1 : R = QQ[x_0..x_4]                                   |
|                                                        |
|o1 = R                                                  |
|                                                        |
|o1 : PolynomialRing                                     |
+--------------------------------------------------------+
|i2 : M = generalizedVandermondeMatrix({0,2,3},{1,3,5},R)|
|                                                        |
|o2 = | x_0   x_2   x_3   |                              |
|     | x_0^3 x_2^3 x_3^3 |                              |
|     | x_0^5 x_2^5 x_3^5 |                              |
|                                                        |
|             3       3                                  |
|o2 : Matrix R  <--- R                                   |
+--------------------------------------------------------+

The determinant of these matrices divided by the Vandermonde determinant of the
same rank is equal to a schur polynomial .

+------------------------------------------------------------------+
|i3 : (determinant M)//vandermondeDeterminant({0,2,3},R)           |
|                                                                  |
|      3 2      2 3      3   2     2 2 2      3 2    2   3      2 3|
|o3 = x x x  + x x x  + x x x  + 2x x x  + x x x  + x x x  + x x x |
|      0 2 3    0 2 3    0 2 3     0 2 3    0 2 3    0 2 3    0 2 3|
|                                                                  |
|o3 : R                                                            |
+------------------------------------------------------------------+

Ways to use this method:
========================

  * generalizedVandermondeMatrix(List,List,PolynomialRing)
    -- the
    method for calculating generalized Vandermonde matrices

generatePermutationGroup(List) -- a method for generating a permutation group given a set of generators
*******************************************************************************************************

Synopsis
========

  * Function: generatePermutationGroup,
  * Usage:
        generatePermutationGroup(gens)
  * Inputs:
      * gens, a list (Macaulay2Doc), a list of permutations
  * Outputs:
      * a list (Macaulay2Doc), the group generated by the given set
        of generators

Description
===========

The method works by taking all multiplications of the elements in the set of
generators. New elements that are found are added and the process is repeated
until no new elements are found.

+-----------------------------------------------------------------------------+
|i1 : generatePermutationGroup {{1,0,2,3},{1,2,3,0}}                          |
|                                                                             |
|o1 = {{1, 2, 0, 3}, {1, 3, 2, 0}, {3, 1, 0, 2}, {0, 3, 1, 2}, {2, 1, 3, 0},  |
|     ------------------------------------------------------------------------|
|     {0, 2, 3, 1}, {2, 0, 1, 3}, {3, 0, 2, 1}, {1, 0, 3, 2}, {1, 2, 3, 0},   |
|     ------------------------------------------------------------------------|
|     {3, 0, 1, 2}, {3, 2, 1, 0}, {3, 1, 2, 0}, {0, 1, 3, 2}, {0, 2, 1, 3},   |
|     ------------------------------------------------------------------------|
|     {2, 0, 3, 1}, {2, 3, 1, 0}, {1, 0, 2, 3}, {3, 2, 0, 1}, {1, 3, 0, 2},   |
|     ------------------------------------------------------------------------|
|     {2, 1, 0, 3}, {0, 3, 2, 1}, {2, 3, 0, 1}, {0, 1, 2, 3}}                 |
|                                                                             |
|o1 : List                                                                    |
+-----------------------------------------------------------------------------+

This method is used to calculate the size of each conjugacy classes for the
groups.

Ways to use this method:
========================

  * generatePermutationGroup(List),
    -- a method for generating a permutation group given a set of generators

higherSpechtPolynomial(YoungTableau,YoungTableau,PolynomialRing) -- the higher Specht polynomial index by the pair of standard tableaux (S,T)
*********************************************************************************************************************************************

Synopsis
========

  * Function: higherSpechtPolynomial,
  * Usage:
        higherSpechtPolynomial(S,T,R)
  * Inputs:
      * S, an instance of the type YoungTableau,
      * T, an instance of the type YoungTableau,
      * R, a polynomial ring (Macaulay2Doc),
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
      * Robust, => ..., default value false, an optional argument
        for specifying the algorithm for calculating higherSpechtPolynomials
  * Outputs:
      * a ring element (Macaulay2Doc), the higher Specht
        polynomial

Description
===========

Higher Specht polynomials are a family of polynomials that form a basis of the
coinvariant algebra for the symmetric group. The coinvariant algebra is
isomorpich as a $S_n$ module to the regular representation of $S_n$. Therefore
every Specht modules appears as an irreducible module in this algebra with
multiplicity $f^\lambda= {\rm dim} \, S^\lambda $. Higher Specht polynomials
decompose this algebra into its irreducible submodules.

Higher Specht polynomials are indexed by pairs of standard tableaux of the same
size. The usual construction of these polynomials is as follows.

1. Given two tableaux (S,T) of shape $\lambda$ the index tableau i(S) is
calculated and the index monomial $x_T^{i(S)}$ is calculated. 2. The Young
symmetrizer $\sum_{\tau \in C(T)} \sum_{R(T)} sgn(\tau)\sigma$ is applied to
the index monomial.

The algorithm based on this construction can be used in this method with the
optional input Robust => true

A second algorithm  for this polynomials is based on a study on the structure
of this polynomials.

The outline of this construction is as follow.

1. Calculate the index tableau $i(S)$. 2. Calculate all row permutations of
$i(S)$ such that no entries in the same column are equal. 3. For each different
tableau $\sigma(i(S))$ in the previous step order the columns in descending
order making sure to calculate the sign of the permutation used. 4. For each
column in $\sigma(i(S))$ determine the Schur polynomial with partition $\lambda
= (a_p-p, \ldots,a_i-i ,\ldots ,a_0) $. 5. For all columns multiply the
polynomials obtained in Step 4. Multiply this by the sign obtained in Step 3.
6. For all tableaux $\sigma(i(S))$, add all polynomials obtained in Step 5. 7.
Multiply the polynomial in Step 6 by the Specht polynomial of T.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_0..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : p = new Partition from {2,2,1}                                          |
|                                                                             |
|o2 = Partition{2, 2, 1}                                                      |
|                                                                             |
|o2 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i3 : S  = youngTableau(p,{0,2,1,3,4})                                        |
|                                                                             |
|o3 = | 0 2 |                                                                 |
|     | 1 3 |                                                                 |
|     | 4 |                                                                   |
|                                                                             |
|o3 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i4 : T  = youngTableau(p,{0,1,2,3,4})                                        |
|                                                                             |
|o4 = | 0 1 |                                                                 |
|     | 2 3 |                                                                 |
|     | 4 |                                                                   |
|                                                                             |
|o4 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i5 : time higherSpechtPolynomial(S,T,R)                                      |
|     -- used 0.00296072 seconds                                              |
|                                                                             |
|      3 2          2 3      3     2        3 2    3   2      2   3           |
|o5 = x x x x  - x x x x  - x x x x  + x x x x  + x x x x  - x x x x  -       |
|      0 1 2 3    0 1 2 3    0 1 2 3    0 1 2 3    0 1 2 4    0 1 2 4         |
|     ------------------------------------------------------------------------|
|      3 2        3 2        2 3        2 3        3   2        3 2           |
|     x x x x  - x x x x  + x x x x  + x x x x  + x x x x  - x x x x  -       |
|      0 1 3 4    0 2 3 4    0 2 3 4    1 2 3 4    0 1 3 4    1 2 3 4         |
|     ------------------------------------------------------------------------|
|      3     2        3 2    3     2      3   2    2     3        2 3         |
|     x x x x  + x x x x  + x x x x  - x x x x  + x x x x  - x x x x  +       |
|      0 1 2 4    0 1 2 4    0 2 3 4    0 2 3 4    0 1 2 4    0 1 2 4         |
|     ------------------------------------------------------------------------|
|        2   3    2     3    2     3      2   3        2 3        2 3         |
|     x x x x  - x x x x  - x x x x  + x x x x  - x x x x  + x x x x          |
|      0 1 3 4    0 2 3 4    1 2 3 4    0 2 3 4    0 1 3 4    1 2 3 4         |
|                                                                             |
|o5 : R                                                                       |
+-----------------------------------------------------------------------------+
|i6 : time higherSpechtPolynomial(S,T,R, Robust => false)                     |
|     -- used 0.0011874 seconds                                               |
|                                                                             |
|      3 2          2 3      3     2        3 2    3   2      2   3           |
|o6 = x x x x  - x x x x  - x x x x  + x x x x  + x x x x  - x x x x  -       |
|      0 1 2 3    0 1 2 3    0 1 2 3    0 1 2 3    0 1 2 4    0 1 2 4         |
|     ------------------------------------------------------------------------|
|      3 2        3 2        2 3        2 3        3   2        3 2           |
|     x x x x  - x x x x  + x x x x  + x x x x  + x x x x  - x x x x  -       |
|      0 1 3 4    0 2 3 4    0 2 3 4    1 2 3 4    0 1 3 4    1 2 3 4         |
|     ------------------------------------------------------------------------|
|      3     2        3 2    3     2      3   2    2     3        2 3         |
|     x x x x  + x x x x  + x x x x  - x x x x  + x x x x  - x x x x  +       |
|      0 1 2 4    0 1 2 4    0 2 3 4    0 2 3 4    0 1 2 4    0 1 2 4         |
|     ------------------------------------------------------------------------|
|        2   3    2     3    2     3      2   3        2 3        2 3         |
|     x x x x  - x x x x  - x x x x  + x x x x  - x x x x  + x x x x          |
|      0 1 3 4    0 2 3 4    1 2 3 4    0 2 3 4    0 1 3 4    1 2 3 4         |
|                                                                             |
|o6 : R                                                                       |
+-----------------------------------------------------------------------------+
|i7 : time higherSpechtPolynomial(S,T,R, Robust => false, AsExpression =>     |
|     -- used 0.00398065 seconds                                              |
|                                                                             |
|o7 = (- x  + x )(- x  + x )(- x  + x )(- x  + x )((x  + x  + x )(x )(x )     |
|         0    2     0    4     2    4     1    3    0    2    4   3   1      |
|                                                                             |
|o7 : Expression of class Product                                             |
|-----------------------------------------------------------------------------|
|true)                                                                        |
|                                                                             |
|                                                                             |
|+ (x )(x )(x ))                                                              |
|    4   2   0                                                                |
+-----------------------------------------------------------------------------+

See also
========

  * spechtPolynomial
    -- the Specht polynomial indexed by a standard tableau
  * indexMonomial
    -- a monomial that represents an index tableau
  * columnStabilizer -- the column
    stabilizer of the tableau
  * rowStabilizer -- the row stabilizer
    of the tableau
  * rowPermutationTableaux, --
    the list of row permutations without repetitions in columns

Ways to use this method:
========================

  * higherSpechtPolynomial(YoungTableau,YoungTableau,PolynomialRing),
    -- the higher Specht polynomial index by the pair of standard tableaux
    (S,T)

higherSpechtPolynomials -- a method that gives sets of higher Specht polynomials
********************************************************************************

Synopsis
========

  * Usage:
        higherSpechtPolynomial(S,R)
        higherSpechtPolynomial(S,standard,R)
        higherSpechtPolynomial(p,R)
        higherSpechtPolynomial(R)
  * Inputs:
      * S, an instance of the type YoungTableau,
      * R, a polynomial ring (Macaulay2Doc),
      * standard, an instance of the type TableauList, The
        list of standard tableaux of the same shape as S
      * p, an instance of the type Partition (Macaulay2Doc),
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
      * Robust, => ..., default value false, an optional argument
        for specifying the algorithm for calculating higherSpechtPolynomials
  * Outputs:
      * a hash table (Macaulay2Doc), a hash table with
        multiple levels depending on the input

Description
===========

This methods returns higher Specht polynomials sorted in hash tables depending
on the input received.

If the input is just a YoungTableau $S$ of shape $\lambda$ and a PolynomialRing
then it calculates the standard tableaux $ST(\lambda)$ and then stores all
polynomials $F_T^S$ such that $T \in ST(\lambda)$. The polynomials are stored
in a hash table with the filling of $T$ as the key.

The list $ST(\lambda)$ can be provided as an input. This is used to avoid
repeating this calculation when this method is called multiple times with the
same shape $\lambda$.

This set forms a basis for one of the copies of the Specht module $S^\lambda$.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_0..x_3]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : p = new Partition from {2,2}                                            |
|                                                                             |
|o2 = Partition{2, 2}                                                         |
|                                                                             |
|o2 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i3 : S  = youngTableau(p,{0,2,1,3})                                          |
|                                                                             |
|o3 = | 0 2 |                                                                 |
|     | 1 3 |                                                                 |
|                                                                             |
|o3 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i4 : higherSpechtPolynomials(S,R)                                            |
|                                                                             |
|                                2            2      2      2        2        |
|o4 = HashTable{{0, 1, 2, 3} => x x x  - x x x  + x x x  - x x x  - x x x  +  |
|                                0 1 2    0 1 2    0 1 3    0 2 3    1 2 3    |
|                                2          2      2          2        2      |
|               {0, 2, 1, 3} => x x x  - x x x  - x x x  + x x x  + x x x  -  |
|                                0 1 2    0 1 2    0 1 3    0 1 3    0 2 3    |
|                                                                             |
|o4 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|   2          2        2                                                     |
|x x x  - x x x  + x x x }                                                    |
| 0 2 3    0 1 3    1 2 3                                                     |
|   2          2        2                                                     |
|x x x  - x x x  + x x x                                                      |
| 1 2 3    0 2 3    1 2 3                                                     |
+-----------------------------------------------------------------------------+
|i5 : stan = standardTableaux p                                               |
|                                                                             |
|o5 = {| 0 1 |, | 0 2 |}                                                      |
|      | 2 3 |  | 1 3 |                                                       |
|                                                                             |
|o5 : TableauList                                                             |
+-----------------------------------------------------------------------------+
|i6 : higherSpechtPolynomials(S, stan,R)                                      |
|                                                                             |
|                                2            2      2      2        2        |
|o6 = HashTable{{0, 1, 2, 3} => x x x  - x x x  + x x x  - x x x  - x x x  +  |
|                                0 1 2    0 1 2    0 1 3    0 2 3    1 2 3    |
|                                2          2      2          2        2      |
|               {0, 2, 1, 3} => x x x  - x x x  - x x x  + x x x  + x x x  -  |
|                                0 1 2    0 1 2    0 1 3    0 1 3    0 2 3    |
|                                                                             |
|o6 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|   2          2        2                                                     |
|x x x  - x x x  + x x x }                                                    |
| 0 2 3    0 1 3    1 2 3                                                     |
|   2          2        2                                                     |
|x x x  - x x x  + x x x                                                      |
| 1 2 3    0 2 3    1 2 3                                                     |
+-----------------------------------------------------------------------------+

If only a partition $\lambda$ and a polynomial ring is given then the method
calculates $ST(\lambda)$. Then it calculates all polynomials $F_T^S$ such that
$S,T \in ST(\lambda)$.

This is a basis for the isotypical component $X_\lambda$ in the coinvariant
algebra of the symmetric group.

The polynomials are stored by calling for each $S \in ST(\lambda) $ the
previous method. The output is stored in another hash table with the key being
the filling of the tableau $S$.

+-----------------------------------------------------------------------------+
|i7 : higherSpechtPolynomials(p,R)                                            |
|                                                                             |
|o7 = HashTable{{0, 1, 2, 3} => HashTable{{0, 1, 2, 3} => x x  -              |
|                                                          0 1                |
|                                         {0, 2, 1, 3} => x x  -              |
|                                                          0 2                |
|                                                          2                  |
|               {0, 2, 1, 3} => HashTable{{0, 1, 2, 3} => x x x               |
|                                                          0 1 2              |
|                                                          2                  |
|                                         {0, 2, 1, 3} => x x x               |
|                                                          0 1 2              |
|                                                                             |
|o7 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|x x  - x x  + x x }                                            }             |
| 1 2    0 3    2 3                                                           |
|x x  - x x  + x x                                                            |
| 1 2    0 3    1 3                                                           |
|       2      2      2        2          2          2        2               |
|- x x x  + x x x  - x x x  - x x x  + x x x  - x x x  + x x x }              |
|   0 1 2    0 1 3    0 2 3    1 2 3    0 2 3    0 1 3    1 2 3               |
|     2      2          2        2        2          2        2               |
|- x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                |
|   0 1 2    0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3               |
+-----------------------------------------------------------------------------+

Finally if just a polynomial ring $R$ with $n$ elements is provided then the
method calculates all higher Specht polynomials for all partitions $\lambda$ of
$n$.

The polynomials are calculated by calling the previous method for every
partition of $n$ and storing the values in a new hash table with the key being
the partition.

+-----------------------------------------------------------------------------+
|i8 : higherSpechtPolynomials(R)                                              |
|                                                                             |
|                                                                             |
|o8 = HashTable{Partition{1, 1, 1, 1} => HashTable{{0, 1,                     |
|                                                                             |
|                                                                             |
|               Partition{2, 1, 1} => HashTable{{0, 1, 2,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                               {0, 2, 1,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                               {0, 3, 1,                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{2, 2} => HashTable{{0, 1, 2, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 2, 1, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{3, 1} => HashTable{{0, 1, 2, 3}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 1, 3, 2}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                            {0, 2, 3, 1}                     |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|               Partition{4} => HashTable{{0, 1, 2, 3} =>                     |
|                                                                             |
|o8 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|                                                                             |
|2, 3} => HashTable{{0, 1,                                                    |
|                                                                             |
|                                                                             |
|3} => HashTable{{0, 1, 2,                                                    |
|                                                                             |
|                                                                             |
|                {0, 2, 1,                                                    |
|                                                                             |
|                                                                             |
|                {0, 3, 1,                                                    |
|                                                                             |
|                                                                             |
|3} => HashTable{{0, 1, 2,                                                    |
|                                                                             |
|                                                                             |
|                {0, 2, 1,                                                    |
|                                                                             |
|                                                                             |
|                {0, 3, 1,                                                    |
|                                                                             |
|                                                                             |
|2} => HashTable{{0, 1, 2,                                                    |
|                                                                             |
|                                                                             |
|                {0, 2, 1,                                                    |
|                                                                             |
|                                                                             |
|                {0, 3, 1,                                                    |
|                                                                             |
|=> HashTable{{0, 1, 2, 3}                                                    |
|                                                                             |
|             {0, 2, 1, 3}                                                    |
|                                                                             |
|                                                                             |
|=> HashTable{{0, 1, 2, 3}                                                    |
|                                                                             |
|                                                                             |
|             {0, 2, 1, 3}                                                    |
|                                                                             |
|=> HashTable{{0, 1, 2, 3}                                                    |
|                                                                             |
|             {0, 1, 3, 2}                                                    |
|                                                                             |
|             {0, 2, 3, 1}                                                    |
|                                                                             |
|=> HashTable{{0, 1, 2, 3}                                                    |
|                                                                             |
|             {0, 1, 3, 2}                                                    |
|                                                                             |
|             {0, 2, 3, 1}                                                    |
|                                                                             |
|=> HashTable{{0, 1, 2, 3}                                                    |
|                                                                             |
|             {0, 1, 3, 2}                                                    |
|                                                                             |
|             {0, 2, 3, 1}                                                    |
|                                                                             |
|HashTable{{0, 1, 2, 3} =>                                                    |
|-----------------------------------------------------------------------------|
|          3 2      2 3      3   2      3 2    2   3      2 3    3 2      2 3 |
|2, 3} => x x x  - x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x|
|          0 1 2    0 1 2    0 1 2    0 1 2    0 1 2    0 1 2    0 1 3    0 1 |
|         2        2    2      2        2      2                              |
|3} => - x x  + x x  + x x  - x x  - x x  + x x }            }                |
|         0 2    0 2    0 3    2 3    0 3    2 3                              |
|         2        2    2      2        2      2                              |
|3} => - x x  + x x  + x x  - x x  - x x  + x x                               |
|         0 1    0 1    0 3    1 3    0 3    1 3                              |
|         2        2    2      2        2      2                              |
|2} => - x x  + x x  + x x  - x x  - x x  + x x                               |
|         0 1    0 1    0 2    1 2    0 2    1 2                              |
|         2            2    2          2          2        2                  |
|3} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x }                 |
|         0 1 2    0 1 2    0 1 3    1 2 3    0 1 3    1 2 3                  |
|         2          2      2        2            2        2                  |
|3} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                   |
|         0 1 2    0 1 2    0 2 3    1 2 3    0 2 3    1 2 3                  |
|         2          2      2        2          2        2                    |
|2} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                   |
|         0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3                  |
|         2 2        2 2    2 2      2 2        2 2    2   2                  |
|3} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x }                 |
|         0 1 2    0 1 2    0 1 3    1 2 3    0 1 3    1 2 3                  |
|         2   2      2 2    2 2      2 2        2 2      2 2                  |
|3} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                   |
|         0 1 2    0 1 2    0 2 3    1 2 3    0 2 3    1 2 3                  |
|         2   2      2 2    2   2    2   2      2 2      2 2                  |
|2} => - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                   |
|         0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3                  |
|=> x x  - x x  - x x  + x x }                                            }   |
|    0 1    1 2    0 3    2 3                                                 |
|=> x x  - x x  - x x  + x x                                                  |
|    0 2    1 2    0 3    1 3                                                 |
|    2            2      2      2        2          2          2        2     |
|=> x x x  - x x x  + x x x  - x x x  - x x x  + x x x  - x x x  + x x x }    |
|    0 1 2    0 1 2    0 1 3    0 2 3    1 2 3    0 2 3    0 1 3    1 2 3     |
|    2          2      2          2        2        2          2        2     |
|=> x x x  - x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x      |
|    0 1 2    0 1 2    0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3     |
|=> - x  + x }                  }                                             |
|      0    3                                                                 |
|=> - x  + x                                                                  |
|      0    2                                                                 |
|=> - x  + x                                                                  |
|      0    1                                                                 |
|=> - x x  - x x  + x x  + x x }                                              |
|      0 1    0 2    1 3    2 3                                               |
|=> - x x  + x x  - x x  + x x                                                |
|      0 1    1 2    0 3    2 3                                               |
|=> - x x  + x x  - x x  + x x                                                |
|      0 2    1 2    0 3    1 3                                               |
|=> - x x x  + x x x }                                                        |
|      0 1 2    1 2 3                                                         |
|=> - x x x  + x x x                                                          |
|      0 1 3    1 2 3                                                         |
|=> - x x x  + x x x                                                          |
|      0 2 3    1 2 3                                                         |
|1}}                                                                          |
|-----------------------------------------------------------------------------|
|     3 2      3 2      2 3      2 3      3   2      3 2    3   2    3   2    |
|  + x x x  - x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x  +  |
|3    0 2 3    1 2 3    0 2 3    1 2 3    0 1 3    0 1 3    0 2 3    1 2 3    |
|-----------------------------------------------------------------------------|
|   3 2      3 2    2   3      2 3    2   3    2   3      2 3      2 3        |
|x x x  - x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x }}}     |
| 0 2 3    1 2 3    0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3        |
+-----------------------------------------------------------------------------+

Ways to use higherSpechtPolynomials :
=====================================

  * "higherSpechtPolynomials(Partition,PolynomialRing)"
  * "higherSpechtPolynomials(PolynomialRing)"
  * "higherSpechtPolynomials(YoungTableau,PolynomialRing)"
  * "higherSpechtPolynomials(YoungTableau,TableauList,PolynomialRing)"

For the programmer
==================

The object higherSpechtPolynomials, is a
method function with options (Macaulay2Doc).

hookLengthFormula(Partition) -- a formula for the number of standard tableaux
*****************************************************************************

Synopsis
========

  * Function: hookLengthFormula,
  * Usage:
        hookLengthFormula(p)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc), a
        partition that indexes a Specht Module
  * Outputs:
      * an integer (Macaulay2Doc), the dimension of the Specht module
        S_\lambda

Description
===========

The hook length formula is a method that counts the number of standard tableaux
of a given shape p. Therefore it counts the dimension of the associated Specht
module.

For each Ferrer diagram and each cell (a,b) the hook at (a,b) is the set of
cells that comprise (a,b) the cells that are below (a,b), and the cells that
are to right of (a,b). The hook length of a hook h(a,b) is defined of the
number of cells in the hook.

If p is a partition of n then the hook length formula for p is $
n!/\prod_{(a,b)} h(a,b) $

+------------------------------------------------------------+
|i1 : p = new Partition from {3,2}                           |
|                                                            |
|o1 = Partition{3, 2}                                        |
|                                                            |
|o1 : Partition                                              |
+------------------------------------------------------------+
|i2 : standardTableaux p                                     |
|                                                            |
|o2 = {| 0 1 2 |, | 0 1 3 |, | 0 1 4 |, | 0 2 3 |, | 0 2 4 |}|
|      | 3 4 |    | 2 4 |    | 2 3 |    | 1 4 |    | 1 3 |   |
|                                                            |
|o2 : TableauList                                            |
+------------------------------------------------------------+
|i3 : hookLengthFormula p                                    |
|                                                            |
|o3 = 5                                                      |
+------------------------------------------------------------+

Ways to use this method:
========================

  * hookLengthFormula(Partition) -- a
    formula for the number of standard tableaux

indexMonomial(YoungTableau,YoungTableau,PolynomialRing) -- a monomial that represents an index tableau
******************************************************************************************************

Synopsis
========

  * Function: indexMonomial,
  * Usage:
        indexMonomial(S,T,R)
  * Inputs:
      * S, an instance of the type YoungTableau,
      * T, an instance of the type YoungTableau,
      * R, a polynomial ring (Macaulay2Doc),
  * Outputs:
      * a ring element (Macaulay2Doc),

Description
===========

The index monomial is used in the construction of higher Specht polynomials. To
calculate the index monomial first the index tableau of $S$, $i(S)$ is
calculated. Then the monomial is calculated as $x_T^{i(S)}$. This is a monomial
with the variables as they appear in T with the exponents that appear in
$i(S)$.

+-------------------------------------+
|i1 : R = QQ[x_0..x_4]                |
|                                     |
|o1 = R                               |
|                                     |
|o1 : PolynomialRing                  |
+-------------------------------------+
|i2 : p = new Partition from {2,2,1}  |
|                                     |
|o2 = Partition{2, 2, 1}              |
|                                     |
|o2 : Partition                       |
+-------------------------------------+
|i3 : S  = youngTableau(p,{0,2,1,3,4})|
|                                     |
|o3 = | 0 2 |                         |
|     | 1 3 |                         |
|     | 4 |                           |
|                                     |
|o3 : YoungTableau                    |
+-------------------------------------+
|i4 : T  = youngTableau(p,{0,1,2,3,4})|
|                                     |
|o4 = | 0 1 |                         |
|     | 2 3 |                         |
|     | 4 |                           |
|                                     |
|o4 : YoungTableau                    |
+-------------------------------------+
|i5 : ind = indexTableau(S)           |
|                                     |
|o5 = | 0 1 |                         |
|     | 1 2 |                         |
|     | 3 |                           |
|                                     |
|o5 : YoungTableau                    |
+-------------------------------------+
|i6 : indexMonomial(S,T,R)            |
|                                     |
|          2 3                        |
|o6 = x x x x                         |
|      1 2 3 4                        |
|                                     |
|o6 : R                               |
+-------------------------------------+

See also
========

  * indexTableau -- the index tableau
    for a given tableau

Ways to use this method:
========================

  * indexMonomial(YoungTableau,YoungTableau,PolynomialRing)
    -- a
    monomial that represents an index tableau

indexTableau(YoungTableau) -- the index tableau for a given tableau
*******************************************************************

Synopsis
========

  * Function: indexTableau,
  * Usage:
        indexTableau(y)
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * an instance of the type YoungTableau, the index
        tableau

Description
===========

The index tableau is a filling obtained by the original tableau using the
reading word. To every element in the reading word a number is given
recursively in the following way. f(0) = 0 and f(k+1) = f(k) if k+1 appear to
the right of k. Otherwise f(k+1)= f(k)+1.

Finally the entries in the original tableau are replaced by the values of the
function f.

+------------------------------------+
|i1 : p = new Partition from {3,2}   |
|                                    |
|o1 = Partition{3, 2}                |
|                                    |
|o1 : Partition                      |
+------------------------------------+
|i2 : y = youngTableau(p,{0,2,3,1,4})|
|                                    |
|o2 = | 0 2 3 |                      |
|     | 1 4 |                        |
|                                    |
|o2 : YoungTableau                   |
+------------------------------------+
|i3 : readingWord(y)                 |
|                                    |
|o3 = {1, 0, 4, 2, 3}                |
|                                    |
|o3 : List                           |
+------------------------------------+
|i4 : indexTableau(y)                |
|                                    |
|o4 = | 0 1 1 |                      |
|     | 1 2 |                        |
|                                    |
|o4 : YoungTableau                   |
+------------------------------------+

Ways to use this method:
========================

  * indexTableau(YoungTableau) -- the
    index tableau for a given tableau

innerProduct(ZZ,MutableMatrix,MutableMatrix) -- calculates the inner product for the characters of S_n
******************************************************************************************************

Synopsis
========

  * Function: innerProduct,
  * Usage:
        innerProduct(n,X,Y)
  * Inputs:
      * n, an integer (Macaulay2Doc), the degree of the symmetric
        group
      * X, a mutable matrix (Macaulay2Doc), a matrix row
        that represents a character of S_n
      * Y, a mutable matrix (Macaulay2Doc), a matrix row
        that represents a character of S_n
  * Outputs:
      * an integer (Macaulay2Doc), the inner product of the two
        characters X and Y

Description
===========

The character table for two characters $X$ and $Y$ of $G$ is calculated using
the formula $<X,Y> = \sum_{g \in G} X(g)Y(g) = \sum_{C \in Cl(G)}
|C|X(g_C)Y(g_C) $ where the second sum is taken over all conjugacy classes of
$G$ and $g_c$ is an element in the conjugacy class.

As an example we calculate the inner product between the character of the
regular representation of $S_4$ and the character indexed by partition {2,1,1}.

+---------------------------------------+
|i1 : n = 4                             |
|                                       |
|o1 = 4                                 |
+---------------------------------------+
|i2 : X = mutableMatrix  {{0,0,0,0,24}} |
|                                       |
|o2 = | 0 0 0 0 24 |                    |
|                                       |
|o2 : MutableMatrix                     |
+---------------------------------------+
|i3 : Y = mutableMatrix  {{1,0,-1,-1,3}}|
|                                       |
|o3 = | 1 0 -1 -1 3 |                   |
|                                       |
|o3 : MutableMatrix                     |
+---------------------------------------+
|i4 : innerProduct(4,X,Y)               |
|                                       |
|o4 = 3                                 |
+---------------------------------------+

As expected this inner product is equal to 3.

Ways to use this method:
========================

  * innerProduct(ZZ,MutableMatrix,MutableMatrix)
    -- calculates the
    inner product for the characters of S_n

listToTableau(List) -- constructs a Young Tableau from a doubly nested list of numbers
**************************************************************************************

Synopsis
========

  * Function: listToTableau,
  * Usage:
        listToTableau(l)
  * Inputs:
      * l, a list (Macaulay2Doc), a doubly nested list of numbers
  * Outputs:
      * an instance of the type YoungTableau, a Young
        Tableau, such that the rows corresponds to the elements of l

Description
===========

+-----------------------------+
|i1 : l = {{0,1,2},{3,4},{5}} |
|                             |
|o1 = {{0, 1, 2}, {3, 4}, {5}}|
|                             |
|o1 : List                    |
+-----------------------------+
|i2 : listToTableau l         |
|                             |
|o2 = | 0 1 2 |               |
|     | 3 4 |                 |
|     | 5 |                   |
|                             |
|o2 : YoungTableau            |
+-----------------------------+

Ways to use this method:
========================

  * listToTableau(List) -- constructs a Young
    Tableau from a doubly nested list of numbers

matrixRepresentation -- the matrix representation of a permutation in the Specht Module
***************************************************************************************

Synopsis
========

  * Usage:
        matrixRepresentation(perm,standard)
        matrixRepresentation(perm,parti)
        matrixRepresentation(standard)
        matrixRepresentation(parti)
  * Inputs:
      * perm, a list (Macaulay2Doc), a permutation
      * standard, an instance of the type TableauList, a
        list of standard tableaux of a given partition
      * parti, an instance of the type Partition (Macaulay2Doc),
        a partition
  * Outputs:
      * a matrix (Macaulay2Doc), the matrix representation of the
        given permutation in the Specht module index by the given partition
      * a hash table (Macaulay2Doc), if no permutation is
        given then it calculates the representation for all the permutations in
        S_n

Description
===========

The matrix representation for a permutation is calculated by studying the
action of the permutation on the basis of standard polytabloids.

The permuted polytabloids are then written as a linear combination of standard
polytabloids using the straightening algorithm.

+--------------------------------------+
|i1 : p = new Partition from {2,1}     |
|                                      |
|o1 = Partition{2, 1}                  |
|                                      |
|o1 : Partition                        |
+--------------------------------------+
|i2 : l = {0,2,1}                      |
|                                      |
|o2 = {0, 2, 1}                        |
|                                      |
|o2 : List                             |
+--------------------------------------+
|i3 : matrixRepresentation (l,p)       |
|                                      |
|o3 = | 0 1 |                          |
|     | 1 0 |                          |
|                                      |
|              2        2              |
|o3 : Matrix QQ  <--- QQ               |
+--------------------------------------+
|i4 : stan = standardTableaux p        |
|                                      |
|o4 = {| 0 1 |, | 0 2 |}               |
|      | 2 |    | 1 |                  |
|                                      |
|o4 : TableauList                      |
+--------------------------------------+
|i5 : matrixRepresentation (l,stan)    |
|                                      |
|o5 = | 0 1 |                          |
|     | 1 0 |                          |
|                                      |
|              2        2              |
|o5 : Matrix QQ  <--- QQ               |
+--------------------------------------+
|i6 : matrixRepresentation stan        |
|                                      |
|o6 = HashTable{{0, 1, 2} => | 1 0 |  }|
|                            | 0 1 |   |
|               {0, 2, 1} => | 0 1 |   |
|                            | 1 0 |   |
|               {1, 0, 2} => | 1  0  | |
|                            | -1 -1 | |
|               {1, 2, 0} => | 0  1  | |
|                            | -1 -1 | |
|               {2, 0, 1} => | -1 -1 | |
|                            | 1  0  | |
|               {2, 1, 0} => | -1 -1 | |
|                            | 0  1  | |
|                                      |
|o6 : HashTable                        |
+--------------------------------------+

Ways to use matrixRepresentation :
==================================

  * "matrixRepresentation(List,Partition)"
  * "matrixRepresentation(List,TableauList)"
  * "matrixRepresentation(Partition)"
  * "matrixRepresentation(TableauList)"

For the programmer
==================

The object matrixRepresentation, is a method function (Macaulay2Doc).

multinomial -- a formula for the multinomial coefficient
********************************************************

Synopsis
========

  * Usage:
        multinomial(tal)
        multinomial(l)
        multinomial(p)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc), a
        partition
      * l, a list (Macaulay2Doc), a list of non negative numbers
      * tal, a tally (Macaulay2Doc), a tally from a list
  * Outputs:
      * an integer (Macaulay2Doc), the multinomial coefficient of the
        given list

Description
===========

The multinomial coefficient is a generalization of the binomial coefficient.
Given a list of number $k_1,\ldots,k_l$, the multinomial coefficient is
$n!/(k_1!\ldots,k_l!)$ where $n = \sum k_i$. The multinomial coefficient is
calculated because it gives the numbers of tabloids for a given partition.

The list of numbers used to calculate the multinomial can be given as a list, a
partition or a tally. This last option was added to optimize this calculation.

+-----------------------------------------------------------+
|i1 : p = new Partition from {2,2}                          |
|                                                           |
|o1 = Partition{2, 2}                                       |
|                                                           |
|o1 : Partition                                             |
+-----------------------------------------------------------+
|i2 : tabloids p                                            |
|                                                           |
|o2 = {| 0 1 |, | 0 2 |, | 0 3 |, | 1 2 |, | 1 3 |, | 2 3 |}|
|      | 2 3 |  | 1 3 |  | 1 2 |  | 0 3 |  | 0 2 |  | 0 1 | |
|                                                           |
|o2 : TableauList                                           |
+-----------------------------------------------------------+
|i3 : multinomial {2,2}                                     |
|                                                           |
|o3 = 6                                                     |
+-----------------------------------------------------------+
|i4 : multinomial tally {2,2}                               |
|                                                           |
|o4 = 6                                                     |
+-----------------------------------------------------------+

Ways to use multinomial :
=========================

  * "multinomial(List)"
  * "multinomial(Partition)"
  * "multinomial(Tally)"

For the programmer
==================

The object multinomial, is a method function (Macaulay2Doc).

numColumns(YoungTableau) -- returns the number of columns of a tableau
**********************************************************************

Synopsis
========

  * Function: numColumns (Macaulay2Doc),
  * Usage:
        numcols y
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * an integer (Macaulay2Doc), the number of columns of the
        tableau

Description
===========

+---------------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {2,1,1,1},{2,0,1,4,3})|
|                                                               |
|o1 = | 2 0 |                                                   |
|     | 1 |                                                     |
|     | 4 |                                                     |
|     | 3 |                                                     |
|                                                               |
|o1 : YoungTableau                                              |
+---------------------------------------------------------------+
|i2 : numcols y                                                 |
|                                                               |
|o2 = 2                                                         |
+---------------------------------------------------------------+

Ways to use this method:
========================

  * numColumns(YoungTableau) -- returns
    the number of columns of a tableau

numRows(YoungTableau) -- returns the number of rows of a tableau
****************************************************************

Synopsis
========

  * Function: numRows (Macaulay2Doc),
  * Usage:
        numrows y
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * an integer (Macaulay2Doc), the number of rows of the tableau

Description
===========

+---------------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {2,1,1,1},{2,0,1,4,3})|
|                                                               |
|o1 = | 2 0 |                                                   |
|     | 1 |                                                     |
|     | 4 |                                                     |
|     | 3 |                                                     |
|                                                               |
|o1 : YoungTableau                                              |
+---------------------------------------------------------------+
|i2 : numrows y                                                 |
|                                                               |
|o2 = 4                                                         |
+---------------------------------------------------------------+

Ways to use this method:
========================

  * numRows(YoungTableau) -- returns the
    number of rows of a tableau

permutationMatrix(List) -- a permutation matrix generator
*********************************************************

Synopsis
========

  * Function: permutationMatrix,
  * Usage:
        permutationMatrix (permutation)
  * Inputs:
      * permutation, a list (Macaulay2Doc), a list of numbers from
        0..n-1 that represents a permutation
  * Outputs:
      * a matrix (Macaulay2Doc), the matrix that represents the
        given permutation

Description
===========

+------------------------------+
|i1 : permutationMatrix {0,1,2}|
|                              |
|o1 = | 1 0 0 |                |
|     | 0 1 0 |                |
|     | 0 0 1 |                |
|                              |
|              3        3      |
|o1 : Matrix QQ  <--- QQ       |
+------------------------------+
|i2 : permutationMatrix {1,0,2}|
|                              |
|o2 = | 0 1 0 |                |
|     | 1 0 0 |                |
|     | 0 0 1 |                |
|                              |
|              3        3      |
|o2 : Matrix QQ  <--- QQ       |
+------------------------------+
|i3 : permutationMatrix {1,2,0}|
|                              |
|o3 = | 0 1 0 |                |
|     | 0 0 1 |                |
|     | 1 0 0 |                |
|                              |
|              3        3      |
|o3 : Matrix QQ  <--- QQ       |
+------------------------------+

Ways to use this method:
========================

  * permutationMatrix(List) -- a
    permutation matrix generator

permutationSign -- the sign of a permutation
********************************************

Synopsis
========

  * Usage:
        permutationSign(perm)
  * Inputs:
      * perm, a list (Macaulay2Doc), a permutation of the numbers
        from 0 to n-1
      * p, an instance of the type Partition (Macaulay2Doc), a
        partition that represents the conjugacy class of the permutation
  * Outputs:
      * an integer (Macaulay2Doc), 1 or -1, the sign of the
        permutation

Description
===========

Every permutation can be decompose as a product of transpositions. This
decomposition is not unique, however the parity of the number of transpositions
that appears in the decomposition is always the same. Thus the sign is defined
as $(-1)^l$ where $l$ is the number of transposition.

The sign can be calculated if the cycle decomposition if known because the sign
is multiplicative and the sign of a $k$-cycle is $(-1)^(k+1)$. This is the way
the method permutationSign calculates the sign.

The sign permutation is used to calculate polytabloids and higher Specht
polynomials.

+----------------------------------+
|i1 : perm = {2,1,4,3,0}           |
|                                  |
|o1 = {2, 1, 4, 3, 0}              |
|                                  |
|o1 : List                         |
+----------------------------------+
|i2 : c = cycleDecomposition perm  |
|                                  |
|o2 = {{0, 2, 4}, {1}, {3}}        |
|                                  |
|o2 : List                         |
+----------------------------------+
|i3 : permutationSign perm         |
|                                  |
|o3 = 1                            |
+----------------------------------+
|i4 : perm2 = {4,2,1,0,3}          |
|                                  |
|o4 = {4, 2, 1, 0, 3}              |
|                                  |
|o4 : List                         |
+----------------------------------+
|i5 : c2 = cycleDecomposition perm2|
|                                  |
|o5 = {{0, 4, 3}, {1, 2}}          |
|                                  |
|o5 : List                         |
+----------------------------------+
|i6 : permutationSign perm2        |
|                                  |
|o6 = -1                           |
+----------------------------------+

Ways to use permutationSign :
=============================

  * "permutationSign(List)"
  * "permutationSign(Partition)"

For the programmer
==================

The object permutationSign, is a method function (Macaulay2Doc).

permutePolynomial -- permutes a RingElement or a PolynomialExpression of RingElements
*************************************************************************************

Synopsis
========

  * Usage:
        permutePolynomial(perm,f)
        permutePolynomial(perm,prod)
        permutePolynomial(perm,s)
        permutePolynomial(perm,pow)
        permutePolynomial(perm,minu)
  * Inputs:
      * f, a ring element (Macaulay2Doc), a ring element
      * prod, a product expression (Macaulay2Doc), a Product
        expression
      * s, a sum expression (Macaulay2Doc), a sum expression
      * pow, a power expression (Macaulay2Doc), a power expression
      * minu, a minus expression (Macaulay2Doc), a minus
        expression
      * perm, a permutation
  * Outputs:
      * a ring element (Macaulay2Doc), the result of
        applying perm to f
      * an expression (Macaulay2Doc), the result of applying
        f to the given expression

Description
===========

This method applies permutations to polynomial ring elements by permuting the
variables. Therefore the size of the permutation must be equal to the number of
generators of the ring of the elements.

+---------------------------+
|i1 : R = QQ[x_0..x_4]      |
|                           |
|o1 = R                     |
|                           |
|o1 : PolynomialRing        |
+---------------------------+
|i2 : l = {1,0,2,3,4}       |
|                           |
|o2 = {1, 0, 2, 3, 4}       |
|                           |
|o2 : List                  |
+---------------------------+
|i3 : f = x_1*x_2*x_3       |
|                           |
|o3 = x x x                 |
|      1 2 3                |
|                           |
|o3 : R                     |
+---------------------------+
|i4 : permutePolynomial(l,f)|
|                           |
|o4 = x x x                 |
|      0 2 3                |
|                           |
|o4 : R                     |
+---------------------------+

This method can also permute polynomial expressions that are constructed from
ring elements either by sums, products or powers.

+-------------------------------------------------+
|i5 : ex = factor(x_1*x_2*x_3)+factor(x_1*x_3*x_4)|
|                                                 |
|o5 = (x )(x )(x ) + (x )(x )(x )                 |
|       3   2   1      4   3   1                  |
|                                                 |
|o5 : Expression of class Sum                     |
+-------------------------------------------------+
|i6 : permutePolynomial(l,ex)                     |
|                                                 |
|o6 = (x )(x )(x ) + (x )(x )(x )                 |
|       3   2   0      4   3   0                  |
|                                                 |
|o6 : Expression of class Sum                     |
+-------------------------------------------------+

Ways to use permutePolynomial :
===============================

  * "permutePolynomial(List,Minus)"
  * "permutePolynomial(List,Power)"
  * "permutePolynomial(List,Product)"
  * "permutePolynomial(List,RingElement)"
  * "permutePolynomial(List,Sum)"

For the programmer
==================

The object permutePolynomial, is a method function (Macaulay2Doc).

powerSumSymmetricPolynomials(PolynomialRing) -- the power sum symmetric polynomials
***********************************************************************************

Synopsis
========

  * Function: powerSumSymmetricPolynomials,
  * Usage:
        powerSumSymmetricPolynomials(R)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc), a
        polynomial ring
  * Outputs:
      * a list (Macaulay2Doc), the list of power sum symmetric
        polynomials

Description
===========

As an example the power sum symmetric polynomials of a ring with three
variables are calculated. These polynomials form a basis for the ring of
symmetric polynomials.

+-----------------------------------------------+
|i1 : R = QQ[x_1..x_3]                          |
|                                               |
|o1 = R                                         |
|                                               |
|o1 : PolynomialRing                            |
+-----------------------------------------------+
|i2 : powerSumSymmetricPolynomials R            |
|                                               |
|                     2    2    2   3    3    3 |
|o2 = {x  + x  + x , x  + x  + x , x  + x  + x }|
|       1    2    3   1    2    3   1    2    3 |
|                                               |
|o2 : List                                      |
+-----------------------------------------------+

See also
========

  * elementarySymmetricPolynomials
    -- the elementary
    symmetric polynomials

Ways to use this method:
========================

  * powerSumSymmetricPolynomials(PolynomialRing)
    -- the power sum
    symmetric polynomials

readingWord(YoungTableau) -- gives the reading word of a given tableau
**********************************************************************

Synopsis
========

  * Function: readingWord,
  * Usage:
        readingWord(y)
  * Inputs:
      * y, an instance of the type YoungTableau, a young
        tableau
  * Outputs:
      * a list (Macaulay2Doc), the reading word of the Young
        tableau

Description
===========

The reading word of a tableau is word obtain by reading each column from the
bottom up and reading the columns from left to right. The reading word is used
to calculate the cocharge statistic of the given tableau.

+------------------------------------+
|i1 : p = new Partition from {3,2}   |
|                                    |
|o1 = Partition{3, 2}                |
|                                    |
|o1 : Partition                      |
+------------------------------------+
|i2 : y = youngTableau(p,{0,2,3,1,4})|
|                                    |
|o2 = | 0 2 3 |                      |
|     | 1 4 |                        |
|                                    |
|o2 : YoungTableau                   |
+------------------------------------+
|i3 : readingWord(y)                 |
|                                    |
|o3 = {1, 0, 4, 2, 3}                |
|                                    |
|o3 : List                           |
+------------------------------------+

Ways to use this method:
========================

  * readingWord(YoungTableau) -- gives
    the reading word of a given tableau

representationMultiplicity -- the number of secondary invariants in a given irreducible representation
******************************************************************************************************

Synopsis
========

  * Usage:
        representationMultiplicity(tal,p,charTable)
        representationMultiplicity(tal,p)
  * Inputs:
      * tal, a tally (Macaulay2Doc), a tally with the number of
        elements in each conjugacy class of the group
      * p, an instance of the type Partition (Macaulay2Doc), a
        partition that indexes an irreducible representation
      * charTable, an instance of the type CharacterTable,
        optionally the character table of S_n. If it is not
        provided then it is calculated by the method
  * Outputs:
      * an integer (Macaulay2Doc), the multiplicity of the trivial
        representation of the group described by tal in the irreducible
        representation of S_n indexed by p

Description
===========

Since the given group $H$ is a subgroup of $S_n$, the restrictions of the
Specht modules to $H$ are also $H$-modules. The number of copies of the trivial
representation of $H$ in each of these modules can be found by the formula for
the inner product for characters applied to the characters of the previous
modules.

$\frac{1}{|H|}\sum_{C \in Cl(H)} |C|X_\lambda(\sigma_c)$

$Cl(H)$ is the set of conjugacy classes of $H$, $|C|$ is the size of the
conjugacy class and $\sigma_c$ is a representative of the conjugacy class $C$
and $X$ is the character of the representation.

Therefore it is necessary to calculate the cardinality of each conjugacy class.
This is done by checking the conjugacy class of each element in the group. For
the following example a subgroup of $S_6$ isomorphic to $S_4$ is taken.

+-----------------------------------------------------------------------------+
|i1 : genList = {{1,2,3,0,5,4},{0,4,2,5,1,3}}                                 |
|                                                                             |
|o1 = {{1, 2, 3, 0, 5, 4}, {0, 4, 2, 5, 1, 3}}                                |
|                                                                             |
|o1 : List                                                                    |
+-----------------------------------------------------------------------------+
|i2 : H = generatePermutationGroup(genList)                                   |
|                                                                             |
|o2 = {{1, 4, 3, 5, 0, 2}, {0, 1, 2, 3, 4, 5}, {2, 3, 0, 1, 4, 5}, {1, 5, 3,  |
|     ------------------------------------------------------------------------|
|     4, 2, 0}, {5, 0, 4, 2, 3, 1}, {4, 0, 5, 2, 1, 3}, {2, 5, 0, 4, 1, 3},   |
|     ------------------------------------------------------------------------|
|     {4, 3, 5, 1, 2, 0}, {2, 4, 0, 5, 3, 1}, {3, 0, 1, 2, 5, 4}, {5, 3, 4, 1,|
|     ------------------------------------------------------------------------|
|     0, 2}, {1, 2, 3, 0, 5, 4}, {1, 0, 3, 2, 4, 5}, {3, 2, 1, 0, 4, 5}, {5,  |
|     ------------------------------------------------------------------------|
|     2, 4, 0, 1, 3}, {4, 2, 5, 0, 3, 1}, {3, 4, 1, 5, 2, 0}, {3, 5, 1, 4, 0, |
|     ------------------------------------------------------------------------|
|     2}, {5, 1, 4, 3, 2, 0}, {4, 1, 5, 3, 0, 2}, {0, 5, 2, 4, 3, 1}, {0, 3,  |
|     ------------------------------------------------------------------------|
|     2, 1, 5, 4}, {2, 1, 0, 3, 5, 4}, {0, 4, 2, 5, 1, 3}}                    |
|                                                                             |
|o2 : List                                                                    |
+-----------------------------------------------------------------------------+

For the given group a tally with the size of each conjugacy class must be
provided. This tally is inputted to the representationMultiplicityMethod

+------------------------------------------------+
|i3 : tal := tally apply (H,h->conjugacyClass h);|
+------------------------------------------------+

The number of secondary invariants is equal to the index of the group $[S_6:H]
= 30$. We check that this is true by calculating the number of trivial
representations of $H$ in each irreducible representation of $S_6$. We take
into account that there are multiple copies of each representation by
multiplying the values with the number of copies which is given by the
hookLengthFormula.

+-----------------------------------------------------------------------------+
|i4 : partis = partitions 6;                                                  |
+-----------------------------------------------------------------------------+
|i5 : time multi = hashTable apply (partis, p-> p=>                           |
|     -- used 0.435337 seconds                                                |
|                                                                             |
|o5 = HashTable{Partition{1, 1, 1, 1, 1, 1} => 1}                             |
|               Partition{2, 1, 1, 1, 1} => 0                                 |
|               Partition{2, 2, 1, 1} => 1                                    |
|               Partition{2, 2, 2} => 1                                       |
|               Partition{3, 1, 1, 1} => 0                                    |
|               Partition{3, 2, 1} => 0                                       |
|               Partition{3, 3} => 1                                          |
|               Partition{4, 1, 1} => 0                                       |
|               Partition{4, 2} => 1                                          |
|               Partition{5, 1} => 0                                          |
|               Partition{6} => 1                                             |
|                                                                             |
|o5 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|representationMultiplicity(tal,p))                                           |
+-----------------------------------------------------------------------------+
|i6 : sum (partis, p -> multi#p * hookLengthFormula p)                        |
|                                                                             |
|o6 = 30                                                                      |
+-----------------------------------------------------------------------------+

The submodules where the multiplicity is zero will not be taken into account
when applying the secondaryInvariants algorithm. The character table can be
inputted to the method as well. This is made to avoid calculating the same
character table for every partition of $n$. Example charTable = characterTable
6 time multi2 = hashTable apply (partis, p-> p=>
representationMultiplicity(tal,p,charTable))

See also
========

  * generatePermutationGroup -- a
    method for generating a permutation group given a set of generators
  * conjugacyClass -- the conjugacy class of a
    permutation

Ways to use representationMultiplicity :
========================================

  * "representationMultiplicity(Tally,Partition)"
  * "representationMultiplicity(Tally,Partition,CharacterTable)"

For the programmer
==================

The object representationMultiplicity, is a
method function (Macaulay2Doc).

Robust -- an optional argument for specifying the algorithm for calculating higherSpechtPolynomials
***************************************************************************************************

Description
===========

This optional argument decides between two ways to calculate
higherSpechtPolynomials. If it is set to to true then a calculation involving
the row and column stabilizers is used. If it is set to false then another
strategy is used. This strategy is based on a representation of higher specht
polynomials as a multiplication of simpler Specht polynomials and Schur
polynomials.

+--------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                     |
|                                                                          |
|o1 = R                                                                    |
|                                                                          |
|o1 : PolynomialRing                                                       |
+--------------------------------------------------------------------------+
|i2 : p = new Partition from {2,2}                                         |
|                                                                          |
|o2 = Partition{2, 2}                                                      |
|                                                                          |
|o2 : Partition                                                            |
+--------------------------------------------------------------------------+
|i3 : S = youngTableau(p,{0,2,1,3})                                        |
|                                                                          |
|o3 = | 0 2 |                                                              |
|     | 1 3 |                                                              |
|                                                                          |
|o3 : YoungTableau                                                         |
+--------------------------------------------------------------------------+
|i4 : T = youngTableau(p,{0,1,2,3})                                        |
|                                                                          |
|o4 = | 0 1 |                                                              |
|     | 2 3 |                                                              |
|                                                                          |
|o4 : YoungTableau                                                         |
+--------------------------------------------------------------------------+
|i5 : higherSpechtPolynomial(S,T,R,Robust => true)                         |
|                                                                          |
|      2            2      2      2        2          2          2        2|
|o5 = x x x  - x x x  + x x x  - x x x  - x x x  + x x x  - x x x  + x x x |
|      1 2 3    1 2 3    1 2 4    1 3 4    2 3 4    1 3 4    1 2 4    2 3 4|
|                                                                          |
|o5 : R                                                                    |
+--------------------------------------------------------------------------+
|i6 : higherSpechtPolynomial(S,T,R,Robust => false)                        |
|                                                                          |
|      2            2      2      2        2          2          2        2|
|o6 = x x x  - x x x  + x x x  - x x x  - x x x  + x x x  - x x x  + x x x |
|      1 2 3    1 2 3    1 2 4    1 3 4    2 3 4    1 3 4    1 2 4    2 3 4|
|                                                                          |
|o6 : R                                                                    |
+--------------------------------------------------------------------------+

This option is used mainly to check that the alternative algorithm proposed was
correct.

See also
========

  * higherSpechtPolynomial,
    -- the higher Specht polynomial index by the pair of standard tableaux
    (S,T)

Functions with optional argument named Robust :
===============================================

  * "higherSpechtPolynomial(...,Robust=>...)"
  * "higherSpechtPolynomials(...,Robust=>...)"
  * "secondaryInvariants(...,Robust=>...)"

For the programmer
==================

The object Robust, is a symbol (Macaulay2Doc).

rowPermutationTableaux(YoungTableau) -- the list of row permutations without repetitions in columns
***************************************************************************************************

Synopsis
========

  * Function: rowPermutationTableaux,
  * Usage:
        rowPermutationTableaux(y)
  * Inputs:
      * y, an instance of the type YoungTableau, a
        tableau, generally the index tableau of a standard tableau
  * Outputs:
      * a list (Macaulay2Doc), the list of all row permutations of
        the tableau

Description
===========

This list of tableaux is used to calculate more efficiently higher Specht
polynomials. If any of the columns has a repetition then the associated term in
the higher Specht polynomial for this row permutation is zero. This is why such
permutations are omitted.

+--------------------------------------+
|i1 : p = new Partition from {3,2}     |
|                                      |
|o1 = Partition{3, 2}                  |
|                                      |
|o1 : Partition                        |
+--------------------------------------+
|i2 : y = youngTableau(p, {0,2,1,3,4}) |
|                                      |
|o2 = | 0 2 1 |                        |
|     | 3 4 |                          |
|                                      |
|o2 : YoungTableau                     |
+--------------------------------------+
|i3 : ind = indexTableau y             |
|                                      |
|o3 = | 0 1 0 |                        |
|     | 2 2 |                          |
|                                      |
|o3 : YoungTableau                     |
+--------------------------------------+
|i4 : rowPermutationTableaux ind       |
|                                      |
|o4 = {| 0 0 1 |, | 0 1 0 |, | 1 0 0 |}|
|      | 2 2 |    | 2 2 |    | 2 2 |   |
|                                      |
|o4 : List                             |
+--------------------------------------+

Ways to use this method:
========================

  * rowPermutationTableaux(YoungTableau)
    -- the list of row permutations
    without repetitions in columns

rowStabilizer(YoungTableau) -- the row stabilizer of the tableau
****************************************************************

Synopsis
========

  * Function: rowStabilizer,
  * Usage:
        rowStabilizer(y)
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * a list (Macaulay2Doc), a dubly nested list with the
        permutations in the row stabilizer

Description
===========

The row stabilizer of a tableau is the group of the permutations that fixes the
rows of the tableau. In terms of tabloids it is the stabilizer of a tabloid
under the action of the group of permutations S_n. This group is used in the
calculation of polytabloids and Specht polynomials.

+-------------------------------------------------------------------------+
|i1 : p = new Partition from {2,2,1}                                      |
|                                                                         |
|o1 = Partition{2, 2, 1}                                                  |
|                                                                         |
|o1 : Partition                                                           |
+-------------------------------------------------------------------------+
|i2 : y = youngTableau(p,{0,3,1,4,2})                                     |
|                                                                         |
|o2 = | 0 3 |                                                             |
|     | 1 4 |                                                             |
|     | 2 |                                                               |
|                                                                         |
|o2 : YoungTableau                                                        |
+-------------------------------------------------------------------------+
|i3 : rowStabilizer y                                                     |
|                                                                         |
|o3 = {{0, 1, 2, 3, 4}, {0, 4, 2, 3, 1}, {3, 1, 2, 0, 4}, {3, 4, 2, 0, 1}}|
|                                                                         |
|o3 : List                                                                |
+-------------------------------------------------------------------------+

Ways to use this method:
========================

  * rowStabilizer(YoungTableau) -- the
    row stabilizer of the tableau

schurPolynomial(List,Partition,PolynomialRing) -- a method for constructing Schur polynomials
*********************************************************************************************

Synopsis
========

  * Function: schurPolynomial,
  * Usage:
        schurPolynomial(indices,parti,R)
  * Inputs:
      * indices, a list (Macaulay2Doc), a list of the variables
        that appear in each column of the matrix
      * parti, an instance of the type Partition (Macaulay2Doc),
        a partition that indexes the schur polynomial
      * R, a polynomial ring (Macaulay2Doc),
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
      * Strategy (missing documentation) => ..., default value
        "semistandard_tableaux", null
  * Outputs:
      * a matrix (Macaulay2Doc),

Description
===========

Generalized vandermonde matrices allow the power in the rows to be different
from the numbers from 0 to n-1.

+--------------------------------------------------------+
|i1 : R = QQ[x_0..x_4]                                   |
|                                                        |
|o1 = R                                                  |
|                                                        |
|o1 : PolynomialRing                                     |
+--------------------------------------------------------+
|i2 : M = generalizedVandermondeMatrix({0,2,3},{1,3,5},R)|
|                                                        |
|o2 = | x_0   x_2   x_3   |                              |
|     | x_0^3 x_2^3 x_3^3 |                              |
|     | x_0^5 x_2^5 x_3^5 |                              |
|                                                        |
|             3       3                                  |
|o2 : Matrix R  <--- R                                   |
+--------------------------------------------------------+

The determinant of these matrices divided by the Vandermonde determinant of the
same rank is equal to a schur polynomial .

+------------------------------------------------------------------+
|i3 : (determinant M)//vandermondeDeterminant({0,2,3},R)           |
|                                                                  |
|      3 2      2 3      3   2     2 2 2      3 2    2   3      2 3|
|o3 = x x x  + x x x  + x x x  + 2x x x  + x x x  + x x x  + x x x |
|      0 2 3    0 2 3    0 2 3     0 2 3    0 2 3    0 2 3    0 2 3|
|                                                                  |
|o3 : R                                                            |
+------------------------------------------------------------------+

Ways to use this method:
========================

  * schurPolynomial(List,Partition,PolynomialRing)
    -- a method for
    constructing Schur polynomials

secondaryInvariants(List,PolynomialRing) -- the set of secondaryInvariants of a permutation group
*************************************************************************************************

Synopsis
========

  * Function: secondaryInvariants,
  * Usage:
        secondaryInvariants(gens,R)
  * Inputs:
      * gens, a list (Macaulay2Doc), a list of generators of a
        permutation group H
      * R, a polynomial ring (Macaulay2Doc), a
        polynomial ring
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
      * Robust, => ..., default value false, an optional argument
        for specifying the algorithm for calculating higherSpechtPolynomials
  * Outputs:
      * a hash table (Macaulay2Doc), the set of secondary
        invariants indexed by the representation in which they are found

Description
===========

Let $R$ be a polynomial ring with $n$ generators. The secondary invariants of a
group $H$ in $GL(n)$ are the set of generators of the ring of invariants $R^H$
as a $K[\theta_1,\ldots,\theta_n]$-module. For this algorithm we always take
the primary invariants $\theta_1,\ldots,\theta_n$ to be the elementary
symmetric polynomials $e_1,\ldots e_n$ so that the ring
$K[\theta_1,\ldots,\theta_n]$ is the ring of symmetric polynomials.

The secondary invariants are obtained by considering the quotient ring
$R/(e_1,\ldots,e_n)$. This quotient ring is called the coinvariant algebre of
$S_n$. This quotient is isomorphic to the regular representation of $S_n$. In
particular as a K-vector space it is finite dimensional. In this space we find
the subspace that is invariant under the action of $H$. The secondary
invariants correspond to a basis for this space.

The advantage of this algorithm is that it decomposes the regular
representation into its irreducible representation by means of the higher
Specht polynomials basis. This reduces significantly de dimension of the vector
spaces in which the invariant spaces must be found.

To illustrate we calculate the secondary invariants for a subgroup of
cardinality 24 in $S_6$.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_6]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : genList = {{1,2,3,0,5,4},{0,4,2,5,1,3}}                                 |
|                                                                             |
|o2 = {{1, 2, 3, 0, 5, 4}, {0, 4, 2, 5, 1, 3}}                                |
|                                                                             |
|o2 : List                                                                    |
+-----------------------------------------------------------------------------+
|i3 : time seco = secondaryInvariants(genList,R);                             |
|(Partition{6}, Ambient_Dimension, 1, Rank, 1)                                |
|(Partition{5, 1}, Ambient_Dimension, 5, Rank, 0)                             |
|(Partition{4, 2}, Ambient_Dimension, 9, Rank, 1)                             |
|(Partition{4, 1, 1}, Ambient_Dimension, 10, Rank, 0)                         |
|(Partition{3, 3}, Ambient_Dimension, 5, Rank, 1)                             |
|(Partition{3, 2, 1}, Ambient_Dimension, 16, Rank, 0)                         |
|(Partition{3, 1, 1, 1}, Ambient_Dimension, 10, Rank, 0)                      |
|(Partition{2, 2, 2}, Ambient_Dimension, 5, Rank, 1)                          |
|(Partition{2, 2, 1, 1}, Ambient_Dimension, 9, Rank, 1)                       |
|(Partition{2, 1, 1, 1, 1}, Ambient_Dimension, 5, Rank, 0)                    |
|(Partition{1, 1, 1, 1, 1, 1}, Ambient_Dimension, 1, Rank, 1)                 |
|     -- used 0.904008 seconds                                                |
+-----------------------------------------------------------------------------+
|i4 : seco#(new Partition from {2,2,2})                                       |
|                                                                             |
|                                                                             |
|o4 = HashTable{{0, 1, 2, 3, 4, 5} => HashTable{0 =>                          |
|                                                                             |
|                                                                             |
|               {0, 1, 2, 4, 3, 5} => HashTable{0 =>                          |
|                                                                             |
|                                                                             |
|               {0, 2, 1, 3, 4, 5} => HashTable{0 =>                          |
|                                                                             |
|                                                                             |
|               {0, 2, 1, 4, 3, 5} => HashTable{0 =>                          |
|                                                                             |
|                                                                             |
|               {0, 3, 1, 4, 2, 5} => HashTable{0 =>                          |
|                                                                             |
|                                                                             |
|o4 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|  2 2 2       4 2   2     2   2 2     2 2     2   4   2   2   2     2 2   1 2|
|- -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x |
|  3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1|
|2 3 2 2     4 2 3 2     2 2 2 3     4 3 2   2   2 2 3   2   2 3   2 2   2   3|
|-x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  + -x x |
|3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2|
|  1 3 3 2       2 3 2 3       1 2 3 3       1 3 3   2     2 3   3 2     1   3|
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|1 3 2 2       2 2 3 2       1 2 2 3       2 3 2   2     1 2 3   2     1 3   2|
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x |
|3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3|
|  1 4 3 2 2     1 3 4 2 2     2 4 2 3 2     1 2 4 3 2     2 3 2 4 2     1 2 3|
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|-----------------------------------------------------------------------------|
| 2       2 2   2     1   2 2     1 2 2       2 2 2       1 2 2       1 2   2 |
|x x x  - -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x|
| 2 3 5   3 1 2 3 5   3 1 2 3 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 2 4 |
| 2 2   2 2   3 2   4   2 3 2   2 2 2   3   4 2   2 3   2   2 2 3   1 3 2 2   |
|x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  |
| 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 4   3 1 2 3 5 |
| 3 2     1 3 2   3     2 2 3   3     1 3   2 3     2   3 2 3     1 2   3 3   |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
| 2     1   3 2 2     1 2   3 2     2   2 3 2     1 2 2   3     2 2   2 3     |
|x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + |
| 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   |
| 4 2     1 4 2 2 3     2 2 4 2 3     1 2 2 4 3     1 3 2 2 4     2 2 3 2 4   |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|-----------------------------------------------------------------------------|
|    2   2 2     1 2   2     2 2   2     1   2 2     1   2 2     1 2     2   2|
|  - -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  + -x x x x  - -|
|5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 3 4 5   3 2 3 4 5   3 1 2 3 5   3|
|  2 2 3 2     1 2 2 3     2 3 2 2     1 2 3 2     1 3 2 2     1 3 2 2     1 2|
|+ -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  - -x |
|  3 1 2 3 5   3 1 2 3 5   3 1 2 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1|
|  1   2 3 3     2 3 3     2   4 3   3   2   2   3 3   2   2 3     3 2   4   3|
|- -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|1   2 2 3     1 3 2     2   1 2 3     2   2 3   2   2   1   3 2   2   2 2   3|
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x |
|3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3|
|  1 2 2 3 4     2 4 3 2   2   1 3 4 2   2   1 4 2 3   2   1 2 4 3   2   1 3 2|
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|-----------------------------------------------------------------------------|
|   2   2   1     2 2   2 2     2   1   2   2   1 2     2   1 2     2   1   2 |
|x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  + -x x x x  + -x x x|
| 1 2 3 5   3 1 2 3 5   3 1 2 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 3 |
| 3 2     2 2 3 2     1 2 2 3     2 2 2 3     1 2 2 3     2 3 2   2   1 2 3   |
|x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x|
| 3 4 5   3 2 3 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 2 3 5   3 1 2 3 |
|   3 2   2     3 3 2   1 3 2     3   1 2 3     3   2 3   2   3   1   3 2   3 |
|x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|   2   1   2 3   2   1 3     2 2   2   3   2 2   1     3 2 2   1 2     3 2   |
|x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  - |
| 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   |
| 4   2   2 2 3 4   2   1 4 3   2 2   2 3 4   2 2   1 4   3 2 2   2   4 3 2 2 |
|x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|-----------------------------------------------------------------------------|
|  2   2   2   2   1     2 2                                                  |
| x  - -x x x x  + -x x x x                                                   |
|4 5   3 2 3 4 5   3 1 2 4 5                                                  |
|2   1 3   2 2   1   3 2 2                                                    |
|  - -x x x x  - -x x x x  -                                                  |
|5   3 1 2 3 5   3 1 2 3 5                                                    |
|  2 2   3   3   1   2 3   3                                                  |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 5   3 1 2 3 4 5                                                  |
|2   2   3 2   1     2 3 2                                                    |
|-x x x x x  + -x x x x x  -                                                  |
|3 1 2 3 4 5   3 1 2 3 4 5                                                    |
|  1 3   4 2 2   1   3 4 2 2                                                  |
|- -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 5   3 1 2 3 4 5                                                  |
|-----------------------------------------------------------------------------|
|  2     2 2   1     2 2   1 2 2       2 2   2     1   2 2     1 2 2       2 2|
|- -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  - -x |
|  3 1 3 4 5   3 2 3 4 5   3 1 2 3 6   3 1 2 3 6   3 1 2 3 6   3 1 2 4 6   3 1|
|1 2   3 2   2   2 3 2   1 3 2   2   2 2 3   2   1 3 2   2   2 3 2   2   1 2 3|
|-x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x |
|3 1 2 3 5   3 1 2 3 5   3 1 2 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 3|
|  1 3     2 3   2   3   2 3   1     3 2 3   1 2     3 3   2   2   3 3   1    |
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|2 2 2     3   4 2   2   3   2   2 2   3   2 2     2 3   4   2   2 3   2     2|
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x |
|3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3|
|  1 4 2   3 2   1 2 4   3 2   2 4   2 3 2   1   4 2 3 2   2 2   4 3 2   1   2|
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|-----------------------------------------------------------------------------|
| 2       1 2 2       1 2   2     2   2 2     1 2   2     2 2   2     1   2 2 |
|x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x|
| 3 4 6   3 2 3 4 6   3 1 2 4 6   3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 3 4 |
|   2   1 2 3   2   1 3   2 2   1   3 2 2   2 3   2 2   1 3   2 2   2   3 2 2 |
|x x  - -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  |
| 4 5   3 2 3 4 5   3 1 2 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 3 4 5 |
| 2 3 3   1 3 3 2       2 3 2 3       1 2 3 3       1 3 3   2     2 3   3 2   |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  |
| 3 4 5   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6 |
| 2 3   1 3 2 2       2 2 3 2       1 2 2 3       2 3 2   2     1 2 3   2     |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + |
| 4 5   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   |
| 4 3 2   2 3 2   4 2   1 2 3   4 2   1 3   2 4 2   1   3 2 4 2   1 2   3 4 2 |
|x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|-----------------------------------------------------------------------------|
|    1   2 2     2 2 2       4 2 2       2 2 2       2 2 2       4 2 2       2|
|  + -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -|
|6   3 2 3 4 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3|
|  1   3 2 2   2 2   3 2   1   2 3 2   1 2   3 2   1 2   3 2   1   2 3 2   2  |
|- -x x x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  - -x x x x  + -x |
|  3 2 3 4 5   3 1 2 4 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 5   3 1 3 4 5   3 2|
|  1   3 3 2     1 3 2   3     2 2 3   3     1 3   2 3     2   3 2 3     1 2  |
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2|
|1 3   2 2     1   3 2 2     1 2   3 2     2   2 3 2     1 2 2   3     2 2   2|
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3|
|  2   2 3 4 2   1 4 2 2   3   2 2 4 2   3   1 2 2 4   3   2 4 2   2 3   1 2 4|
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|-----------------------------------------------------------------------------|
| 2 2       1 2   2     1   2 2     2 2   2     1 2   2     2   2 2     1   2 |
|x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x|
| 3 4 5 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 3 5 6   3 2 3 |
| 2 3 2   1 2 2   3   2 2   2 3   1   2 2 3   1 2 2   3   2 2 2   3   1 2 2   |
|x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x|
| 3 4 5   3 1 2 3 5   3 1 2 3 5   3 1 2 3 5   3 1 2 4 5   3 1 3 4 5   3 2 3 4 |
| 3 3     1   2 3 3     2 3 3 2       4 3 2 3       2 2 3 3       2 3 3 2     |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  |
| 3 4 6   3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6 |
| 3     1   2 2 3     2 3 2 2       4 2 3 2       2 2 2 3       4 3 2 2       |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - |
| 4 6   3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   |
|   2 3   1 4   2 2 3   1   4 2 2 3   1 2   4 2 3   2   2 4 2 3   1 2 2   4 3 |
|x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|-----------------------------------------------------------------------------|
|2     1 2   2     2 2   2                                                    |
| x  + -x x x x  - -x x x x                                                   |
|5 6   3 1 4 5 6   3 2 4 5 6                                                  |
|3   1 2   2 3   2   2 2 3                                                    |
|  - -x x x x  + -x x x x  -                                                  |
|5   3 1 2 4 5   3 1 2 4 5                                                    |
|  4 3 3 2       2 3 3 2                                                      |
|- -x x x x x  + -x x x x x                                                   |
|  3 1 3 4 5 6   3 2 3 4 5 6                                                  |
|2 2 3 2       2 3 2 2                                                        |
|-x x x x x  - -x x x x x  -                                                  |
|3 1 2 4 5 6   3 1 3 4 5 6                                                    |
|  2 2   2 4 3   1   2 2 4 3                                                  |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 5   3 1 2 3 4 5                                                  |
|-----------------------------------------------------------------------------|
|  1 2   2     1   2 2     2   2 2     1   2 2     1 2     2   2   2   2   1  |
|+ -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x |
|  3 3 4 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 2 3 6   3 1 2 3 6   3 1|
|1 2   2 3   2 2   2 3   1   2 2 3   1   2 2 3   1 3 2 2     2 2 3 2     1 2 2|
|-x x x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x |
|3 1 3 4 5   3 2 3 4 5   3 1 3 4 5   3 2 3 4 5   3 1 2 3 6   3 1 2 3 6   3 1 2|
|  2 3 2 3       4 2 3 3       2 3 2 3       4 3 2 3       2 2 3 3       2 2 3|
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x |
|  3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3|
|2 3 2 2       2 2 3 2       4 2 3 2       2 2 2 3       4 2 2 3       2 2 2 3|
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4|
|  2 3 2 2   4   4 2 3 2   4   2 2 2 3   4   4 3 2   2 4   2 2 3   2 4   2 3  |
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x |
|  3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2|
|-----------------------------------------------------------------------------|
|   2 2   2 2     2   1   2   2   1 2     2   1 2     2   1   2   2   2   2   |
|x x x  - -x x x x  + -x x x x  + -x x x x  + -x x x x  + -x x x x  - -x x x x|
| 2 3 6   3 1 2 4 6   3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 3 4 6   3 2 3 4 |
| 3     2 3 2 2     1 2 3 2     1 3 2 2     1 3 2 2     1 2 3 2     2 2 3 2   |
|x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  - -x x x x  + -x x x x  |
| 3 6   3 1 2 4 6   3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 3 4 6   3 2 3 4 6 |
| 3       1 3 3   2     2 3   3 2     1   3 3 2     1 3 3   2     2 3 3   2   |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  |
| 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 3 4 5 6 |
|       1 3 2   2     2 2 3   2     1 3   2 2     2   3 2 2     1 2   3 2     |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + |
| 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   |
| 2 2 4   2   3 2 2 4   2 2   3 2 4   4   2 3 2 4   2 2 2   3 4   4 2   2 3 4 |
|x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5   3 1 2 3 4 5 |
|-----------------------------------------------------------------------------|
|2   1     2 2   2     2 2   1     2 2   1 2     2   1   2   2   2 2     2   1|
|  + -x x x x  - -x x x x  + -x x x x  + -x x x x  + -x x x x  - -x x x x  + -|
|6   3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3|
|  1 2 2 3     2 2 2 3     1 2 2 3     1 3 2 2     1 2 3 2     2 3 2 2     1 3|
|- -x x x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x |
|  3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3 2|
|  1 3 3   2     1 3   3 2     2   3 3 2     1 3   3 2     2 3   3 2     1   3|
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3|
|1   2 3 2     2 3 2   2     1 2 3   2     1 3 2   2     1 3 2   2     1 2 3  |
|-x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + -x x x |
|3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4|
|  2   2 2 3 4   1 4 3 2 2     1 3 4 2 2     2 4 2 3 2     1 2 4 3 2     2 3 2|
|+ -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x |
|  3 1 2 3 4 5   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2|
|-----------------------------------------------------------------------------|
| 2     2   2   2   2   1   2   2   1 2     2   2 2     2   1 2     2   1   2 |
|x x x x  - -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x|
| 2 3 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 4 |
| 2 2     2 2 3 2     1 2 3 2     1 3 2 2     2 3 2 2     1 3 2 2     1 2 3 2 |
|x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x|
| 3 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 4 5 |
| 3 2     1   3 3 2     2 3 2   3     1 2 3   3     1 3   2 3     1   3 2 3   |
|x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6 |
| 2     2 2 3   2     2 3   2 2     1   3 2 2     1 3   2 2     1 3   2 2     |
|x x  - -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + |
| 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   |
| 4 2     1 2 3 4 2     1 4 2 2 3     2 2 4 2 3     1 2 2 4 3     1 3 2 2 4   |
|x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  |
| 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6 |
|-----------------------------------------------------------------------------|
|  2   2   2   2   1   2   2                                                  |
| x  - -x x x x  + -x x x x                                                   |
|5 6   3 2 4 5 6   3 3 4 5 6                                                  |
|    2 2 3 2     1 2 3 2                                                      |
|  + -x x x x  - -x x x x  +                                                  |
|6   3 2 4 5 6   3 3 4 5 6                                                    |
|  1 2   3 3     2   2 3 3                                                    |
|- -x x x x x  + -x x x x x                                                   |
|  3 1 2 3 5 6   3 1 2 3 5 6                                                  |
|1   3 2 2     2   3 2 2                                                      |
|-x x x x x  - -x x x x x  +                                                  |
|3 1 3 4 5 6   3 2 3 4 5 6                                                    |
|  2 2 3 2 4     1 2 2 3 4                                                    |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 6   3 1 2 3 4 6                                                  |
|-----------------------------------------------------------------------------|
|  2     2 2   4     2 2   2     2 2   2     2 2   4     2 2   2     2 2      |
|- -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x }     |
|  3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6      |
|2 2 2 3     4 2 2 3     2 2 2 3     2 2 2 3     4 2 2 3     2 2 2 3     2 3 2|
|-x x x x  - -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x |
|3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 2|
|  1 3 2   3     2 2 3   3     1 3 2   3     2 3 2   3     1 2 3   3     1 2 3|
|- -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x |
|  3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3|
|1 2   3 2     1   2 3 2     2 2   3 2     1 2   3 2     2   2 3 2     1   2 3|
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4|
|  1 4 3 2 2     2 3 4 2 2     1 4 2 3 2     2 2 4 3 2     1 3 2 4 2     1 2 3|
|- -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x |
|  3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2|
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|   2   1 2 3   2   1 3   2 2   1   3 2 2   1 2   3 2   2   2 3 2   1 3 2   2 |
|x x  - -x x x x  - -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  |
| 3 6   3 1 2 3 6   3 1 2 3 6   3 1 2 3 6   3 1 2 3 6   3 1 2 3 6   3 1 2 4 6 |
|   3     1 3   2 3     1   3 2 3     2 3   2 3     1 3   2 3     2   3 2 3   |
|x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6 |
| 2     1 2 2   3     2 2   2 3     1   2 2 3     1 2 2   3     2 2 2   3     |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + |
| 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 3 4 5 6   |
| 4 2     2 4 3 2 2     1 3 4 2 2     1 4 3 2 2     1 4 3 2 2     1 3 4 2 2   |
|x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  |
| 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6 |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|  2 2 3   2   1 3 2   2   2 3 2   2   1 2 3   2   1 2 3   2   1 3   2 2   1  |
|+ -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  - -x x x x  - -x |
|  3 1 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 3 4 6   3 2 3 4 6   3 1 2 4 6   3 1|
|  1   3 2 3     2 2   3 3     1   2 3 3     1 2   3 3     1 2   3 3     1   2|
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x |
|  3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3|
|1 2 2   3     1 2   2 3     2   2 2 3     1 2   2 3     2 2   2 3     1   2 2|
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4|
|  2 3 4 2 2     2 4 2 3 2     1 2 4 3 2     1 4 2 3 2     1 4 2 3 2     1 2 4|
|+ -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x |
|  3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3|
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
| 3 2 2   2 3   2 2   1 3   2 2   2   3 2 2   1   3 2 2   2 2   3 2   1   2 3 |
|x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x|
| 2 4 6   3 1 3 4 6   3 2 3 4 6   3 1 3 4 6   3 2 3 4 6   3 1 2 4 6   3 1 2 4 |
| 3 3     2   2 3 3     2 3 3     2   4 3   3   2   2   3 3   2   2 3     3 2 |
|x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6 |
| 3     1   2 2 3     1 3 2     2   1 2 3     2   2 3   2   2   1   3 2   2   |
|x x  + -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - |
| 5 6   3 2 3 4 5 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   |
| 3 2     2 2 4 3 2     1 3 2 4 2     1 2 3 4 2     2 3 2 4 2     1 3 2 4 2   |
|x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6 |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|2   1 2   3 2   1 2   3 2                                                    |
|  - -x x x x  - -x x x x  -                                                  |
|6   3 1 3 4 6   3 2 3 4 6                                                    |
|  4   3   3 2   2     3 3 2                                                  |
|- -x x x x x  + -x x x x x                                                   |
|  3 1 2 3 4 6   3 1 2 3 4 6                                                  |
|2 2   3   2   1   2 3   2                                                    |
|-x x x x x  + -x x x x x  +                                                  |
|3 1 2 3 4 6   3 1 2 3 4 6                                                    |
|  2 2 3 4 2     1 2 3 4 2                                                    |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 3 4 5 6   3 2 3 4 5 6                                                  |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|1   2 3 2   2   2 3 2   1 3 2   2   1 2 3   2   2 3 2   2   1 3 2   2        |
|-x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x         |
|3 1 3 4 6   3 2 3 4 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6        |
|  1 3 3     2   2 3   3   2   1   3 3   2   1 3 3     2   2 3 3     2        |
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x         |
|  3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 3 4 5 6        |
|1 3     2 2   2   3   2 2   1     3 2 2   1 2     3 2   2   2   3 2          |
|-x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|  2 4 2 2 3     4 2 4 2 3     2 2 2 4 3     4 4 2 2 3     2 2 4 2 3          |
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x         |
|  3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|  2 2 3   2   1 2 3   2   1 3 2   2   2 3 2   2   1 3 2   2   1 2 3   2   2 2|
|+ -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x |
|  3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 4 5 6   3 2|
|  1 3 3     2   1 3   3   2   2   3 3   2   1 3   3   2   2 3   3   2   1   3|
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3|
|1     2 3 2   1 3 2     2   2 2 3     2   1 3   2   2   2   3 2   2   1 2   3|
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x |
|3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3|
|  2 4 2 2 3     2 4 2 2 3     2 2 4 2 3     4 2 4 2 3     2 2 2 4 3     4 2 2|
|+ -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3|
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
| 3   2   1 2 3   2   2 3   2 2   2   3 2 2   4 3   2 2   2 3   2 2   4   3 2 |
|x x x  - -x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x|
| 4 5 6   3 3 4 5 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 3 5 |
| 3   2   1   3 3   2   1 3     3 2   2   3   3 2   1     3 3 2   2 3     3 2 |
|x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6 |
|   2   1   2 3   2   2 3 2     2   1 2 3     2   1 3 2     2   1 3 2     2   |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + |
| 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   |
| 4 3     2 2 2 4 3     1 3 2 2 4     2 2 3 2 4     1 2 2 3 4     2 3 2 2 4   |
|x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6 |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|2   2   3 2 2   2 3   2 2                                                    |
|  + -x x x x  + -x x x x  -                                                  |
|6   3 2 3 5 6   3 1 4 5 6                                                    |
|  1   3   3 2   1 3     3 2                                                  |
|- -x x x x x  - -x x x x x                                                   |
|  3 1 2 4 5 6   3 1 3 4 5 6                                                  |
|1 2 3     2   2 2 3     2                                                    |
|-x x x x x  - -x x x x x  -                                                  |
|3 1 3 4 5 6   3 2 3 4 5 6                                                    |
|  1 2 3 2 4     1 3 2 2 4                                                    |
|- -x x x x x  - -x x x x x                                                   |
|  3 1 2 4 5 6   3 1 3 4 5 6                                                  |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|4 3   2 2   2 3   2 2   2   3 2 2   4   3 2 2   2   3 2 2   1 2   3 2        |
|-x x x x  + -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x         |
|3 2 4 5 6   3 3 4 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 2 5 6        |
|  1 3     3 2   1   3   3 2   2   3   3 2   1     3 3 2   2     3 3 2        |
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x         |
|  3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6        |
|2 3   2   2   1   3 2   2   1 3   2   2   1 3   2   2   1   3 2   2          |
|-x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|  1 3 2 2 4     1 2 3 2 4     2 2 3 2 4     1 2 2 3 4     2 2 2 3 4          |
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x         |
|  3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|  1   2 3 2   2 2   3 2   1 2   3 2   2   2 3 2   1   2 3 2   1 2   3 2   2 2|
|- -x x x x  + -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x |
|  3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2|
|  1     3 3 2   1 3 2     3   1 2 3     3   2 3   2   3   1   3 2   3   2 2  |
|- -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x |
|  3 2 3 4 5 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2|
|2   3 2   2   1 2   3   2   1   2 3   2   2 2   3   2   1 2   3   2   2   2 3|
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4|
|  1 2 2 3 4     2 4 3 2   2   1 3 4 2   2   1 4 2 3   2   1 2 4 3   2   1 3 2|
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x |
|  3 2 3 4 5 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2|
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|   3 2   1 2   3 2   1   2 3 2   2   2 3 2   1   2 3 2   1 2 2   3   2 2   2 |
|x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x|
| 4 5 6   3 3 4 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6   3 1 2 3 6   3 1 2 3 |
| 3   3   1   2 3   3   1 3     2 3   2   3   2 3   1     3 2 3   1 2     3 3 |
|x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  |
| 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6 |
|   2   1   2 3   2   2 3     2 2   4   3   2 2   2     3 2 2   4 3     2 2   |
|x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - |
| 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   |
| 4   2   2 2 3 4   2   1 4 3   2 2   2 3 4   2 2   1 4   3 2 2   2   4 3 2 2 |
|x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6 |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|3   1   2 2 3   1 2 2   3                                                    |
|  - -x x x x  - -x x x x  +                                                  |
|6   3 1 2 3 6   3 1 2 4 6                                                    |
|  2   2   3 3   1     2 3 3                                                  |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 6   3 1 2 3 4 6                                                  |
|2   3   2 2   2 3     2 2                                                    |
|-x x x x x  - -x x x x x  -                                                  |
|3 1 2 4 5 6   3 1 3 4 5 6                                                    |
|  1 3   4 2 2   1   3 4 2 2                                                  |
|- -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 4 6   3 1 2 3 4 6                                                  |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|2 2 2   3   1 2 2   3   1 2   2 3   2   2 2 3   1 2   2 3   2 2   2 3        |
|-x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x         |
|3 1 3 4 6   3 2 3 4 6   3 1 2 4 6   3 1 2 4 6   3 1 3 4 6   3 2 3 4 6        |
|  2 3 2     3   1 2 3     3   1 3   2   3   1   3 2   3   1 2   3   3        |
|+ -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x         |
|  3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6        |
|2 3     2 2   2   3   2 2   4   3   2 2   2     3 2 2   4     3 2 2          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6          |
|  1 4 2   3 2   1 2 4   3 2   2 4   2 3 2   1   4 2 3 2   2 2   4 3 2        |
|- -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x         |
|  3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|  1   2 2 3   1   2 2 3   2 2 2   3   4 2 2   3   2 2 2   3   2 2 2   3   4 2|
|- -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x  + -x x x x  - -x |
|  3 1 3 4 6   3 2 3 4 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 4 5 6   3 2|
|  2   2 3   3   1 3 2     3   2 2 3     3   1 3 2     3   2 3 2     3   1 2 3|
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x |
|  3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3|
|2     3 2 2   1 2     3 2   2   2   3 2   1     2 3 2   2 2     3 2   1   2  |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x |
|3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4|
|  1   2 4 3 2   2 3 2   4 2   1 2 3   4 2   1 3   2 4 2   1   3 2 4 2   1 2  |
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x |
|  3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2|
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
| 2   3   2 2 2   3   1 2   2 3   1   2 2 3   2 2   2 3   1 2   2 3   2   2 2 |
|x x x  + -x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x  + -x x x x|
| 4 5 6   3 3 4 5 6   3 1 2 5 6   3 1 2 5 6   3 1 3 5 6   3 2 3 5 6   3 1 3 5 |
|     3   1 2 3     3   1 3   2   3   1   3 2   3   2 3   2   3   1 3   2   3 |
|x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  |
| 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6 |
| 3 2   1 2     3 2   1 2     3 2   1   2   3 2   2   2   3 2   1     2 3 2   |
|x x  + -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - |
| 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   |
| 3 4 2   2   2 3 4 2   1 4 3 2   2   2 3 4 2   2   1 4 2 3   2   2 2 4 3   2 |
|x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  |
| 3 4 6   3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6 |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|3   1   2 2 3   1 2   2 3                                                    |
|  - -x x x x  - -x x x x  +                                                  |
|6   3 2 3 5 6   3 1 4 5 6                                                    |
|  2   3 2   3   1   3 2   3                                                  |
|+ -x x x x x  - -x x x x x                                                   |
|  3 1 3 4 5 6   3 2 3 4 5 6                                                  |
|2     2 3 2   1     2 3 2                                                    |
|-x x x x x  + -x x x x x  -                                                  |
|3 1 3 4 5 6   3 2 3 4 5 6                                                    |
|  1 3 2 4   2   1 2 3 4   2                                                  |
|- -x x x x x  - -x x x x x                                                   |
|  3 1 2 3 5 6   3 1 2 3 5 6                                                  |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|2 2   2 3   1 2   2 3   1   2 2 3   2   2 2 3   1   2 2 3                    |
|-x x x x  - -x x x x  - -x x x x  + -x x x x  - -x x x x }                   |
|3 2 4 5 6   3 3 4 5 6   3 1 4 5 6   3 2 4 5 6   3 3 4 5 6                    |
|  2 2   3   3   1   2 3   3   1 2   3   3   1 2   3   3   1   2 3   3        |
|+ -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x         |
|  3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6        |
|2 2 2     3   4 2   2   3   2   2 2   3   2 2     2 3   4   2   2 3          |
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|  2 4 3 2   2   1 3 4 2   2   1 4 3 2   2   1 4 3 2   2   1 3 4 2   2        |
|+ -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x         |
|  3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|  2   2 3   3   1 3     2 3   2   3   2 3   1     3 2 3   2 3     2 3        |
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x         |
|  3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6        |
|2     2 2 3   1 2 2     3   2 2   2   3   1   2 2   3   1 2 2     3          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  -        |
|3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6          |
|  2 3 4 2   2   2 4 2 3   2   1 2 4 3   2   1 4 2 3   2   1 4 2 3   2        |
|+ -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x         |
|  3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|  1   3   2 3   1 3     2 3   1 3     2 3   1   3   2 3   2   3   2 3        |
|- -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x         |
|  3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6        |
|2 2 2     3   1 2 2     3   1 2   2   3   2   2 2   3   1 2   2   3          |
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6          |
|  1 2 4 3   2   2 2 4 3   2   1 3 2 4   2   1 2 3 4   2   2 3 2 4   2        |
|- -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x         |
|  3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|  1     3 2 3   2     3 2 3   1     3 2 3   2 2     3 3   4   2   3 3        |
|- -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x         |
|  3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6        |
|2 2   2   3   1   2 2   3   1   2 2   3   1 2     2 3   2   2   2 3          |
|-x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|  1 3 2 4   2   2 2 3 4   2   1 2 3 4   2   2 4 3   2 2   4 3 4   2 2        |
|- -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x         |
|  3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|  2     2 3 3   4 2     3 3   2   2   3 3   2 2     3 3   2 2     3 3        |
|+ -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x         |
|  3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6        |
|1     2 2 3   2 2     2 3   1   2   2 3   1 2     2 3   1 2     2 3          |
|-x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  +        |
|3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|  2 4   3 2 2   4   4 3 2 2   2 3   4 2 2   2   3 4 2 2   4 4 3   2 2        |
|+ -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x         |
|  3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|  2   2   3 3   4   2   3 3   2     2 3 3   4     2 3 3   2     2 3 3        |
|+ -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x }       |
|  3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6        |
|1   2   2 3   2   2   2 3   1     2 2 3   2     2 2 3   1     2 2 3          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x }         |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|  2 3 4   2 2   2 4 3   2 2   2 4 3   2 2   2 3 4   2 2   4 3 4   2 2        |
|+ -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  -      |
|  3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6        |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4 4   3 2 2   2   4 3 2 2   2 4   3 2 2   2 4   3 2 2   2   4 3 2 2          |
|-x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4   4 3 2 2   2 3   4 2 2   2   3 4 2 2   4 3   4 2 2   2 3   4 2 2          |
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4   3 4 2 2   2   3 4 2 2   1 4 2   3 2   2 2 4   3 2   1 4   2 3 2          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2   4 2 3 2   1 2   4 3 2   1   2 4 3 2   2 4 2   3 2   1 2 4   3 2          |
|-x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  -        |
|3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 4 2   3 2   1 4 2   3 2   1 2 4   3 2   2 2 4   3 2   2 4   2 3 2          |
|-x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  + -x x x x x  -        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   4 2 3 2   1 4   2 3 2   1 4   2 3 2   1   4 2 3 2   2   4 2 3 2          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2   4 3 2   1   2 4 3 2   2 2   4 3 2   1 2   4 3 2   2   2 4 3 2          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   2 4 3 2   2 3 2   4 2   1 2 3   4 2   1 3   2 4 2   1   3 2 4 2          |
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  -        |
|3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2   3 4 2   2   2 3 4 2   1 3 2   4 2   2 2 3   4 2   1 3 2   4 2          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 3 2   4 2   1 2 3   4 2   1 2 3   4 2   1 3   2 4 2   1   3 2 4 2          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 3   2 4 2   1 3   2 4 2   2   3 2 4 2   1   3 2 4 2   2 2   3 4 2          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   2 3 4 2   1 2   3 4 2   1 2   3 4 2   1   2 3 4 2   2   2 3 4 2          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 4 2 2   3   2 2 4 2   3   1 2 2 4   3   2 4 2   2 3   1 2 4   2 3          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  -        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 4   2 2 3   1   4 2 2 3   1 2   4 2 3   2   2 4 2 3   1 2 2   4 3          |
|-x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 2   2 4 3   1   2 2 4 3   2 4 2 2   3   4 2 4 2   3   2 2 2 4   3          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4 4 2 2   3   2 2 4 2   3   2 4 2 2   3   2 4 2 2   3   2 2 4 2   3          |
|-x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  + -x x x x x  -        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4 2 4 2   3   2 2 2 4   3   4 2 2 4   3   2 2 2 4   3   1 4 2   2 3          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 2 4   2 3   1 4   2 2 3   2   4 2 2 3   1 2   4 2 3   1   2 4 2 3          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 4 2   2 3   1 2 4   2 3   1 4 2   2 3   1 4 2   2 3   1 2 4   2 3          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 2 4   2 3   2 4   2 2 3   1   4 2 2 3   1 4   2 2 3   1 4   2 2 3          |
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  -        |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   4 2 2 3   2   4 2 2 3   1 2   4 2 3   1   2 4 2 3   2 2   4 2 3          |
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2   4 2 3   2   2 4 2 3   1   2 4 2 3   1 2 2   4 3   2 2   2 4 3          |
|-x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   2 2 4 3   1 2 2   4 3   2 2 2   4 3   1 2 2   4 3   1 2   2 4 3          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 3 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2   2 2 4 3   1 2   2 4 3   2 2   2 4 3   1   2 2 4 3   1   2 2 4 3          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 3 2 2   4   4 2 3 2   4   2 2 2 3   4   4 3 2   2 4   2 2 3   2 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  +        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 3   2 2 4   2   3 2 2 4   2 2   3 2 4   4   2 3 2 4   2 2 2   3 4          |
|-x x x x x  + -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 4 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|4 2   2 3 4   2   2 2 3 4   1 3 2 2   4   2 2 3 2   4   1 2 2 3   4          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 1 2 3 4 6   3 1 2 3 4 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 3 2 2   4   1 2 3 2   4   1 3 2 2   4   1 3 2 2   4   1 2 3 2   4          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2 2 3 2   4   1 2 2 3   4   2 2 2 3   4   1 2 2 3   4   2 3 2   2 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2 3   2 4   1 3   2 2 4   1   3 2 2 4   1 2   3 2 4   2   2 3 2 4          |
|-x x x x x  - -x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 3 2   2 4   2 2 3   2 4   1 3 2   2 4   2 3 2   2 4   1 2 3   2 4          |
|-x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  -        |
|3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2 3   2 4   1 3   2 2 4   1   3 2 2 4   2 3   2 2 4   1 3   2 2 4          |
|-x x x x x  - -x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  +        |
|3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2   3 2 2 4   1   3 2 2 4   2 2   3 2 4   1   2 3 2 4   1 2   3 2 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  -        |
|3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6   3 1 2 4 5 6   3 1 3 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1 2   3 2 4   1   2 3 2 4   2   2 3 2 4   1 2 2   3 4   2 2   2 3 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  + -x x x x x  -        |
|3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 3 5 6   3 1 2 3 5 6          |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|1   2 2 3 4   1 2 2   3 4   2 2 2   3 4   1 2 2   3 4   1 2   2 3 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x  +        |
|3 1 2 3 5 6   3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 2 4 5 6          |
|-----------------------------------------------------------------------------|
|                                                                    }        |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|2   2 2 3 4   1 2   2 3 4   2 2   2 3 4   1   2 2 3 4   1   2 2 3 4          |
|-x x x x x  - -x x x x x  + -x x x x x  - -x x x x x  - -x x x x x }         |
|3 1 2 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6   3 1 3 4 5 6   3 2 3 4 5 6          |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * secondaryInvariants(List,PolynomialRing)
    -- the set of
    secondaryInvariants of a permutation group

semistandardTableaux(Partition,ZZ) -- the list of semistandard tableaux of shape p and filling with the numbers from 0 to n-1.
******************************************************************************************************************************

Synopsis
========

  * Function: semistandardTableaux,
  * Usage:
        standardTableaux(p,n)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
        the shape of the tableaux
      * n, an integer (Macaulay2Doc), a limit of the range of numbers
        that appear in the tableaux
  * Outputs:
      * an instance of the type TableauList, the list of
        semistandard tableaux

Description
===========

The semistandard tableaux are tableaux that are strictly decreasign in rows and
weakly deacreasing in rows.

+-----------------------------------------------------------------------------+
|i1 : p = new Partition from {3,2}                                            |
|                                                                             |
|o1 = Partition{3, 2}                                                         |
|                                                                             |
|o1 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i2 : semistandardTableaux (p,4)                                              |
|                                                                             |
|o2 = {| 0 0 0 |, | 0 0 0 |, | 0 0 0 |, | 0 0 0 |, | 0 0 0 |, | 0 0 0 |, | 0 0|
|      | 1 1 |    | 1 2 |    | 1 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 1 1|
|                                                                             |
|o2 : TableauList                                                             |
|-----------------------------------------------------------------------------|
|1 |, | 0 0 1 |, | 0 0 1 |, | 0 0 1 |, | 0 0 1 |, | 0 0 1 |, | 0 0 2 |, | 0 0 |
||    | 1 2 |    | 1 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 1 1 |    | 1 2 |
|-----------------------------------------------------------------------------|
|2 |, | 0 0 2 |, | 0 0 2 |, | 0 0 2 |, | 0 0 2 |, | 0 0 3 |, | 0 0 3 |, | 0 0 |
||    | 1 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 1 1 |    | 1 2 |    | 1 3 |
|-----------------------------------------------------------------------------|
|3 |, | 0 0 3 |, | 0 0 3 |, | 0 0 3 |, | 0 1 1 |, | 0 1 1 |, | 0 1 1 |, | 0 1 |
||    | 2 2 |    | 2 3 |    | 3 3 |    | 1 2 |    | 1 3 |    | 2 2 |    | 2 3 |
|-----------------------------------------------------------------------------|
|1 |, | 0 1 1 |, | 0 1 2 |, | 0 1 2 |, | 0 1 2 |, | 0 1 2 |, | 0 1 2 |, | 0 1 |
||    | 3 3 |    | 1 2 |    | 1 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 1 2 |
|-----------------------------------------------------------------------------|
|3 |, | 0 1 3 |, | 0 1 3 |, | 0 1 3 |, | 0 1 3 |, | 0 2 2 |, | 0 2 2 |, | 0 2 |
||    | 1 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 1 3 |    | 2 3 |    | 3 3 |
|-----------------------------------------------------------------------------|
|2 |, | 0 2 3 |, | 0 2 3 |, | 0 2 3 |, | 1 1 1 |, | 1 1 1 |, | 1 1 1 |, | 1 1 |
||    | 1 3 |    | 2 3 |    | 3 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 2 2 |
|-----------------------------------------------------------------------------|
|2 |, | 1 1 2 |, | 1 1 2 |, | 1 1 3 |, | 1 1 3 |, | 1 1 3 |, | 1 2 2 |, | 1 2 |
||    | 2 3 |    | 3 3 |    | 2 2 |    | 2 3 |    | 3 3 |    | 2 3 |    | 3 3 |
|-----------------------------------------------------------------------------|
|2 |, | 1 2 3 |, | 1 2 3 |, | 2 2 2 |, | 2 2 3 |}                             |
||    | 2 3 |    | 3 3 |    | 3 3 |    | 3 3 |                                |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * semistandardTableaux(Partition,ZZ)
    -- the list of semistandard
    tableaux of shape p and filling with the numbers from 0 to n-1.

size(YoungTableau) -- returns the number of cells of a tableau
**************************************************************

Synopsis
========

  * Function: size (Macaulay2Doc),
  * Usage:
        size y
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * an integer (Macaulay2Doc), the number of cells rows of the
        tableau

Description
===========

The size is calculated as the sum of the numbers in the partition associated to
the tableau

+---------------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {2,1,1,1},{2,0,1,4,3})|
|                                                               |
|o1 = | 2 0 |                                                   |
|     | 1 |                                                     |
|     | 4 |                                                     |
|     | 3 |                                                     |
|                                                               |
|o1 : YoungTableau                                              |
+---------------------------------------------------------------+
|i2 : size y                                                    |
|                                                               |
|o2 = 5                                                         |
+---------------------------------------------------------------+

Ways to use this method:
========================

  * size(YoungTableau) -- returns the number of
    cells of a tableau

sortColumnsTableau(SpechtModuleElement) -- a method for sorting the columns of the tableaux in a SpechtModuleElement
********************************************************************************************************************

Synopsis
========

  * Function: sortColumnsTableau,
  * Usage:
        sortColumnsTableau(ele)
  * Inputs:
      * ele, an instance of the type SpechtModuleElement,
  * Outputs:
      *

Description
===========

This method sorts the columns of every tableaux that appears as a term of the
SpechtModuleElement. The corresponding sign of the sort is multiplied to the
coefficient of the respective term. The method returns null but changes the
SpechtModuleElement that was input as a parameter.

+----------------------------------------------------------+
|i1 : p = new Partition from {2,2,1}                       |
|                                                          |
|o1 = Partition{2, 2, 1}                                   |
|                                                          |
|o1 : Partition                                            |
+----------------------------------------------------------+
|i2 : y1 = youngTableau(p,{0,1,4,3,2})                     |
|                                                          |
|o2 = | 0 1 |                                              |
|     | 4 3 |                                              |
|     | 2 |                                                |
|                                                          |
|o2 : YoungTableau                                         |
+----------------------------------------------------------+
|i3 : y2 = youngTableau(p,{0,3,4,1,2})                     |
|                                                          |
|o3 = | 0 3 |                                              |
|     | 4 1 |                                              |
|     | 2 |                                                |
|                                                          |
|o3 : YoungTableau                                         |
+----------------------------------------------------------+
|i4 : ele = spechtModuleElement(y1)-spechtModuleElement(y2)|
|                                                          |
|o4 = | 0 1 | - | 0 3 |                                    |
|     | 4 3 |   | 4 1 |                                    |
|     | 2 |     | 2 |                                      |
|                                                          |
|o4 : SpechtModuleElement                                  |
+----------------------------------------------------------+
|i5 : sortColumnsTableau ele                               |
+----------------------------------------------------------+
|i6 : ele                                                  |
|                                                          |
|o6 = -2 | 0 1 |                                           |
|        | 2 3 |                                           |
|        | 4 |                                             |
|                                                          |
|o6 : SpechtModuleElement                                  |
+----------------------------------------------------------+

Ways to use this method:
========================

  * sortColumnsTableau(SpechtModuleElement)
    -- a method for sorting the
    columns of the tableaux in a SpechtModuleElement

sortColumnsTableau(YoungTableau) -- a method for
************************************************

Synopsis
========

  * Function: sortColumnsTableau,
  * Usage:
        sortColumnsTableau(y)
  * Inputs:
      * y, an instance of the type YoungTableau,
  * Outputs:
      * an integer (Macaulay2Doc), the sign of the permutation that
        sorts the columns of the tableau

Description
===========

This method sorts the columns of the tableau and retrieves the sign of the
associated permutation

+------------------------------------+
|i1 : p = new Partition from {2,2,1} |
|                                    |
|o1 = Partition{2, 2, 1}             |
|                                    |
|o1 : Partition                      |
+------------------------------------+
|i2 : y = youngTableau(p,{0,1,4,3,2})|
|                                    |
|o2 = | 0 1 |                        |
|     | 4 3 |                        |
|     | 2 |                          |
|                                    |
|o2 : YoungTableau                   |
+------------------------------------+
|i3 : sortColumnsTableau y           |
|                                    |
|o3 = -1                             |
+------------------------------------+
|i4 : y                              |
|                                    |
|o4 = | 0 1 |                        |
|     | 2 3 |                        |
|     | 4 |                          |
|                                    |
|o4 : YoungTableau                   |
+------------------------------------+

Ways to use this method:
========================

  * sortColumnsTableau(YoungTableau)
    -- a method for

SpechtModuleElement -- the class of Specht Module elements
**********************************************************

Description
===========

Polytabloids of shape $p$ are elements of the module of tabloids of the form
$\sum_{\tau \in C(T)}\sum_{\sigma \in R(T)}sgn(\tau) \tau\sigma(T)$ where T is
a tabloid of shape $p$.

The set of polytabloids generates the Specht Module of shape $p$.

In other words the element in a SpechtModule are linear combinations of
polytabloids. This is the way such elements are implemented in this package.

The constructor takes just one polytabloid and a coefficient

+--------------------------------------+
|i1 : p = new Partition from {3,2,1}   |
|                                      |
|o1 = Partition{3, 2, 1}               |
|                                      |
|o1 : Partition                        |
+--------------------------------------+
|i2 : y = youngTableau(p,{2,0,3,4,5,1})|
|                                      |
|o2 = | 2 0 3 |                        |
|     | 4 5 |                          |
|     | 1 |                            |
|                                      |
|o2 : YoungTableau                     |
+--------------------------------------+
|i3 : e = spechtModuleElement(y,-2)    |
|                                      |
|o3 = -2 | 2 0 3 |                     |
|        | 4 5 |                       |
|        | 1 |                         |
|                                      |
|o3 : SpechtModuleElement              |
+--------------------------------------+

More complex elements can be made by adding or subtracting previously build
elements and multiplying by any element of the base field (which is assumed to
be \mathbb{Q}).

+---------------------------------------+
|i4 : y2 = youngTableau(p,{5,0,2,4,1,3})|
|                                       |
|o4 = | 5 0 2 |                         |
|     | 4 1 |                           |
|     | 3 |                             |
|                                       |
|o4 : YoungTableau                      |
+---------------------------------------+
|i5 : e2 = spechtModuleElement(y2)      |
|                                       |
|o5 = | 5 0 2 |                         |
|     | 4 1 |                           |
|     | 3 |                             |
|                                       |
|o5 : SpechtModuleElement               |
+---------------------------------------+
|i6 : e+e2                              |
|                                       |
|o6 = -2 | 2 0 3 | + | 5 0 2 |          |
|        | 4 5 |     | 4 1 |            |
|        | 1 |       | 3 |              |
|                                       |
|o6 : SpechtModuleElement               |
+---------------------------------------+
|i7 : e-e2                              |
|                                       |
|o7 = -2 | 2 0 3 | - | 5 0 2 |          |
|        | 4 5 |     | 4 1 |            |
|        | 1 |       | 3 |              |
|                                       |
|o7 : SpechtModuleElement               |
+---------------------------------------+
|i8 : 3*oo                              |
|                                       |
|o8 = -6 | 2 0 3 | - 3 | 5 0 2 |        |
|        | 4 5 |       | 4 1 |          |
|        | 1 |         | 3 |            |
|                                       |
|o8 : SpechtModuleElement               |
+---------------------------------------+

The element SpechtModuleElement is implemented as a MutableHashTable. The keys
are the filling of the tableaux that label the polytabloids and they point to
their respective coefficients

+-------------------------------------------------------------+
|i9 : peek oo                                                 |
|                                                             |
|o9 = SpechtModuleElement{partition => Partition{3, 2, 1}    }|
|                         values => MutableHashTable{...2...} |
+-------------------------------------------------------------+
|i10 : peek ooo#values                                        |
|                                                             |
|o10 = MutableHashTable{{2, 0, 3, 4, 5, 1} => -6}             |
|                       {5, 0, 2, 4, 1, 3} => -3              |
+-------------------------------------------------------------+

The method terms is used to retrieve the polytabloid with their respective
coefficient. This is given as a list of pairs of tableaux and coefficients.

+----------------------------------------+
|i11 : terms (3*(e-e2))                  |
|                                        |
|o11 = {(| 2 0 3 |, -6), (| 5 0 2 |, -3)}|
|        | 4 5 |          | 4 1 |        |
|        | 1 |            | 3 |          |
|                                        |
|o11 : List                              |
+----------------------------------------+

A method was implemented to apply a permutation to a SpechtModuleElement. The
action is defined by permuting the entries of the tableaux that label the
polytabloids.

+--------------------------------+
|i12 : {0,1,2,3,4,5} (3*(e-e2))  |
|                                |
|o12 = -6 | 2 0 3 | - 3 | 5 0 2 ||
|         | 4 5 |       | 4 1 |  |
|         | 1 |         | 3 |    |
|                                |
|o12 : SpechtModuleElement       |
+--------------------------------+
|i13 : {1,0,2,3,4,5} (3*(e-e2))  |
|                                |
|o13 = -6 | 2 1 3 | - 3 | 5 1 2 ||
|         | 4 5 |       | 4 0 |  |
|         | 0 |         | 3 |    |
|                                |
|o13 : SpechtModuleElement       |
+--------------------------------+

See also
========

  * spechtModuleElement -- the constructor for the
    class SpechtModuleElement

Functions and methods returning an object of class SpechtModuleElement :
========================================================================

  * straighteningAlgorithm -- an algorithm for
    expressing any polytabloid as linear combinations of standard polytabloids

Methods that use an object of class SpechtModuleElement :
=========================================================

  * sortColumnsTableau(SpechtModuleElement)
    -- a method for sorting the
    columns of the tableaux in a SpechtModuleElement
  * "List SpechtModuleElement"
  * "net(SpechtModuleElement)"
  * "QQ * SpechtModuleElement"
  * "SpechtModuleElement + SpechtModuleElement"
  * "SpechtModuleElement - SpechtModuleElement"
  * "terms(SpechtModuleElement)"
  * "trim(SpechtModuleElement)"
  * "ZZ * SpechtModuleElement"
  * "straighteningAlgorithm(SpechtModuleElement)" -- see
    straighteningAlgorithm, -- an algorithm for
    expressing any polytabloid as linear combinations of standard polytabloids

For the programmer
==================

The object SpechtModuleElement, is a type (Macaulay2Doc),
with ancestor classes HashTable (Macaulay2Doc),
< Thing (Macaulay2Doc).

spechtModuleElement -- the constructor for the class SpechtModuleElement
************************************************************************

Synopsis
========

  * Usage:
        spechtModuleElement(p,v)
        spechtModuleElement(y,n)
        spechtModuleElement(y,m)
        spechtModueElement(y)
  * Inputs:
      * y, an instance of the type YoungTableau, the label
        of the polytabloid
      * n, an integer (Macaulay2Doc), a number. If not specified then
        it is assumed to be a 1.
      * m, a rational number (Macaulay2Doc), a number. If not
        specified then it is assumed to be a 1.
      * p, an instance of the type Partition (Macaulay2Doc), A
        partition that index a module
      * v, a mutable hash table (Macaulay2Doc), A
        mutable hash table from a SpechtModuleElement
  * Outputs:
      * an instance of the type SpechtModuleElement,
        an element of the form n*poly_y, where poly_y is
        the polytabloid labeled by the tableau y.

Description
===========

The basic constructor builds a SpechtModuleElement from just one polytabloid
and its respective coefficient.

+--------------------------------------+
|i1 : p = new Partition from {3,2,1}   |
|                                      |
|o1 = Partition{3, 2, 1}               |
|                                      |
|o1 : Partition                        |
+--------------------------------------+
|i2 : y = youngTableau(p,{2,0,3,4,5,1})|
|                                      |
|o2 = | 2 0 3 |                        |
|     | 4 5 |                          |
|     | 1 |                            |
|                                      |
|o2 : YoungTableau                     |
+--------------------------------------+
|i3 : spechtModuleElement(y,-2)        |
|                                      |
|o3 = -2 | 2 0 3 |                     |
|        | 4 5 |                       |
|        | 1 |                         |
|                                      |
|o3 : SpechtModuleElement              |
+--------------------------------------+
|i4 : spechtModuleElement(y)           |
|                                      |
|o4 = | 2 0 3 |                        |
|     | 4 5 |                          |
|     | 1 |                            |
|                                      |
|o4 : SpechtModuleElement              |
+--------------------------------------+

Ways to use spechtModuleElement :
=================================

  * "spechtModuleElement(Partition,MutableHashTable)"
  * "spechtModuleElement(YoungTableau)"
  * "spechtModuleElement(YoungTableau,QQ)"
  * "spechtModuleElement(YoungTableau,ZZ)"

For the programmer
==================

The object spechtModuleElement, is a method function (Macaulay2Doc).

spechtPolynomial(YoungTableau,PolynomialRing) -- the Specht polynomial indexed by a standard tableau
****************************************************************************************************

Synopsis
========

  * Function: spechtPolynomial,
  * Usage:
        spechtPolynomial(y,R)
  * Inputs:
      * y, an instance of the type YoungTableau,
      * R, a polynomial ring (Macaulay2Doc),
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
  * Outputs:
      * a ring element (Macaulay2Doc), the Specht polynomial

Description
===========

Specht polynomials were the original objects that gave rise to the Specht
modules. The Specht polynomial of a tableau $T$ is product of the Vandermonde
determinant of the variables index by the columns of the tableau.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_0..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : p = new Partition from {2,2,1}                                          |
|                                                                             |
|o2 = Partition{2, 2, 1}                                                      |
|                                                                             |
|o2 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i3 : y = youngTableau(p,{0,3,1,4,2})                                         |
|                                                                             |
|o3 = | 0 3 |                                                                 |
|     | 1 4 |                                                                 |
|     | 2 |                                                                   |
|                                                                             |
|o3 : YoungTableau                                                            |
+-----------------------------------------------------------------------------+
|i4 : spechtPolynomial(y,R)                                                   |
|                                                                             |
|      2          2      2        2          2        2      2          2     |
|o4 = x x x  - x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x  + |
|      0 1 3    0 1 3    0 2 3    1 2 3    0 2 3    1 2 3    0 1 4    0 1 4   |
|     ------------------------------------------------------------------------|
|      2        2          2        2                                         |
|     x x x  - x x x  - x x x  + x x x                                        |
|      0 2 4    1 2 4    0 2 4    1 2 4                                       |
|                                                                             |
|o4 : R                                                                       |
+-----------------------------------------------------------------------------+
|i5 : factor oo                                                               |
|                                                                             |
|o5 = (x  - x )(x  - x )(x  - x )(x  - x )                                    |
|       3    4   1    2   0    2   0    1                                     |
|                                                                             |
|o5 : Expression of class Product                                             |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * spechtPolynomial(YoungTableau,PolynomialRing)
    -- the Specht
    polynomial indexed by a standard tableau

spechtPolynomials(Partition,PolynomialRing) -- the set of all Specht polynomial indexed by standard tableaux of shape p
***********************************************************************************************************************

Synopsis
========

  * Function: spechtPolynomials,
  * Usage:
        spechtPolynomials(p,R)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
      * R, a polynomial ring (Macaulay2Doc),
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => ..., default value false, an
        optional argument that returns polynomials as expressions
  * Outputs:
      * a hash table (Macaulay2Doc), a hash table with the
        polynomials index by the filling of their respective tableaux

Description
===========

The set of all the Specht polynomials for standard tableaux of a given shape p
forms a basis for a module which is isomorphich to the Specht module indexed by
p.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_0..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : p = new Partition from {2,2,1}                                          |
|                                                                             |
|o2 = Partition{2, 2, 1}                                                      |
|                                                                             |
|o2 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i3 : specht = spechtPolynomials(p,R)                                         |
|                                                                             |
|                                   2            2    2          2      2     |
|o3 = HashTable{{0, 1, 2, 3, 4} => x x x  - x x x  - x x x  + x x x  - x x x  |
|                                   0 1 2    0 1 2    0 2 3    0 2 3    0 1 4 |
|                                   2            2    2          2          2 |
|               {0, 1, 2, 4, 3} => x x x  - x x x  - x x x  + x x x  + x x x  |
|                                   0 1 2    0 1 2    0 1 3    1 2 3    0 1 3 |
|                                   2          2      2          2      2     |
|               {0, 2, 1, 3, 4} => x x x  - x x x  - x x x  + x x x  - x x x  |
|                                   0 1 2    0 1 2    0 1 3    0 1 3    0 2 4 |
|                                   2          2      2        2            2 |
|               {0, 2, 1, 4, 3} => x x x  - x x x  - x x x  + x x x  + x x x  |
|                                   0 1 2    0 1 2    0 2 3    1 2 3    0 2 3 |
|                                   2          2      2        2          2   |
|               {0, 3, 1, 4, 2} => x x x  - x x x  - x x x  + x x x  + x x x  |
|                                   0 1 3    0 1 3    0 2 3    1 2 3    0 2 3 |
|                                                                             |
|o3 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|     2      2        2            2        2        2        2               |
|+ x x x  + x x x  - x x x  + x x x  - x x x  - x x x  + x x x }              |
|   1 2 4    0 3 4    2 3 4    0 1 4    1 2 4    0 3 4    2 3 4               |
|       2    2          2      2        2          2        2                 |
|- x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                |
|   1 2 3    0 2 4    0 2 4    0 3 4    2 3 4    0 3 4    2 3 4               |
|   2        2        2            2        2        2        2               |
|+ x x x  + x x x  - x x x  + x x x  - x x x  - x x x  + x x x                |
|   1 2 4    0 3 4    1 3 4    0 2 4    1 2 4    0 3 4    1 3 4               |
|       2    2          2      2        2          2        2                 |
|- x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                |
|   1 2 3    0 1 4    0 1 4    0 3 4    1 3 4    0 3 4    1 3 4               |
|     2      2          2      2        2          2        2                 |
|- x x x  - x x x  + x x x  + x x x  - x x x  - x x x  + x x x                |
|   1 2 3    0 1 4    0 1 4    0 2 4    1 2 4    0 2 4    1 2 4               |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * spechtPolynomials(Partition,PolynomialRing)
    -- the set of all Specht
    polynomial indexed by standard tableaux of shape p

standardTableaux(Partition) -- the list of standard tableaux of shape p
***********************************************************************

Synopsis
========

  * Function: standardTableaux,
  * Usage:
        standardTableaux(p)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
  * Outputs:
      * an instance of the type TableauList, the list of
        standard tableaux

Description
===========

The standard tableaux of a given partition $\lambda$ are tableaux of shape p.
Such that they are both row and column increasing. This set of tableaux are
very important because they are in bijection with the basis of the Specht
module $S^\lambda$.

The method calculates this tableaux recursively filling the cells of the Ferrer
diagram and checking if the rows and columns are still increasing.

+------------------------------------------------------------+
|i1 : p = new Partition from {3,2}                           |
|                                                            |
|o1 = Partition{3, 2}                                        |
|                                                            |
|o1 : Partition                                              |
+------------------------------------------------------------+
|i2 : standardTableaux p                                     |
|                                                            |
|o2 = {| 0 1 2 |, | 0 1 3 |, | 0 1 4 |, | 0 2 3 |, | 0 2 4 |}|
|      | 3 4 |    | 2 4 |    | 2 3 |    | 1 4 |    | 1 3 |   |
|                                                            |
|o2 : TableauList                                            |
+------------------------------------------------------------+

Ways to use this method:
========================

  * standardTableaux(Partition) -- the
    list of standard tableaux of shape p

straighteningAlgorithm -- an algorithm for expressing any polytabloid as linear combinations of standard polytabloids
*********************************************************************************************************************

Synopsis
========

  * Usage:
        straighteningAlgorithm(ele)
        straighteningAlgorithm(y,coef)
        straighteningAlgorithm(y)
  * Inputs:
      * ele, an instance of the type SpechtModuleElement,
        a SpecthModuleElement
      * y, an instance of the type YoungTableau, a tableau
        that labels a polytabloid
      * coef, an integer (Macaulay2Doc), the coefficient of the
        polytabloid
  * Outputs:
      * an instance of the type SpechtModuleElement,
        the same SpechtModuleElement written as a linear
        combination of standard polytabloids

Description
===========

The straigtening algorithm works by finding the first term that is not
standard. Then, taking as coordinates the first row descent, it calculates the
Garnir element of this tableaux. It then rewrites the SpechtModuleElement
substituting the term by the linear combination given by the garnir element.

+----------------------------------------------------------------------------+
|i1 : p = new Partition from {3,2,1}                                         |
|                                                                            |
|o1 = Partition{3, 2, 1}                                                     |
|                                                                            |
|o1 : Partition                                                              |
+----------------------------------------------------------------------------+
|i2 : y = youngTableau(p,{1,2,3,5,4,6})                                      |
|                                                                            |
|o2 = | 1 2 3 |                                                              |
|     | 5 4 |                                                                |
|     | 6 |                                                                  |
|                                                                            |
|o2 : YoungTableau                                                           |
+----------------------------------------------------------------------------+
|i3 : garnirElement y                                                        |
|                                                                            |
|o3 = - | 1 2 3 | + | 1 2 3 | + | 1 4 3 | - | 1 4 3 | + | 1 5 3 | + | 1 2 3 ||
|       | 4 5 |     | 4 6 |     | 2 5 |     | 2 6 |     | 2 6 |     | 5 4 |  |
|       | 6 |       | 5 |       | 6 |       | 5 |       | 4 |       | 6 |    |
|                                                                            |
|o3 : SpechtModuleElement                                                    |
+----------------------------------------------------------------------------+

See also
========

  * garnirElement -- a SpechtModuleElement that is equal
    to zero

Ways to use straighteningAlgorithm :
====================================

  * "straighteningAlgorithm(SpechtModuleElement)"
  * "straighteningAlgorithm(YoungTableau)"
  * "straighteningAlgorithm(YoungTableau,ZZ)"

For the programmer
==================

The object straighteningAlgorithm, is a
method function (Macaulay2Doc).

TableauList -- the class of list of tableaux
********************************************

Description
===========

This type represents a list of tableaux of the same size. They are represented
as a MutableHashTable. A matrix in this hash table stores the filling of every
tableau in the list. This representation is particularly useful when only the
filling of the tableau is needed.

+----------------------------------------------+
|i1 : p = new Partition from {2,1}             |
|                                              |
|o1 = Partition{2, 1}                          |
|                                              |
|o1 : Partition                                |
+----------------------------------------------+
|i2 : y1 = youngTableau(p,{0,1,2})             |
|                                              |
|o2 = | 0 1 |                                  |
|     | 2 |                                    |
|                                              |
|o2 : YoungTableau                             |
+----------------------------------------------+
|i3 : y2 = youngTableau(p,{0,2,1})             |
|                                              |
|o3 = | 0 2 |                                  |
|     | 1 |                                    |
|                                              |
|o3 : YoungTableau                             |
+----------------------------------------------+
|i4 : y3 = youngTableau(p,{1,2,0})             |
|                                              |
|o4 = | 1 2 |                                  |
|     | 0 |                                    |
|                                              |
|o4 : YoungTableau                             |
+----------------------------------------------+
|i5 : t = tableauList p                        |
|                                              |
|o5 = {}                                       |
|                                              |
|o5 : TableauList                              |
+----------------------------------------------+
|i6 : addTableau(t, y1)                        |
|                                              |
|o6 = {| 0 1 |}                                |
|      | 2 |                                   |
|                                              |
|o6 : TableauList                              |
+----------------------------------------------+
|i7 : addTableau(t, y2)                        |
|                                              |
|o7 = {| 0 1 |, | 0 2 |}                       |
|      | 2 |    | 1 |                          |
|                                              |
|o7 : TableauList                              |
+----------------------------------------------+
|i8 : addTableau(t, y3)                        |
|                                              |
|o8 = {| 0 1 |, | 0 2 |, | 1 2 |}              |
|      | 2 |    | 1 |    | 0 |                 |
|                                              |
|o8 : TableauList                              |
+----------------------------------------------+
|i9 : peek t                                   |
|                                              |
|o9 = TableauList{length => 3                 }|
|                 matrix => | 0 1 2 |          |
|                           | 0 2 1 |          |
|                           | 1 2 0 |          |
|                 partition => Partition{2, 1} |
+----------------------------------------------+

Functions and methods returning an object of class TableauList :
================================================================

  * "semistandardTableaux" -- see semistandardTableaux(Partition,ZZ),
    -- the list of semistandard
    tableaux of shape p and filling with the numbers from 0 to n-1.
  * "standardTableaux" -- see standardTableaux(Partition),
    -- the list of standard tableaux of shape
    p
  * "tableauList" -- see tableauList(Partition,ZZ),
    -- the constructor for the type
    TableauList
  * "tabloids" -- see tabloids(Partition), --
    the list of tabloids for a given partition

Methods that use an object of class TableauList :
=================================================

  * "addTableau(TableauList,List)" -- see
    addTableau(TableauList,YoungTableau),
    -- adds a Young Tableau in the
    list
  * addTableau(TableauList,YoungTableau)
    -- adds a Young Tableau in the
    list
  * "higherSpechtPolynomials(YoungTableau,TableauList,PolynomialRing)" -- see
    higherSpechtPolynomials, -- a method that
    gives sets of higher Specht polynomials
  * "matrixRepresentation(List,TableauList)" -- see matrixRepresentation,
    -- the matrix representation of a permutation in the
    Specht Module
  * "matrixRepresentation(TableauList)" -- see matrixRepresentation,
    -- the matrix representation of a permutation in the
    Specht Module
  * "net(TableauList)"
  * TableauList _ ZZ -- a method that retrieves the
    tableaux from the list
  * toListOfTableaux(TableauList), --
    converts an object of type TableauList into a list of YoungTableau objects

For the programmer
==================

The object TableauList, is a type (Macaulay2Doc),
with ancestor classes MutableHashTable (Macaulay2Doc),
< HashTable (Macaulay2Doc) <
Thing (Macaulay2Doc).

TableauList _ ZZ -- a method that retrieves the tableaux from the list
**********************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        tableaux_i
  * Inputs:
      * tableaux, an instance of the type TableauList,
      * i, an integer (Macaulay2Doc), the index of the tableau to be
        retrieved
  * Outputs:
      * an instance of the type YoungTableau, the
        YoungTableau stored at position i

Description
===========

+---------------------------------+
|i1 : p = new Partition from {2,1}|
|                                 |
|o1 = Partition{2, 1}             |
|                                 |
|o1 : Partition                   |
+---------------------------------+
|i2 : y1 = youngTableau(p,{0,1,2})|
|                                 |
|o2 = | 0 1 |                     |
|     | 2 |                       |
|                                 |
|o2 : YoungTableau                |
+---------------------------------+
|i3 : y2 = youngTableau(p,{0,2,1})|
|                                 |
|o3 = | 0 2 |                     |
|     | 1 |                       |
|                                 |
|o3 : YoungTableau                |
+---------------------------------+
|i4 : y3 = youngTableau(p,{1,2,0})|
|                                 |
|o4 = | 1 2 |                     |
|     | 0 |                       |
|                                 |
|o4 : YoungTableau                |
+---------------------------------+
|i5 : t = tableauList p;          |
+---------------------------------+
|i6 : addTableau(t, y1);          |
+---------------------------------+
|i7 : addTableau(t, y2);          |
+---------------------------------+
|i8 : addTableau(t, y3);          |
+---------------------------------+
|i9 : t_0                         |
|                                 |
|o9 = | 0 1 |                     |
|     | 2 |                       |
|                                 |
|o9 : YoungTableau                |
+---------------------------------+
|i10 : t_2                        |
|                                 |
|o10 = | 1 2 |                    |
|      | 0 |                      |
|                                 |
|o10 : YoungTableau               |
+---------------------------------+

Ways to use this method:
========================

  * TableauList _ ZZ -- a method that retrieves the
    tableaux from the list

tableauList(Partition,ZZ) -- the constructor for the type TableauList
*********************************************************************

Synopsis
========

  * Function: tableauList,
  * Usage:
        tableauList(p,n)
        tableauList(p)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
        the shape for the tableaux
      * n, an integer (Macaulay2Doc), the number of tableaux in the
        list, if is not provided then the default value multinomial p is used.
        See multinomial.
  * Outputs:
      * an instance of the type TableauList, an empty
        TableauList with space for n tableaux

Description
===========

+----------------------------------------------+
|i1 : p = new Partition from {2,1}             |
|                                              |
|o1 = Partition{2, 1}                          |
|                                              |
|o1 : Partition                                |
+----------------------------------------------+
|i2 : y = youngTableau(p,{0,1,2})              |
|                                              |
|o2 = | 0 1 |                                  |
|     | 2 |                                    |
|                                              |
|o2 : YoungTableau                             |
+----------------------------------------------+
|i3 : t = tableauList p                        |
|                                              |
|o3 = {}                                       |
|                                              |
|o3 : TableauList                              |
+----------------------------------------------+
|i4 : addTableau(t,y)                          |
|                                              |
|o4 = {| 0 1 |}                                |
|      | 2 |                                   |
|                                              |
|o4 : TableauList                              |
+----------------------------------------------+
|i5 : peek t                                   |
|                                              |
|o5 = TableauList{length => 1                 }|
|                 matrix => | 0 1 2 |          |
|                           | 0 0 0 |          |
|                           | 0 0 0 |          |
|                 partition => Partition{2, 1} |
+----------------------------------------------+
|i6 : t1 = tableauList (p,5)                   |
|                                              |
|o6 = {}                                       |
|                                              |
|o6 : TableauList                              |
+----------------------------------------------+
|i7 : addTableau(t1,y)                         |
|                                              |
|o7 = {| 0 1 |}                                |
|      | 2 |                                   |
|                                              |
|o7 : TableauList                              |
+----------------------------------------------+
|i8 : peek t1                                  |
|                                              |
|o8 = TableauList{length => 1                 }|
|                 matrix => | 0 1 2 |          |
|                           | 0 0 0 |          |
|                           | 0 0 0 |          |
|                           | 0 0 0 |          |
|                           | 0 0 0 |          |
|                 partition => Partition{2, 1} |
+----------------------------------------------+

Ways to use this method:
========================

  * "tableauList(Partition)"
  * tableauList(Partition,ZZ) -- the
    constructor for the type TableauList

tableauToList(YoungTableau) -- converts a YoungTableau to list form
*******************************************************************

Synopsis
========

  * Function: tableauToList,
  * Usage:
        tableauToList(y)
  * Inputs:
      * y, an instance of the type YoungTableau, a Young
        tableau
  * Outputs:
      * a list (Macaulay2Doc), a doubly nested list, the list of
        rows of the tableau

Description
===========

+-----------------------------------+
|i1 : p = new Partition from {2,2,1}|
|                                   |
|o1 = Partition{2, 2, 1}            |
|                                   |
|o1 : Partition                     |
+-----------------------------------+
|i2 : l = {2,1,0,3,4}               |
|                                   |
|o2 = {2, 1, 0, 3, 4}               |
|                                   |
|o2 : List                          |
+-----------------------------------+
|i3 : y = youngTableau(p,l)         |
|                                   |
|o3 = | 2 1 |                       |
|     | 0 3 |                       |
|     | 4 |                         |
|                                   |
|o3 : YoungTableau                  |
+-----------------------------------+
|i4 : tableauToList y               |
|                                   |
|o4 = {{2, 1}, {0, 3}, {4}}         |
|                                   |
|o4 : List                          |
+-----------------------------------+

Ways to use this method:
========================

  * tableauToList(YoungTableau), --
    converts a YoungTableau to list form

tabloids(Partition) -- the list of tabloids for a given partition
*****************************************************************

Synopsis
========

  * Function: tabloids,
  * Usage:
        tabloids(p)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
  * Outputs:
      * an instance of the type TableauList, the list of
        tabloids

Description
===========

Tabloids are the equivalence class of tableaux under the row permutation
equivalence relation. Two tabloids are row permutation equivalent if one can be
obtained from the other by permuting elements in its rows. For every tabloid
there is a unique representative such that its rows are increasing. This
representatives are the ones calculated by the method tabloids().

Tabloids are the basis of the permutation modules from which the Specht Modules
are constructed.

+-----------------------------------------------------------------------------+
|i1 : p = new Partition from {3,2}                                            |
|                                                                             |
|o1 = Partition{3, 2}                                                         |
|                                                                             |
|o1 : Partition                                                               |
+-----------------------------------------------------------------------------+
|i2 : tabloids p                                                              |
|                                                                             |
|o2 = {| 0 1 2 |, | 0 1 3 |, | 0 1 4 |, | 0 2 3 |, | 0 2 4 |, | 0 3 4 |, | 1 2|
|      | 3 4 |    | 2 4 |    | 2 3 |    | 1 4 |    | 1 3 |    | 1 2 |    | 0 4|
|                                                                             |
|o2 : TableauList                                                             |
|-----------------------------------------------------------------------------|
|3 |, | 1 2 4 |, | 1 3 4 |, | 2 3 4 |}                                        |
||    | 0 3 |    | 0 2 |    | 0 1 |                                           |
+-----------------------------------------------------------------------------+

Ways to use this method:
========================

  * tabloids(Partition) -- the list of tabloids
    for a given partition

toListOfTableaux(TableauList) -- converts an object of type TableauList into a list of YoungTableau objects
***********************************************************************************************************

Synopsis
========

  * Function: toListOfTableaux,
  * Usage:
        toListOfTableaux(tableaux)
  * Inputs:
      * tableaux, an instance of the type TableauList,
  * Outputs:
      * a list (Macaulay2Doc), a list of the tableaux stored in the
        TableauList

Description
===========

+---------------------------------+
|i1 : p = new Partition from {2,1}|
|                                 |
|o1 = Partition{2, 1}             |
|                                 |
|o1 : Partition                   |
+---------------------------------+
|i2 : y1 = youngTableau(p,{0,1,2})|
|                                 |
|o2 = | 0 1 |                     |
|     | 2 |                       |
|                                 |
|o2 : YoungTableau                |
+---------------------------------+
|i3 : y2 = youngTableau(p,{0,2,1})|
|                                 |
|o3 = | 0 2 |                     |
|     | 1 |                       |
|                                 |
|o3 : YoungTableau                |
+---------------------------------+
|i4 : y3 = youngTableau(p,{1,2,0})|
|                                 |
|o4 = | 1 2 |                     |
|     | 0 |                       |
|                                 |
|o4 : YoungTableau                |
+---------------------------------+
|i5 : t = tableauList p           |
|                                 |
|o5 = {}                          |
|                                 |
|o5 : TableauList                 |
+---------------------------------+
|i6 : addTableau(t, y1)           |
|                                 |
|o6 = {| 0 1 |}                   |
|      | 2 |                      |
|                                 |
|o6 : TableauList                 |
+---------------------------------+
|i7 : addTableau(t, y2)           |
|                                 |
|o7 = {| 0 1 |, | 0 2 |}          |
|      | 2 |    | 1 |             |
|                                 |
|o7 : TableauList                 |
+---------------------------------+
|i8 : addTableau(t, y3)           |
|                                 |
|o8 = {| 0 1 |, | 0 2 |, | 1 2 |} |
|      | 2 |    | 1 |    | 0 |    |
|                                 |
|o8 : TableauList                 |
+---------------------------------+
|i9 : toListOfTableaux t          |
|                                 |
|o9 = {| 0 1 |, | 0 2 |, | 1 2 |} |
|      | 2 |    | 1 |    | 0 |    |
|                                 |
|o9 : List                        |
+---------------------------------+

Ways to use this method:
========================

  * toListOfTableaux(TableauList), --
    converts an object of type TableauList into a list of YoungTableau objects

vandermondeDeterminant -- the vandermonde determinant for a set of generators of a ring
***************************************************************************************

Synopsis
========

  * Usage:
        vandermondeDeterminant(l,R)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc),
      * l, a list (Macaulay2Doc), a subset of the indices of the
        generators of R
  * Optional inputs (Macaulay2Doc),:
      * AsExpression, => a Boolean value (Macaulay2Doc),
        default value false, a Boolean value, default
        value is false. If true it returns the determinant as a product
        expression This is a particularly useful way to reduce the size of the
        object since a Vandermonde determinant has n! terms but only n*(n-1)/2
        factors.
  * Outputs:
      * a ring element (Macaulay2Doc), the determinant of
        the Vandermonde matrix formed by the generators indexed by l.

Description
===========

A Vandermonde matrix is a matrix of $n$ elements is constructed by putting in
each column all the powers from 0 to $n-1$ of each of the elements.

If $x_i$ are the elements used to construct the matrix then it can be proven
that the determinant has the following form.

$\prod_{0 \leq i < j < n} (x_j-x_i) $

+----------------------------------------------+
|i1 : R = QQ[x_0..x_3]                         |
|                                              |
|o1 = R                                        |
|                                              |
|o1 : PolynomialRing                           |
+----------------------------------------------+
|i2 : vandermondeDeterminant({0,2,3},R)        |
|                                              |
|        2        2    2      2        2      2|
|o2 = - x x  + x x  + x x  - x x  - x x  + x x |
|        0 2    0 2    0 3    2 3    0 3    2 3|
|                                              |
|o2 : R                                        |
+----------------------------------------------+
|i3 : factor oo                                |
|                                              |
|o3 = (x  - x )(x  - x )(x  - x )(-1)          |
|       2    3   0    3   0    2               |
|                                              |
|o3 : Expression of class Product              |
+----------------------------------------------+

Ways to use vandermondeDeterminant :
====================================

  * "vandermondeDeterminant(List,PolynomialRing)"

For the programmer
==================

The object vandermondeDeterminant, is a
method function with options (Macaulay2Doc).

YoungTableau -- the class of Young Tableaux
*******************************************

Description
===========

This type represents a Young Tableau. It is implemented as a MutableHashTable.
This hash table stores a partition that represents a shape of the tableau. The
filling of the tableau is stored as a mutable list.

+-------------------------------------------------+
|i1 : p = new Partition from {3,2}                |
|                                                 |
|o1 = Partition{3, 2}                             |
|                                                 |
|o1 : Partition                                   |
+-------------------------------------------------+
|i2 : y = youngTableau(p,{1,0,2,3,4})             |
|                                                 |
|o2 = | 1 0 2 |                                   |
|     | 3 4 |                                     |
|                                                 |
|o2 : YoungTableau                                |
+-------------------------------------------------+
|i3 : peek y                                      |
|                                                 |
|o3 = YoungTableau{partition => Partition{3, 2}  }|
|                  values => MutableList{...5...} |
+-------------------------------------------------+

Functions and methods returning an object of class YoungTableau :
=================================================================

  * "listToTableau" -- see listToTableau(List),
    -- constructs a Young Tableau from a doubly nested list of numbers
  * youngTableau -- the constructor method for the class
    YoungTableau

Methods that use an object of class YoungTableau :
==================================================

  * addTableau(TableauList,YoungTableau)
    -- adds a Young Tableau in the
    list
  * columnStabilizer(YoungTableau),
    -- the column stabilizer of the tableau
  * entries(YoungTableau) -- returns the
    filling of the tableau
  * firstRowDescent(YoungTableau), --
    retrieves the first row descent of a young tableau
  * "garnirElement(YoungTableau)" -- see garnirElement, --
    a SpechtModuleElement that is equal to zero
  * "garnirElement(YoungTableau,ZZ)" -- see garnirElement,
    -- a SpechtModuleElement that is equal to zero
  * "garnirElement(YoungTableau,ZZ,ZZ,ZZ)" -- see garnirElement,
    -- a SpechtModuleElement that is equal to zero
  * higherSpechtPolynomial(YoungTableau,YoungTableau,PolynomialRing),
    -- the higher Specht polynomial index by the pair of standard tableaux
    (S,T)
  * "higherSpechtPolynomials(YoungTableau,PolynomialRing)" -- see
    higherSpechtPolynomials, -- a method that gives
    sets of higher Specht polynomials
  * "higherSpechtPolynomials(YoungTableau,TableauList,PolynomialRing)" -- see
    higherSpechtPolynomials, -- a method that
    gives sets of higher Specht polynomials
  * indexMonomial(YoungTableau,YoungTableau,PolynomialRing)
    -- a
    monomial that represents an index tableau
  * indexTableau(YoungTableau) -- the
    index tableau for a given tableau
  * numColumns(YoungTableau) -- returns
    the number of columns of a tableau
  * numRows(YoungTableau) -- returns the
    number of rows of a tableau
  * readingWord(YoungTableau) -- gives
    the reading word of a given tableau
  * rowPermutationTableaux(YoungTableau)
    -- the list of row permutations
    without repetitions in columns
  * rowStabilizer(YoungTableau) -- the
    row stabilizer of the tableau
  * size(YoungTableau) -- returns the number of
    cells of a tableau
  * sortColumnsTableau(YoungTableau)
    -- a method for
  * "spechtModuleElement(YoungTableau)" -- see spechtModuleElement,
    -- the constructor for the class SpechtModuleElement
  * "spechtModuleElement(YoungTableau,QQ)" -- see spechtModuleElement,
    -- the constructor for the class SpechtModuleElement
  * "spechtModuleElement(YoungTableau,ZZ)" -- see spechtModuleElement,
    -- the constructor for the class SpechtModuleElement
  * spechtPolynomial(YoungTableau,PolynomialRing)
    -- the Specht
    polynomial indexed by a standard tableau
  * "straighteningAlgorithm(YoungTableau)" -- see straighteningAlgorithm,
    -- an algorithm for expressing any polytabloid as
    linear combinations of standard polytabloids
  * "straighteningAlgorithm(YoungTableau,ZZ)" -- see
    straighteningAlgorithm, -- an algorithm for
    expressing any polytabloid as linear combinations of standard polytabloids
  * tableauToList(YoungTableau), --
    converts a YoungTableau to list form
  * "net(YoungTableau)"
  * YoungTableau == YoungTableau -- checks
    whether two tableaux are equivalent
  * YoungTableau ? YoungTableau -- an order
    of YoungTableaux
  * YoungTableau ^ ZZ -- retrieves a row from a Young
    Tableau
  * YoungTableau _ Sequence -- retrieves the
    entry in cell (a,b) from a Young Tableau
  * YoungTableau _ Sequence = Thing,
    -- changes the entry in cell (a,b) from a Young Tableau
  * YoungTableau _ ZZ -- retrieves a column from a
    Young Tableau
  * youngTableau(YoungTableau), --
    creates a copy of a YoungTableau object

For the programmer
==================

The object YoungTableau, is a type (Macaulay2Doc),
with ancestor classes MutableHashTable (Macaulay2Doc),
< HashTable (Macaulay2Doc) <
Thing (Macaulay2Doc).

youngTableau -- the constructor method for the class YoungTableau
*****************************************************************

Synopsis
========

  * Usage:
        youngTableau(p,l)
  * Inputs:
      * p, an instance of the type Partition (Macaulay2Doc),
        the shape of the tableau
      * l, a list (Macaulay2Doc), the filling of the tableau, if it
        is not provided then it is assume that the filling is zero.
  * Outputs:
      * an instance of the type YoungTableau, a young
        tableau with the given shape and filling

See also
========

  * YoungTableau -- the class of Young Tableaux

Ways to use youngTableau :
==========================

  * "youngTableau(Partition)"
  * "youngTableau(Partition,List)"
  * "youngTableau(Partition,MutableList)"
  * youngTableau(YoungTableau), --
    creates a copy of a YoungTableau object

For the programmer
==================

The object youngTableau, is a method function (Macaulay2Doc).

YoungTableau == YoungTableau -- checks whether two tableaux are equivalent
**************************************************************************

Synopsis
========

  * Operator: == (Macaulay2Doc),
  * Usage:
        y1 == y2
  * Inputs:
      * y1, an instance of the type YoungTableau,
      * y2, an instance of the type YoungTableau,
  * Outputs:
      * an integer (Macaulay2Doc), true if the shape and filling of
        tableaux y1 and y2 are the same

Description
===========

+---------------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {3,2},{0,2,1,3,4})    |
|                                                               |
|o1 = | 0 2 1 |                                                 |
|     | 3 4 |                                                   |
|                                                               |
|o1 : YoungTableau                                              |
+---------------------------------------------------------------+
|i2 : y1 = youngTableau(new Partition from {3,2},{0,2,1,3,4})   |
|                                                               |
|o2 = | 0 2 1 |                                                 |
|     | 3 4 |                                                   |
|                                                               |
|o2 : YoungTableau                                              |
+---------------------------------------------------------------+
|i3 : y == y1                                                   |
|                                                               |
|o3 = true                                                      |
+---------------------------------------------------------------+
|i4 : y2 =  youngTableau(new Partition from {2,2,1},{0,2,1,3,4})|
|                                                               |
|o4 = | 0 2 |                                                   |
|     | 1 3 |                                                   |
|     | 4 |                                                     |
|                                                               |
|o4 : YoungTableau                                              |
+---------------------------------------------------------------+
|i5 : y == y2                                                   |
|                                                               |
|o5 = false                                                     |
+---------------------------------------------------------------+

Ways to use this method:
========================

  * YoungTableau == YoungTableau -- checks
    whether two tableaux are equivalent

YoungTableau ? YoungTableau -- an order of YoungTableaux
********************************************************

Synopsis
========

  * Operator: ? (Macaulay2Doc),
  * Usage:
        y1 ? y2
  * Inputs:
      * y1, an instance of the type YoungTableau,
      * y2, an instance of the type YoungTableau,
  * Outputs:
      * a Boolean value (Macaulay2Doc), either "=", "<" or  ">"

Description
===========

The order implemented checks where is the first row descent of the tableau.
Then it applies lexicographical order to the coordinates of these cells.

If the row descent is in the same cell then the lexicographical order for the
filling is outputted.

This order is implemented for th net of SpechtModuleElement so that the terms
with some row descent appear last.

+---------------------------------+
|i1 : p = new Partition from {2,1}|
|                                 |
|o1 = Partition{2, 1}             |
|                                 |
|o1 : Partition                   |
+---------------------------------+
|i2 : y1 = youngTableau(p,{1,0,2})|
|                                 |
|o2 = | 1 0 |                     |
|     | 2 |                       |
|                                 |
|o2 : YoungTableau                |
+---------------------------------+
|i3 : y2 = youngTableau(p,{0,2,1})|
|                                 |
|o3 = | 0 2 |                     |
|     | 1 |                       |
|                                 |
|o3 : YoungTableau                |
+---------------------------------+
|i4 : y1 ? y2                     |
|                                 |
|o4 = >                           |
|                                 |
|o4 : Keyword                     |
+---------------------------------+
|i5 : sort {y1,y2}                |
|                                 |
|o5 = {| 0 2 |, | 1 0 |}          |
|      | 1 |    | 2 |             |
|                                 |
|o5 : List                        |
+---------------------------------+

Ways to use this method:
========================

  * YoungTableau ? YoungTableau -- an order
    of YoungTableaux

YoungTableau ^ ZZ -- retrieves a row from a Young Tableau
*********************************************************

Synopsis
========

  * Operator: ^ (Macaulay2Doc),
  * Usage:
        y^n
  * Inputs:
      * y, an instance of the type YoungTableau,
      * n, an integer (Macaulay2Doc), the number of the row
  * Outputs:
      * an integer (Macaulay2Doc), the number added

Description
===========

+-----------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {3,2},{0,2,1,3,4})|
|                                                           |
|o1 = | 0 2 1 |                                             |
|     | 3 4 |                                               |
|                                                           |
|o1 : YoungTableau                                          |
+-----------------------------------------------------------+
|i2 : y^0                                                   |
|                                                           |
|o2 = {0, 2, 1}                                             |
|                                                           |
|o2 : List                                                  |
+-----------------------------------------------------------+
|i3 : y^1                                                   |
|                                                           |
|o3 = {3, 4}                                                |
|                                                           |
|o3 : List                                                  |
+-----------------------------------------------------------+

Ways to use this method:
========================

  * YoungTableau ^ ZZ -- retrieves a row from a Young
    Tableau

YoungTableau _ Sequence -- retrieves the entry in cell (a,b) from a Young Tableau
*********************************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        y_(a,b)
  * Inputs:
      * y, an instance of the type YoungTableau,
      * pos, a sequence (Macaulay2Doc), the position (a,b) of
        the cell where a is the row and b the column
  * Outputs:
      * an integer (Macaulay2Doc), the number in the cell at the
        position (a,b) of the tableau y

Description
===========

+---------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {2,2},{0,2,1,3})|
|                                                         |
|o1 = | 0 2 |                                             |
|     | 1 3 |                                             |
|                                                         |
|o1 : YoungTableau                                        |
+---------------------------------------------------------+
|i2 : y_(0,0)                                             |
|                                                         |
|o2 = 0                                                   |
+---------------------------------------------------------+
|i3 : y_(1,1)                                             |
|                                                         |
|o3 = 3                                                   |
+---------------------------------------------------------+

Ways to use this method:
========================

  * YoungTableau _ Sequence -- retrieves the
    entry in cell (a,b) from a Young Tableau

YoungTableau _ Sequence = Thing -- changes the entry in cell (a,b) from a Young Tableau
***************************************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        y_(a,b) = e
  * Inputs:
      * y, an instance of the type YoungTableau,
      * pos, a sequence (Macaulay2Doc), the position (a,b) of
        the cell where a is the row and b the column
      * e, a thing (Macaulay2Doc), a number, the new entry of the
        cell
  * Outputs:
      * an instance of the type YoungTableau, the number
        in the cell at the position (a,b) of the tableau y

Description
===========

+---------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {2,2},{0,2,1,3})|
|                                                         |
|o1 = | 0 2 |                                             |
|     | 1 3 |                                             |
|                                                         |
|o1 : YoungTableau                                        |
+---------------------------------------------------------+
|i2 : y_(0,0)=1                                           |
|                                                         |
|o2 = 1                                                   |
+---------------------------------------------------------+
|i3 : y                                                   |
|                                                         |
|o3 = | 1 2 |                                             |
|     | 1 3 |                                             |
|                                                         |
|o3 : YoungTableau                                        |
+---------------------------------------------------------+

Ways to use this method:
========================

  * YoungTableau _ Sequence = Thing,
    -- changes the entry in cell (a,b) from a Young Tableau

YoungTableau _ ZZ -- retrieves a column from a Young Tableau
************************************************************

Synopsis
========

  * Operator: _ (Macaulay2Doc),
  * Usage:
        y_n
  * Inputs:
      * y, an instance of the type YoungTableau,
      * n, an integer (Macaulay2Doc), the number of the row
  * Outputs:
      * an integer (Macaulay2Doc), a list of the numbers that appear
        in row n of y

Description
===========

+-----------------------------------------------------------+
|i1 : y = youngTableau(new Partition from {3,2},{0,2,1,3,4})|
|                                                           |
|o1 = | 0 2 1 |                                             |
|     | 3 4 |                                               |
|                                                           |
|o1 : YoungTableau                                          |
+-----------------------------------------------------------+
|i2 : y_0                                                   |
|                                                           |
|o2 = {0, 3}                                                |
|                                                           |
|o2 : List                                                  |
+-----------------------------------------------------------+
|i3 : y_1                                                   |
|                                                           |
|o3 = {2, 4}                                                |
|                                                           |
|o3 : List                                                  |
+-----------------------------------------------------------+

Ways to use this method:
========================

  * YoungTableau _ ZZ -- retrieves a column from a
    Young Tableau

youngTableau(YoungTableau) -- creates a copy of a YoungTableau object
*********************************************************************

Synopsis
========

  * Function: youngTableau,
  * Usage:
        youngTableau(y)
  * Inputs:
      * y, an instance of the type YoungTableau, a Young
        tableau
  * Outputs:
      * an instance of the type YoungTableau, a copy of y

Description
===========

+---------------------------------+
|i1 : p = new Partition from {3,2}|
|                                 |
|o1 = Partition{3, 2}             |
|                                 |
|o1 : Partition                   |
+---------------------------------+
|i2 : l = {2,1,0,3,4}             |
|                                 |
|o2 = {2, 1, 0, 3, 4}             |
|                                 |
|o2 : List                        |
+---------------------------------+
|i3 : y = youngTableau(p,l)       |
|                                 |
|o3 = | 2 1 0 |                   |
|     | 3 4 |                     |
|                                 |
|o3 : YoungTableau                |
+---------------------------------+
|i4 : y1 = youngTableau y         |
|                                 |
|o4 = | 2 1 0 |                   |
|     | 3 4 |                     |
|                                 |
|o4 : YoungTableau                |
+---------------------------------+
|i5 : y == y1                     |
|                                 |
|o5 = true                        |
+---------------------------------+
|i6 : y === y1                    |
|                                 |
|o6 = false                       |
+---------------------------------+

Ways to use this method:
========================

  * youngTableau(YoungTableau), --
    creates a copy of a YoungTableau object