Ariki-Koike Algebra Representations#

AUTHORS:

  • Travis Scrimshaw (2023-12-28): Initial version

class sage.algebras.hecke_algebras.ariki_koike_specht_modules.SpechtModule(AK, la)[source]#

Bases: CombinatorialFreeModule

Specht module of the Ariki-Koike algebra.

Let \(H_{r,n}(q, u)\) be the Ariki-Koike algebra with parameters \(q\) and \(u = (u_1, \ldots, u_r)\) (note our indexing convention for the \(u\) parameters differs from sage.algebras.hecke_algebras.ariki_koike_algebra) over a commutative ring \(R\). Let \(\lambda\) be a partition tuple of level \(r\) and size \(n\). The Specht module of shape \(\lambda\) is the (right) \(H_{r,n}(q,u)\)-representation \(S^{\lambda}\) given as free \(R\)-module with basis given by the standard tableau (tuples) of shape \(\lambda\).

We will now describe the right action of the Ariki-Koike algebra, but we first need to set some notation and definitions. Let \(t\) be a standard tableau tuple of level \(r\) and size \(n\). Define the residue of \(i\) in \(t\) to be \(r_t(i) = q^{c-r} u_k\), where \(i\) is in cell \((r, c)\) of the \(k\)-th tableau.

The action of \(L_i\) is given by \(t \cdot L_i = r_T(i) t\). For \(T_i\), we need to consider the following cases. If \(i, i+1\) are in the same row (resp. column), then \(t \cdot T_i = q t\) (resp. \(t \cdot T_i = -t\)). Otherwise if we swap \(i, i+1\), the resulting tableau tuple \(s\) is again standard and the action is given by

\[t \cdot T_i = \frac{(q - 1) r_t(i)}{r_s(i) - r_t(i)} t + \frac{q r_t(i) - r_s(i)}{r_s(i) - r_t(i)} s.\]

Note that \(r_s(i) = r_t(i+1)\).

Over a field of characteristic \(0\), the set of Specht modules for all partition tuples of level \(r\) and size \(n\) form the complete set of irreducible modules for \(H_{r,n}(q, u)\) [AK1994]. (The condition on the base ring can be weakened; see Theorem 3.2 of [Mathas2002].)

EXAMPLES:

We construct the Specht module \(S^{(2,1,21)}\) for \(H_{3,6}(q, u)\) with generic parameters \(q, u\) over \(\GF(3)\) and perform some basic computations. We change the tableaux to use the compact representation to condense the output:

sage: TableauTuples.options.display = 'compact'

sage: R = PolynomialRing(GF(3), 'u', 3)
sage: u = R.gens()
sage: q = R['q'].gen()
sage: H = algebras.ArikiKoike(3, 6, q, u, use_fraction_field=True)
sage: LT = H.LT()
sage: T0, T1, T2, T3, T4, T5 = LT.T()
sage: S = H.specht_module([[2], [1], [2,1]])
sage: S.dimension()
120
sage: elt = S.an_element(); elt
S[1,2|3|4,5/6] - S[1,3|2|4,5/6] + S[1,3|4|2,5/6]
sage: elt * LT.L(3)
u1*S[1,2|3|4,5/6] + (-u0*q)*S[1,3|2|4,5/6] + u0*q*S[1,3|4|2,5/6]
sage: elt * T2
(((-u0-u1)*q-u1)/(-u0*q+u1))*S[1,2|3|4,5/6]
 + (((-u0+u2)*q)/(u0*q-u2))*S[1,2|4|3,5/6]
 + ((-u0*q^2-u0*q-u1)/(-u0*q+u1))*S[1,3|2|4,5/6]
 + ((u0*q^2-u0*q)/(u0*q-u2))*S[1,3|4|2,5/6]
sage: (elt * T3) * T2 == elt * (T3 * T2)
True
sage: elt * T2 * T3 * T2 == elt * T3 * T2 * T3
True
sage: elt * T0 * T1 * T0 * T1 == elt * T1 * T0 * T1 * T0
True
sage: elt * T2 * T5 == elt * T5 * T2
True

sage: TableauTuples.options._reset()
>>> from sage.all import *
>>> TableauTuples.options.display = 'compact'

