# Representations of the Symmetric Group#

Todo

• construct the product of two irreducible representations.

• implement Induction/Restriction of representations.

Warning

This code uses a different convention than in Sagan’s book “The Symmetric Group”

class sage.combinat.symmetric_group_representations.GarsiaProcesiModule(SGA, shape)[source]#

A Garsia-Procesi module.

Let $$\lambda$$ be a partition of $$n$$ and $$R$$ be a commutative ring. The Garsia-Procesi module is defined by $$R_{\lambda} := R[x_1, \ldots, x_n] / I_{\lambda}$$, where

$I_{\lambda} := \langle e_r(x_{i_1}, \ldots, x_{i_k}) \mid \{i_1, \ldots, i_k\} \subseteq [n] \text{ and } k \geq r > k - d_k(\lambda) \rangle,$

with $$e_r$$ being the $$r$$-the elementary symmetric function and $$d_k(\lambda) = \lambda'_n + \cdots + \lambda'_{n+1-k}$$, is the Tanisaki ideal.

If we consider $$R = \QQ$$, then the Garsia-Procesi module has the following interpretation. Let $$\mathcal{F}_n = GL_n / B$$ denote the (complex type A) flag variety. Consider the Springer fiber $$F_{\lambda} \subseteq \mathcal{F}_n$$ associated to a nilpotent matrix with Jordan blocks sizes $$\lambda$$. Springer showed that the cohomology ring $$H^*(F_{\lambda})$$ admits a graded $$S_n$$-action that agrees with the induced representation of the sign representation of the Young subgroup $$S_{\lambda}$$. From work of De Concini and Procesi, this $$S_n$$-representation is isomorphic to $$R_{\lambda}$$. Moreover, the graded Frobenius image is known to be a modified Hall-Littlewood polynomial.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 7)
sage: GP421 = SGA.garsia_procesi_module([4, 2, 1])
sage: GP421.dimension()
105
sage: v = GP421.an_element(); v
-gp1 - gp2 - gp3 - gp4 - gp5 - gp6
sage: SGA.an_element() * v
-6*gp1 - 6*gp2 - 6*gp3 - 6*gp4 - 6*gp5 - 5*gp6

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(7))
>>> GP421 = SGA.garsia_procesi_module([Integer(4), Integer(2), Integer(1)])
>>> GP421.dimension()
105
>>> v = GP421.an_element(); v
-gp1 - gp2 - gp3 - gp4 - gp5 - gp6
>>> SGA.an_element() * v
-6*gp1 - 6*gp2 - 6*gp3 - 6*gp4 - 6*gp5 - 5*gp6


We verify the result is a modified Hall-Littlewood polynomial by using the $$Q'$$ Hall-Littlewood polynomials, replacing $$q \mapsto q^{-1}$$ and multiplying by the smallest power of $$q$$ so the coefficients are again polynomials:

sage: GP421.graded_frobenius_image()
q^4*s[4, 2, 1] + q^3*s[4, 3] + q^3*s[5, 1, 1] + (q^3+q^2)*s[5, 2]
+ (q^2+q)*s[6, 1] + s[7]
sage: R.<q> = QQ[]
sage: Sym = SymmetricFunctions(R)
sage: s = Sym.s()
sage: Qp = Sym.hall_littlewood(q).Qp()
sage: mHL = s(Qp[4,2,1]); mHL
s[4, 2, 1] + q*s[4, 3] + q*s[5, 1, 1] + (q^2+q)*s[5, 2]
+ (q^3+q^2)*s[6, 1] + q^4*s[7]
sage: mHL.map_coefficients(lambda c: R(q^4*c(q^-1)))
q^4*s[4, 2, 1] + q^3*s[4, 3] + q^3*s[5, 1, 1] + (q^3+q^2)*s[5, 2]
+ (q^2+q)*s[6, 1] + s[7]

>>> from sage.all import *
q^4*s[4, 2, 1] + q^3*s[4, 3] + q^3*s[5, 1, 1] + (q^3+q^2)*s[5, 2]
+ (q^2+q)*s[6, 1] + s[7]
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> Sym = SymmetricFunctions(R)
>>> s = Sym.s()
>>> Qp = Sym.hall_littlewood(q).Qp()
>>> mHL = s(Qp[Integer(4),Integer(2),Integer(1)]); mHL
s[4, 2, 1] + q*s[4, 3] + q*s[5, 1, 1] + (q^2+q)*s[5, 2]
+ (q^3+q^2)*s[6, 1] + q^4*s[7]
>>> mHL.map_coefficients(lambda c: R(q**Integer(4)*c(q**-Integer(1))))
q^4*s[4, 2, 1] + q^3*s[4, 3] + q^3*s[5, 1, 1] + (q^3+q^2)*s[5, 2]
+ (q^2+q)*s[6, 1] + s[7]


