Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
""" Yokonuma-Hecke Algebras
AUTHORS:
- Travis Scrimshaw (2015-11): initial version """
#***************************************************************************** # Copyright (C) 2015 Travis Scrimshaw <tscrimsh at umn.edu> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # http://www.gnu.org/licenses/ #*****************************************************************************
r""" The Yokonuma-Hecke algebra `Y_{d,n}(q)`.
Let `R` be a commutative ring and `q` be a unit in `R`. The *Yokonuma-Hecke algebra* `Y_{d,n}(q)` is the associative, unital `R`-algebra generated by `t_1, t_2, \ldots, t_n, g_1, g_2, \ldots, g_{n-1}` and subject to the relations:
- `g_i g_j = g_j g_i` for all `|i - j| > 1`, - `g_i g_{i+1} g_i = g_{i+1} g_i g_{i+1}`, - `t_i t_j = t_j t_i`, - `t_j g_i = g_i t_{j s_i}`, and - `t_j^d = 1`,
where `s_i` is the simple transposition `(i, i+1)`, along with the quadratic relation
.. MATH::
g_i^2 = 1 + \frac{(q - q^{-1})}{d} \left( \sum_{s=0}^{d-1} t_i^s t_{i+1}^{-s} \right) g_i.
Thus the Yokonuma-Hecke algebra can be considered a quotient of the framed braid group `(\ZZ / d\ZZ) \wr B_n`, where `B_n` is the classical braid group on `n` strands, by the quadratic relations. Moreover, all of the algebra generators are invertible. In particular, we have
.. MATH::
g_i^{-1} = g_i - (q - q^{-1}) e_i.
When we specialize `q = \pm 1`, we obtain the group algebra of the complex reflection group `G(d, 1, n) = (\ZZ / d\ZZ) \wr S_n`. Moreover for `d = 1`, the Yokonuma-Hecke algebra is equal to the :class:`Iwahori-Hecke <IwahoriHeckeAlgebra>` of type `A_{n-1}`.
INPUT:
- ``d`` -- the maximum power of `t` - ``n`` -- the number of generators - ``q`` -- (optional) an invertible element in a commutative ring; the default is `q \in \QQ[q,q^{-1}]` - ``R`` -- (optional) a commutative ring containing ``q``; the default is the parent of `q`
EXAMPLES:
We construct `Y_{4,3}` and do some computations::
sage: Y = algebras.YokonumaHecke(4, 3) sage: g1, g2, t1, t2, t3 = Y.algebra_generators() sage: g1 * g2 g[1,2] sage: t1 * g1 t1*g[1] sage: g2 * t2 t3*g[2] sage: g2 * t3 t2*g[2] sage: (g2 + t1) * (g1 + t2*t3) g[2,1] + t2*t3*g[2] + t1*g[1] + t1*t2*t3 sage: g1 * g1 1 - (1/4*q^-1-1/4*q)*g[1] - (1/4*q^-1-1/4*q)*t1*t2^3*g[1] - (1/4*q^-1-1/4*q)*t1^2*t2^2*g[1] - (1/4*q^-1-1/4*q)*t1^3*t2*g[1] sage: g2 * g1 * t1 t3*g[2,1]
We construct the elements `e_i` and show that they are idempotents::
sage: e1 = Y.e(1); e1 1/4 + 1/4*t1*t2^3 + 1/4*t1^2*t2^2 + 1/4*t1^3*t2 sage: e1 * e1 == e1 True sage: e2 = Y.e(2); e2 1/4 + 1/4*t2*t3^3 + 1/4*t2^2*t3^2 + 1/4*t2^3*t3 sage: e2 * e2 == e2 True
REFERENCES:
- [CL2013]_
- [CPdA2014]_
- [ERH2015]_
- [JPdA15]_ """ """ Standardize input to ensure a unique representation.
TESTS::
sage: Y1 = algebras.YokonumaHecke(5, 3) sage: q = LaurentPolynomialRing(QQ, 'q').gen() sage: Y2 = algebras.YokonumaHecke(5, 3, q) sage: Y3 = algebras.YokonumaHecke(5, 3, q, q.parent()) sage: Y1 is Y2 and Y2 is Y3 True """ raise TypeError("base ring must be a commutative ring")
""" Initialize ``self``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(5, 3) sage: elts = Y.some_elements() + list(Y.algebra_generators()) sage: TestSuite(Y).run(elements=elts) """ category=cat)
""" Return a string representation of ``self``.
EXAMPLES::
sage: algebras.YokonumaHecke(5, 2) Yokonuma-Hecke algebra of rank 5 and order 2 with q=q over Univariate Laurent Polynomial Ring in q over Rational Field """ self._d, self._n, self._q, self.base_ring())
r""" Return a latex representation of ``self``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(5, 2) sage: latex(Y) \mathcal{Y}_{5,2}(q) """
""" Return a string representation of the basis element indexed by ``m``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(4, 3) sage: Y._repr_term( ((1, 0, 2), Permutation([3,2,1])) ) 't1*t3^2*g[2,1,2]' """
r""" Return a latex representation for the basis element indexed by ``m``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(4, 3) sage: Y._latex_term( ((1, 0, 2), Permutation([3,2,1])) ) 't_{1} t_{3}^2 g_{2} g_{1} g_{2}' """ if not lhs: return '1' return lhs
def algebra_generators(self): """ Return the algebra generators of ``self``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(5, 3) sage: dict(Y.algebra_generators()) {'g1': g[1], 'g2': g[2], 't1': t1, 't2': t2, 't3': t3} """
def gens(self): """ Return the generators of ``self``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(5, 3) sage: Y.gens() (g[1], g[2], t1, t2, t3) """
def one_basis(self): """ Return the index of the basis element of `1`.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(5, 3) sage: Y.one_basis() ((0, 0, 0), [1, 2, 3]) """
def e(self, i): """ Return the element `e_i`.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(4, 3) sage: Y.e(1) 1/4 + 1/4*t1*t2^3 + 1/4*t1^2*t2^2 + 1/4*t1^3*t2 sage: Y.e(2) 1/4 + 1/4*t2*t3^3 + 1/4*t2^2*t3^2 + 1/4*t2^3*t3 """ raise ValueError("invalid index")
""" Return the generator(s) `g_i`.
INPUT:
- ``i`` -- (default: ``None``) the generator `g_i` or if ``None``, then the list of all generators `g_i`
EXAMPLES::
sage: Y = algebras.YokonumaHecke(8, 3) sage: Y.g(1) g[1] sage: Y.g() [g[1], g[2]] """
""" Return the generator(s) `t_i`.
INPUT:
- ``i`` -- (default: ``None``) the generator `t_i` or if ``None``, then the list of all generators `t_i`
EXAMPLES::
sage: Y = algebras.YokonumaHecke(8, 3) sage: Y.t(2) t2 sage: Y.t() [t1, t2, t3] """
""" Return the product of the basis elements indexed by ``m1`` and ``m2``.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(4, 3) sage: m = ((1, 0, 2), Permutations(3)([2,1,3])) sage: 4 * Y.product_on_basis(m, m) -(q^-1-q)*t2^2*g[1] + 4*t1*t2 - (q^-1-q)*t1*t2*g[1] - (q^-1-q)*t1^2*g[1] - (q^-1-q)*t1^3*t2^3*g[1]
Check that we apply the permutation correctly on `t_i`::
sage: Y = algebras.YokonumaHecke(4, 3) sage: g1, g2, t1, t2, t3 = Y.algebra_generators() sage: g21 = g2 * g1 sage: g21 * t1 t3*g[2,1] """ # Commmute g1 and t2, then multiply t1 and t2 #ig1 = g1 # We have to reverse the reduced word due to Sage's convention # for permutation multiplication for m,c in ret)
r""" Return the product `t g_w g_i`.
If the quadratic relation is `g_i^2 = 1 + (q + q^{-1})e_i g_i`, then we have
.. MATH::
g_w g_i = \begin{cases} g_{ws_i} & \text{if } \ell(ws_i) = \ell(w) + 1, \\ g_{ws_i} - (q - q^{-1}) g_w e_i & \text{if } \ell(w s_i) = \ell(w) - 1. \end{cases}
INPUT:
- ``m`` -- a pair ``[t, w]``, where ``t`` encodes the monomial and ``w`` is an element of the permutation group - ``i`` -- an element of the index set
EXAMPLES::
sage: Y = algebras.YokonumaHecke(4, 3) sage: m = ((1, 0, 2), Permutations(3)([2,1,3])) sage: 4 * Y._product_by_basis_gen(m, 1) -(q^-1-q)*t2*t3^2*g[1] + 4*t1*t3^2 - (q^-1-q)*t1*t3^2*g[1] - (q^-1-q)*t1^2*t2^3*t3^2*g[1] - (q^-1-q)*t1^3*t2^2*t3^2*g[1] """ # We have to flip the side due to Sage's multiplication # convention for permutations
# We commute g_w and e_i and then multiply by t
def inverse_g(self, i): r""" Return the inverse of the generator `g_i`.
From the quadratic relation, we have
.. MATH::
g_i^{-1} = g_i - (q - q^{-1}) e_i.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(2, 4) sage: [2*Y.inverse_g(i) for i in range(1, 4)] [(q^-1+q) + 2*g[1] + (q^-1+q)*t1*t2, (q^-1+q) + 2*g[2] + (q^-1+q)*t2*t3, (q^-1+q) + 2*g[3] + (q^-1+q)*t3*t4] """ raise ValueError("invalid index")
r""" Return the inverse if ``self`` is a basis element.
EXAMPLES::
sage: Y = algebras.YokonumaHecke(3, 3) sage: t = prod(Y.t()); t t1*t2*t3 sage: ~t t1^2*t2^2*t3^2 sage: [3*~(t*g) for g in Y.g()] [(q^-1+q)*t2*t3^2 + (q^-1+q)*t1*t3^2 + (q^-1+q)*t1^2*t2^2*t3^2 + 3*t1^2*t2^2*t3^2*g[1], (q^-1+q)*t1^2*t3 + (q^-1+q)*t1^2*t2 + (q^-1+q)*t1^2*t2^2*t3^2 + 3*t1^2*t2^2*t3^2*g[2]] """ raise NotImplementedError("inverse only implemented for basis elements (monomials in the generators)"%self)
|