Specht Modules#
AUTHORS:
Travis Scrimshaw (2023-1-22): initial version
- class sage.combinat.specht_module.SpechtModule(SGA, D)#
Bases:
SubmoduleWithBasis
A Specht module.
Let \(S_n\) be the symmetric group on \(n\) letters and \(R\) be a commutative ring. The Specht module \(S^D\) for a diagram \(D\) is an \(S_n\)-module defined as follows. Let
\[R(D) := \sum_{w \in R_D} w, \qquad\qquad C(D) := \sum_{w \in C_D} (-1)^w w,\]where \(R_D\) (resp. \(C_D\)) is the row (resp. column) stabilizer of \(D\). Then, we construct the Specht module \(S^D\) as the left ideal
\[S^D = R[S_n] C(D) R(D),\]where \(R[S_n]\) is the group algebra of \(S_n\) over \(R\).
INPUT:
SGA
– a symmetric group algebraD
– a diagram
EXAMPLES:
We begin by constructing all irreducible Specht modules for the symmetric group \(S_4\) and show that they give a full set of irreducible representations both by having distinct Frobenius characters and the sum of the square of their dimensions is equal to \(4!\):
sage: SP = [la.specht_module(QQ) for la in Partitions(4)] sage: s = SymmetricFunctions(QQ).s() sage: [s(S.frobenius_image()) for S in SP] [s[4], s[3, 1], s[2, 2], s[2, 1, 1], s[1, 1, 1, 1]] sage: sum(S.dimension()^2 for S in SP) 24
Next, we compute the Specht module for a more general diagram for \(S_5\) and compute its irreducible decomposition by using its Frobenius character:
sage: D = [(0,0), (0,1), (1,1), (1,2), (0,3)] sage: SGA = SymmetricGroupAlgebra(QQ, 5) sage: SM = SGA.specht_module(D) sage: SM.dimension() 9 sage: s(SM.frobenius_image()) s[3, 2] + s[4, 1]
This carries a natural (left) action of the symmetric group (algebra):
sage: S5 = SGA.group() sage: v = SM.an_element(); v 2*B[0] + 2*B[1] + 3*B[2] sage: S5([2,1,5,3,4]) * v 3*B[0] + 2*B[1] + 2*B[2] sage: x = SGA.an_element(); x [1, 2, 3, 4, 5] + 2*[1, 2, 3, 5, 4] + 3*[1, 2, 4, 3, 5] + [5, 1, 2, 3, 4] sage: x * v 15*B[0] + 14*B[1] + 16*B[2] - 7*B[5] + 2*B[6] + 2*B[7]
See also
SpechtRepresentation
for an implementation of the representation by matrices.- class Element#
Bases:
IndexedFreeModuleElement
- frobenius_image()#
Return the Frobenius image of
self
.The Frobenius map is defined as the map to symmetric functions
\[F(\chi) = \frac{1}{n!} \sum_{w \in S_n} \chi(w) p_{\rho(w)},\]where \(\chi\) is the character of the \(S_n\)-module
self
, \(p_{\lambda}\) is the powersum symmetric function basis element indexed by \(\lambda\), and \(\rho(w)\) is partition of the cycle type of \(w\). Specifically, this map takes irreducible representations indexed by \(\lambda\) to the Schur function \(s_{\lambda}\).EXAMPLES:
sage: s = SymmetricFunctions(QQ).s() sage: SM = Partition([2,2,1]).specht_module(QQ) sage: s(SM.frobenius_image()) s[2, 2, 1] sage: SM = Partition([4,1]).specht_module(CyclotomicField(5)) sage: s(SM.frobenius_image()) s[4, 1]
We verify the regular representation:
sage: from sage.combinat.diagram import Diagram sage: D = Diagram([(0,0), (1,1), (2,2), (3,3), (4,4)]) sage: F = s(D.specht_module(QQ).frobenius_image()); F s[1, 1, 1, 1, 1] + 4*s[2, 1, 1, 1] + 5*s[2, 2, 1] + 6*s[3, 1, 1] + 5*s[3, 2] + 4*s[4, 1] + s[5] sage: F == sum(StandardTableaux(la).cardinality() * s[la] ....: for la in Partitions(5)) True sage: all(s[la] == s(la.specht_module(QQ).frobenius_image()) ....: for n in range(1, 5) for la in Partitions(n)) True sage: D = Diagram([(0,0), (1,1), (1,2), (2,3), (2,4)]) sage: SM = D.specht_module(QQ) sage: s(SM.frobenius_image()) s[2, 2, 1] + s[3, 1, 1] + 2*s[3, 2] + 2*s[4, 1] + s[5]
- representation_matrix(elt)#
Return the matrix corresponding to the left action of the symmetric group (algebra) element
elt
onself
.See also
EXAMPLES:
sage: SM = Partition([3,1,1]).specht_module(QQ) sage: SM.representation_matrix(Permutation([2,1,3,5,4])) [-1 0 0 1 -1 0] [ 0 0 1 0 -1 1] [ 0 1 0 -1 0 1] [ 0 0 0 0 -1 0] [ 0 0 0 -1 0 0] [ 0 0 0 0 0 -1] sage: SGA = SymmetricGroupAlgebra(QQ, 5) sage: SM.representation_matrix(SGA([3,1,5,2,4])) [ 0 -1 0 1 0 -1] [ 0 0 0 0 0 -1] [ 0 0 0 -1 0 0] [ 0 0 -1 0 1 -1] [ 1 0 0 -1 1 0] [ 0 0 0 0 1 0]
- sage.combinat.specht_module.polytabloid(T)#
Compute the polytabloid element associated to a tableau
T
.For a tableau \(T\), the polytabloid associated to \(T\) is
\[e_T = \sum_{\sigma \in C_T} (-1)^{\sigma} \{\sigma T\},\]where \(\{\}\) is the row-equivalence class, i.e. a tabloid, and \(C_T\) is the column stabilizer of \(T\). The sum takes place in the module spanned by tabloids \(\{T\}\).
OUTPUT:
A
dict
whose keys are tabloids represented by tuples of frozensets and whose values are the coefficient.EXAMPLES:
sage: from sage.combinat.specht_module import polytabloid sage: T = StandardTableau([[1,3,4],[2,5]]) sage: polytabloid(T) {(frozenset({1, 3, 4}), frozenset({2, 5})): 1, (frozenset({1, 4, 5}), frozenset({2, 3})): -1, (frozenset({2, 3, 4}), frozenset({1, 5})): -1, (frozenset({2, 4, 5}), frozenset({1, 3})): 1}
- sage.combinat.specht_module.simple_module_rank(la, base_ring)#
Return the rank of the simple \(S_n\)-module corresponding to the partition
la
of size \(n\) overbase_ring
.EXAMPLES:
sage: from sage.combinat.specht_module import simple_module_rank sage: simple_module_rank([3,2,1,1], GF(3)) 13
- sage.combinat.specht_module.specht_module_rank(D, base_ring=None)#
Return the rank of the Specht module of diagram
D
.EXAMPLES:
sage: from sage.combinat.specht_module import specht_module_rank sage: specht_module_rank([(0,0), (1,1), (2,2)]) 6
- sage.combinat.specht_module.specht_module_spanning_set(D, SGA=None)#
Return a spanning set of the Specht module of diagram
D
.INPUT:
D
– a list of cells(r,c)
for rowr
and columnc
SGA
– optional; a symmetric group algebra
EXAMPLES:
sage: from sage.combinat.specht_module import specht_module_spanning_set sage: specht_module_spanning_set([(0,0), (1,1), (2,2)]) ([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]) sage: specht_module_spanning_set([(0,0), (1,1), (2,1)]) ([1, 2, 3] - [1, 3, 2], -[1, 2, 3] + [1, 3, 2], [2, 1, 3] - [3, 1, 2], [2, 3, 1] - [3, 2, 1], -[2, 1, 3] + [3, 1, 2], -[2, 3, 1] + [3, 2, 1]) sage: SGA = SymmetricGroup(3).algebra(QQ) sage: specht_module_spanning_set([(0,0), (1,1), (2,1)], SGA) (() - (2,3), -(1,2) + (1,3,2), (1,2,3) - (1,3), -() + (2,3), -(1,2,3) + (1,3), (1,2) - (1,3,2))
- sage.combinat.specht_module.tabloid_gram_matrix(la, base_ring)#
Compute the Gram matrix of the bilinear form of a Specht module pulled back from the tabloid module.
For the module spanned by all tabloids, we define an bilinear form by having the tabloids be an orthonormal basis. We then pull this bilinear form back across the natural injection of the Specht module into the tabloid module.
EXAMPLES:
sage: from sage.combinat.specht_module import tabloid_gram_matrix sage: tabloid_gram_matrix([3,2], GF(5)) [4 2 2 1 4] [2 4 1 2 1] [2 1 4 2 1] [1 2 2 4 2] [4 1 1 2 4]