We show that the maximal degree component corresponds to the Yamanouchi words of content $$\lambda$$:

sage: B = GP421.graded_decomposition(4).basis()
sage: top_deg = [Word([i+1 for i in b.lift().lift().exponents()[0]]) for b in B]
sage: yamanouchi = [P.to_packed_word() for P in OrderedSetPartitions(range(7), [4, 2, 1])
....:               if P.to_packed_word().reversal().is_yamanouchi()]
sage: set(top_deg) == set(yamanouchi)
True

>>> from sage.all import *
>>> top_deg = [Word([i+Integer(1) for i in b.lift().lift().exponents()[Integer(0)]]) for b in B]
>>> yamanouchi = [P.to_packed_word() for P in OrderedSetPartitions(range(Integer(7)), [Integer(4), Integer(2), Integer(1)])
...               if P.to_packed_word().reversal().is_yamanouchi()]
>>> set(top_deg) == set(yamanouchi)
True

class Element(parent, rep, reduce=True)[source]#
degree()[source]#

Return the degree of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(3), 4)
sage: GP22 = SGA.garsia_procesi_module([2, 2])
sage: for b in GP22.basis():
....:     print(b, b.degree())
gp2*gp3 2
gp1*gp3 2
gp3 1
gp2 1
gp1 1
1 0
sage: v = sum(GP22.basis())
sage: v.degree()
2

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(3)), Integer(4))
>>> GP22 = SGA.garsia_procesi_module([Integer(2), Integer(2)])
>>> for b in GP22.basis():
...     print(b, b.degree())
gp2*gp3 2
gp1*gp3 2
gp3 1
gp2 1
gp1 1
1 0
>>> v = sum(GP22.basis())
>>> v.degree()
2

homogeneous_degree()[source]#

Return the (homogeneous) degree of self if homogeneous otherwise raise an error.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 4)
sage: GP31 = SGA.garsia_procesi_module([3, 1])
sage: for b in GP31.basis():
....:     print(b, b.homogeneous_degree())
gp3 1
gp2 1
gp1 1
1 0
sage: v = sum(GP31.basis()); v
gp1 + gp2 + gp3 + 1
sage: v.homogeneous_degree()
Traceback (most recent call last):
...
ValueError: element is not homogeneous

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(4))
>>> GP31 = SGA.garsia_procesi_module([Integer(3), Integer(1)])
>>> for b in GP31.basis():
...     print(b, b.homogeneous_degree())
gp3 1
gp2 1
gp1 1
1 0
>>> v = sum(GP31.basis()); v
gp1 + gp2 + gp3 + 1
>>> v.homogeneous_degree()
Traceback (most recent call last):
...
ValueError: element is not homogeneous

monomial_coefficients(copy=None)[source]#

Return the monomial coefficients of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(3), 4)
sage: GP31 = SGA.garsia_procesi_module([3, 1])
sage: v = GP31.an_element(); v
-gp1 - gp2 - gp3
sage: v.monomial_coefficients()
{0: 2, 1: 2, 2: 2, 3: 0}

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(3)), Integer(4))
>>> GP31 = SGA.garsia_procesi_module([Integer(3), Integer(1)])
>>> v = GP31.an_element(); v
-gp1 - gp2 - gp3
>>> v.monomial_coefficients()
{0: 2, 1: 2, 2: 2, 3: 0}

to_vector(order=None)[source]#

Return self as a (dense) free module vector.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(3), 4)
sage: GP22 = SGA.garsia_procesi_module([2, 2])
sage: v = GP22.an_element(); v
-gp1 - gp2 - gp3
sage: v.to_vector()
(0, 0, 2, 2, 2, 0)

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(3)), Integer(4))
>>> GP22 = SGA.garsia_procesi_module([Integer(2), Integer(2)])
>>> v = GP22.an_element(); v
-gp1 - gp2 - gp3
>>> v.to_vector()
(0, 0, 2, 2, 2, 0)

basis()[source]#

Return a basis of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 4)
sage: GP = SGA.garsia_procesi_module([2, 2])
sage: GP.basis()
Family (gp2*gp3, gp1*gp3, gp3, gp2, gp1, 1)

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(4))
>>> GP = SGA.garsia_procesi_module([Integer(2), Integer(2)])
>>> GP.basis()
Family (gp2*gp3, gp1*gp3, gp3, gp2, gp1, 1)

dimension()[source]#

Return the dimension of self.

