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
""" Rational Cherednik Algebras """ #***************************************************************************** # Copyright (C) 2015 Travis Scrimshaw <tscrim at ucdavis.edu> # # Distributed under the terms of the GNU General Public License (GPL) # http://www.gnu.org/licenses/ #*****************************************************************************
r""" A rational Cherednik algebra.
Let `k` be a field. Let `W` be a complex reflection group acting on a vector space `\mathfrak{h}` (over `k`). Let `\mathfrak{h}^*` denote the corresponding dual vector space. Let `\cdot` denote the natural action of `w` on `\mathfrak{h}` and `\mathfrak{h}^*`. Let `\mathcal{S}` denote the set of reflections of `W` and `\alpha_s` and `\alpha_s^{\vee}` are the associated root and coroot of `s`. Let `c = (c_s)_{s \in W}` such that `c_s = c_{tst^{-1}}` for all `t \in W`.
The *rational Cherednik algebra* is the `k`-algebra `H_{c,t}(W) = T(\mathfrak{h} \oplus \mathfrak{h}^*) \otimes kW` with parameters `c, t \in k` that is subject to the relations:
.. MATH::
\begin{aligned} w \alpha & = (w \cdot \alpha) w, \\ \alpha^{\vee} w & = w (w^{-1} \cdot \alpha^{\vee}), \\ \alpha \alpha^{\vee} & = \alpha^{\vee} \alpha + t \langle \alpha^{\vee}, \alpha \rangle + \sum_{s \in \mathcal{S}} c_s \frac{\langle \alpha^{\vee}, \alpha_s \rangle \langle \alpha^{\vee}_s, \alpha \rangle}{ \langle \alpha^{\vee}, \alpha \rangle} s, \end{aligned}
where `w \in W` and `\alpha \in \mathfrak{h}` and `\alpha^{\vee} \in \mathfrak{h}^*`.
INPUT:
- ``ct`` -- a finite Cartan type - ``c`` -- the parameters `c_s` given as an element or a tuple, where the first entry is the one for the long roots and (for non-simply-laced types) the second is for the short roots - ``t`` -- the parameter `t` - ``base_ring`` -- (optional) the base ring - ``prefix`` -- (default: ``('a', 's', 'ac')``) the prefixes
.. TODO::
Implement a version for complex reflection groups.
REFERENCES:
- [GGOR2003]_ - [EM2001]_ """ """ Normalize input to ensure a unique representation.
EXAMPLES::
sage: R1 = algebras.RationalCherednik(['B',2], 1, 1, QQ) sage: R2 = algebras.RationalCherednik(CartanType(['B',2]), [1,1], 1, QQ, ('a', 's', 'ac')) sage: R1 is R2 True """ raise ValueError("the Cartan type must be finite") base_ring = QQ else: t = base_ring.one() else:
# Normalize the parameter c if len(c) != 1: raise ValueError("1 parameter c_s must be given for simply-laced types") c = (base_ring(c[0]),) else: raise ValueError("2 parameters c_s must be given for non-simply-laced types") else: else:
r""" Initialize ``self``.
EXAMPLES::
sage: k = QQ['c,t'] sage: R = algebras.RationalCherednik(['A',2], k.gen(0), k.gen(1)) sage: TestSuite(R).run() # long time """ bracket=False) bracket=False) category=Algebras(base_ring).WithBasis().Graded(), sorting_key=self._genkey)
""" Construct a key for comparison for a term indexed by ``t``.
The key we create is the tuple in the following order:
- overall degree - length of the Weyl group element - the Weyl group element - the element of `\mathfrak{h}` - the element of `\mathfrak{h}^*`
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.an_element()**2 # indirect doctest 9*ac1^2 + 10*I + 6*a1*ac1 + 6*s1 + 3/2*s2 + 3/2*s1*s2*s1 + a1^2 """
def _reflections(self): """ A dictionary of reflections to a pair of the associated root and coroot.
EXAMPLES::
sage: R = algebras.RationalCherednik(['B',2], [1,2], 1, QQ) sage: [R._reflections[k] for k in sorted(R._reflections, key=str)] [(alpha[1], alphacheck[1], 1), (alpha[1] + alpha[2], 2*alphacheck[1] + alphacheck[2], 2), (alpha[2], alphacheck[2], 2), (alpha[1] + 2*alpha[2], alphacheck[1] + alphacheck[2], 1)] """ else:
r""" Return a string representation of ``self``.
EXAMPLES ::
sage: RationalCherednikAlgebra(['A',4], 2, 1, QQ) Rational Cherednik Algebra of type ['A', 4] with c=2 and t=1 over Rational Field sage: algebras.RationalCherednik(['B',2], [1,2], 1, QQ) Rational Cherednik Algebra of type ['B', 2] with c_L=1 and c_S=2 and t=1 over Rational Field """ else:
""" Return a string representation of the term indexed by ``t``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.an_element() # indirect doctest 3*ac1 + 2*s1 + a1 sage: R.one() # indirect doctest I """
""" Return the algebra generators of ``self``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: list(R.algebra_generators()) [a1, a2, s1, s2, ac1, ac2] """ self._weyl.group_generators()[i], self._h.one()) ) self._weyl.one(), self._h.monoid_generators()[i]) )
self._weyl.one(), self._h.one()) )
def one_basis(self): """ Return the index of the element `1`.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.one_basis() (1, 1, 1) """
r""" Return ``left`` multiplied by ``right`` in ``self``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: a2 = R.algebra_generators()['a2'] sage: ac1 = R.algebra_generators()['ac1'] sage: a2 * ac1 # indirect doctest a2*ac1 sage: ac1 * a2 -I + a2*ac1 - s1 - s2 + 1/2*s1*s2*s1 sage: x = R.an_element() sage: [y * x for y in R.some_elements()] [0, 3*ac1 + 2*s1 + a1, 9*ac1^2 + 10*I + 6*a1*ac1 + 6*s1 + 3/2*s2 + 3/2*s1*s2*s1 + a1^2, 3*a1*ac1 + 2*a1*s1 + a1^2, 3*a2*ac1 + 2*a2*s1 + a1*a2, 3*s1*ac1 + 2*I - a1*s1, 3*s2*ac1 + 2*s2*s1 + a1*s2 + a2*s2, 3*ac1^2 - 2*s1*ac1 + 2*I + a1*ac1 + 2*s1 + 1/2*s2 + 1/2*s1*s2*s1, 3*ac1*ac2 + 2*s1*ac1 + 2*s1*ac2 - I + a1*ac2 - s1 - s2 + 1/2*s1*s2*s1] sage: [x * y for y in R.some_elements()] [0, 3*ac1 + 2*s1 + a1, 9*ac1^2 + 10*I + 6*a1*ac1 + 6*s1 + 3/2*s2 + 3/2*s1*s2*s1 + a1^2, 6*I + 3*a1*ac1 + 6*s1 + 3/2*s2 + 3/2*s1*s2*s1 - 2*a1*s1 + a1^2, -3*I + 3*a2*ac1 - 3*s1 - 3*s2 + 3/2*s1*s2*s1 + 2*a1*s1 + 2*a2*s1 + a1*a2, -3*s1*ac1 + 2*I + a1*s1, 3*s2*ac1 + 3*s2*ac2 + 2*s1*s2 + a1*s2, 3*ac1^2 + 2*s1*ac1 + a1*ac1, 3*ac1*ac2 + 2*s1*ac2 + a1*ac2] """ # Make copies of the internal dictionaries
# If there is nothing to commute
# Do Lac Ra if they are both non-trivial
# Compute the commutator
# remove the generator from the elements
# We now commute right roots past the left reflections: s Ra = Ra' s for s,c in terms for hd, cc in commute_w_hd(s, dr) })
# Add back in the commuted h and hd elements self._h({il:1})) )
# We have La Ls Lac Rs Rac, # so we must commute Lac Rs = Rs Lac' # and obtain La (Ls Rs) (Lac' Rac) for i,c in alphacheck[k].weyl_action(right[1].reduced_word(), inverse=True)) self._h({I[i]: e for i,e in enumerate(k) if e != 0}) * right[2] ): ret[k] for k in ret })
# Otherwise dr is non-trivial and we have La Ls Ra Rs Rac, # so we must commute Ls Ra = Ra' Ls for hd, c in commute_w_hd(left[1], dr) })
def _product_coroot_root(self, i, j): r""" Return the product `\alpha^{\vee}_i \alpha_j`.
EXAMPLES::
sage: k = QQ['c,t'] sage: R = algebras.RationalCherednik(['A',3], k.gen(0), k.gen(1)) sage: R._product_coroot_root(1, 1) ((1, 2*t), (s2, 1/2*c), (s3, 0), (s1*s2*s3*s2*s1, 1/2*c), (s2*s3*s2, 1/2*c), (s1, 2*c), (s1*s2*s1, 1/2*c)) sage: R._product_coroot_root(1, 2) ((1, -t), (s2, -c), (s3, 0), (s1*s2*s3*s2*s1, 0), (s2*s3*s2, -1/2*c), (s1, -c), (s1*s2*s1, 1/2*c)) sage: R._product_coroot_root(1, 3) ((1, 0), (s2, 1/2*c), (s3, 0), (s1*s2*s3*s2*s1, 1/2*c), (s2*s3*s2, -1/2*c), (s1, 0), (s1*s2*s1, -1/2*c)) """
# p[0] is the root, p[1] is the coroot, p[2] the value c_s / pc.scalar(pr)) ))
""" Return the degree on the monomial indexed by ``m``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: [R.degree_on_basis(g.leading_support()) ....: for g in R.algebra_generators()] [1, 1, 0, 0, -1, -1] """
def trivial_idempotent(self): """ Return the trivial idempotent of ``self``.
Let `e = |W|^{-1} \sum_{w \in W} w` is the trivial idempotent. Thus `e^2 = e` and `eW = We`. The trivial idempotent is used in the construction of the spherical Cherednik algebra from the rational Cherednik algebra by `U_{c,t}(W) = e H_{c,t}(W) e`.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.trivial_idempotent() 1/6*I + 1/6*s1 + 1/6*s2 + 1/6*s2*s1 + 1/6*s1*s2 + 1/6*s1*s2*s1 """ remove_zeros=False)
def deformed_euler(self): """ Return the element `eu_k`.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.deformed_euler() 2*I + 2/3*a1*ac1 + 1/3*a1*ac2 + 1/3*a2*ac1 + 2/3*a2*ac2 + s1 + s2 + s1*s2*s1 """
def an_element(self): """ Return an element of ``self``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.an_element() 3*ac1 + 2*s1 + a1 """
""" Return some elements of ``self``.
EXAMPLES::
sage: R = algebras.RationalCherednik(['A',2], 1, 1, QQ) sage: R.some_elements() [0, I, 3*ac1 + 2*s1 + a1, a1, a2, s1, s2, ac1, ac2] """
|