>>> R = PolynomialRing(GF(Integer(3)), 'u', Integer(3))
>>> u = R.gens()
>>> q = R['q'].gen()
>>> H = algebras.ArikiKoike(Integer(3), Integer(6), q, u, use_fraction_field=True)
>>> LT = H.LT()
>>> T0, T1, T2, T3, T4, T5 = LT.T()
>>> S = H.specht_module([[Integer(2)], [Integer(1)], [Integer(2),Integer(1)]])
>>> S.dimension()
120
>>> elt = S.an_element(); elt
S[1,2|3|4,5/6] - S[1,3|2|4,5/6] + S[1,3|4|2,5/6]
>>> elt * LT.L(Integer(3))
u1*S[1,2|3|4,5/6] + (-u0*q)*S[1,3|2|4,5/6] + u0*q*S[1,3|4|2,5/6]
>>> elt * T2
(((-u0-u1)*q-u1)/(-u0*q+u1))*S[1,2|3|4,5/6]
 + (((-u0+u2)*q)/(u0*q-u2))*S[1,2|4|3,5/6]
 + ((-u0*q^2-u0*q-u1)/(-u0*q+u1))*S[1,3|2|4,5/6]
 + ((u0*q^2-u0*q)/(u0*q-u2))*S[1,3|4|2,5/6]
>>> (elt * T3) * T2 == elt * (T3 * T2)
True
>>> elt * T2 * T3 * T2 == elt * T3 * T2 * T3
True
>>> elt * T0 * T1 * T0 * T1 == elt * T1 * T0 * T1 * T0
True
>>> elt * T2 * T5 == elt * T5 * T2
True

>>> TableauTuples.options._reset()

REFERENCES:

class Element[source]#

Bases: IndexedFreeModuleElement

L(i)[source]#

Return the (right) action of \(L_i\) on self.

INPUT:

  • i – an integer or a list of integers

EXAMPLES:

sage: TableauTuples.options.display = 'compact'  # compact tableau printing
sage: AK = algebras.ArikiKoike(3, 6, use_fraction_field=True)
sage: S = AK.specht_module([[2], [], [3,1]])
sage: elt = S.an_element(); elt
S[1,2|-|3,4,5/6] + 2*S[1,3|-|2,4,5/6]
 + 3*S[2,3|-|1,4,5/6] + S[2,4|-|1,3,5/6]
sage: elt.L(1)
u0*S[1,2|-|3,4,5/6] + 2*u0*S[1,3|-|2,4,5/6]
 + 3*u2*S[2,3|-|1,4,5/6] + u2*S[2,4|-|1,3,5/6]
sage: elt.L(2)
u0*q*S[1,2|-|3,4,5/6] + 2*u2*S[1,3|-|2,4,5/6]
 + 3*u0*S[2,3|-|1,4,5/6] + u0*S[2,4|-|1,3,5/6]
sage: elt.L(6)
u2/q*S[1,2|-|3,4,5/6] + 2*u2/q*S[1,3|-|2,4,5/6]
 + 3*u2/q*S[2,3|-|1,4,5/6] + u2/q*S[2,4|-|1,3,5/6]
sage: elt.L([3,3,3])
u2^3*S[1,2|-|3,4,5/6] + 2*u0^3*q^3*S[1,3|-|2,4,5/6]
+ 3*u0^3*q^3*S[2,3|-|1,4,5/6] + u2^3*q^3*S[2,4|-|1,3,5/6]
sage: LT = AK.LT()
sage: elt.L([3,3,3]) == elt * (LT.L(3)^3)
True
sage: TableauTuples.options._reset()  # reset
>>> from sage.all import *
>>> TableauTuples.options.display = 'compact'  # compact tableau printing
>>> AK = algebras.ArikiKoike(Integer(3), Integer(6), use_fraction_field=True)
>>> S = AK.specht_module([[Integer(2)], [], [Integer(3),Integer(1)]])
>>> elt = S.an_element(); elt
S[1,2|-|3,4,5/6] + 2*S[1,3|-|2,4,5/6]
 + 3*S[2,3|-|1,4,5/6] + S[2,4|-|1,3,5/6]
>>> elt.L(Integer(1))
u0*S[1,2|-|3,4,5/6] + 2*u0*S[1,3|-|2,4,5/6]
 + 3*u2*S[2,3|-|1,4,5/6] + u2*S[2,4|-|1,3,5/6]
>>> elt.L(Integer(2))
u0*q*S[1,2|-|3,4,5/6] + 2*u2*S[1,3|-|2,4,5/6]
 + 3*u0*S[2,3|-|1,4,5/6] + u0*S[2,4|-|1,3,5/6]
>>> elt.L(Integer(6))
u2/q*S[1,2|-|3,4,5/6] + 2*u2/q*S[1,3|-|2,4,5/6]
 + 3*u2/q*S[2,3|-|1,4,5/6] + u2/q*S[2,4|-|1,3,5/6]