The graded Frobenius character of the Garsia-Procesi module $$R_{\lambda}$$ is given by the modified Hall-Littlewood polynomial $$\widetilde{H}_{\lambda'}(x; q)$$.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 5)
sage: Sym = SymmetricFunctions(QQ)
sage: s = Sym.s()
sage: Qp = Sym.hall_littlewood(1).Qp()
sage: for la in Partitions(5):
....:     print(SGA.garsia_procesi_module(la).dimension(),
....:           sum(c * StandardTableaux(la).cardinality()
....:               for la, c in s(Qp[la])))
1 1
5 5
10 10
20 20
30 30
60 60
120 120

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(5))
>>> Sym = SymmetricFunctions(QQ)
>>> s = Sym.s()
>>> Qp = Sym.hall_littlewood(Integer(1)).Qp()
>>> for la in Partitions(Integer(5)):
...     print(SGA.garsia_procesi_module(la).dimension(),
...           sum(c * StandardTableaux(la).cardinality()
...               for la, c in s(Qp[la])))
1 1
5 5
10 10
20 20
30 30
60 60
120 120

get_order()[source]#

Return the order of the elements in the basis.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 4)
sage: GP = SGA.garsia_procesi_module([2, 2])
sage: GP.get_order()
(0, 1, 2, 3, 4, 5)

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(4))
>>> GP = SGA.garsia_procesi_module([Integer(2), Integer(2)])
>>> GP.get_order()
(0, 1, 2, 3, 4, 5)


Return the graded Brauer character of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: GP311 = SGA.garsia_procesi_module([3, 1, 1])
(6*q^3 + 9*q^2 + 4*q + 1, q + 1, q^3 - q^2 - q + 1)

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> GP311 = SGA.garsia_procesi_module([Integer(3), Integer(1), Integer(1)])
(6*q^3 + 9*q^2 + 4*q + 1, q + 1, q^3 - q^2 - q + 1)


Return the graded character of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 5)
sage: GP = SGA.garsia_procesi_module([2, 2, 1])
(5*q^4 + 11*q^3 + 9*q^2 + 4*q + 1, -q^4 + q^3 + 3*q^2 + 2*q + 1,
q^4 - q^3 + q^2 + 1, -q^4 - q^3 + q + 1, -q^4 + q^3 - q + 1,
q^4 - q^3 - q^2 + 1, q^3 - q^2 - q + 1)
sage: R.<q> = QQ[]
sage: gchi == sum(q^d * D.character()
....:             for d, D in GP.graded_decomposition().items())
True

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(5))
>>> GP = SGA.garsia_procesi_module([Integer(2), Integer(2), Integer(1)])
(5*q^4 + 11*q^3 + 9*q^2 + 4*q + 1, -q^4 + q^3 + 3*q^2 + 2*q + 1,
q^4 - q^3 + q^2 + 1, -q^4 - q^3 + q + 1, -q^4 + q^3 - q + 1,
q^4 - q^3 - q^2 + 1, q^3 - q^2 - q + 1)
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> gchi == sum(q**d * D.character()
...             for d, D in GP.graded_decomposition().items())
True


Return the decomposition of self as a direct sum of representations given by a fixed grading.

INPUT:

• k – (optional) integer; if given, return the $$k$$-th graded part

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: GP32 = SGA.garsia_procesi_module([3, 2])
{0: Subrepresentation with basis {0} of Garsia-Procesi ...,
1: Subrepresentation with basis {0, 1, 2, 3} of Garsia-Procesi ...,
2: Subrepresentation with basis {0, 1, 2, 3, 4} of Garsia-Procesi ...}
True
Subrepresentation with basis {} of Garsia-Procesi module
of shape [3, 2] over Finite Field of size 2

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> GP32 = SGA.garsia_procesi_module([Integer(3), Integer(2)])
{0: Subrepresentation with basis {0} of Garsia-Procesi ...,
1: Subrepresentation with basis {0, 1, 2, 3} of Garsia-Procesi ...,
2: Subrepresentation with basis {0, 1, 2, 3, 4} of Garsia-Procesi ...}
True
Subrepresentation with basis {} of Garsia-Procesi module
of shape [3, 2] over Finite Field of size 2


Return the graded Frobenius image of self.

The graded Frobenius image is the sum of the frobenius_image() of each graded component, which is known to result in the modified Hall-Littlewood polynomial $$\widetilde{H}_{\lambda}(x; q)$$.

EXAMPLES:

We verify that the result is the modified Hall-Littlewood polynomial for $$n = 5$$:

sage: R.<q> = QQ[]
sage: Sym = SymmetricFunctions(R)
sage: s = Sym.s()
sage: Qp = Sym.hall_littlewood(q).Qp()
sage: SGA = SymmetricGroupAlgebra(QQ, 5)
sage: for la in Partitions(5):
....:     d = f[la].degree()
....:     assert f.map_coefficients(lambda c: R(c(~q)*q^d)) == s(Qp[la])

