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
""" Affine nilTemperley Lieb Algebra of type A """ #***************************************************************************** # Copyright (C) 2010 Anne Schilling <anne at math.ucdavis.edu> # # Distributed under the terms of the GNU General Public License (GPL) # http://www.gnu.org/licenses/ #***************************************************************************** from sage.categories.all import AlgebrasWithBasis from sage.combinat.root_system.cartan_type import CartanType from sage.combinat.root_system.weyl_group import WeylGroup from sage.rings.ring import Ring from sage.rings.all import ZZ from sage.combinat.free_module import CombinatorialFreeModule from sage.misc.cachefunc import cached_method
class AffineNilTemperleyLiebTypeA(CombinatorialFreeModule): r""" Constructs the affine nilTemperley Lieb algebra of type `A_{n-1}^{(1)}` as used in [Pos2005]_.
INPUT:
- ``n`` -- a positive integer
The affine nilTemperley Lieb algebra is generated by `a_i` for `i=0,1,\ldots,n-1` subject to the relations `a_i a_i = a_i a_{i+1} a_i = a_{i+1} a_i a_{i+1} = 0` and `a_i a_j = a_j a_i` for `i-j \not \equiv \pm 1`, where the indices are taken modulo `n`.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(4) sage: a = A.algebra_generators(); a Finite family {0: a0, 1: a1, 2: a2, 3: a3} sage: a[1]*a[2]*a[0] == a[1]*a[0]*a[2] True sage: a[0]*a[3]*a[0] 0 sage: A.an_element() 2*a0 + 1 + 3*a1 + a0*a1*a2*a3 """
def __init__(self, n, R = ZZ, prefix = 'a'): """ Initiates the affine nilTemperley Lieb algebra over the ring `R`.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3, prefix="a"); A The affine nilTemperley Lieb algebra A3 over the ring Integer Ring sage: TestSuite(A).run() sage: A = AffineNilTemperleyLiebTypeA(3, QQ); A The affine nilTemperley Lieb algebra A3 over the ring Rational Field """ raise TypeError("Argument R must be a ring.")
def _element_constructor_(self, w): """ Constructs a basis element from an element of the Weyl group.
If `w = w_1 ... w_k` is a reduced word for `w`, then `A(w)` returns zero if `w` contains braid relations. TODO: Once the functorial construction is in sage, perhaps this should be handled constructing the affine nilTemperley Lieb algebra as a quotient algebra.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3, prefix="a") sage: W = A.weyl_group() sage: w = W.from_reduced_word([2,1,2]) sage: A(w) 0 sage: w = W.from_reduced_word([2,1]) sage: A(w) a2*a1 """ else:
@cached_method def one_basis(self): """ Returns the unit of the underlying Weyl group, which index the one of this algebra, as per :meth:`AlgebrasWithBasis.ParentMethods.one_basis`.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: A.one_basis() [1 0 0] [0 1 0] [0 0 1] sage: A.one_basis() == A.weyl_group().one() True sage: A.one() 1 """
def _repr_(self): """ EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3); A The affine nilTemperley Lieb algebra A3 over the ring Integer Ring """
def weyl_group(self): """ EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: A.weyl_group() Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root space) """
def index_set(self): """ EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: A.index_set() (0, 1, 2) """
@cached_method def algebra_generators(self): """ Returns the generators `a_i` for `i=0,1,2,\ldots,n-1`.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: a = A.algebra_generators();a Finite family {0: a0, 1: a1, 2: a2} sage: a[1] a1 """
def algebra_generator(self, i): """ EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: A.algebra_generator(1) a1 sage: A = AffineNilTemperleyLiebTypeA(3, prefix = 't') sage: A.algebra_generator(1) t1 """
def product_on_basis(self, w, w1): """ Returns `a_w a_{w1}`, where `w` and `w1` are in the Weyl group assuming that `w` does not contain any braid relations.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(5) sage: W = A.weyl_group() sage: s = W.simple_reflections() sage: [A.product_on_basis(s[1],x) for x in s] [a1*a0, 0, a1*a2, a3*a1, a4*a1]
sage: a = A.algebra_generators() sage: x = a[1] * a[2] sage: x a1*a2 sage: x * a[1] 0 sage: x * a[2] 0 sage: x * a[0] a1*a2*a0
sage: [x * a[1] for x in a] [a0*a1, 0, a2*a1, a3*a1, a4*a1]
sage: w = s[1]*s[2]*s[1] sage: A.product_on_basis(w,s[1]) Traceback (most recent call last): ... AssertionError """ else:
@cached_method def has_no_braid_relation(self, w, i): """ Assuming that `w` contains no relations of the form `s_i^2` or `s_i s_{i+1} s_i` or `s_i s_{i-1} s_i`, tests whether `w s_i` contains terms of this form.
EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(5) sage: W = A.weyl_group() sage: s=W.simple_reflections() sage: A.has_no_braid_relation(s[2]*s[1]*s[0]*s[4]*s[3],0) False sage: A.has_no_braid_relation(s[2]*s[1]*s[0]*s[4]*s[3],2) True sage: A.has_no_braid_relation(s[4],2) True """ else:
def _repr_term(self, t, short_display=True): """ EXAMPLES::
sage: A = AffineNilTemperleyLiebTypeA(3) sage: W = A.weyl_group() sage: A._repr_term(W.from_reduced_word([1,2,0])) 'a1*a2*a0' sage: A._repr_term(W.from_reduced_word([1,2,0]), short_display = False) 'a[1]*a[2]*a[0]' """ else: |