Ariki-Koike Algebra Representations - Algebras

Skip to content
Back to top
View this page
Edit this page

# Ariki-Koike Algebra Representations

AUTHORS:

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

class sage.algebras.hecke_algebras.ariki_koike_specht_modules.SpechtModule(AK, la)

  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

      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()

  Python

      >>> 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:

  - [AK1994]

  - [DJM1998]

  - [DR2001]

  - [Mathas2002]

  - [Mathas2004]

  class Element

    Bases: `IndexedFreeModuleElement`

    L(i)

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

      INPUT:

      - `i` – an integer or a list of integers

      EXAMPLES:

      Sage

          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

      Python

          >>> 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)

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

      INPUT:

      - `i` – an integer or a list of integers

      EXAMPLES:

      Sage

          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

      Python

          >>> 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()

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

    EXAMPLES:

    Sage

        sage: AK = algebras.ArikiKoike(3, 6)
        sage: S = AK.specht_module([[2], [], [3,1]])
        sage: S.ariki_koike_algebra() is AK
        True

    Python

        >>> 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