>>> from sage.all import *
>>> R = QQ['q']; (q,) = R._first_ngens(1)
>>> Sym = SymmetricFunctions(R)
>>> s = Sym.s()
>>> Qp = Sym.hall_littlewood(q).Qp()
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(5))
>>> for la in Partitions(Integer(5)):
...     d = f[la].degree()
...     assert f.map_coefficients(lambda c: R(c(~q)*q**d)) == s(Qp[la])


Return the matrix corresponding to the left action of the symmetric group (algebra) element elt on self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(3), 3)
sage: GP = SGA.garsia_procesi_module([1, 1, 1])
sage: elt = SGA.an_element(); elt
[1, 2, 3] + 2*[1, 3, 2] + [3, 1, 2]
[  0   0   0   0   0   0]
[  0 q^2   0   0   0   0]
[  0 q^2   0   0   0   0]
[  0   0   0   q   0   0]
[  0   0   0   q   0   0]
[  0   0   0   0   0   1]
sage: X.parent()
Full MatrixSpace of 6 by 6 dense matrices over
Univariate Polynomial Ring in q over Finite Field of size 3
sage: R.<q> = GF(3)[]
sage: t = R.quotient([q^2+2*q+1]).gen()
[       0        0        0        0        0        0]
[       0 qbar + 2        0        0        0        0]
[       0 qbar + 2        0        0        0        0]
[       0        0        0     qbar        0        0]
[       0        0        0     qbar        0        0]
[       0        0        0        0        0        1]

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(3)), Integer(3))
>>> GP = SGA.garsia_procesi_module([Integer(1), Integer(1), Integer(1)])
>>> elt = SGA.an_element(); elt
[1, 2, 3] + 2*[1, 3, 2] + [3, 1, 2]
[  0   0   0   0   0   0]
[  0 q^2   0   0   0   0]
[  0 q^2   0   0   0   0]
[  0   0   0   q   0   0]
[  0   0   0   q   0   0]
[  0   0   0   0   0   1]
>>> X.parent()
Full MatrixSpace of 6 by 6 dense matrices over
Univariate Polynomial Ring in q over Finite Field of size 3
>>> R = GF(Integer(3))['q']; (q,) = R._first_ngens(1)
>>> t = R.quotient([q**Integer(2)+Integer(2)*q+Integer(1)]).gen()
[       0        0        0        0        0        0]
[       0 qbar + 2        0        0        0        0]
[       0 qbar + 2        0        0        0        0]
[       0        0        0     qbar        0        0]
[       0        0        0     qbar        0        0]
[       0        0        0        0        0        1]

one_basis()[source]#

Return the index of the basis element $$1$$.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 4)
sage: GP = SGA.garsia_procesi_module([2, 2])
sage: GP.one_basis()
5

>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(4))
>>> GP = SGA.garsia_procesi_module([Integer(2), Integer(2)])
>>> GP.one_basis()
5

class sage.combinat.symmetric_group_representations.SpechtRepresentation(parent, partition)[source]#
representation_matrix(permutation)[source]#

Return the matrix representing the permutation in this irreducible representation.

Note

This method caches the results.

EXAMPLES:

sage: spc = SymmetricGroupRepresentation([3,1], 'specht')
sage: spc.representation_matrix(Permutation([2,1,3,4]))
[ 0 -1  0]
[-1  0  0]
[ 0  0  1]
sage: spc.representation_matrix(Permutation([3,2,1,4]))
[0 0 1]
[0 1 0]
[1 0 0]

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(1)], 'specht')
>>> spc.representation_matrix(Permutation([Integer(2),Integer(1),Integer(3),Integer(4)]))
[ 0 -1  0]
[-1  0  0]
[ 0  0  1]
>>> spc.representation_matrix(Permutation([Integer(3),Integer(2),Integer(1),Integer(4)]))
[0 0 1]
[0 1 0]
[1 0 0]

scalar_product(u, v)[source]#

Return 0 if u+v is not a permutation, and the signature of the permutation otherwise.

This is the scalar product of a vertex u of the underlying Yang-Baxter graph with the vertex v in the ‘dual’ Yang-Baxter graph.

EXAMPLES:

sage: spc = SymmetricGroupRepresentation([3,2], 'specht')
sage: spc.scalar_product((1,0,2,1,0),(0,3,0,3,0))
-1
sage: spc.scalar_product((1,0,2,1,0),(3,0,0,3,0))
0

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(2)], 'specht')
>>> spc.scalar_product((Integer(1),Integer(0),Integer(2),Integer(1),Integer(0)),(Integer(0),Integer(3),Integer(0),Integer(3),Integer(0)))
-1
>>> spc.scalar_product((Integer(1),Integer(0),Integer(2),Integer(1),Integer(0)),(Integer(3),Integer(0),Integer(0),Integer(3),Integer(0)))
0

