Ariki-Koike Algebras#
The Ariki-Koike algebras were introduced by Ariki and Koike [AK1994] as
a natural generalization of the Iwahori-Hecke algebras of types IwahoriHeckeAlgebra
).
Soon afterwards, Broué and Malle defined analogues of the Hecke
algebras for all complex reflection groups
Fix non-negative integers
AUTHORS:
Travis Scrimshaw (2016-04): initial version
Andrew Mathas (2016-07): improved multiplication code
REFERENCES:
- class sage.algebras.hecke_algebras.ariki_koike_algebra.ArikiKoikeAlgebra(r, n, q, u, R)#
Bases:
Parent
,UniqueRepresentation
The Ariki-Koike algebra
.Let
be an unital integral domain. Let such that . The Ariki-Koike algebra is the unital associative algebra generated by that satisfies the following relations:The parameter
is called the Hecke parameter and the parameters are called the cyclotomic parameters. Thus, the Ariki-Koike algebra is a deformation of the group algebra of the complex reflection group .Next, we define Jucys-Murphy elements
for
.Note
These element differ by a power of
from the corresponding elements in [AK1994]. However, these elements are more commonly used because they lead to nicer representation theoretic formulas.Ariki and Koike [AK1994] showed that
is a free -module with a basis given byIn particular, we have
. Moreover, we have for all .The Ariki-Koike algebra
can be considered as a quotient of the group algebra of the braid group for by the ideal generated by and . Furthermore, can be constructed as a quotient of the extended affine Hecke algebra of type by .Since the Ariki-Koike algebra is a quotient of the group algebra of the braid group of
, we can recover the group algebra of as follows. Consider , where is a primitive -th root of unity, then we haveINPUT:
r
– the maximum power ofn
– the rankq
– (optional) an invertible element in a commutative ring; the default is , where is the ring containing the variablesu
u
– (optional) the variables ; the default is the generators ofR
– (optional) a commutative ring containingq
andu
; the default is the parent of and
EXAMPLES:
We start by constructing an Ariki-Koike algebra where the values
are generic and do some computations:sage: H = algebras.ArikiKoike(3, 4)
H = algebras.ArikiKoike(3, 4)
Next, we do some computations using the
basis:sage: LT = H.LT() sage: LT.inject_variables() Defining L1, L2, L3, L4, T1, T2, T3 sage: T1 * T2 * T1 * T2 q*T[2,1] - (1-q)*T[2,1,2] sage: T1 * L1 * T2 * L3 * T1 * T2 -(q-q^2)*L2*L3*T[2] + q*L1*L2*T[2,1] - (1-q)*L1*L2*T[2,1,2] sage: L1^3 u0*u1*u2 + ((-u0*u1-u0*u2-u1*u2))*L1 + ((u0+u1+u2))*L1^2 sage: L3 * L2 * L1 L1*L2*L3 sage: u = LT.u() sage: q = LT.q() sage: (q + 2*u[0]) * (T1 * T2) * L3 (-2*u0+(2*u0-1)*q+q^2)*L3*T[1] + (-2*u0+(2*u0-1)*q+q^2)*L2*T[2] + (2*u0+q)*L1*T[1,2]
LT = H.LT() LT.inject_variables() T1 * T2 * T1 * T2 T1 * L1 * T2 * L3 * T1 * T2 L1^3 L3 * L2 * L1 u = LT.u() q = LT.q() (q + 2*u[0]) * (T1 * T2) * L3
We check the defining relations:
sage: prod(L1 - val for val in u) == H.zero() True sage: L1 * T1 * L1 * T1 == T1 * L1 * T1 * L1 True sage: T1 * T2 * T1 == T2 * T1 * T2 True sage: T2 * T3 * T2 == T3 * T2 * T3 True sage: L2 == q^-1 * T1 * L1 * T1 True sage: L3 == q^-2 * T2 * T1 * L1 * T1 * T2 True
prod(L1 - val for val in u) == H.zero() L1 * T1 * L1 * T1 == T1 * L1 * T1 * L1 T1 * T2 * T1 == T2 * T1 * T2 T2 * T3 * T2 == T3 * T2 * T3 L2 == q^-1 * T1 * L1 * T1 L3 == q^-2 * T2 * T1 * L1 * T1 * T2
We construct an Ariki-Koike algebra with
, where is a primitive third root of unity:sage: F = CyclotomicField(3) sage: zeta3 = F.gen() sage: R.<q> = LaurentPolynomialRing(F) sage: H = algebras.ArikiKoike(3, 4, q=q, u=[1, zeta3, zeta3^2], R=R) sage: H.LT().inject_variables() Defining L1, L2, L3, L4, T1, T2, T3 sage: L1^3 1 sage: L2^3 1 - (q^-1-1)*T[1] - (q^-1-1)*L1*L2^2*T[1] - (q^-1-1)*L1^2*L2*T[1]
F = CyclotomicField(3) zeta3 = F.gen() R.<q> = LaurentPolynomialRing(F) H = algebras.ArikiKoike(3, 4, q=q, u=[1, zeta3, zeta3^2], R=R) H.LT().inject_variables() L1^3 L2^3
Next, we additionally take
to obtain the group algebra of :sage: F = CyclotomicField(3) sage: zeta3 = F.gen() sage: H = algebras.ArikiKoike(3, 4, q=1, u=[1, zeta3, zeta3^2], R=F) sage: LT = H.LT() sage: LT.inject_variables() Defining L1, L2, L3, L4, T1, T2, T3 sage: A = ColoredPermutations(3, 4).algebra(F) sage: s1, s2, s3, s0 = list(A.algebra_generators()) sage: all(L^3 == LT.one() for L in LT.L()) True sage: J = [s0, s3*s0*s3, s2*s3*s0*s3*s2, s1*s2*s3*s0*s3*s2*s1] sage: all(Ji^3 == A.one() for Ji in J) True
F = CyclotomicField(3) zeta3 = F.gen() H = algebras.ArikiKoike(3, 4, q=1, u=[1, zeta3, zeta3^2], R=F) LT = H.LT() LT.inject_variables() A = ColoredPermutations(3, 4).algebra(F) s1, s2, s3, s0 = list(A.algebra_generators()) all(L^3 == LT.one() for L in LT.L()) J = [s0, s3*s0*s3, s2*s3*s0*s3*s2, s1*s2*s3*s0*s3*s2*s1] all(Ji^3 == A.one() for Ji in J)
- class LT(algebra)#
Bases:
_Basis
The basis of the Ariki-Koike algebra given by monomials of the form
, where is product of Jucys-Murphy elements and is a product of .This was the basis defined in [AK1994] except using the renormalized Jucys-Murphy elements.
- class Element#
Bases:
IndexedFreeModuleElement
- L(i=None)#
Return the generator(s)
.INPUT:
i
– (default:None
) the generator or ifNone
, then the list of all generators
EXAMPLES:
sage: LT = algebras.ArikiKoike(8, 3).LT() sage: LT.L(2) L2 sage: LT.L() [L1, L2, L3] sage: LT = algebras.ArikiKoike(1, 3).LT() sage: LT.L(2) u + (-u*q^-1+u)*T[1] sage: LT.L() [u, u + (-u*q^-1+u)*T[1], u + (-u*q^-1+u)*T[2] + (-u*q^-2+u*q^-1)*T[2,1,2]]
LT = algebras.ArikiKoike(8, 3).LT() LT.L(2) LT.L() LT = algebras.ArikiKoike(1, 3).LT() LT.L(2) LT.L()
- T(i=None)#
Return the generator(s)
ofself
.INPUT:
i
– (default:None
) the generator or ifNone
, then the list of all generators
EXAMPLES:
sage: LT = algebras.ArikiKoike(8, 3).LT() sage: LT.T(1) T[1] sage: LT.T() [L1, T[1], T[2]] sage: LT.T(0) L1
LT = algebras.ArikiKoike(8, 3).LT() LT.T(1) LT.T() LT.T(0)
- algebra_generators()#
Return the algebra generators of
self
.EXAMPLES:
sage: LT = algebras.ArikiKoike(5, 3).LT() sage: dict(LT.algebra_generators()) {'L1': L1, 'L2': L2, 'L3': L3, 'T1': T[1], 'T2': T[2]} sage: LT = algebras.ArikiKoike(1, 4).LT() sage: dict(LT.algebra_generators()) {'T1': T[1], 'T2': T[2], 'T3': T[3]}
LT = algebras.ArikiKoike(5, 3).LT() dict(LT.algebra_generators()) LT = algebras.ArikiKoike(1, 4).LT() dict(LT.algebra_generators())
- inverse_T(i)#
Return the inverse of the generator
.From the quadratic relation, we have
EXAMPLES:
sage: LT = algebras.ArikiKoike(3, 4).LT() sage: [LT.inverse_T(i) for i in range(1, 4)] [(q^-1-1) + (q^-1)*T[1], (q^-1-1) + (q^-1)*T[2], (q^-1-1) + (q^-1)*T[3]]
LT = algebras.ArikiKoike(3, 4).LT() [LT.inverse_T(i) for i in range(1, 4)]
- product_on_basis(m1, m2)#
Return the product of the basis elements indexed by
m1
andm2
.EXAMPLES:
sage: LT = algebras.ArikiKoike(6, 3).LT() sage: m = ((1, 0, 2), Permutations(3)([2,1,3])) sage: LT.product_on_basis(m, m) q*L1*L2*L3^4 sage: LT = algebras.ArikiKoike(4, 3).LT() sage: L1,L2,L3,T1,T2 = LT.algebra_generators() sage: L1 * T1 * L1^2 * T1 q*L1*L2^2 + (1-q)*L1^2*L2*T[1] sage: L1^2 * T1 * L1^2 * T1 q*L1^2*L2^2 + (1-q)*L1^3*L2*T[1] sage: L1^3 * T1 * L1^2 * T1 (-u0*u1*u2*u3+u0*u1*u2*u3*q)*L2*T[1] + ((u0*u1*u2+u0*u1*u3+u0*u2*u3+u1*u2*u3)+(-u0*u1*u2-u0*u1*u3-u0*u2*u3-u1*u2*u3)*q)*L1*L2*T[1] + ((-u0*u1-u0*u2-u1*u2-u0*u3-u1*u3-u2*u3)+(u0*u1+u0*u2+u1*u2+u0*u3+u1*u3+u2*u3)*q)*L1^2*L2*T[1] + ((u0+u1+u2+u3)+(-u0-u1-u2-u3)*q)*L1^3*L2*T[1] + q*L1^3*L2^2 sage: L1^2 * T1 * L1^3 * T1 (-u0*u1*u2*u3+u0*u1*u2*u3*q)*L2*T[1] + ((u0*u1*u2+u0*u1*u3+u0*u2*u3+u1*u2*u3)+(-u0*u1*u2-u0*u1*u3-u0*u2*u3-u1*u2*u3)*q)*L1*L2*T[1] + ((-u0*u1-u0*u2-u1*u2-u0*u3-u1*u3-u2*u3)+(u0*u1+u0*u2+u1*u2+u0*u3+u1*u3+u2*u3)*q)*L1^2*L2*T[1] + q*L1^2*L2^3 + ((u0+u1+u2+u3)+(-u0-u1-u2-u3)*q)*L1^3*L2*T[1] + (1-q)*L1^3*L2^2*T[1] sage: L1^2 * T1*T2*T1 * L2 * L3 * T2 (q-2*q^2+q^3)*L1^2*L2*L3 - (1-2*q+2*q^2-q^3)*L1^2*L2*L3*T[2] - (q-q^2)*L1^3*L3*T[1] + (1-2*q+q^2)*L1^3*L3*T[1,2] + q*L1^3*L2*T[2,1] - (1-q)*L1^3*L2*T[2,1,2] sage: LT = algebras.ArikiKoike(2, 3).LT() sage: L3 = LT.L(3) sage: x = LT.an_element() sage: (x * L3) * L3 == x * (L3 * L3) True
LT = algebras.ArikiKoike(6, 3).LT() m = ((1, 0, 2), Permutations(3)([2,1,3])) LT.product_on_basis(m, m) LT = algebras.ArikiKoike(4, 3).LT() L1,L2,L3,T1,T2 = LT.algebra_generators() L1 * T1 * L1^2 * T1 L1^2 * T1 * L1^2 * T1 L1^3 * T1 * L1^2 * T1 L1^2 * T1 * L1^3 * T1 L1^2 * T1*T2*T1 * L2 * L3 * T2 LT = algebras.ArikiKoike(2, 3).LT() L3 = LT.L(3) x = LT.an_element() (x * L3) * L3 == x * (L3 * L3)
- class T(algebra)#
Bases:
_Basis
The basis of the Ariki-Koike algebra given by monomials of the generators
.We use the choice of reduced expression given by [BM1997]:
where
(note that ) and is a reduced expression of an element in .- L(i=None)#
Return the Jucys-Murphy element(s)
.The Jucys-Murphy element
is defined asINPUT:
i
– (default:None
) the Jucys-Murphy element or ifNone
, then the list of all
EXAMPLES:
sage: T = algebras.ArikiKoike(8, 3).T() sage: T.L(2) (q^-1)*T[1,0,1] sage: T.L() [T[0], (q^-1)*T[1,0,1], (q^-2)*T[2,1,0,1,2]] sage: T0,T1,T2 = T.T() sage: q = T.q() sage: T.L(1) == T0 True sage: T.L(2) == q^-1 * T1*T0*T1 True sage: T.L(3) == q^-2 * T2*T1*T0*T1*T2 True sage: T = algebras.ArikiKoike(1, 3).T() sage: T.L(2) u + (-u*q^-1+u)*T[1] sage: T.L() [u, u + (-u*q^-1+u)*T[1], u + (-u*q^-1+u)*T[2] + (-u*q^-2+u*q^-1)*T[2,1,2]]
T = algebras.ArikiKoike(8, 3).T() T.L(2) T.L() T0,T1,T2 = T.T() q = T.q() T.L(1) == T0 T.L(2) == q^-1 * T1*T0*T1 T.L(3) == q^-2 * T2*T1*T0*T1*T2 T = algebras.ArikiKoike(1, 3).T() T.L(2) T.L()
- T(i=None)#
Return the generator(s)
ofself
.INPUT:
i
– (default:None
) the generator or ifNone
, then the list of all generators
EXAMPLES:
sage: T = algebras.ArikiKoike(8, 3).T() sage: T.T(1) T[1] sage: T.T() [T[0], T[1], T[2]] sage: T = algebras.ArikiKoike(1, 4).T()
T = algebras.ArikiKoike(8, 3).T() T.T(1) T.T() T = algebras.ArikiKoike(1, 4).T()
- algebra_generators()#
Return the algebra generators of
self
.EXAMPLES:
sage: T = algebras.ArikiKoike(5, 3).T() sage: dict(T.algebra_generators()) {0: T[0], 1: T[1], 2: T[2]} sage: T = algebras.ArikiKoike(1, 4).T() sage: dict(T.algebra_generators()) {1: T[1], 2: T[2], 3: T[3]}
T = algebras.ArikiKoike(5, 3).T() dict(T.algebra_generators()) T = algebras.ArikiKoike(1, 4).T() dict(T.algebra_generators())
- product_on_basis(m1, m2)#
Return the product of the basis elements indexed by
m1
andm2
.EXAMPLES:
sage: T = algebras.ArikiKoike(2, 3).T() sage: T0, T1, T2 = T.T() sage: T.product_on_basis(T0.leading_support(), T1.leading_support()) T[0,1] sage: T1 * T2 T[1,2] sage: T2 * T1 T[2,1] sage: T2 * (T2 * T1 * T0) -(1-q)*T[2,1,0] + q*T[1,0] sage: (T1 * T0 * T1 * T0) * T0 (-u0*u1)*T[1,0,1] + ((u0+u1))*T[0,1,0,1] sage: (T0 * T1 * T0 * T1) * (T0 * T1) (-u0*u1*q)*T[1,0] + (u0*u1-u0*u1*q)*T[1,0,1] + ((u0+u1)*q)*T[0,1,0] + ((-u0-u1)+(u0+u1)*q)*T[0,1,0,1] sage: T1 * (T0 * T2 * T1 * T0) T[1,0,2,1,0] sage: (T1 * T2) * (T2 * T1 * T0) -(1-q)*T[2,1,0,2] - (q-q^2)*T[1,0] + q^2*T[0] sage: (T2*T1*T2) * (T2*T1*T0*T1*T2) -(q-q^2)*T[2,1,0,1,2] + (1-2*q+q^2)*T[2,1,0,2,1,2] - (q-q^2)*T[1,0,2,1,2] + q^2*T[0,2,1,2]
T = algebras.ArikiKoike(2, 3).T() T0, T1, T2 = T.T() T.product_on_basis(T0.leading_support(), T1.leading_support()) T1 * T2 T2 * T1 T2 * (T2 * T1 * T0) (T1 * T0 * T1 * T0) * T0 (T0 * T1 * T0 * T1) * (T0 * T1) T1 * (T0 * T2 * T1 * T0) (T1 * T2) * (T2 * T1 * T0) (T2*T1*T2) * (T2*T1*T0*T1*T2)
We check some relations:
sage: T0 * T1 * T0 * T1 == T1 * T0 * T1 * T0 True sage: T1 * T2 * T1 == T2 * T1 * T2 True sage: (T1 * T0) * T0 == T1 * (T0 * T0) True sage: (T.L(1) * T.L(2)) * T.L(2) - T.L(1) * (T.L(2) * T.L(2)) 0 sage: (T.L(2) * T.L(3)) * T.L(3) - T.L(2) * (T.L(3) * T.L(3)) 0
T0 * T1 * T0 * T1 == T1 * T0 * T1 * T0 T1 * T2 * T1 == T2 * T1 * T2 (T1 * T0) * T0 == T1 * (T0 * T0) (T.L(1) * T.L(2)) * T.L(2) - T.L(1) * (T.L(2) * T.L(2)) (T.L(2) * T.L(3)) * T.L(3) - T.L(2) * (T.L(3) * T.L(3))
- a_realization()#
Return a realization of
self
.EXAMPLES:
sage: H = algebras.ArikiKoike(5, 2) sage: H.a_realization() Ariki-Koike algebra of rank 5 and order 2 with q=q and u=(u0, u1, u2, u3, u4) ... in the LT-basis
H = algebras.ArikiKoike(5, 2) H.a_realization()
- cyclotomic_parameters()#
Return the cyclotomic parameters
ofself
.EXAMPLES:
sage: H = algebras.ArikiKoike(5, 3) sage: H.cyclotomic_parameters() (u0, u1, u2, u3, u4)
H = algebras.ArikiKoike(5, 3) H.cyclotomic_parameters()
- hecke_parameter()#
Return the Hecke parameter
ofself
.EXAMPLES:
sage: H = algebras.ArikiKoike(5, 3) sage: H.hecke_parameter() q
H = algebras.ArikiKoike(5, 3) H.hecke_parameter()
- q()#
Return the Hecke parameter
ofself
.EXAMPLES:
sage: H = algebras.ArikiKoike(5, 3) sage: H.hecke_parameter() q
H = algebras.ArikiKoike(5, 3) H.hecke_parameter()
- u()#
Return the cyclotomic parameters
ofself
.EXAMPLES:
sage: H = algebras.ArikiKoike(5, 3) sage: H.cyclotomic_parameters() (u0, u1, u2, u3, u4)
H = algebras.ArikiKoike(5, 3) H.cyclotomic_parameters()