>>> elt.L([Integer(3),Integer(3),Integer(3)])
u2^3*S[1,2|-|3,4,5/6] + 2*u0^3*q^3*S[1,3|-|2,4,5/6]
+ 3*u0^3*q^3*S[2,3|-|1,4,5/6] + u2^3*q^3*S[2,4|-|1,3,5/6]
>>> LT = AK.LT()
>>> elt.L([Integer(3),Integer(3),Integer(3)]) == elt * (LT.L(Integer(3))**Integer(3))
True
>>> TableauTuples.options._reset()  # reset
T(i)[source]#

Return the (right) action of \(T_i\) on self.

INPUT:

  • i – an integer or a list of integers

EXAMPLES:

sage: TableauTuples.options.display = 'compact'  # compact tableau printing
sage: AK = algebras.ArikiKoike(3, 10, use_fraction_field=True)
sage: q = AK.q()
sage: S = AK.specht_module([[2,1], [], [3,2,2]])
sage: P = S.basis().keys()
sage: t = P([[[2,4],[8]], [], [[1,5,7],[3,6],[9,10]]])
sage: b = S.basis()[t]
sage: b.T(2)
((u2*q-u2)/(-u0*q+u2))*S[2,4/8|-|1,5,7/3,6/9,10]
 + ((u0*q^2-u2)/(-u0*q+u2))*S[3,4/8|-|1,5,7/2,6/9,10]
sage: b.T(6)
((-q)/(q+1))*S[2,4/8|-|1,5,6/3,7/9,10]
 + (q^2/(q+1))*S[2,4/8|-|1,5,7/3,6/9,10]
sage: b.T([2,1,2]) == b.T([1,2,1])
True
sage: b.T(9)
q*S[2,4/8|-|1,5,7/3,6/9,10]
sage: all(b.T([i,i]) == (q-1)*b.T(i) + q*b for i in range(1,10))
True
sage: b.T(0)
u2*S[2,4/8|-|1,5,7/3,6/9,10]
sage: b.T([0,1,0,1]) == b.T([1,0,1,0])
True
sage: TableauTuples.options._reset()  # reset
>>> from sage.all import *
>>> TableauTuples.options.display = 'compact'  # compact tableau printing
>>> AK = algebras.ArikiKoike(Integer(3), Integer(10), use_fraction_field=True)
>>> q = AK.q()
>>> S = AK.specht_module([[Integer(2),Integer(1)], [], [Integer(3),Integer(2),Integer(2)]])
>>> P = S.basis().keys()
>>> t = P([[[Integer(2),Integer(4)],[Integer(8)]], [], [[Integer(1),Integer(5),Integer(7)],[Integer(3),Integer(6)],[Integer(9),Integer(10)]]])
>>> b = S.basis()[t]
>>> b.T(Integer(2))
((u2*q-u2)/(-u0*q+u2))*S[2,4/8|-|1,5,7/3,6/9,10]
 + ((u0*q^2-u2)/(-u0*q+u2))*S[3,4/8|-|1,5,7/2,6/9,10]
>>> b.T(Integer(6))
((-q)/(q+1))*S[2,4/8|-|1,5,6/3,7/9,10]
 + (q^2/(q+1))*S[2,4/8|-|1,5,7/3,6/9,10]
>>> b.T([Integer(2),Integer(1),Integer(2)]) == b.T([Integer(1),Integer(2),Integer(1)])
True
>>> b.T(Integer(9))
q*S[2,4/8|-|1,5,7/3,6/9,10]
>>> all(b.T([i,i]) == (q-Integer(1))*b.T(i) + q*b for i in range(Integer(1),Integer(10)))
True
>>> b.T(Integer(0))
u2*S[2,4/8|-|1,5,7/3,6/9,10]
>>> b.T([Integer(0),Integer(1),Integer(0),Integer(1)]) == b.T([Integer(1),Integer(0),Integer(1),Integer(0)])
True
>>> TableauTuples.options._reset()  # reset
ariki_koike_algebra()[source]#

Return the Ariki-Koike algebra that self is a representation of.

EXAMPLES:

sage: AK = algebras.ArikiKoike(3, 6)
sage: S = AK.specht_module([[2], [], [3,1]])
sage: S.ariki_koike_algebra() is AK
True
>>> from sage.all import *
>>> AK = algebras.ArikiKoike(Integer(3), Integer(6))
>>> S = AK.specht_module([[Integer(2)], [], [Integer(3),Integer(1)]])
>>> S.ariki_koike_algebra() is AK
True