scalar_product_matrix(permutation=None)[source]#

Return the scalar product matrix corresponding to permutation.

The entries are given by the scalar products of u and permutation.action(v), where u is a vertex in the underlying Yang-Baxter graph and v is a vertex in the dual graph.

EXAMPLES:

sage: spc = SymmetricGroupRepresentation([3,1], 'specht')
sage: spc.scalar_product_matrix()
[ 1  0  0]
[ 0 -1  0]
[ 0  0  1]

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(1)], 'specht')
>>> spc.scalar_product_matrix()
[ 1  0  0]
[ 0 -1  0]
[ 0  0  1]

class sage.combinat.symmetric_group_representations.SpechtRepresentations(n, ring=None, cache_matrices=True)[source]#
Element[source]#

alias of SpechtRepresentation

sage.combinat.symmetric_group_representations.SymmetricGroupRepresentation(partition, implementation='specht', ring=None, cache_matrices=True)[source]#

The irreducible representation of the symmetric group corresponding to partition.

INPUT:

• partition – a partition of a positive integer

• implementation – string (default: "specht"), one of:

• "seminormal" – for Young’s seminormal representation

• "orthogonal" – for Young’s orthogonal representation

• "specht" – for Specht’s representation

• ring – the ring over which the representation is defined

• cache_matrices – boolean (default: True) if True, then any representation matrices that are computed are cached

EXAMPLES:

Young’s orthogonal representation: the matrices are orthogonal.

sage: orth = SymmetricGroupRepresentation([2,1], "orthogonal"); orth            # needs sage.symbolic
Orthogonal representation of the symmetric group corresponding to [2, 1]
sage: all(a*a.transpose() == a.parent().identity_matrix() for a in orth)        # needs sage.symbolic
True

>>> from sage.all import *
>>> orth = SymmetricGroupRepresentation([Integer(2),Integer(1)], "orthogonal"); orth            # needs sage.symbolic
Orthogonal representation of the symmetric group corresponding to [2, 1]
>>> all(a*a.transpose() == a.parent().identity_matrix() for a in orth)        # needs sage.symbolic
True

sage: # needs sage.symbolic
sage: orth = SymmetricGroupRepresentation([3,2], "orthogonal"); orth
Orthogonal representation of the symmetric group corresponding to [3, 2]
sage: orth([2,1,3,4,5])
[ 1  0  0  0  0]
[ 0  1  0  0  0]
[ 0  0 -1  0  0]
[ 0  0  0  1  0]
[ 0  0  0  0 -1]
sage: orth([1,3,2,4,5])
[          1           0           0           0           0]
[          0        -1/2 1/2*sqrt(3)           0           0]
[          0 1/2*sqrt(3)         1/2           0           0]
[          0           0           0        -1/2 1/2*sqrt(3)]
[          0           0           0 1/2*sqrt(3)         1/2]
sage: orth([1,2,4,3,5])
[       -1/3 2/3*sqrt(2)           0           0           0]
[2/3*sqrt(2)         1/3           0           0           0]
[          0           0           1           0           0]
[          0           0           0           1           0]
[          0           0           0           0          -1]

>>> from sage.all import *
>>> # needs sage.symbolic
>>> orth = SymmetricGroupRepresentation([Integer(3),Integer(2)], "orthogonal"); orth
Orthogonal representation of the symmetric group corresponding to [3, 2]
>>> orth([Integer(2),Integer(1),Integer(3),Integer(4),Integer(5)])
[ 1  0  0  0  0]
[ 0  1  0  0  0]
[ 0  0 -1  0  0]
[ 0  0  0  1  0]
[ 0  0  0  0 -1]
>>> orth([Integer(1),Integer(3),Integer(2),Integer(4),Integer(5)])
[          1           0           0           0           0]
[          0        -1/2 1/2*sqrt(3)           0           0]
[          0 1/2*sqrt(3)         1/2           0           0]
[          0           0           0        -1/2 1/2*sqrt(3)]
[          0           0           0 1/2*sqrt(3)         1/2]
>>> orth([Integer(1),Integer(2),Integer(4),Integer(3),Integer(5)])
[       -1/3 2/3*sqrt(2)           0           0           0]
[2/3*sqrt(2)         1/3           0           0           0]
[          0           0           1           0           0]
[          0           0           0           1           0]
[          0           0           0           0          -1]


The Specht representation:

