Skip to content

Commit

Permalink
sagemathgh-36980: Specht modules for Ariki-Koike algebras
Browse files Browse the repository at this point in the history
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes sagemath#1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->

We provide an implementation of Specht modules for the Ariki-Koike
algebra $H_{r,n}(q,u)$ over a field (more generally, a commutative ring
with $q^k u_i - u_j$ for all applicable $i, j,k$ are invertible). To
help ease the construction, we add an additional optional argument to
the AK algebra constructor to have the base ring convert to the fraction
field.

<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes sagemath#12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on
- sagemath#12345: short description why this is a dependency
- sagemath#34567: ...
-->

<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
    
URL: sagemath#36980
Reported by: Travis Scrimshaw
Reviewer(s): Matthias Köppe, Travis Scrimshaw
  • Loading branch information
Release Manager committed Jun 16, 2024
2 parents ddbd4fa + c73bc6a commit f7ec496
Show file tree
Hide file tree
Showing 4 changed files with 543 additions and 21 deletions.
1 change: 1 addition & 0 deletions src/doc/en/reference/algebras/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ Hecke algebras
:maxdepth: 1

sage/algebras/hecke_algebras/ariki_koike_algebra
sage/algebras/hecke_algebras/ariki_koike_specht_modules
sage/algebras/iwahori_hecke_algebra
sage/algebras/nil_coxeter_algebra
sage/algebras/yokonuma_hecke_algebra
Expand Down
14 changes: 12 additions & 2 deletions src/doc/en/reference/references/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2315,6 +2315,9 @@ REFERENCES:
.. [DPVAR2000] \J. Daemen, M. Peeters, G. Van Assche, and V. Rijmen,
*Nessie proposal: NOEKEON*; in First Open NESSIE Workshop, (2000).
.. [DR2001] \J. Du and H. Rui. *Specht modules for Ariki–Koike algebras*,
Comm. Alg., **29** (2001), 4710-4719.
.. [DR2002] Joan Daemen, Vincent Rijmen. *The Design of
Rijndael*. Springer-Verlag Berlin Heidelberg, 2002.
Expand Down Expand Up @@ -4621,13 +4624,20 @@ REFERENCES:
Providence, RI, 1999. xiv+188 pp. ISBN: 0-8218-1926-7
:mathscinet:`MR1711316`
.. [Mat2002] Jiří Matousek, "Lectures on Discrete Geometry", Springer,
2002
.. [Mathas2002] Andrew Mathas.
*The representation theory of the Ariki-Koike and
cyclotomic* `q`-*Schur algebras*.
Representation Theory of Algebraic Groups and Quantum Groups,
Adv. Stud. Pure Math., vol. 40, Math. Soc. Japan, Tokyo (2004),
pp. 261-320. :arxiv:`math/0204025`.
.. [Mathas2004] Andrew Mathas.
*Matrix units and generic degrees for the Ariki-Koike algebras*.
J. Algebra. **281** (2004) pp. 695-730.
.. [Mat2002] Jiří Matousek, "Lectures on Discrete Geometry", Springer,
2002
.. [Mas1995] Mason, Geoffrey. *The quantum double of a finite group and its role
in conformal field theory*. Groups '93 Galway/St. Andrews, Vol. 2,
405-417, London Math. Soc. Lecture Note Ser., 212, Cambridge, 1995.
Expand Down
76 changes: 57 additions & 19 deletions src/sage/algebras/hecke_algebras/ariki_koike_algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ class ArikiKoikeAlgebra(Parent, UniqueRepresentation):
default is the generators of `\ZZ[u_1, \ldots, u_r]`
- ``R`` -- (optional) a commutative ring containing ``q`` and ``u``;
the default is the parent of `q` and `u_1, \ldots, u_r`
- ``use_fraction_field`` -- (default: ``False``) whether to use the
fraction field or not
EXAMPLES:
Expand Down Expand Up @@ -268,7 +270,7 @@ class ArikiKoikeAlgebra(Parent, UniqueRepresentation):
True
"""
@staticmethod
def __classcall_private__(cls, r, n, q=None, u=None, R=None):
def __classcall_private__(cls, r, n, q=None, u=None, R=None, use_fraction_field=False):
r"""
Standardize input to ensure a unique representation.
Expand Down Expand Up @@ -311,11 +313,12 @@ def __classcall_private__(cls, r, n, q=None, u=None, R=None):
R = cm.common_parent(q.parent(), *[val.parent() for val in u])
elif q is None:
q = 'q'
u = [R(val) for val in u]
if R not in Rings().Commutative():
raise TypeError("base ring must be a commutative ring")
if use_fraction_field:
R = R.fraction_field()
q = R(q)
u = tuple(u)
u = tuple([R(val) for val in u])
return super().__classcall__(cls, r, n, q, u, R)

