#14261: Iwahori-Hecke algebra with several bases
-------------------------------------+-------------------------------------
       Reporter:  brant              |        Owner:  sage-combinat
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-5.13
      Component:  combinatorics      |   Resolution:
       Keywords:  Iwahori Hecke      |    Merged in:
  algebra                            |    Reviewers:  Andrew Mathas, Brant
        Authors:  Brant Jones,       |  Jones, Travis Scrimshaw
  Travis Scrimshaw, Andrew Mathas    |  Work issues:
Report Upstream:  N/A                |       Commit:
         Branch:                     |     Stopgaps:
   Dependencies:  #13735 #14014      |
  #14678 #14516                      |
-------------------------------------+-------------------------------------
Changes (by {'newvalue': u'Brant Jones, Travis Scrimshaw, Andrew Mathas', 
'oldvalue': u'Brant Jones, Travis Scrimshaw'}):

 * author:  Brant Jones, Travis Scrimshaw => Brant Jones, Travis Scrimshaw,
     Andrew Mathas


Comment:

 I've finally finished this "review". I had intended just to give the code
 a quick look over and then a positive review but the issues with computing
 the KL-bases in the non-generic cases changed that. For example, the
 previous version of the patch would have computed KL-bases for ZW which
 were not the expected bases. There were also some issues with
 documentation (both what was and wasn't written and the fact that it
 wasn't included in the reference manual) and places where Laurent
 polynomials were misbehaving badly...and I didn't like the way that it was
 necessary to specify the Hecke parameters and their square roots.

 To fix all of these issues I ended up rewriting the patch completely
 (sorry!). As I foreshadowed above, the KL-bases are now done behind the
 scenes in a generic Hecke algebra. There is no longer any need to specify
 square roots as the code just figures out what to do. Here is an exerpt
 from the new documentation:
 {{{
     The conversions to and from the Kazhdan-Lusztig bases are done behind
 the
     scenes whenever the Kazhdan-Lusztig bases are well-defined. Once a
 suitable
     Iwahori-Hecke algebra is defined they will work without further
     intervention.

     For example, with the "standard parameters", so that
 `(T_r-q^2)(T_r+1)=0`::

         sage: R.<q> = LaurentPolynomialRing(ZZ)
         sage: H = IwahoriHeckeAlgebra('A3', q^2)
         sage: T=H.T(); Cp= H.Cp(); C=H.C()
         sage: C(T[1])
         q*C[1] + q^2
         sage: Cp(T[1,2,1])
         q^3*Cp[1,2,1] + (-q^2)*Cp[1,2] + (-q^2)*Cp[2,1] + q*Cp[1] +
 q*Cp[2] + (-1)
         sage: C(_)
         q^3*C[1,2,1] + q^4*C[1,2] + q^4*C[2,1] + q^5*C[1] + q^5*C[2] + q^6

     With the "normalized presentation, so that `(T_r-q)(T_r+q^{-1})=0`::

         sage: R.<q> = LaurentPolynomialRing(ZZ)
         sage: H = IwahoriHeckeAlgebra('A3', q,-q^-1)
         sage: T=H.T(); Cp= H.Cp(); C=H.C()
         sage: C(T[1])
         C[1] + q
         sage: Cp(T[1,2,1])
         Cp[1,2,1] + (-q^-1)*Cp[1,2] + (-q^-1)*Cp[2,1] + (q^-2)*Cp[1] +
 (q^-2)*Cp[2] + (-q^-3)
         sage: C(_)
         C[1,2,1] + q*C[1,2] + q*C[2,1] + q^2*C[1] + q^2*C[2] + q^3

     In the group algebra, so that `(T_r-1)(T_r+1)=0`::

         sage: H = IwahoriHeckeAlgebra('A3', 1)
         sage: T=H.T(); Cp= H.Cp(); C=H.C()
         sage: C(T[1])
         C[1] + 1
         sage: Cp(T[1,2,1])
         Cp[1,2,1] - Cp[1,2] - Cp[2,1] + Cp[1] + Cp[2] - 1
         sage: C(_)
         C[1,2,1] + C[1,2] + C[2,1] + C[1] + C[2] + 1

     On the other hand, if the Kazhdan-Lusztig bases are not well-defined
 (when
     ``-q_1q_2`` is not a square), attempting to use the Kazhdan-usztig
 bases
     triggers an error::

         sage: R.<q>=LaurentPolynomialRing(ZZ)
         sage: H = IwahoriHeckeAlgebra('A3', q)
         sage: C=H.C()
         Traceback (most recent call last):
         ...
         ValueError: The Kazhdan_Lusztig bases are defined only when the
 product of the parameters are a square root
 }}}

 In terms of the code there is now a new ``_AGenericIwahoriHeckeAlgebra``
 class which is where all of the KL-basis calculations are really done.
 Elements of this class have a ``specialize_to`` method for getting back to
 the (possibly non-generic) Hecke algebra. The transition to the category
 framework is now complete with the previous element class
 ``IwahoriHeckeAlgebraElement`` being subsumed into the
 ``IwahoriHeckeAlgebra`` class. There is also a new
 ``normalized_laurent_polynomial`` function for making Laurent polynomials
 (and even integers) play more nicely...this seems like an awful hack, but
 it does seem to be necessary? (Perhaps Travis' Laurent polynomial patch
 removes the need for this, but things like 1/1 being rational may still
 cause problems?).

 I have been through the documentation and tried to explain everything. I
 apologise for the many typos that I have no doubt introduced and I hope
 that what remains is passable.

 One question/concern: if some one wants to work with what really is a
 generic Hecke algebra, say defined over ``Z[q,q^-1]``, I wonder whether
 the overhead in implementing the KL-bases via a hidden two variable Hecke
 algebra will end up being too costly. If I could see a way to detect when
 the parameters really are "generic" then perhaps a generic Hecke algebra
 could be returned in this case to avoid the duplication....but I can't for
 the life of me see how to detect this. Perhaps the special parameters
 ``(q_1,q_2)=(q1,-1)`` and ``(q_1,q_2)=(q,q^-1)`` should be treated
 separately?

 Finally, I seem to have confused my local version of the combinat queue so
 I am unable to push the patch to the combinat server at the moment.
 Instead I'll upload the patch to trac and hope that it works -- it should
 be applied **after** the two patches currently in the queue. Two more
 points:
 * Nicolas suggested passing in the ``bar_involution`` as a parameter to
 the Hecke algebras. I haven't done this. I can't think of a case where
 this would be needed, but perhap it is? Whether or not this is done, the
 ``bar_involution`` should give an error/warning whenever the parameters
 are not generic as in such caes it ill return silly results. (As I said,
 however, I dont see how to test for "generic" parameters...perhaps just
 algebraic independence overhe ground ring?).
 * Travis, sorry, but I haven't looked at all at your ``term_cmp`` patch.

 Andrew

 ps Given the size of the my review patch I've added myself as an author on
 the ticket. My changes definitely need to be reviewed!

--
Ticket URL: <http://trac.sagemath.org/ticket/14261#comment:52>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to