sage: spc = SymmetricGroupRepresentation([3,2], "specht")
sage: spc.scalar_product_matrix(Permutation([1,2,3,4,5]))
[ 1  0  0  0  0]
[ 0 -1  0  0  0]
[ 0  0  1  0  0]
[ 0  0  0  1  0]
[-1  0  0  0 -1]
sage: spc.scalar_product_matrix(Permutation([5,4,3,2,1]))
[ 1 -1  0  1  0]
[ 0  0  1  0 -1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[-1  0  0  0 -1]
sage: spc([5,4,3,2,1])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
sage: spc.verify_representation()
True

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(2)], "specht")
>>> spc.scalar_product_matrix(Permutation([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5)]))
[ 1  0  0  0  0]
[ 0 -1  0  0  0]
[ 0  0  1  0  0]
[ 0  0  0  1  0]
[-1  0  0  0 -1]
>>> spc.scalar_product_matrix(Permutation([Integer(5),Integer(4),Integer(3),Integer(2),Integer(1)]))
[ 1 -1  0  1  0]
[ 0  0  1  0 -1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[-1  0  0  0 -1]
>>> spc([Integer(5),Integer(4),Integer(3),Integer(2),Integer(1)])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
>>> spc.verify_representation()
True


By default, any representation matrices that are computed are cached:

sage: spc = SymmetricGroupRepresentation([3,2], "specht")
sage: spc([5,4,3,2,1])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
sage: spc._cache__representation_matrix
{(([5, 4, 3, 2, 1],), ()): [ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]}

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(2)], "specht")
>>> spc([Integer(5),Integer(4),Integer(3),Integer(2),Integer(1)])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
>>> spc._cache__representation_matrix
{(([5, 4, 3, 2, 1],), ()): [ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]}


This can be turned off with the keyword cache_matrices:

sage: spc = SymmetricGroupRepresentation([3,2], "specht", cache_matrices=False)
sage: spc([5,4,3,2,1])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
sage: hasattr(spc, '_cache__representation_matrix')
False

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(3),Integer(2)], "specht", cache_matrices=False)
>>> spc([Integer(5),Integer(4),Integer(3),Integer(2),Integer(1)])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]
>>> hasattr(spc, '_cache__representation_matrix')
False


Note

The implementation is based on the paper [Las].

REFERENCES:

[Las] (1,2)

Alain Lascoux, ‘Young representations of the symmetric group.’ http://phalanstere.univ-mlv.fr/~al/ARTICLES/ProcCrac.ps.gz

AUTHORS:

• Franco Saliola (2009-04-23)

class sage.combinat.symmetric_group_representations.SymmetricGroupRepresentation_generic_class(parent, partition)[source]#

Bases: Element

Generic methods for a representation of the symmetric group.

to_character()[source]#

Return the character of the representation.

EXAMPLES:

The trivial character:

sage: rho = SymmetricGroupRepresentation([3])
sage: chi = rho.to_character(); chi
Character of Symmetric group of order 3! as a permutation group
sage: chi.values()
[1, 1, 1]
sage: all(chi(g) == 1 for g in SymmetricGroup(3))
True

>>> from sage.all import *
>>> rho = SymmetricGroupRepresentation([Integer(3)])
>>> chi = rho.to_character(); chi
Character of Symmetric group of order 3! as a permutation group
>>> chi.values()
[1, 1, 1]
>>> all(chi(g) == Integer(1) for g in SymmetricGroup(Integer(3)))
True


The sign character:

sage: rho = SymmetricGroupRepresentation([1,1,1])
sage: chi = rho.to_character(); chi
Character of Symmetric group of order 3! as a permutation group
sage: chi.values()
[1, -1, 1]
sage: all(chi(g) == g.sign() for g in SymmetricGroup(3))
True

>>> from sage.all import *
>>> rho = SymmetricGroupRepresentation([Integer(1),Integer(1),Integer(1)])
>>> chi = rho.to_character(); chi
Character of Symmetric group of order 3! as a permutation group
>>> chi.values()
[1, -1, 1]
>>> all(chi(g) == g.sign() for g in SymmetricGroup(Integer(3)))
True


The defining representation:

sage: triv = SymmetricGroupRepresentation([4])
sage: hook = SymmetricGroupRepresentation([3,1])
sage: def_rep = lambda p : triv(p).block_sum(hook(p)).trace()
sage: list(map(def_rep, Permutations(4)))
[4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0]
sage: [p.to_matrix().trace() for p in Permutations(4)]
[4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0]

>>> from sage.all import *
>>> triv = SymmetricGroupRepresentation([Integer(4)])
>>> hook = SymmetricGroupRepresentation([Integer(3),Integer(1)])
>>> def_rep = lambda p : triv(p).block_sum(hook(p)).trace()
>>> list(map(def_rep, Permutations(Integer(4))))
[4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0]
>>> [p.to_matrix().trace() for p in Permutations(Integer(4))]
[4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0]

verify_representation()[source]#

Verify the representation.

This tests that the images of the simple transpositions are involutions and tests that the braid relations hold.