def __init__(self, r, n, q, u, R):
Expand Down Expand Up @@ -414,6 +417,21 @@ def a_realization(self):
"""
return self.LT()

def specht_module(self, la):
r"""
Return the Specht module of ``self`` corresponding to the shape ``la``.
EXAMPLES::
sage: AK = algebras.ArikiKoike(4, 6)
sage: AK.specht_module([[2], [], [1,1,1], [1]])
Specht module of shape ([2], [], [1, 1, 1], [1]) for
Ariki-Koike algebra of rank 4 and order 6 with q=q and u=(u0, u1, u2, u3)
over ... over Integer Ring
"""
from sage.algebras.hecke_algebras.ariki_koike_specht_modules import SpechtModule
return SpechtModule(self, la)

class _BasesCategory(Category_realization_of_parent):
r"""
The category of bases of a Ariki-Koike algebra.
Expand Down Expand Up @@ -566,6 +584,24 @@ def some_elements(self):
elts += [self.L(2)**(self._r//2)]
return elts

def specht_module(self, la):
r"""
Return the Specht module of ``self`` corresponding
to the shape ``la``.
EXAMPLES::
sage: AK = algebras.ArikiKoike(4, 3)
sage: LT = AK.LT()
sage: S1 = LT.specht_module([[1], [], [1,1], []])
sage: T = AK.T()
sage: S2 = T.specht_module([[1], [], [1,1], []])
sage: S1 is S2
True
"""
from sage.algebras.hecke_algebras.ariki_koike_specht_modules import SpechtModule
return SpechtModule(self.realization_of(), la)

# -----------------------------------------------------
# Basis classes
# -----------------------------------------------------
Expand Down Expand Up @@ -1186,6 +1222,18 @@ def __init__(self, algebra):
_Basis.__init__(self, algebra, prefix='T')
self._assign_names(['T%s' % i for i in range(self._n)])

def _basis_to_word(self, t):
"""
Return the basis element indexed by ``m`` to a word.
"""
redword = []
for i, k in enumerate(t[0]):
if not k:
continue
redword.extend(list(range(i, 0, -1)) + [0]*k)
redword.extend(t[1].reduced_word())
return redword

def _repr_term(self, t):
r"""
Return a string representation of the basis element indexed by ``m``.
Expand All @@ -1196,13 +1244,8 @@ def _repr_term(self, t):
sage: T._repr_term( ((1,0,2), Permutation([3,2,1])) )
'T[0,2,1,0,0,2,1,2]'
"""
redword = []
for i,k in enumerate(t[0]):
if k == 0:
continue
redword += list(reversed(range(1,i+1))) + [0]*k
redword += t[1].reduced_word()
if len(redword) == 0:
redword = self._basis_to_word(t)
if not redword:
return "1"
return (self._print_options['prefix']
+ '[%s]' % ','.join('%d' % i for i in redword))
Expand All @@ -1215,15 +1258,10 @@ def _latex_term(self, t):
sage: T = algebras.ArikiKoike(4, 3).T()
sage: T._latex_term( ((1,0,2), Permutation([3,2,1])) )
'T_{0}T_{1}T_{0}T_{0}T_{2}T_{1}T_{2}'
'T_{0}T_{2}T_{1}T_{0}T_{0}T_{2}T_{1}T_{2}'
"""
redword = []
for i,k in enumerate(t[0]):
if k == 0:
continue
redword += list(reversed(range(1,i))) + [0]*k
redword += t[1].reduced_word()
if len(redword) == 0:
redword = self._basis_to_word(t)
if not redword:
return "1"
return ''.join("%s_{%d}" % (self._print_options['prefix'], i)
for i in redword)
Expand Down Expand Up @@ -1529,7 +1567,7 @@ def product_on_basis(self, m1, m2):

# Compute t1 * T * sprod
def compute(T, sprod):
if not T: # T=1, so just do t1 * sprod, each of which is in order
if not T: # T=1, so just do t1 * sprod, each of which is in order
return self._from_dict({(t1, s): sprod[s] for s in sprod},
remove_zeros=False, coerce=False)

Expand Down
Loading

0 comments on commit f7ec496

Please sign in to comment.