EXAMPLES:

sage: spc = SymmetricGroupRepresentation([1,1,1])
sage: spc.verify_representation()
True
sage: spc = SymmetricGroupRepresentation([4,2,1])
sage: spc.verify_representation()
True

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentation([Integer(1),Integer(1),Integer(1)])
>>> spc.verify_representation()
True
>>> spc = SymmetricGroupRepresentation([Integer(4),Integer(2),Integer(1)])
>>> spc.verify_representation()
True

sage.combinat.symmetric_group_representations.SymmetricGroupRepresentations(n, implementation='specht', ring=None, cache_matrices=True)[source]#

Irreducible representations of the symmetric group.

INPUT:

• n – positive integer

• implementation – string (default: "specht"), one of:

• "seminormal" – for Young’s seminormal representation

• "orthogonal" – for Young’s orthogonal representation

• "specht" – for Specht’s representation

• ring – the ring over which the representation is defined

• cache_matrices – boolean (default: True) if True, then any representation matrices that are computed are cached

EXAMPLES:

Young’s orthogonal representation: the matrices are orthogonal.

sage: orth = SymmetricGroupRepresentations(3, "orthogonal"); orth               # needs sage.symbolic
Orthogonal representations of the symmetric group of order 3! over Symbolic Ring
sage: orth.list()                                                               # needs sage.symbolic
[Orthogonal representation of the symmetric group corresponding to [3],
Orthogonal representation of the symmetric group corresponding to [2, 1],
Orthogonal representation of the symmetric group corresponding to [1, 1, 1]]
sage: orth([2,1])([1,2,3])                                                      # needs sage.symbolic
[1 0]
[0 1]

>>> from sage.all import *
>>> orth = SymmetricGroupRepresentations(Integer(3), "orthogonal"); orth               # needs sage.symbolic
Orthogonal representations of the symmetric group of order 3! over Symbolic Ring
>>> orth.list()                                                               # needs sage.symbolic
[Orthogonal representation of the symmetric group corresponding to [3],
Orthogonal representation of the symmetric group corresponding to [2, 1],
Orthogonal representation of the symmetric group corresponding to [1, 1, 1]]
>>> orth([Integer(2),Integer(1)])([Integer(1),Integer(2),Integer(3)])                                                      # needs sage.symbolic
[1 0]
[0 1]


Young’s seminormal representation.

sage: snorm = SymmetricGroupRepresentations(3, "seminormal"); snorm
Seminormal representations of the symmetric group of order 3! over Rational Field
sage: sgn = snorm([1,1,1]); sgn
Seminormal representation of the symmetric group corresponding to [1, 1, 1]
sage: list(map(sgn, Permutations(3)))
[[1], [-1], [-1], [1], [1], [-1]]

>>> from sage.all import *
>>> snorm = SymmetricGroupRepresentations(Integer(3), "seminormal"); snorm
Seminormal representations of the symmetric group of order 3! over Rational Field
>>> sgn = snorm([Integer(1),Integer(1),Integer(1)]); sgn
Seminormal representation of the symmetric group corresponding to [1, 1, 1]
>>> list(map(sgn, Permutations(Integer(3))))
[[1], [-1], [-1], [1], [1], [-1]]


The Specht Representation.

sage: spc = SymmetricGroupRepresentations(5, "specht"); spc
Specht representations of the symmetric group of order 5! over Integer Ring
sage: spc([3,2])([5,4,3,2,1])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]

>>> from sage.all import *
>>> spc = SymmetricGroupRepresentations(Integer(5), "specht"); spc
Specht representations of the symmetric group of order 5! over Integer Ring
>>> spc([Integer(3),Integer(2)])([Integer(5),Integer(4),Integer(3),Integer(2),Integer(1)])
[ 1 -1  0  1  0]
[ 0  0 -1  0  1]
[ 0  0  0 -1  1]
[ 0  1 -1 -1  1]
[ 0  1  0 -1  1]


Note

The implementation is based on the paper [Las].

AUTHORS:

• Franco Saliola (2009-04-23)

class sage.combinat.symmetric_group_representations.SymmetricGroupRepresentations_class(n, ring=None, cache_matrices=True)[source]#

Generic methods for the CombinatorialClass of irreducible representations of the symmetric group.

cardinality()[source]#

Return the cardinality of self.

EXAMPLES:

sage: sp = SymmetricGroupRepresentations(4, "specht")
sage: sp.cardinality()
5

>>> from sage.all import *
>>> sp = SymmetricGroupRepresentations(Integer(4), "specht")
>>> sp.cardinality()
5

class sage.combinat.symmetric_group_representations.YoungRepresentation_Orthogonal(parent, partition)[source]#
class sage.combinat.symmetric_group_representations.YoungRepresentation_Seminormal(parent, partition)[source]#
class sage.combinat.symmetric_group_representations.YoungRepresentation_generic(parent, partition)[source]#

Generic methods for Young’s representations of the symmetric group.

representation_matrix(permutation)[source]#

Return the matrix representing permutation.

EXAMPLES:

sage: orth = SymmetricGroupRepresentation([2,1], "orthogonal")              # needs sage.symbolic
sage: orth.representation_matrix(Permutation([2,1,3]))                      # needs sage.symbolic
[ 1  0]
[ 0 -1]
sage: orth.representation_matrix(Permutation([1,3,2]))                      # needs sage.symbolic
[       -1/2 1/2*sqrt(3)]
[1/2*sqrt(3)         1/2]

>>> from sage.all import *
>>> orth = SymmetricGroupRepresentation([Integer(2),Integer(1)], "orthogonal")              # needs sage.symbolic
>>> orth.representation_matrix(Permutation([Integer(2),Integer(1),Integer(3)]))                      # needs sage.symbolic
[ 1  0]
[ 0 -1]
>>> orth.representation_matrix(Permutation([Integer(1),Integer(3),Integer(2)]))                      # needs sage.symbolic
[       -1/2 1/2*sqrt(3)]
[1/2*sqrt(3)         1/2]

sage: norm = SymmetricGroupRepresentation([2,1], "seminormal")
sage: p = PermutationGroupElement([2,1,3])
sage: norm.representation_matrix(p)
[ 1  0]
[ 0 -1]
sage: p = PermutationGroupElement([1,3,2])
sage: norm.representation_matrix(p)
[-1/2  3/2]
[ 1/2  1/2]

>>> from sage.all import *
>>> norm = SymmetricGroupRepresentation([Integer(2),Integer(1)], "seminormal")
>>> p = PermutationGroupElement([Integer(2),Integer(1),Integer(3)])
>>> norm.representation_matrix(p)
[ 1  0]
[ 0 -1]
>>> p = PermutationGroupElement([Integer(1),Integer(3),Integer(2)])
>>> norm.representation_matrix(p)
[-1/2  3/2]
[ 1/2  1/2]

representation_matrix_for_simple_transposition(i)[source]#

Return the matrix representing the transposition that swaps i and i+1.

EXAMPLES:

sage: orth = SymmetricGroupRepresentation([2,1], "orthogonal")              # needs sage.symbolic
sage: orth.representation_matrix_for_simple_transposition(1)                # needs sage.symbolic
[ 1  0]
[ 0 -1]
sage: orth.representation_matrix_for_simple_transposition(2)                # needs sage.symbolic
[       -1/2 1/2*sqrt(3)]
[1/2*sqrt(3)         1/2]

sage: norm = SymmetricGroupRepresentation([2,1], "seminormal")
sage: norm.representation_matrix_for_simple_transposition(1)
[ 1  0]
[ 0 -1]
sage: norm.representation_matrix_for_simple_transposition(2)
[-1/2  3/2]
[ 1/2  1/2]

>>> from sage.all import *
>>> orth = SymmetricGroupRepresentation([Integer(2),Integer(1)], "orthogonal")              # needs sage.symbolic
>>> orth.representation_matrix_for_simple_transposition(Integer(1))                # needs sage.symbolic
[ 1  0]
[ 0 -1]
>>> orth.representation_matrix_for_simple_transposition(Integer(2))                # needs sage.symbolic
[       -1/2 1/2*sqrt(3)]
[1/2*sqrt(3)         1/2]

>>> norm = SymmetricGroupRepresentation([Integer(2),Integer(1)], "seminormal")
>>> norm.representation_matrix_for_simple_transposition(Integer(1))
[ 1  0]
[ 0 -1]
>>> norm.representation_matrix_for_simple_transposition(Integer(2))
[-1/2  3/2]
[ 1/2  1/2]

class sage.combinat.symmetric_group_representations.YoungRepresentations_Orthogonal(n, ring=None, cache_matrices=True)[source]#
Element[source]#
class sage.combinat.symmetric_group_representations.YoungRepresentations_Seminormal(n, ring=None, cache_matrices=True)[source]#
Element[source]#
sage.combinat.symmetric_group_representations.partition_to_vector_of_contents(partition, reverse=False)[source]#

Return the “vector of contents” associated to partition.

EXAMPLES:

sage: from sage.combinat.symmetric_group_representations import partition_to_vector_of_contents
sage: partition_to_vector_of_contents([3,2])
(0, 1, 2, -1, 0)

>>> from sage.all import *
>>> from sage.combinat.symmetric_group_representations import partition_to_vector_of_contents
>>> partition_to_vector_of_contents([Integer(3),Integer(2)])
(0, 1, 2, -1, 0)