# Ticket #8442: trac_8442-lie-rebased-4.5.2.2.patch

File trac_8442-lie-rebased-4.5.2.2.patch, 129.9 KB (added by bump, 3 years ago)
• ## MANIFEST.in

# HG changeset patch
# User Daniel Bump <bump@match.stanford.edu>
# Date 1282433435 25200
# Node ID fc7cc70533c44701cdc21537ee1721dd396b8624
# Parent  5b338f2e484f2065d3d30d47bc204d6e9ed13d12
trac_8442-rebased-4.5.2.patch

diff -r 5b338f2e484f -r fc7cc70533c4 MANIFEST.in
 a include doc/fr/a_tour_of_sage/eigen_plot.png include doc/fr/a_tour_of_sage/sin_plot.png recursive-include doc/en/reference/media * recursive-include doc/en/thematic_tutorials/media * recursive-include doc/common/static * recursive-include doc/common/themes * include sage/ext/mac-app/README
• ## new file doc/en/thematic_tutorials/bibliography.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/bibliography.rst
 - ============ Bibliography ============ .. [BumpNakasuji2010] D. Bump and M. Nakasuji. Casselman's basis of Iwahori vectors and the Bruhat order. arXiv:1002.2996, http://arxiv.org/abs/1002.2996. .. [Carrell1994] J. B. Carrell. The Bruhat graph of a Coxeter group, a conjecture of Deodhar, and rational smoothness of Schubert varieties. In *Algebraic Groups and Their Generalizations: Classical Methods*, AMS Proceedings of Symposia in Pure Mathematics, 56, 53--61, 1994. .. [Casselman1980] W. Casselman. The unramified principal series of \mathfrak{p}-adic groups I: The spherical function. *Compositio Mathematica*, 40(3):387--406, 1980. .. [CormenEtAl2001] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. *Introduction to Algorithms*. The MIT Press, USA, 2nd edition, 2001. .. [Deodhar1977] V. V. Deodhar. Some characterizations of Bruhat ordering on a Coxeter group and determination of the relative Moebius function. Inventiones Mathematicae, 39(2):187--198, 1977. .. [Dyer1993] M. J. Dyer. The nil Hecke ring and Deodhar's conjecture on Bruhat intervals. Inventiones Mathematicae, 111(1):571--574, 1993. .. [FauserEtAl2006] B. Fauser, P. D. Jarvis, R. C. King, and B. G. Wybourne. New branching rules induced by plethysm. *Journal of Physics A*. 39(11):2611--2655, 2006. .. [Fulton1997] W. Fulton. *Young Tableaux*. Cambridge University Press, 1997. .. [HainesEtAl2009] T. J. Haines, R. E. Kottwitz, and A. Parsad. Iwahori-Hecke Algebras. arXiv:math/0309168, http://arxiv.org/abs/math/0309168. .. [HongKang2002] J. Hong and S.-J. Kang. *Introduction to Quantum Groups and Crystal Bases*. AMS Graduate Studies in Mathematics, American Mathematical Society, 2002. .. [HoweEtAl2005] R. Howe, E.-C.Tan, and J. F. Willenbring. Stable branching rules for classical symmetric pairs. *Transactions of the American Mathematical Society*, 357(4):1601--1626, 2005. .. [Iwahori1964] N. Iwahori. On the structure of a Hecke ring of a Chevalley group over a finite field. *J. Fac. Sci. Univ. Tokyo Sect. I*, 10:215--236, 1964. .. [Jimbo1986] M. A. Jimbo. q-analogue of U(\mathfrak{gl}(N+1)), Hecke algebra, and the Yang-Baxter equation. *Lett. Math. Phys*, 11(3):247--252, 1986. .. [Kashiwara1995] M. Kashiwara. On crystal bases. Representations of groups (Banff, AB, 1994), 155--197, CMS Conference Proceedings, 16, American Mathematical Society, Providence, RI, 1995. .. [KashiwaraNakashima1994] M. Kashiwara and T. Nakashima. Crystal graphs for representations of the q-analogue of classical Lie algebras. *Journal Algebra*, 165(2):295--345, 1994. .. [King1975] R. C. King. Branching rules for classical Lie groups using tensor and spinor methods. *Journal of Physics A*, 8:429--449, 1975. .. [Knuth1970] D. Knuth. Permutations, matrices, and generalized Young tableaux. *Pacific Journal of Mathematics*, 34(3):709--727, 1970. .. [Knuth1998] D. Knuth. *The Art of Computer Programming. Volume 3. Sorting and Searching*. Addison Wesley Longman, 1998. .. [McKayPatera1981] W. G. McKay and J. Patera. *Tables of Dimensions, Indices and Branching Rules for Representations of Simple Lie Algebras*. Marcel Dekker, 1981. .. [MenezesEtAl1996] A. J. Menezes, P. C. van Oorschot, and S. A. Vanstone. *Handbook of Applied Cryptography*. CRC Press, Boca Raton, FL, USA, 1996. .. [Reeder1992] M. Reeder. On certain Iwahori invariants in the unramified principal series. *Pacific Journal of Mathematics*, 153(2):313--342, 1992. .. [Rogawski1985] J. Rogawski, On modules over the Hecke algebra of a p-adic group. *Inventiones Mathematicae*, 79(3):443--465, 1985. .. [Stanley1999] R. P. Stanley. *Enumerative Combinatorics, Volume 2*. Cambridge University Press, 1999. .. [Stinson2006] D. R. Stinson. *Cryptography: Theory and Practice*. Chapman & Hall/CRC, Boca Raton, USA, 3rd edition, 2006. .. [TrappeWashington2006] W. Trappe and L. C. Washington. *Introduction to Cryptography with Coding Theory*. Pearson Prentice Hall, Upper Saddle River, New Jersey, USA, 2nd edition, 2006.
• ## doc/en/thematic_tutorials/index.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/index.rst
 a functional_programming group_theory lie bibliography Indices and tables ==================
• ## new file doc/en/thematic_tutorials/lie.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie.rst
 - .. -*- coding: utf-8 -*- ============================================= Lie Methods and Related Combinatorics in Sage ============================================= .. MODULEAUTHOR:: Daniel Bump, Stanford University These notes explain how to use the mathematical software Sage for Lie group computations. Sage also contains many combinatorial algorithms. We will cover only some of these. .. toctree:: :maxdepth: 2 lie/introduction lie/lie_basics lie/weyl_character_ring lie/branching_rules lie/weight_ring lie/weyl_groups lie/crystals lie/iwahori_hecke_algebra lie/kazhdan_lusztig_polynomials
• ## new file doc/en/thematic_tutorials/lie/branching_rules.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/branching_rules.rst
 - ------------------------------------- Maximal Subgroups and Branching Rules ------------------------------------- Branching rules --------------- If G is a Lie group and H is a subgroup, one often needs to know how representations of G restrict to H. Irreducibles usually do not restrict to irreducibles. In some cases the restriction is regular and predictable, in other cases it is chaotic. The description of how irreducibles decompose into irreducibles is called a *branching rule*. References for this topic: - [FauserEtAl2006]_ - [King1975]_ - [HoweEtAl2005]_ - [McKayPatera1981]_ Sage has enough built-in branching rules to handle all cases where G is a classical group, that is, type A, B, C or D. It also has many built-in cases where G is an exceptional group. Clearly it is sufficient to consider the case where H is a maximal subgroup of G, since if this is known then one may branch down successively through a series of subgroups, each maximal in its predecessors. A problem is therefore to understand the maximal subgroups in a Lie group, and to give branching rules for each. For convenience Sage includes some branching rules to non-maximal subgroups, but strictly speaking these are not necessary. The goal is to give a sufficient set of built-in branching rules for all maximal subgroups, and this is accomplished for classical groups (types A, B, C or D) at least up to rank 8, and for many maximal subgroups of exceptional groups. Levi subgroups -------------- A Levi subgroup may or may not be maximal. They are easily classified. If one starts with a Dynkin diagram for G and removes a single node, one obtains a smaller Dynkin diagram, which is the Dynkin diagram of a smaller subgroup H. For example, here is the A3 Dynkin diagram:: sage: A3 = WeylCharacterRing("A3") sage: A3.dynkin_diagram() O---O---O 1   2   3 A3 We see that we may remove the node 3 and obtain A2, or the node 2 and obtain A1xA1. These correspond to the Levi subgroups GL(3) and GL(2) \times GL(2) of GL(4). Let us construct the irreducible representations of GL(4) and branch them down to these down to GL(3) and GL(2) \times GL(2):: sage: A3 = WeylCharacterRing("A3") sage: reps = [A3(v) for v in A3.fundamental_weights()]; reps [A3(1,0,0,0), A3(1,1,0,0), A3(1,1,1,0)] sage: A2 = WeylCharacterRing("A2") sage: A1xA1 = WeylCharacterRing("A1xA1") sage: [pi.branch(A2, rule="levi") for pi in reps] [A2(0,0,0) + A2(1,0,0), A2(1,0,0) + A2(1,1,0), A2(1,1,0) + A2(1,1,1)] sage: [pi.branch(A1xA1, rule="levi") for pi in reps] [A1xA1(0,0,1,0) + A1xA1(1,0,0,0), A1xA1(0,0,1,1) + A1xA1(1,0,1,0) + A1xA1(1,1,0,0), A1xA1(1,0,1,1) + A1xA1(1,1,1,0)] Let us redo this calculation in coroot notation. As we have explained, coroot notation does not distinguish between representations of GL(4) that have the same restriction to SL(4), so in effect we are now working with the groups SL(4) and its Levi subgroups SL(3) and SL(2) \times SL(2):: sage: A3 = WeylCharacterRing("A3", style="coroots") sage: reps = [A3(v) for v in A3.fundamental_weights()]; reps [A3(1,0,0), A3(0,1,0), A3(0,0,1)] sage: A2 = WeylCharacterRing("A2", style="coroots") sage: A1xA1 = WeylCharacterRing("A1xA1", style="coroots") sage: [pi.branch(A2, rule="levi") for pi in reps] [A2(0,0) + A2(1,0), A2(0,1) + A2(1,0), A2(0,0) + A2(0,1)] sage: [pi.branch(A1xA1, rule="levi") for pi in reps] [A1xA1(0,1) + A1xA1(1,0), 2*A1xA1(0,0) + A1xA1(1,1), A1xA1(0,1) + A1xA1(1,0)] Now we may observe a distinction difference in branching from GL(4) \to GL(2) \times GL(2) and with SL(4) \to SL(2) \times SL(2). Consider the middle representation, which is the six dimensional exterior square. In the coroot notation, the restriction contained two copies of the trivial representation, 2*A1xA1(0,0). The other way, we had instead three distinct representations in the restriction, namely A1xA1(1,1,0,0) and A1xA1(0,0,1,1), that is, \det \otimes 1 and 1 \otimes \det. The Levi subgroup A1xA1 is actually not maximal. Indeed, we may factor the embedding: .. MATH:: SL(2) \times SL(2) \to Sp(4) \to SL(4). Therfore there are branching rules A3 -> C2 and C2 -> A2, and we could accomplish the branching in two steps, thus:: sage: A3 = WeylCharacterRing("A3", style="coroots") sage: C2 = WeylCharacterRing("C2", style="coroots") sage: B2 = WeylCharacterRing("B2", style="coroots") sage: D2 = WeylCharacterRing("D2", style="coroots") sage: A1xA1 = WeylCharacterRing("A1xA1", style="coroots") sage: reps = [A3(fw) for fw in A3.fundamental_weights()] sage: [pi.branch(C2, rule="symmetric").branch(B2, rule="isomorphic").\ ....:     branch(D2, rule="extended").branch(A1xA1, rule="isomorphic") for pi in reps] [A1xA1(0,1) + A1xA1(1,0), 2*A1xA1(0,0) + A1xA1(1,1), A1xA1(0,1) + A1xA1(1,0)] As you can see, we've redone the branching rather circuitously this way, making use of the branching rules A3->C2 and B2->D2, and two accidental isomorphisms C2=B2 and D2=A1xA1. It is much easier to go in one step using rule="levi", but reassuring that we get the same answer! Subgroups classified by the extended Dynkin diagram --------------------------------------------------- It is also true that if we remove one node from the extended Dynkin diagram that we obtain the Dynkin diagram of a subgroup. For example:: sage: G2 = WeylCharacterRing("G2", style="coroots") sage: G2.extended_dynkin_diagram() 3 O=<=O---O 1   2   0 G2~ Observe that by removing the 1 node that we obtain an A2 Dynkin diagram. Therefore the exceptional group G2 contains a copy of SL(3). We branch the two representations of G2 corresponding to the fundamental weights to this copy of A2:: sage: G2 = WeylCharacterRing("G2", style="coroots") sage: A2 = WeylCharacterRing("A2", style="coroots") sage: [G2(f).degree() for f in G2.fundamental_weights()] [7, 14] sage: [G2(f).branch(A2, rule="extended") for f in G2.fundamental_weights()] [A2(0,0) + A2(0,1) + A2(1,0), A2(0,1) + A2(1,0) + A2(1,1)] The two representations of G2, of degrees 7 and 14 respectively, are the action on the octonions of trace zero and the adjoint representation. For embeddings of this type, the rank of the subgroup H is the same as the rank of G. This is in contrast with embeddings of Levi type, where H has rank one less than G. Orthogonal and symplectic subgroups of orthogonal and symplectic groups ----------------------------------------------------------------------- If G = SO(r+s) then G has a subgroup SO(r) \times SO(s). This lifts to an embedding of the universal covering groups .. MATH:: \hbox{spin}(r) \times \hbox{spin}(s) \to \hbox{spin}(r+s). Sometimes this embedding is of extended type, and sometimes it is not. It is of extended type unless r and s are both odd. If it is of extended type then you may use rule="extended". In any case you may use rule="orthogonal_sum". The name refer to the origin of the embedding SO(r) \times SO(s) \to SO(r+s) from the decomposition of the underlying quadratic space as a direct sum of two orthogonal subspaces. There are four cases depending on the parity of r and s. For example, if r = 2k and s = 2l we have an embedding:: ['D',k] x ['D',l] --> ['D',k+l] This is of extended type. Thus consider the embedding D4xD3 -> D7. Here is the extended Dynkin diagram:: 0 O           O 7 |           | |           | O---O---O---O---O---O 1   2   3   4   5   6 Removing the 4 vertex results in a disconnected Dynkin diagram:: 0 O           O 7 |           | |           | O---O---O       O---O 1   2   3       5   6 This is D4xD3.  Therefore use the "extended" branching rule:: sage: D7 = WeylCharacterRing("D7", style="coroots") sage: D4xD3 = WeylCharacterRing("D4xD3", style="coroots") sage: spin = D7(D7.fundamental_weights()[7]); spin D7(0,0,0,0,0,0,1) sage: spin.branch(D4xD3, rule="extended") D4xD3(0,0,1,0,0,1,0) + D4xD3(0,0,0,1,0,0,1) Similarly we have embeddings:: ['D',k] x ['B',l] --> ['B',k+l] These are also of extended type. For example consider the embedding of D3xB2->B5. Here is the B5 extended Dynkin diagram:: O 0 | | O---O---O---O=>=O 1   2   3   4   5 Removing the 3 node gives:: O 0 | O---O       O=>=O 1   2       4   5 and this is the Dynkin diagram or D3xB2. For such branchings we again use rule="extended". Finally, there is an embedding :: ['B',k] x ['B',l] --> ['D',k+l+1] This is *not* of extended type, so you may not use rule="extended". Symmetric subgroups ------------------- If G admits an outer automorphism (usually of order two) then we may try to find the branching rule to the fixed subgroup H. It can be arranged that this automorphism maps the maximal torus T to itself and that a maximal torus U of H is contained in T. Suppose that the Dynkin diagram of G admits an automorphism. Then G itself admits an outer automorphism. The Dynkin diagram of the group H of invariants may be obtained by "folding" the Dynkin diagram of G along the automorphism. The exception is the branching rule GL(2r) \implies SO(2r). Here are the branching rules that can be obtained using rule="symmetric". +------------+-------------+---------------------------+ | G        | H         | Cartan Types              | +============+=============+===========================+ | GL(2r)   | Sp(2r)    | ['A',2r-1] => ['C',r] | +------------+-------------+---------------------------+ | GL(2r+1) | SO(2r+1)  | ['A',2r] => ['B',r]   | +------------+-------------+---------------------------+ | GL(2r)   | SO(2r)    | ['A',2r-1] => ['D',r] | +------------+-------------+---------------------------+ | SO(2r)   | SO(2r-1)  | ['D',r] => ['B',r-1]  | +------------+-------------+---------------------------+ | E_6      | F_4       | ['E',6] => ['F',4]    | +------------+-------------+---------------------------+ Tensor products --------------- If G_1 and G_2 are Lie groups, and we have representations \pi_1: G_1 \to GL(n) and \pi_2: G_2 \to GL(m) then the tensor product is a representation of G_1 \times G_2. It has its image in GL(nm) but sometimes this is conjugate to a subgroup of SO(nm) or Sp(nm). In particular we have the following cases. +-------------------+---------------------------+------------------------------------------+ | Group             | Subgroup                  | Cartan Types                             | +===================+===========================+==========================================+ | GL(rs)          | GL(r)\times GL(s)       | ['A', rs-1] => ['A',r-1] x ['A',s-1] | +-------------------+---------------------------+------------------------------------------+ | SO(4rs+2r+2s+1) | SO(2r+1)\times SO(2s+1) | ['B',2rs+r+s] => ['B',r] x ['B',s]   | +-------------------+---------------------------+------------------------------------------+ | SO(4rs+2s)      | SO(2r+1)\times SO(2s)   | ['D',2rs+s] => ['B',r] x ['D',s]     | +-------------------+---------------------------+------------------------------------------+ | SO(4rs)         | SO(2r)\times SO(2s)     | ['D',2rs] => ['D',r] x ['D',s]       | +-------------------+---------------------------+------------------------------------------+ | SO(4rs)         | Sp(2r)\times Sp(2s)     | ['D',2rs] => ['C',r] x ['C',s]       | +-------------------+---------------------------+------------------------------------------+ | Sp(4rs+2s)      | SO(2r+1)\times Sp(2s)   | ['C',2rs+s] => ['B',r] x ['C',s]     | +-------------------+---------------------------+------------------------------------------+ | Sp(4rs)         | Sp(2r)\times SO(2s)     | ['C',2rs] => ['C',r] x ['D',s]       | +-------------------+---------------------------+------------------------------------------+ These branching rules are obtained using rule="tensor". Symmetric powers ---------------- The k-th symmetric and exterior power homomorphisms map GL(n) \to GL \left({n+k-1 \choose k} \right) and GL \left({n \choose k} \right). The corresponding branching rules are not implemented but a special case is. The k-th symmetric power homomorphism SL(2) \to GL(k+1) has its image inside of SO(2r+1) if k = 2r and inside of Sp(2r) if k = 2r-1. Hence there are branching rules:: ['B',r] => A1 ['C',r] => A1 and these may be obtained using rule="symmetric_power". Plethysms --------- The above branching rules are sufficient for most cases, but a few fall between the cracks. Mostly these involve maximal subgroups of fairly small rank. The rule rule="plethysm" is a powerful rule that includes any branching rule from types A, B, C or D as a special case. Thus it could be used in place of the above rules and would give the same results. However, it is most useful when branching from G to a maximal subgroup H such that rank(H) < rank(G)-1. We consider a homomorphism H \to G where G is one of SL(r+1), SO(2r+1), Sp(2r) or SO(2r). The function branching_rule_from_plethysm produces the corresponding branching rule. The main ingredient is the character \chi of the representation of H that is the homomorphism to GL(r+1), GL(2r+1) or GL(2r). Let us consider the symmetric fifth power representation of SL(2). This is implemented above by rule="symmetric_power", but suppose we want to use rule="plethysm". First we construct the homomorphism by invoking its character, to be called chi:: sage: A1 = WeylCharacterRing("A1", style="coroots") sage: chi = A1([5]) sage: chi.degree() 6 sage: chi.frobenius_schur_indicator() -1 This confirms that the character has degree 6 and is symplectic, so it corresponds to a homomorphism SL(2) \to Sp(6), and there is a corresponding branching rule C3 => A1:: sage: C3 = WeylCharacterRing("C3", style="coroots") sage: sym5rule = branching_rule_from_plethysm(chi, "C3") sage: [C3(hwv).branch(A1, rule=sym5rule) for hwv in C3.fundamental_weights()] [A1(5), A1(4) + A1(8), A1(3) + A1(9)] This is identical to the results we would obtain using rule="symmetric_power":: sage: [C3(v).branch(A1, rule="symmetric_power") for v in C3.fundamental_weights()] [A1(5), A1(4) + A1(8), A1(3) + A1(9)] But the next example of plethysm gives a branching rule not available by other methods:: sage: G2 = WeylCharacterRing("G2", style="coroots") sage: D7 = WeylCharacterRing("D7", style="coroots") sage: ad = G2(0,1); ad.degree() 14 sage: ad.frobenius_schur_indicator() 1 This is the 14-dimensional adjoint representation of the exceptional group G_2. Since the Frobenius-Schur indicator is 1, the representation is orthogonal, and factors through SO(14). Let us branch the fundamental representations:: sage: for r in D7.fundamental_weights(): ...      print D7(r).branch(G2, rule=branching_rule_from_plethysm(ad, "D7")) ... G2(0,1) G2(0,1) + G2(3,0) G2(0,0) + G2(2,0) + G2(3,0) + G2(0,2) + G2(4,0) G2(0,1) + G2(2,0) + G2(1,1) + G2(0,2) + G2(2,1) + G2(4,0) + G2(3,1) G2(1,0) + G2(0,1) + G2(1,1) + 2*G2(3,0) + 2*G2(2,1) + G2(1,2) + G2(3,1) + G2(5,0) + G2(0,3) G2(1,1) G2(1,1) Miscellaneous other subgroups ----------------------------- Use rule="miscellaneous" for the branching rule B3 => G2. This may also be obtained using a plethysm but for convenience this one is hand-coded. Nuts and bolts of branching rules --------------------------------- Sage has many built-in branching rules, enough to handle most cases. However, if you find a case where there is no existing rule, you may code it by hand. Moreover, it may be useful to understand how the built-in rules work. Suppose you want to branch from a group G to a subgroup H. Arrange the embedding so that a Cartan subalgebra U of H is contained in a Cartan subalgebra T of G. There is thus a mapping from the weight spaces \hbox{Lie}(T)^* \to \hbox{Lie}(U)^*.  Two embeddings will produce identical branching rules if they differ by an element of the Weyl group of H. The *rule* is this map \hbox{Lie}(T)^* = G.space() to \hbox{Lie}(U)^* = H.space(), which you may implement as a function. As an example, let us consider how to implement the branching rule A3 -> C2.  Here H = C2 = Sp(4) embedded as a subgroup in A3 = GL(4). The Cartan subalgebra \hbox{Lie}(U) consists of diagonal matrices with eigenvalues u1, u2, -u2, -u1. Then C2.space() is the two dimensional vector spaces consisting of the linear functionals u1 and u2 on U. On the other hand Lie(T) = \mathbb{R}^4. A convenient way to see the restriction is to think of it as the adjoint of the map [u1,u2] -> [u1,u2,-u2,-u1], that is, [x0,x1,x2,x3] -> [x0-x3,x1-x2]. Hence we may encode the rule:: def brule(x): return [x[0]-x[3], x[1]-x[2]] or simply:: brule = lambda x: [x[0]-x[3], x[1]-x[2]] Let us check that this agrees with the built-in rule:: sage: A3 = WeylCharacterRing(['A', 3]) sage: C2 = WeylCharacterRing(['C', 2]) sage: brule = lambda x: [x[0]-x[3], x[1]-x[2]] sage: A3(1,1,0,0).branch(C2, rule=brule) C2(0,0) + C2(1,1) A3(1,1,0,0).branch(C2, rule="symmetric") C2(0,0) + C2(1,1) Automorphisms and triality -------------------------- The case where G=H can be treated as a special case of a branching rule. In most cases (A_r, D_r, E_6) there is a unique automorphism and the branching rule can be obtained using rule="automorphic". The exception is D_4, where an additional automorphism of order three can be obtained using rule="triality".
• ## new file doc/en/thematic_tutorials/lie/crystals.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/crystals.rst
 - ================== Classical Crystals ================== Tableaux and representations of GL(n) --------------------------------------- Let \lambda be a partition. The *Young diagram* of \lambda is the array of boxes having \lambda_i boxes in the i-th row, left adjusted. Thus if \lambda = (3, 2) the diagram is: .. MATH:: \def\lr#1#2#3{\multicolumn{1}{#1@{\hspace{.6ex}}c@{\hspace{.6ex}}#2}{\raisebox{-.3ex}{$#3$}}}\raisebox{-6ex} {\begin{array}[b]{cccc}\cline{1-3} \lr{|}{|}{\;} & \lr{|}{|}{\;} & \lr{|}{|}{\;} \\\cline{1-3} \lr{|}{|}{}   & \lr{|}{|}{}   && \\\cline{1-2} \end{array}} A *semi-standard Young tableau* of shape \lambda is a filling of the box by integers in which the rows are weakly decreasing and the columns are strictly decreasing. Thus .. MATH:: \def\lr#1#2#3{\multicolumn{1}{#1@{\hspace{.6ex}}c@{\hspace{.6ex}}#2}{\raisebox{-.3ex}{$#3$}}}\raisebox{-6ex} {\begin{array}[b]{cccc}\cline{1-3} \lr{|}{|}{3} & \lr{|}{|}{2} & \lr{|}{|}{2} \\\cline{1-3} \lr{|}{|}{2} & \lr{|}{|}{1} && \\\cline{1-2} \end{array}} is a semistandard Young tableau. Sage has a Tableau class, and you may create this tableau as follows:: sage: T = Tableau([[3,2,2], [2,1]]); T [[3, 2, 2], [2, 1]] A partition of length \le r+1 is a dominant weight for GL(r+1, \mathbb{C}) according to the description of the ambient space in :ref:standard-realizations. Therefore it corresponds to an irreducible representation \pi_\lambda = \pi_\lambda^{GL(r+1)} of GL(r+1, \mathbb{C}). It is true that not every dominant weight \lambda is a partition, since a dominant weight might have some values \lambda_i negative. The dominant weight \lambda is a partition if and only if the character of \lambda is a polynomial as a function on the space \hbox{Mat}_n(\mathbb{C}). Thus for example \det^{-1} = \pi_\lambda with \lambda = (-1, \dots, -1), which is a dominant weight but not a partition, and the character is not a polynomial function on \hbox{Mat}_n(\mathbb{C}). **Theorem** (Littlewood) If \lambda is a partition, then the number of Semi-Standard Young Tableaux with shape \lambda and entries in {1,2,\dots,r+1} is the dimension of \pi_\lambda. For example, if \lambda = (3,2) and r = 2, then we find 15 tableaux with shape \lambda and entries in \{1,2,3\}: .. MATH:: \begin{array}{ccccc} {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{1} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}}\\\\ {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{1} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}}\\\\ {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{1} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{1} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} & {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} & \lr{2} & \lr{2} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{3} & \lr{3} \\\cline{1-1}\cline{2-2} \end{array}$}} \end{array} This is consistent with the theorem since the dimension of the irreducible representation of GL(3) with highest weight (3,2,0) has dimension 15:: sage: A2 = WeylCharacterRing("A2") sage: A2(3,2,0).degree() 15 In fact we may obtain the character of the representation from the set of tableaux. Indeed, one of the definitions of the Schur polynomial (due to Littlewood) is the following combinatorial one. If T is a tableaux, define the *weight* of T to be \hbox{wt}(T) = (k_1,\dots,k_n) where k_i is the number of i's in the tableaux. Then the multiplicity of \mu in the character \chi_\lambda is the number of tableaux of weight \lambda. Thus if \mathbf{z} = (z_1,\dots,z_n), we have .. MATH:: \chi_\lambda(\mathbf{z}) = \sum_T \mathbf{z}^{\hbox{wt}(T)} where the sum is over all semi-standard Young tableaux of shape \lambda that have entries in {1,2,\dots,r+1}. Tableaux and representations of S_k ------------------------------------- Representations of the symmetric group S_k are parametrized by partitions \lambda of k. The parametrization may be characterized as follows. Let n be any integer \ge k. Then both GL(n,\mathbb{C}) and S_k act on \otimes^k V where V = \mathbb{C}^n. Indeed, GL(n) acts on each V and S_k permutes them. Then if \pi_\lambda^{GL(n)} is the representation of GL(n,\mathbb{C}) with highest weight vector \lambda and \pi_\lambda^{S_k} is the irreducible representation of S_k parametrized by \lambda then .. MATH:: \otimes^k V \cong \bigoplus_{\lambda\vdash k}\pi^{GL(n)}_\lambda\otimes\pi^{S_k}_\lambda as bimodules for the two groups. This is *Frobenius-Schur duality* and it serves to characterize the parametrization of the irreducible representations of S_k by partitions of k. Let us say that a Tableaux T of shape \lambda\vdash k is *standard* if T contains each entry 1,2,\dots,k exactly once. **Theorem** (Young, 1927) The degree of \pi_\lambda is the number of standard tableaux of shape \lambda. The Robinson-Schensted-Knuth correspondence ------------------------------------------- References: - [Knuth1998]_, section "Tableaux and Involutions". - [Knuth1970]_ - [Fulton1997]_ - [Stanley1999]_ The Robinson-Schensted-Knuth correspondence gives bijections between pairs of tableaux of various types and combinatorial objects of different types. We will not review the correspondence in detail here, but see the references. We note that Schensted insertion is implemented as the method schensted_insertion of Tableau class in Sage. Thus we have the following bijections: - Pairs of standard tableaux of the same shape \lambda as \lambda runs through the partitions of k are in bijection with the k! elements of S_k. - Pairs of tableaux T_1 and T_2 of shape \lambda where \lambda runs through the partitions of k such that T_1 is a standard tableau and T_2 is a semistandard tableau in 1,2,\dots,n are in bijection with the n^k words of length k in 1,2,\dots,n. - Pairs of tableaux T_1 and T_2 of the same shape \lambda but arbitrary size in 1,2,3,\dots,n are in bijection with n \times n positive integer matrices. - Pairs of tableaux T_1 and T_2 of conjugate shapes \lambda and \lambda' are in bijection with n \times n matrices with entries 0 or 1. Analogies between representation theory and combinatorics --------------------------------------------------------- The three bijections cited above have the following analogs in representation theory. - The group algebra \mathbb{C} is an S_k \times S_k bimodule with of dimension k!. It decomposes as a direct sum of \pi_\lambda^{S_k} \otimes \pi_\lambda^{S_k}. - This is analogous to Frobenius-Schur duality, which decomposes the n^k-dimensional vector space V^k where V = \mathbb{C} into the direct sum of \pi_\lambda^{GL(n)} \otimes \pi_\lambda^{S_k} as a bimodule, where \lambda runs through partitions of k. - This is analogous to the decomposition of the ring of polynomial functions on \hbox{Mat}(n, \mathbb{C}) on which GL(n, \mathbb{C}) \times GL(n, \mathbb{C}) acts by (g_1, g_2)f(X) = f({^t g_1}X g_2). The polynomial ring decomposes into the direct sum of \pi^{GL(n)}_\lambda \otimes \pi^{GL(n)}_\lambda. Taking traces gives the Cauchy identity. - This is analogous to the decomposition of the exterior algebra over \hbox{Mat}(n, \mathbb{C}). Taking traces gives the dual Cauchy identity. Interpolating between representation theory and combinatorics ------------------------------------------------------------- The theory of quantum groups interpolates between the representation theoretic picture and the combinatorial picture, and thereby explains these analogies. The representation \pi_\lambda^{GL(n)} is reinterpreted as a module for the quantized enveloping algebra U_q(\mathfrak{gl}_n(\mathbb{C})), and the representation \pi_\lambda^{S_k} is reinterpreted as a module for the Iwahori Hecke algebra. Then Frobenius-Schur duality persists. See [Jimbo1986]_. When q \to 1, we recover the representation story. When q \to 0, we recover the combinatorial story. Kashiwara crystals ------------------ References: - [Kashiwara1995]_ - [KashiwaraNakashima1994]_ - [HongKang2002]_ Kashiwara considered the highest weight modules of quantized enveloping algebras U_q(\mathfrak{g}) in the limit when q \to 0. The enveloping algebra cannot be defined when q = 0, but a limiting structure can still be detected. This is the *crystal basis* of the module. Kashiwara's crystal bases have a combinatorial structure that sheds light even on purely combinatorial constructions on tableaux that predated quantum groups. It gives a good generalization to other Cartan types. We will not make the most general definition of a crystal. See the references for a more general definition. Let \Lambda be the weight lattice of a classical Cartan type. We now define a *crystal* of type \Phi. Let \mathcal{B} be a set, and let 0 \notin \mathcal{B} be an auxiliary element. For each index 1 \le i \le r we assume there given maps e_i, f_i : \mathcal{B} \longrightarrow \mathcal{B} \cup \{0\}, maps \varepsilon_i, \phi_i : \mathcal{B} \longrightarrow \mathbb{Z} and a map \hbox{wt} : \mathcal{B} \longrightarrow \Lambda satisfying certain assumptions, which we now describe. It is assumed that if x, y \in \mathcal{B} then e_i (x) = y if and only if f_i (y) = x. In this case, it is assumed that .. MATH:: \hbox{wt} (y) = \hbox{wt} (x) + \alpha_i, \qquad \varepsilon_i (x) = \varepsilon_i (y) + 1, \qquad \phi_i (x) = \phi_i (y) - 1. Moreover, we assume that .. MATH:: \phi_i (x) - \varepsilon_i (x) = \left\langle \hbox{wt} (x), \alpha^{\vee}_i \right\rangle for all x \in \mathcal{B}. **Assumption** (Regularity) We will assume that \varepsilon_i(v) is the number of times that e_i may applied to v, and that \phi_i(v) is the number of times that f_i may be applied. That is, \phi_i (x) = \max \{k|f_i^k x \neq 0\} and \varepsilon_i (x) = \max \{k|e_i^k (x) \neq 0\}. This regularity assumption is not made by Kashiwara, but it is satisfied by the crystals that we are concerned with here. Kashiwara also allows \varepsilon_i and \phi_i to take the value -\infty. Given the crystal \mathcal{B}, the *character* \chi_{\mathcal{B}} is: .. MATH:: \sum_{v\in\mathcal{B}} {\mathbf{z}}^{wt(v)}. Given any highest weight \lambda, constructions of Kashiwara and Nakashima, Littelmann and others produce a crystal \chi_{\mathcal{B}_\lambda} such that \chi_{\mathcal{B}_\lambda} = \chi_\lambda, where \chi_\lambda is the irreducible character with highest weight \lambda, as in :ref:representations. The crystal \mathcal{B}_\lambda is not uniquely characterized by the properties that we have stated so far. For Cartan types A, D, E it may be characterized by these properties together with certain other *Stembridge axioms*. We will take it for granted that there is a unique "correct" crystal \mathcal{B}_\lambda and discuss how these are constructed in Sage. Installing dot2tex ------------------ Before giving examples of crystals, we digress to help you install dot2tex, which you will need in order to make latex images of crystals. You may download the following file: http://sage.math.washington.edu/home/nthiery/dot2tex-2.8.7.spkg Then run:: sage -i dot2tex-2.8.7.spkg to install the package. Crystals of tableaux in Sage ---------------------------- For type A_r, Kashiwara and Nakashima put a crystal structure on the set of tableaux with shape \lambda in 1,2,\dots,r+1, and this is a realization of \mathcal{B}_\lambda. Moreover, this construction extends to other Cartan types, as we will explain. At the moment, we will consider how to draw pictures of these crystals. Once you have dot2tex installed, you may make images pictures of crystals as follows:: sage: C = CrystalOfTableaux("A2", shape=[2,1]) sage: C.latex_file("/tmp/a2rho.tex") Here \lambda = (2,1)=(2,1,0). The crystal C is \mathcal{B}_{\lambda}. The character \chi_\lambda will therefore be the eight-dimensional irreducible character with this highest weight. The method latex_file produces .. image:: ../static/a2rho.png As you can see, the elements of this crystal are exactly the eight tableaux of shape \lambda with entries in \{1,2,3\}. The convention is that if x,y \in \mathcal{B} and f_i(x) = y, or equivalently e_i(y) = x, then we draw an arrow from x \to y. Thus the highest weight tableau is the one with no incoming arrows. Indeed, this is: .. MATH:: {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2} \lr{1} & \lr{1} \\\cline{1-1}\cline{2-2} \lr{2} \\\cline{1-1} \end{array}$}} We recall that the weight of the tableau is (k_1,k_2,k_3) where k_i is the number of i's in the tableau, so this tableau has weight (2,1,0), which indeed equals \lambda. Once the crystal is created, you have access to the ambient space and its methods through the method weight_lattice_realization():: sage: L = C.weight_lattice_realization(); L Ambient space of the Root system of type ['A', 2] sage: L.fundamental_weights() Finite family {1: (1, 0, 0), 2: (1, 1, 0)} The highest weight vector is available as follows:: sage: v = C.highest_weight_vector(); v [[1, 1], [2]] or more simply:: sage: C[0] [[1, 1], [2]] Now we may apply the operators e_i and f_i to move around in the crystal:: sage: v.f(1) [[1, 2], [2]] sage: v.f(1).f(1) sage: v.f(1).f(1) == None True sage: v.f(1).f(2) [[1, 3], [2]] sage: v.f(1).f(2).f(2) [[1, 3], [3]] sage: v.f(1).f(2).f(2).f(1) [[2, 3], [3]] sage: v.f(1).f(2).f(2).f(1) == v.f(2).f(1).f(1).f(2) True You can construct the character if you first make a Weyl character ring:: sage: A2 = WeylCharacterRing("A2") sage: C.character(A2) A2(2,1,0) Crystals of letters ------------------- For each of the classical Cartan types there is a *standard crystal* \mathcal{B}_{\hbox{standard}} from which other crystals can be built up by taking tensor products and extracting constituent irreducible crystals. This procedure is sufficient for Cartan types A_r and C_r. For types B_r and D_r the standard crystal must be supplemented with a *spin crystal*. .. image:: ../static/standard1.png The crystal of letters is a special case of the crystal of tableaux in the sense that \mathcal{B}_{\hbox{standard}} is isomorphic to the crystal of tableaux whose highest weight \lambda is the highest weight vector of the standard representation. Thus compare:: sage: CrystalOfLetters("A3") The crystal of letters for type ['A', 3] sage: CrystalOfTableaux("A3", shape=[1]) The crystal of tableaux of type ['A', 3] and shape(s) [[1]] These two crystals are different in implementation, but they are isomorphic, and in fact the second crystal is constructed from the first. Crystals of letters have a special role in the theory since they are particularly simple, yet as Kashiwara and Nakashima showed, the crystals of tableaux can be created from them.  We will review how this works. Tensor products of crystals --------------------------- Kashiwara defined the tensor product of crystals in a purely combinatorial way. The beauty of this construction is that it exactly parallels the tensor product of crystals of representations. That is, if \lambda and \mu are dominant weights, then \mathcal{B}_\lambda \otimes \mathcal{B}_\mu is a (usually disconnected) crystal which may contain multiple copies of \mathcal{B}_\nu (for another dominant weight \nu) but the number of copies of \mathcal{B}_\nu is exactly the multiplicity of \chi_\nu in \chi_\lambda\chi_\mu. We will describe two conventions for the tensor product of crystals. These conventions would have to be modified slightly without the regularity assumption. Kashiwara's definition ^^^^^^^^^^^^^^^^^^^^^^ As a set, the tensor product \mathcal{B} \otimes \mathcal{C} of crystals \mathcal{B} and \mathcal{C} is the Cartesian product, but we denote the ordered pair (x, y) with x \in \mathcal{B} and y \in \mathcal{C} by x \otimes y. We define \hbox{wt} (x \otimes y) = \hbox{wt} (x) + \hbox{wt}(y). We define .. MATH:: f_i (x \otimes y) = \begin{cases} f_i (x) \otimes y & \text{if $\phi_i (x) > \varepsilon_i (y)$},\\ x \otimes f_i (y) & \text{if $\phi_i (x) \le \varepsilon_i (y)$}, \end{cases} and .. MATH:: e_i (x \otimes y) = \begin{cases} e_i (x) \otimes y & \text{if $\phi_i (x) \ge \varepsilon_i (y)$},\\ x \otimes e_i (y) & \text{if $\phi_i (x) < \varepsilon_i (y)$}. \end{cases} It is understood that x \otimes 0 = 0 \otimes x = 0. We also define: .. MATH:: \phi_i (x \otimes y) = \max (\phi_i (y), \phi_i (x) + \phi_i (y) - \varepsilon_i (y)), .. MATH:: \varepsilon_i (x \otimes y) = \max (\varepsilon_i (x), \varepsilon_i (x) + \varepsilon_i (y) - \phi_i (x)) . Alternative definition ^^^^^^^^^^^^^^^^^^^^^^ As a set, the tensor product \mathcal{B} \otimes \mathcal{C} of crystals \mathcal{B} and \mathcal{C} is the Cartesian product, but we denote the ordered pair (y, x) with y \in \mathcal{B} and x \in \mathcal{C} by x \otimes y. We define \hbox{wt} (x \otimes y) = \hbox{wt} (y) + \hbox{wt}(x). We define .. MATH:: f_i (x \otimes y) = \begin{cases} f_i (x) \otimes y & \text{if $\phi_i (y) \le \varepsilon_i (x)$},\\ x \otimes f_i (y) & \text{if $\phi_i (y) > \varepsilon_i (x)$}, \end{cases} and .. MATH:: e_i (x \otimes y) = \begin{cases} e_i (x) \otimes y & \text{if $\phi_i (y) < \varepsilon_i (x)$},\\ x \otimes e_i (y) & \text{if $\phi_i (y) \ge \varepsilon_i (x)$}. \end{cases} It is understood that y \otimes 0 = 0 \otimes y = 0. We also define .. MATH:: \phi_i (x \otimes y) = \max (\phi_i (x), \phi_i (y) + \phi_i (x) - \varepsilon_i (x)), .. MATH:: \varepsilon_i (x \otimes y) = \max (\varepsilon_i (y), \varepsilon_i (y) + \varepsilon_i (x) - \phi_i (y)). The tensor product is associative: (x \otimes y) \otimes z \mapsto x \otimes(y \otimes z) is an isomorphism (\mathcal{B} \otimes \mathcal{C}) \otimes \mathcal{D} \to \mathcal{B} \otimes (\mathcal{C} \otimes \mathcal{D}), and so we may consider tensor products of arbitrary numbers of crystals. The relationship between the two definitions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The relationship between the two definitions is simply that the Kashiwara tensor product \mathcal{B} \otimes \mathcal{C} is the alternate tensor product \mathcal{C} \otimes \mathcal{B} in reverse order. Sage uses the alternative tensor product. Even though the tensor product construction is *a priori* asymmetrical, both constructions produce isomorphic crystals, and in particular Sage's crystals of tableaux are identical to Kashiwara's. Tensor products of crystals in Sage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You may construct the tensor product of several crystals in Sage using TensorProductOfCrystals:: sage: C = CrystalOfLetters("A2") sage: T = TensorProductOfCrystals(C,C,C); T Full tensor product of the crystals [The crystal of letters for type ['A', 2], The crystal of letters for type ['A', 2], The crystal of letters for type ['A', 2]] sage: T.cardinality() 27 sage: T.highest_weight_vectors() [[1, 1, 1], [1, 2, 1], [2, 1, 1], [3, 2, 1]] This crystal has four highest weight vectors. We may understand this as follows:: sage: A2 = WeylCharacterRing("A2") sage: chi_C = C.character(A2) sage: chi_T = T.character(A2) sage: chi_C A2(1,0,0) sage: chi_T A2(1,1,1) + 2*A2(2,1,0) + A2(3,0,0) sage: chi_T == chi_C^3 True As expected, the character of T is the cube of the character of C, and representations with highest weight (1,1,1), (3,0,0) and (2,1,0). This decomposition is predicted by Frobenius-Schur duality: the multiplicity of \pi_\lambda^{GL(n)} in \otimes^3\mathbb{C}^3 is the degree of \pi_\lambda^{S_3}. It is useful to be able to select one irreducible constitutent of T. If we only want one of the irreducible constituents of T, we can specify a list of highest weight vectors by the option generators. If the list has only one element, then we get an irreducible crystal. We can make four such crystals:: sage: [T1,T2,T3,T4] = \ [TensorProductOfCrystals(C,C,C,generators=[v]) for v in T.highest_weight_vectors()] sage: [B.cardinality() for B in [T1,T2,T3,T4]] [10, 8, 8, 1] sage: [B.character(A2) for B in [T1,T2,T3,T4]] [A2(3,0,0), A2(2,1,0), A2(2,1,0), A2(1,1,1)] We see that two of these crystals are isomorphic, with character A2(2,1,0). Try:: sage: T1.plot(), T2.plot(), T3.plot(), T4.plot() Elements of TensorProductOfCrystals(A,B,C, ...) are represented by sequences [a,b,c, ...] with a in A, b in B, etc. This of course represents a \otimes b \otimes c \otimes \cdots. Crystals of tableaux as tensor products of crystals --------------------------------------------------- Sage implements the CrystalOfTableaux as a subcrystal of a tensor product of the CrystalOfLetters. You can see how its done as follows:: sage: T = CrystalOfTableaux("A3", shape=[3,1]) sage: v = T.highest_weight_vector().f(1).f(2).f(3).f(1).f(2); v [[1, 3, 4], [2]] sage: v._list [2, 1, 3, 4] We've looked at the internal representation of v, where it is represented as an element of the fourth tensor power of the CrystalOfLetters. We see that the tableau: .. MATH:: {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}\raisebox{-.6ex} {$\begin{array}[b]{ccc}\cline{1-1}\cline{2-2}\cline{3-3} \lr{1} & \lr{3} & \lr{4} \\\cline{1-1}\cline{2-2}\cline{3-3} \lr{2} \\\cline{1-1} \end{array}$}} is interpreted as the tensor: .. MATH:: \begin{array}{|l|}\hline 2 \\ \hline \end{array} \otimes \begin{array}{|l|} \hline 1 \\ \hline \end{array} \otimes \begin{array}{|l|} \hline 4 \\ \hline \end{array} \otimes \begin{array}{|l|} \hline 3 \\ \hline \end{array} The elements of the tableau are read from bottom to top and from left to right. This is the *inverse middle-Eastern reading* of the tableau. See Hong and Kang, *loc. cit.* for discussion of the readings of a tableau. Spin crystals ------------- For the Cartan types A_r, C_r or G_2, CrystalOfTableaux are capable of making any finite crystal. (For type A_r it is necessary that the highest weight \lambda be a partition.) For Cartan types B_r and D_r, CrystalOfTableaux fail to make \mathcal{B}_\lambda if \lambda is half-integral. For type B_2 you can do this:: sage: B = FastCrystal(['B',2], shape=[3/2,1/2]); B The fast crystal for B2 with shape [3/2,1/2] sage: v = B.highest_weight_vector(); v.weight() (3/2, 1/2) However FastCrystals are only available for rank two Cartan types. We therefore have to do something else to create crystals of half-integral weight. For types B_r and D_r the solution to this problem involves the use of *spin crystals*. Type B spin crystal ^^^^^^^^^^^^^^^^^^^ The spin crystal has highest weight (1/2,\dots,1/2). This is the last fundamental weight. The irreducible representation with this weight is the spin representation of degree 2^r. Its crystal is hand-coded in Sage:: sage: Cspin = CrystalOfSpins("B3"); Cspin The crystal of spins for type ['B', 3] sage: Cspin.cardinality() 8 We can make use of this to construct an arbitrary crystal with highest weight \lambda, where \lambda is a half-integral weight. For example, suppose that \lambda = (3/2, 3/2, 1/2). The corresponding irreducible character will have degree 112:: sage: B3 = WeylCharacterRing("B3") sage: B3(3/2,3/2,1/2).degree() 112 So \mathcal{B}_\lambda will have 112 elements. We can find it as a subcrystal of Cspin \otimes \mathcal{B}_\mu, where \mu = \lambda-(1/2,1/2,1/2) = (1,1,0):: sage: B3(1,1,0)*B3(1/2,1/2,1/2) B3(1/2,1/2,1/2) + B3(3/2,1/2,1/2) + B3(3/2,3/2,1/2) We see that just taking the tensor product of these two crystals will produce a reducible crystal with three constitutents, and we want to extract the one we want. We do that as follows:: sage: C1 = CrystalOfTableaux("B3", shape=[1,1]) sage: C = TensorProductOfCrystals(C1, Cspin, generators=[[C1[0],Cspin[0]]]) sage: C.cardinality() 112 This is the desired crystal. Type D spin crystals ^^^^^^^^^^^^^^^^^^^^ A similar situation pertains for type D_r, but now there are two spin crystals, both of degree 2^{r-1}. These are hand-coded in sage:: sage: SpinPlus = CrystalOfSpinsPlus("D4") sage: SpinMinus = CrystalOfSpinsMinus("D4") sage: SpinPlus[0].weight() (1/2, 1/2, 1/2, 1/2) sage: SpinMinus[0].weight() (1/2, 1/2, 1/2, -1/2) sage: [C.cardinality() for C in [SpinPlus,SpinMinus]] [8, 8] You can use them similarly to the type B crystal of spins in order to construct any crystal of half-integral weight. Levi branching rules for crystals --------------------------------- Let G be a Lie group and H a Levi subgroup. We have already seen that the Dynkin diagram of H is obtained from that of G by erasing one or more nodes. If \mathcal{C} is a crystal for G, then we may obtain the corresponding crystal for H by a similar process. For example if the Dynkin diagram for H is obtained from the Dynkin diagram for G by erasing the i-th node, then if we erase all the edges in the crystal \mathcal{C} that are labeled with i, we obtain a crystal for H. Affine crystals --------------- Sage contains support for affine crystals. These lie outside the scope of this document.
• ## new file doc/en/thematic_tutorials/lie/introduction.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/introduction.rst
 - -------------------------- The Scope of this Document -------------------------- Lie groups and algebras ----------------------- Sage can be used to do standard computations for Lie groups and Lie algebras. The following categories of representations are equivalent: - Complex representations of a compact, semisimple simply connected Lie group G. - Complex representations of its Lie algebra \mathfrak{g}. This is a real Lie algebra, so representations are not required to be complex linear maps. - Complex representations of its complexified Lie algebra \mathfrak{g}_{\mathbb{C}} = \mathbb{C} \otimes \mathfrak{g}. This is a complex Lie algebra and representations are required to be complex linear transformations. - The complex analytic representations of the semisimple simply-connected complex analytic group G_{\mathbb{C}} having \mathfrak{g}_{\mathbb{C}} as its Lie algebra. - Modules of the universal enveloping algebra U(\mathfrak{g}_{\mathbb{C}}). - Modules of the quantized enveloping algebra U_q(\mathfrak{g}_{\mathbb{C}}). For example, we could take G = SU(n), \mathfrak{g} = \mathfrak{sl}(n, \mathbb{R}), \mathfrak{g}_{\mathbb{C}} = \mathfrak{sl}(n, \mathbb{C}) and G = SL(n, \mathbb{C}). Because these categories are the same, their representations may be studied simultaneously. The above equivalences may be expanded to include reductive groups like U(n) and GL(n) with a bit of care. Here are some typical problems that can be solved using Sage: - Decompose a module in any one of these categories into irreducibles. - Compute the Frobenius-Schur indicator of an irreducible module. - Compute the tensor product of two modules. - If H is a subgroup of G, study the restriction of modules for G to H. The solution to this problem is called a *branching rule*. - Find the multiplicities of the weights of the representation. In addition to its representations, which we may study as above, a Lie group has various related structures. These include: - The Weyl Group W. - The Weight Lattice. - The Root System - The Cartan Type. - The Dynkin diagram. - The extended Dynkin diagram. Sage contains methods for working with these structures. If there is something you need that is not implemented, getting it added to Sage will likely be possible. You may write your own algorithm for an unimplemented task, and if it is something others will be interested in, it is probably possible to get it added to Sage. Combinatorics ------------- Sage supports a great many related mathematical objects. Some of these properly belong to combinatorics. It is beyond the scope of these notes to cover all the combinatorics in Sage, but we will try to touch on those combinatorial methods which have some connection with Lie groups and representation theory. These include: - The affine Weyl group, an infinite group containing W. - Kashiwara crystals, which are combinatorial analogs of modules in the above categories. - Coxeter group methods applicable to Weyl groups and the affine Weyl group, such as Bruhat order. - The Iwahori Hecke algebras, which are deformations of the group algebras of W and the affine Weyl group. - Kazhdan-Lusztig polynomials. Preparation of this document was supported in part by NSF grant DMS-0652817.
• ## new file doc/en/thematic_tutorials/lie/iwahori_hecke_algebra.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/iwahori_hecke_algebra.rst
 - ---------------------- Iwahori Hecke Algebras ---------------------- The Iwahori Hecke algebra is defined in [Iwahori1964]_. In that original paper, the algebra occurs as the convolution ring of functions on a p-adic group that are compactly supported and invariant both left and right by the Iwahori subgroup. However Iwahori determined its structure in terms of generators and relations, and it turns out to be a deformation of the group algebra of the affine Weyl group. Once the presentation is found, the Iwahori Hecke algebra can be defined for any Coxeter group. It depends on a parameter q which in Iwahori's paper is the cardinality of the residue field. But it could just as easily be an indeterminate. Then the Iwahori Hecke algebra has the following description. Let W be a Coxeter group, with generators (simple reflections) s_1,\dots,s_n. They satisfy the relations s_i^2 = 1 and the braid relations .. MATH:: s_i s_j s_i s_j \cdots = s_j s_i s_j s_i \cdots where the number of terms on each side is the order of s_i s_j. The Iwahori Hecke algebra has a basis T_1,\dots,T_n subject to relations that resemble those of the s_i. They satisfy the braid relations and the quadratic relation .. MATH:: (T_i-q)(T_i+1) = 0. This can be modified by letting q_1 and q_2 be two indeterminates and letting .. MATH:: (T_i-q_1)(T_i-q_2) = 0. In this generality, Iwahori Hecke algebras have significance far beyond their origin in the representation theory of p-adic groups. For example, they appear in the geometry of Schubert varieties, where they are used in the definition of the Kazhdan-Lusztig polynomials. They appear in connection with quantum groups, and in Jones's original paper on the Jones polynomial. Here is how to create an Iwahori Hecke algebra:: sage: R. = PolynomialRing(ZZ) sage: H = IwahoriHeckeAlgebraT("B3",q); H The Iwahori Hecke Algebra of Type B3 in q,-1 over Univariate Polynomial Ring in q over Integer Ring and prefix T sage: T1,T2,T3 = H.algebra_generators() sage: T1*T1 (q-1)*T1 + q If the Cartan type is affine, the generators will be numbered starting with T0 instead of T1. You may coerce a Weyl group element into the Iwahori Hecke algebra:: sage: W = WeylGroup("G2",prefix="s") sage: [s1,s2]=W.simple_reflections() sage: P. = LaurentPolynomialRing(QQ) sage: H = IwahoriHeckeAlgebraT(W,q) sage: H(s1*s2) T1*T2 Intertwining operators ---------------------- The Iwahori Hecke operator can be used to study representations of p-adic groups that have fixed vectors with respect to the Iwahori subgroup. References: - [Rogawski1985]_ - [Reeder1992]_ - [HainesEtAl2009]_ - [BumpNakasuji2010]_ - [Casselman1980]_ A key feature of the theory are the intertwining operators between different induced representations. We will show how to implement these intertwining operators in Sage. For simplicity we will work over G = SL(n,F) where F = \mathbb{Q}_q, with q a prime number, but everything works for an arbitrary split reductive group over a nonarchimedean local field. If \mathbf{z} = (z_1,\dots,z_n) \in \mathbb{C}^n, define the following quasicharacters of T(F), the diagonal subgroup in G: .. MATH:: \chi_{\mathbf{z}} \left(\begin{array}{ccc} t_1 \\ & \ddots \\ && t_n \end{array}\right) = \prod_{i=1}^n z_i^{\hbox{ord}(t_i)}, \qquad \delta \left(\begin{array}{ccc} t_1 \\ & \ddots \\ && t_n \end{array}\right) = \prod_{i=1}^n |t_i|^{n+1-2i} We extend both to characters of the Borel subgroup B(F) of upper triangular matrices by letting the subgroup N(F) of upper triangular unipotent matrices be in the kernels. Let V(\chi) with \chi = \chi_{\mathbf{z}} is defined to be the space of locally constant functions f on G such that: .. MATH:: f(b g) = (\delta^{1/2}\chi)(b)f(g),\qquad b\in B(F). We have a representation \pi: G \to \hbox{End}(V(\chi)) by right translation: \pi(g)f(h) = f(h g). These are the *spherical principal series representations*. Let K = SL(n,\mathbb{Z}_q). This is the standard maximal compact subgroup. It has a homomorphism K \to SL(n,\mathbb{F}_q) by reduction modulo q. The subgroup J of elements of K whose images are upper triangular is an open subgroup, the *Iwahori subgroup*. Suppose that the z_i are all distinct. Then for each w \in W there exists an *intertwining integral* M_w: V(\chi) \to V({^w\chi}) where the Weyl group acts on characters of T(F) by conjugation. This integral is defined by the formula .. MATH:: M h(g) = \int_{N \cap w N_- w^{-1}} h(w^{-1}n g) \, dn where N is the group of upper triangular unipotent matrices and N_- is the group of lower triangular matrices. The integral is convergent provided |z_i/z_{i+1}|<1 and in general it may be defined by analytic continuation in the z_i or another method. See Casselman *loc. cit.*. The problem is how to model the intertwining operators in Sage. Let W = N(F) / T(\mathbb{Z}_q) and W' = N(F)/T(F). These are isomorphic to the affine and finite Weyl groups, that is, the Weyl groups with Cartan types [A,n-1,1] and [A,n-1], respectively. The *Iwahori Hecke algebra* \mathcal{H} is the ring of compactly supported functions h on G such that h(k g k') = h(g) when k,k' \in J. It is a ring under convolution. Then V(\chi) becomes a module over it by .. MATH:: (h f)(g) = \int_G h(x) f(g x) \, dx. The subspace V(\chi)^J of V(\chi) consisting of elements that are fixed by J is invariant under \mathcal{H}. This module is finite-dimensional: in fact, its order is |W'|=n!, whereas V(\chi) itself is infinite dimensional. However the finite-dimensional \mathcal{H}-module V(\chi)^J accurately reflects the structure of the G-module V(\chi). For example V(\chi) is irreducible as a G-module if and only if V(\chi)^J is irreducible as an \mathcal{H}-module. Normalizing the Haar measure so that J has volume 1, let T_w be the characteristic function of J w J, and if 1 \le i \le r let T_i denote T_{\sigma_i}. The T_w with w \in W form a basis, and the T_i form a set of algebra generators The T_i satisfy the same braid relations as the s_i, but the relation \sigma_i^2 = 1 is replaced by T_i^2 = (q - 1) T_i + q. The subalgebra elements of \mathcal{H} consisting of functions that are supported in K is the finite Iwahori Hecke algebra \mathcal{H}'.  Thus \dim (H) = |W| but \mathcal{H} is infinite-dimensional The subalgebra H has generators T_1, \dots, T_r but omits T_0. We see that W, W', \mathcal{H} and \mathcal{H'} are all objects that can be created in Sage. We define a vector space isomorphism \alpha = \alpha (\chi) : V (\chi)^J \to H' as follows. If F \in V (\chi)^J then let \alpha (F) = f where f is the function f (g) = F (g^{- 1}) if g \in K, 0 if g \notin K. It may be checked that \alpha (F) \in H'. This allows us to model the |W'|-dimensional \mathcal{H}-module V(\chi) by the |W'|-dimensional subalgebra \mathcal{H}'. This idea, which appears in the paper of Rogawski cited above, is due to Joseph Bernstein. Let w \in W and define a map \mathcal{M}_w: H \to H by requiring that .. MATH:: \alpha({^w\chi})\circ M_w = \mathcal{M}_w\circ\alpha(\chi) as maps from V(\chi)^J \to H. Since M_w and \alpha(\chi), \alpha({^w\chi}) are all homomorphisms of left \mathcal{H}'-modules, \mathcal{M}_w is a homomorphism of left \mathcal{H}' modules. Now let \mu_{\mathbf{z}}(w) = \mathcal{M}_w(1) where 1 denotes the identity element of \mathcal{H}'. Because \mathcal{M}_w is a \mathcal{H}'-module homomorphism, we have .. MATH:: \mathcal{M}_w(h) = \mathcal{M}_w(h\cdot 1) = h \mathcal{M}_w(1) = h\cdot\mu_{\mathbf{z}}(w). In other words, the intertwining operator is modeled by multiplication by \mu_{\mathbf{z}}(w) when we identify V(\chi)^J and V({^w\chi})^J with H by means of the homomorphisms \alpha. We are therefore left with the problem of computing \mu_{\mathbf{z}}(w). If l(w_1w_2) = l(w_1)+l(w_2) then M_{w_1w_2} = M_{w_1}M_{w_2} and it follows that .. MATH:: \mu_{\mathbf{z}}(w_1w_2) = \mu_{\mathbf{z}}(w_2)\mu_{w_2\mathbf{z}}(w_1). (Here w_2 acts on the spectral parameters \mathbf{z} in the obvious way.) Thus we are reduced to the determination of \mu_{\mathbf{z}}(w) when w = s_i is a simple reflection, and this is accomplished by Theorem 3.4 in Casselman, *loc. cit.*: .. MATH:: \mu_{\mathbf{z}}(s_i) = \frac{1}{q}T_i + \left(1-\frac{1}{q}\right) \frac{\mathbf{z}^{\alpha_i}}{1-\mathbf{z}^{\alpha_i}}. Here the simple root \alpha_i = (0,\dots,0,1,-1,0,\dots,0) in the ambient lattice, where the 1 is in the i-th position, so \mathbf{z}^\alpha_i = z_i/z_{i+1}. In addition to the intertwining operators, let us construct a basis \psi_w of V(\chi)^J indexed by elements of W'. Let .. MATH:: \psi_w(b k) = \begin{cases} \delta^{1/2}\chi(b) & \text{if $k\in J u^{-1} J$ with $u \ge w$},\\ 0 & \text{otherwise}, \end{cases} where b\in B(F) and k \in K. In order to make sense of this definition, bear in mind that every element of G has a decomposition as a product b k with b \in B(F) and k \in K, and every k \in K belongs to a unique double coset J u^{-1} J with u \in W'. The image of \psi_w under the homomorphism \alpha is just \sum_{u \ge w} T_u, and by abuse of notation we will denote this element of \mathcal{H}' also by \psi_w. Now let us ask to evaluate m(u,v) = (\Lambda_v\psi_u)(1). It may be shown that m(u,v) = 0 unless u \le v, and that m(u,u) = 1. In other words, the "matrix" m is upper triangular in the Bruhat order. Bump and Nakasuji used Sage to investigate this question and arrived at the following conjecture. This is conjectured for more general groups than just the SL(n) that we are considering, but only for the simply-laced groups (types A, D, E). It follows from the Deodhar conjecture that the set .. MATH:: S(u,v) = \{\alpha \in \Phi^+|u \le v r_\alpha < v\} has cardinality \ge l(v)-l(u), where l is the length function on W'. (Remember that r_\alpha is the reflection in the positive root \alpha.) If the Kazhdan-Lusztig polynomial P_{w_0v,w_0u} = 1, then |S(u,v)| = l(v)-l(u). **Conjecture** (Bump and Nakasuji) If the Kazhdan-Lusztig polynomial P_{w_0v,w_0u} = 1 then .. MATH:: m(u,v) = \prod_{\alpha \in S(u,v)} \frac{1-q^{-1}\mathbf{z}^\alpha}{1-\mathbf{z}^\alpha}. The following Sage code is capable of verifying this statement for ['A',3], and of course can be adapted to any root system. Intertwining operator program ----------------------------- This program can compute both the actual and conjectured values of m(u,v). :: import copy P1. = PolynomialRing(QQ) W = WeylGroup("A3", prefix="s") KL = KazhdanLusztigPolynomial(W, q) P. = PolynomialRing(QQ) F = Frac(P) H = IwahoriHeckeAlgebraT(W,q,base_ring=F) [s1,s2,s3] = W.simple_reflections() w0 = W.long_element() [T1,T2,T3] = H.algebra_generators() def mu(z,s): """ Produces an element of the Hecke algebra that mimics the intertwining integral corresponding to a simple reflection. """ [z1,z2,z3,z4] = z if s == s1: return q^(-1)*T1+(1-1/q)*(z1/(z2-z1)) elif s == s2: return q^(-1)*T2+(1-1/q)*(z2/(z3-z2)) elif s == s3: return q^(-1)*T3+(1-1/q)*(z3/(z4-z3)) def reflect(s,z): """ Applies the simple reflection s to the spectral data z. """ return (Matrix(z)*s.matrix()).list() def intertwiner(w,debug=False): """ This is mu_z(w) in general. The function mu(z,s) implemented above is only for simple reflections. Run with debug=True to see what it is really doing. """ decomp = w.reduced_word() decomp.reverse() prod = H(1) if debug: clist = "" for i in range(len(decomp)): alist = copy.deepcopy(decomp[:i]) z = [z1,z2,z3,z4] for j in alist: z = reflect(W.simple_reflection(j),z) s = W.simple_reflection(decomp[i]) if debug: clist +="mu(%s,%s)"%(z.__repr__(),s.__repr__()) if i < len(decomp)-1: clist += "*" else: prod = prod*mu(z,s) if debug: return clist else: return prod def psi(u): """ u is a permutation. This produces the sum of the f_v for v>=u. """ u = H(u).support_of_term() return sum(H(v) for v in W if u.bruhat_le(v)) def ev(f): """ Evaluate the element of the space of Iwahori fixed vectors in the induced model at the identity. """ return f.coefficient(W(1)) def m(u,v): """ It is assumed that u <= v. Apply the v intertwiner to psi(u) and evaluate at 1. """ u = W(u) v = W(v) return ev(psi(u)*intertwiner(H(v))) def rfactor(alpha): """ If alpha is a root, returns (1-q^(-1)*z^alpha)/(1-z^alpha). """ z = [z1,z2,z3,z4] za = prod(z[i]**alpha[i] for i in range(4)) return (1-q^(-1)*za)/(1-za) def conjectured_m(u,v): """ This is the value conjectured for m(u,v) by Bump and Nakasuji if u and v satisfy a hypothesis. """ refdict = W.reflections() S = [refdict[r] for r in refdict.keys() if u.bruhat_le(v*r) and (v*r).bruhat_le(v)] return prod(rfactor(alpha) for alpha in S)
• ## new file doc/en/thematic_tutorials/lie/kazhdan_lusztig_polynomials.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/kazhdan_lusztig_polynomials.rst
 - --------------------------- Kazhdan-Lusztig Polynomials --------------------------- Sage can compute ordinary Kazhdan-Lusztig polynomials for Weyl groups or affine Weyl groups (and potentially other Coxeter groups). You must create a Weyl group W and a ring containing an indeterminate q. The ring may be a univariate polynomial ring or a univariate Laurent polynomial ring. Then you may calculate Kazhdan-Lusztig polynomials as follows:: sage: W = WeylGroup("A3", prefix="s") sage: [s1,s2,s3] = W.simple_reflections() sage: P. = LaurentPolynomialRing(QQ) sage: KL = KazhdanLusztigPolynomial(W,q) sage: KL.R(s2, s2*s1*s3*s2) q^3 - 3*q^2 + 3*q - 1 sage: KL.P(s2, s2*s1*s3*s2) q + 1 Thus we have the Kazhdan-Lusztig R and P polynomials. Known algorithms for computing Kazhdan-Lusztig polynomials are highly recursive, and caching of intermediate results is necessary for the programs not to be prohibitively slow. Therefore intermediate results are cached. This has the effect that as you run the program for any given KazhdanLusztigPolynomial class, the calculations will be slow at first but progressively faster as more polynomials are computed. You may see the results of the intermediate calculations by creating the class with the option trace="true". Since the parent of q must be a univariate ring, if you want to work with other indeterminates, *first* create a univariate polynomial or Laurent polynomial ring, and the Kazhdan-Lusztig class. *Then* create a ring containing q and the other variables:: sage: W = WeylGroup("B3", prefix="s") sage: [s1,s2,s3] = W.simple_reflections() sage: P. = PolynomialRing(QQ) sage: KL = KazhdanLusztigPolynomial(W,q) sage: P1. = PolynomialRing(P) sage: x*KL.P(s1*s3,s1*s3*s2*s1*s3) (q + 1)*x
• ## new file doc/en/thematic_tutorials/lie/lie_basics.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/lie_basics.rst
 - ---------------- Lie Group Basics ---------------- Goals of this section --------------------- Since we must be brief here, this is not really a place to learn about Lie groups. Rather, the point of this section is to outline what you need to know to use Sage effectively for Lie computations, and to fix ideas and notations. Semisimple and reductive groups ------------------------------- If g \in GL(n,\mathbb{C}), then g may be uniquely factored as g_1 g_2 where g_1 and g_2 commute, with g_1 semisimple (diagonalizable) and g_2 unipotent (all its eigenvalues equal to 1). This follows from the Jordan canonical form. If g = g_1 then g is called *semisimple* and if g = g_2 then g is called *unipotent*. We consider a Lie group G and a class of representations such that if an element g \in G is unipotent (resp. semisimple) in one faithful representation from the class, then it is unipotent (resp. semisimple) in every faithful representation of the class. Thus the notion of being semisimple or unipotent is intrinsic. Examples: - Compact Lie groups with continuous representations - Complex analytic groups with analytic representations - Algebraic groups over \mathbb{R} with algebraic representations. A subgroup of G is called *unipotent* if it is connected and all its elements are unipotent. It is called a *torus* if it is connected, abelian, and all its elements are semisimple. The group G is called *reductive* if it has no nontrivial normal unipotent subgroup. For example, GL(2,\mathbb{C}) is reductive, but its subgroup: .. MATH:: \left\{\left( \begin{array}{cc} a & b \\ & d \end{array} \right)\right\} is not since it has a normal unipotent subgroup .. MATH:: \left\{\left( \begin{array}{cc} 1 & b \\ & 1 \end{array} \right)\right\}. A group has a unique largest normal unipotent subgroup, called the *unipotent radical*, so it is reductive if and only if the unipotent radical is trivial. A Lie group is called *semisimple* it is reductive and furthermore has no nontrivial normal tori. For example GL(2,\mathbb{C}) is reductive but not semisimple because it has a normal torus: .. MATH:: \left\{\left( \begin{array}{cc} a \\ & a \end{array} \right)\right\}. The group SL(2,\mathbb{C}) is semisimple. Fundamental group and center ---------------------------- If G is a semisimple Lie group then its center and fundamental group are finite abelian groups. The universal covering group \tilde G is therefore a finite extension with the same Lie algebra. Any representation of G may be reinterpreted as a representation of the simply connected \tilde G. Therefore we may as well consider representations of \tilde G, and restrict ourselves to the simply connected group. Parabolic subgroups and Levi subgroups -------------------------------------- Let G be a reductive complex analytic group. A maximal solvable subgroup of G is called a *Borel subgroup*. All Borel subgroups are conjugate. Any subgroup P containing a Borel subgroup is called a *parabolic subgroup*.  We may write P as a semidirect product of its maximal normal unipotent subgroup or *unipotent radical* P and a reductive subgroup M, which is determined up to conjugacy. The subgroup M is called a *Levi subgroup*. **Example:** Let G = GL_n(\mathbb{C}) and let r_1, \dots, r_k be integers whose sum is n. Then we may consider matrices of the form: .. MATH:: \left(\begin{array}{cccc} g_1 & * & \cdots & * \\ & g_2 & & * \\ && \ddots \\ &&& g_r \end{array}\right) where g_i \in GL(r_i,\mathbb{C}. The unipotent radical consists of the subgroup in which all g_i = I_{r_i}. The Levi subgroup (determined up to conjugacy) is: .. MATH:: M = \left\{\left( \begin{array}{cccc} g_1  \\ & g_2 \\ && \ddots \\ &&& g_r \end{array} \right)\right\}, and is isomorphic to M = GL(r_1,\mathbb{C}) \times \cdots \times GL(r_k,\mathbb{C}). Therefore M is a Levi subgroup. The notion of a Levi subgroup can be extended to compact Lie groups. Thus U(r_1) \times \cdots \times U(r_k) is a Levi subgroup of U(n). However Parabolic subgroups do not exist for compact Lie groups. Cartan types ------------ Semisimple Lie groups are classified by their *Cartan types*. There are both reducible and irreducible Cartan types in Sage. Let us start with the irreducible types. Such a type is implemented in Sage as a pair [X,r] where X is one of A, B, C, D, E, F or G and r is a positive integer. If X = D then we must have r > 1 and if X is one of the *exceptional types* E, F or G then r is limited to only a few possibilities. The exceptional types are:: ['G',2],  ['F',4],  ['E',6], ['E',7] or ['E',8]. A simply-connected semisimple group is a direct product of simple Lie groups, which are given by the following table. The integer r is called the *rank*, and is the dimension of the maximal torus. Here are the Lie groups corresponding to the classical types: +---------------+-------------------------+-------------+ | compact group | complex analytic group  | Cartan type | +===============+=========================+=============+ | SU(r+1)     | SL(r+1,\mathbb{C})    | A_r       | +---------------+-------------------------+-------------+ | spin(2r+1)  | spin(2r+1,\mathbb{C}) | B_r       | +---------------+-------------------------+-------------+ | Sp(2r)      | Sp(2r,\mathbb{C})     | C_r       | +---------------+-------------------------+-------------+ | spin(2r)    | spin(2r,\mathbb{C})   | D_r       | +---------------+-------------------------+-------------+ You may create these Cartan types and their Dynkin diagrams as follows:: sage: ct = CartanType("D5"); ct ['D', 5] Here "D5" is an abbreviation for ['D',5]. Dual Cartan types ------------------ Every Cartan type has a dual, which you can get from within Sage:: sage: CartanType("B4").dual() ['C', 4] Types other than B and C are self-dual in the sense that the dual is isomorphic to the original type, but the isomorphism of a Cartan type with its dual might relabel the vertices. We can see this as follows:: sage: CartanType("F4").dynkin_diagram() O---O=>=O---O 1   2   3   4 F4 sage: CartanType("F4").dual() ['F', 4]^* sage: CartanType("F4").dual().dynkin_diagram() O---O=<=O---O 1   2   3   4 F4* Reducible Cartan types ---------------------- If G is a Lie group of finite index in G_1 \times G_2, where G_1 and G_2 are Lie groups of dimension >0, then G is called *reducible*. In this case, the root system of G is the disjoint union of the root systems of G_1 and G_2, which lie in orthogonal subspaces of the ambient space of the weight space of G. The Cartan type of G is thus *reducible*. Reducible Cartan types are supported in Sage as follows:: sage: RootSystem("A1xA1") Root system of type A1xA1 sage: WeylCharacterRing("A1xA1") The Weyl Character Ring of Type A1xA1 with Integer Ring coefficients Low dimensional Cartan types ---------------------------- There are some isomorphisms that occur in low degree. +-------------+------------+-----------------+---------------------+ | Cartan Type | Group      | Equivalent Type | Isomorphic Group    | +=============+============+=================+=====================+ | B2          | spin(5)  | C2              | Sp(4)             | +-------------+------------+-----------------+---------------------+ | D3          | spin(6)  | A3              | SL(4)             | +-------------+------------+-----------------+---------------------+ | D2          | spin(4)  | A1xA1           | SL(2)\times SL(2) | +-------------+------------+-----------------+---------------------+ | B1          | spin(3)  | A1              | SL(2)             | +-------------+------------+-----------------+---------------------+ | C1          | Sp(2)    | A1              | SL(2)             | +-------------+------------+-----------------+---------------------+ Sometimes the redundant Cartan types such as D3 and D2 are excluded from the list of Cartan types. Folks will tell there's no such Cartan types. However Sage allows them since excluding them leads to exceptions having to be made in algorithms. A better approach, which is followed by Sage, is to allow the redundant Cartan types, but to implement the isomorphisms explicitly as special cases of branching rules. The utility of this approach may be seen by considering that the rank one group SL(2) has different natural weight lattices realizations depending on whether we consider it to be SL(2), spin(2) or Sp(2):: sage: RootSystem("A1").ambient_space().simple_roots() Finite family {1: (1, -1)} sage: RootSystem("B1").ambient_space().simple_roots() Finite family {1: (1)} sage: RootSystem("C1").ambient_space().simple_roots() Finite family {1: (2)} Affine Cartan types ------------------- There are also affine Cartan types, which correspond to (infinite) affine Lie algebras. There is an affine Cartan type of the of the form [X,r,1] if X=A,B,C,D,E,F,G and [X,r] is an ordinary Cartan type. There are also *twisted affine types* of the form [X,r,k] where k = 2 or 3 if the Dynkin diagram of the ordinary Cartan type [X,r] has an automorphism of degree k. Illustrating some of the methods available for the untwisted affine Cartan type ['A',4,1]:: sage: ct = CartanType(['A',4,1]); ct ['A', 4, 1] sage: ct.dual() ['A', 4, 1] sage: ct.classical() ['A', 4] sage: ct.dynkin_diagram() 0 O-----------+ |           | |           | O---O---O---O 1   2   3   4 A4~ The twisted affine Cartan types are relabeling of the duals of certain untwisted Cartan types:: sage: CartanType(['A',3,2]) ['B', 2, 1]^* sage: CartanType(['D',4,3]) ['G', 2, 1]^* relabelled by {0: 0, 1: 2, 2: 1} Relabeled Cartan types ---------------------- By default Sage uses the labeling of the Dynkin Diagram from Bourbaki, *Lie Groups and Lie Algebras* Chapters 4,5,6. There is another labeling of the vertices due to Dynkin. Most of the literature follows Bourbaki, though Kac's book *Infinite Dimensional Lie algebras* follows Dynkin. If you need to use Dynkin's labeling you should be aware that Sage does support relabeled Cartan types. See the documentation in sage.combinat.root_system.type_relabel for further information. .. _standard-realizations: Standard realizations of the ambient spaces ------------------------------------------- These realizations follow the Appendix in Bourbaki, *Lie Groups and Lie Algebras, Chapters 4-6*. Type A ^^^^^^ For type A_r we use an r+1 dimensional ambient space. This means that we are modeling the Lie group U(r+1) or GL(r+1,\mathbb{C}) rather than SU(r+1) or SL(r+1,\mathbb{C}). The ambient space is identified with \mathbb{Q}^{r+1}:: sage: RootSystem("A3").ambient_space().simple_roots() Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1)} sage: RootSystem("A3").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1, 1, 1, 0)} sage: RootSystem("A3").ambient_space().rho() (3, 2, 1, 0) The dominant weights consist of integer r+1-tuples \lambda = (\lambda_1,\dots,\lambda_{r+1}) such that \lambda_1 \ge \dots \ge \lambda_{r+1}. See :ref:SLvsGL for further remarks about Type A. Type B ^^^^^^ For the remaining classical Cartan types B_r, C_r and D_r we use an r-dimensional ambient space:: sage: RootSystem("B3").ambient_space().simple_roots() Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 1)} sage: RootSystem("B3").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1/2, 1/2, 1/2)} sage: RootSystem("B3").ambient_space().rho() (5/2, 3/2, 1/2) This is the Cartan type of spin(2r+1). The last fundamental weight (1/2, 1/2, ... , 1/2) is the highest weight of the 2^r dimensional *spin representation*. All the other fundamental representations factor through the homomorphism spin(2r+1) \to SO(2r+1) and are representations of the orthogonal group. The dominant weights consist of r-tuples of integers or half-integers (\lambda_1,\dots,\lambda_r) such that \lambda_1 \ge \lambda_2 \dots \ge \lambda_r \ge 0, and such that the differences \lambda_i - \lambda_j \in \mathbb{Z}. Type C ^^^^^^ :: sage: RootSystem("C3").ambient_space().simple_roots() Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 2)} sage: RootSystem("C3").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1, 1, 1)} sage: RootSystem("C3").ambient_space().rho() (3, 2, 1) This is the Cartan type of the symplectic group Sp(2r). The dominant weights consist of r-tuples of integers \lambda = (\lambda_1,\dots,\lambda_{r+1}) such that \lambda_1 \ge \cdots \ge \lambda_r \ge 0. Type D ^^^^^^ :: sage: RootSystem("D4").ambient_space().simple_roots() Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1), 4: (0, 0, 1, 1)} sage: RootSystem("D4").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1/2, 1/2, 1/2, -1/2), 4: (1/2, 1/2, 1/2, 1/2)} sage: RootSystem("D4").ambient_space().rho() (3, 2, 1, 0) This is the Cartan type of spin(2r).  The last two fundamental weights are the highest weights of the two 2^{r-1}-dimensional spin representations. The dominant weights consist of r-tuples of integers \lambda = (\lambda_1,\dots,\lambda_{r+1}) such that \lambda_1 \ge \cdots \ge \lambda_{r-1} \ge |\lambda_r|. We leave the reader to examine the exceptional types. You can use Sage to list the fundamental dominant weights and simple roots. Weights and the ambient space ----------------------------- Let G be a reductive complex analytic group. Let T be a maximal torus, \Lambda = X^{\ast} (T) be its group of analytic characters. Then T \cong (\mathbb{C}^{\times})^r for some r and \Lambda \cong \mathbb{Z}^r. **Example 1:** Let G = \hbox{GL}_{r+1} (\mathbb{C}). Then T is the diagonal subgroup and X^{\ast} (T) \cong \mathbb{Z}^{r+1}. If \lambda = (\lambda_1, \dots, \lambda_n) then \lambda is identified with the rational character .. MATH:: {\bf t} = \left(\begin{array}{ccc} t_1 &  & \\ & \ddots & \\ &  & t_n \end{array}\right) \longmapsto \prod t_i^{\lambda_i}. **Example 2:** Let G = \hbox{SL}_{r+1} (\mathbb{C}). Again T is the diagonal subgroup but now if \lambda \in \mathbb{Z}^{\Delta} = \{(d, \cdots, d) | d \in \mathbb{Z}\} \subseteq \mathbb{Z}^{r+1} then \prod t_i^{\lambda_i} = \det ({\bf t})^d = 1, so X^{\ast} (T) \cong \mathbb{Z}^{r+1} /\mathbb{Z}^{\Delta} \cong \mathbb{Z}^r. - Elements of \Lambda are called *weights*. - If \pi: G \to GL(V) is any representation we may restrict \pi to T. Then the characters of T that occur in this restriction are called the *weights of* \pi. - G acts on its Lie algebra by conjugation (the *adjoint representation*). - The nonzero weights of the adjoint representation are called *roots*. - The *ambient space* of \Lambda is \mathbb{Q} \otimes \Lambda. The root system --------------- As we have mentioned, G acts on its complexified Lie algebra \mathfrak{g}_{\mathbb{C}} by the adjoint representation. The zero weight space \mathfrak{g}_{\mathbb{C}}(0) is just the Lie algebra of T itself. The other nonzero weights each appear with multiplicity one and form an interesting configuration of vectors called the *root system* \Phi. It is convenient to partition \Phi into two sets \Phi^+ and \Phi^- such that \Phi^+ consists of all roots lying on one side of a hyperplane. Often we arrange things so that G is embedded in GL(n,\mathbb{C}) in such a way that the positive weights correspond to upper triangular matrices. Thus if \alpha is a positive root, its weight space \mathfrak{g}_{\mathbb{C}}(\alpha) is spanned by a vector X_\alpha, and the exponential of this eigenspace in G is a one-parameter subgroup of unipotent matrices. It is always possible to arrange that this one-parameter subgroup consists of upper triangular matrices. If \alpha is a positive root that cannot be decomposed as a sum of other positive roots, then \alpha is called a *simple root*. If G is semisimple of rank r, then r is the number of positive roots. Let \alpha_1,\dots,\alpha_r be these. The Weyl group -------------- Let G be a complex analytic group. Let T be a maximal torus, and let N(T) be its normalizer. Let W = N(T)/T be the *Weyl group*. It acts on T by conjugation; therefore it acts on the weight lattice \Lambda and its ambient space.  The ambient space admits an inner product that is invariant under this action. Let \left denote this inner product. If \alpha is a root let r_\alpha denote the reflection in the hyperplane of the ambient space that is perpendicular to \alpha. If \alpha = \alpha_i is a simple root, then we use the notation s_i to denote r_\alpha. Then s_1,\dots,s_r generate W, which is a *Coxeter group*. This means that it is generated by elements s_i of order two and that if m(i,j) is the order of s_i s_j, then .. MATH:: W = \left is a presentation. An important function l: W \to \mathbb{Z} is the *length* function, where l(w) is the length of the shortest decomposition of w into a product of simple reflections. The dual root system -------------------- The *coroots* are certain linear functionals on the ambient space that also form a root system. Since the ambient space admits a W-invariant inner product, they may be identified with elements of the ambient space itself. Then they are proportional to the roots, though if the roots have different lengths, long roots correspond to short coroots and conversely. The coroot corresponding to the root \alpha is .. MATH:: \alpha^\vee = \frac{2\alpha}{\left<\alpha,\alpha\right>}. The Dynkin diagram ------------------ The Dynkin diagram is a graph whose vertices are in bijection with the set simple roots. We connect the vertices corresponding to roots that are not orthogonal. Usually two such vertices make an angle of 2\pi/3, in which case we connect them with a single bond. Occasionally they may make an angle of 3\pi/4 in which case we connect them with a double bond, or 5\pi/6 in which case we connect them with a triple bond. If the bond is single, the roots have the same length with respect to the inner product on the ambient space. In the case of a double or triple bond, the two simple roots in questions have different length, and the bond is drawn as an arrow from the long root to the short root. Only the exceptional group G_2 has a triple bond. There are various ways to get the Dynkin diagram:: sage: DynkinDiagram("D5") O 5 | | O---O---O---O 1   2   3   4 D5 sage: ct = CartanType("E6"); ct ['E', 6] sage: ct.dynkin_diagram() O 2 | | O---O---O---O---O 1   3   4   5   6 E6 sage: B4=WeylCharacterRing("B4"); B4 The Weyl Character Ring of Type ['B', 4] with Integer Ring coefficients sage: B4.dynkin_diagram() O---O---O=>=O 1   2   3   4 B4 sage: RootSystem("G2").dynkin_diagram() 3 O=<=O 1   2 G2 The affine root and the extended Dynkin diagram ----------------------------------------------- For the extended Dynkin diagram, we add one negative root \alpha_0. This is the root whose negative is the highest weight in the adjoint representation. Sometimes this is called the *affine root*. We make the Dynkin diagram as before by measuring the angles between the roots.  This extended Dynkin diagram is useful for many purposes, such as finding maximal subgroups and for describing the affine Weyl group. The extended Dynkin diagram may be obtained as the Dynkin diagram of the corresponding untwisted affine type:: sage: ct = CartanType("E6"); ct ['E', 6] sage: ct.affine() ['E', 6, 1] sage: ct.affine() == CartanType(['E',6,1]) True sage: ct.affine().dynkin_diagram() O 0 | | O 2 | | O---O---O---O---O 1   3   4   5   6 E6~ The extended Dynkin diagram is also a method of the WeylCharacterRing:: sage: WeylCharacterRing("E7").extended_dynkin_diagram() O 2 | | O---O---O---O---O---O---O 0   1   3   4   5   6   7 E7~ Fundamental weights and the Weyl vector --------------------------------------- There are certain weights \omega_1,\dots,\omega_r that: .. MATH:: \frac{2\left<\alpha_i,\omega_j\right>}{\left<\alpha_i,\alpha_i\right>} = \delta(i,j). If G is semisimple then these are uniquely determined, whereas if G is reductive but not semisimple we may choose them conveniently. Let \rho be the sum of the fundamental dominant weights. If G is semisimple, then \rho is half the sum of the positive roots. In case G is not semisimple, we have noted, the fundamental weights are not completely determined by the inner product condition given above. If we make a different choice, then \rho is altered by a vector that is orthogonal to all roots. This is a harmless change for many purposes such as the Weyl character formula. In Sage, this issue arises only for Cartan type A. See :ref:SLvsGL. .. _representations: Representations and characters ------------------------------ Let \Lambda = X^{\ast} (T) be the group of rational characters. Then \Lambda \cong \mathbb{Z}^r. - Recall that elements of \Lambda \cong \mathbb{Z}^r are called *weights*. - The Weyl group W = N(T)/T acts on T, hence on \Lambda and its ambient space by conjugation. - The ambient space \mathbb{Q} \otimes X^{\ast} (T) \cong \mathbb{Q}^r has a fundamental domain \mathcal{C}^+ for the Weyl group W called the *positive Weyl chamber*. Weights in \mathcal{C}^+ are called *dominant*. - Then \mathcal{C}^+ consists of all vectors such that \left<\alpha,v\right> \ge 0 for all positive roots \alpha. - It is useful to embed \Lambda in \mathbb{R}^r and consider weights as lattice points. - If (\pi, V) is a representation then restricting to T, the module V decomposes into a direct sum of weight eigenspaces V(\mu) with  multiplicity m (\mu) for weight \mu. - There is a unique *highest weight* \lambda with respect to the partial order. We have \lambda \in \mathcal{C} and m (\lambda) = 1. - V \longleftrightarrow \lambda gives a bijection between irreducible representations and   weights \lambda in \mathcal{C}^+. Assuming that G is simply-connected (or more generally, reductive with a simply-connected derived group) every dominant weight \lambda is the highest weight of a unique irreducible representation \pi_\lambda, and \lambda \mapsto \pi_\lambda gives a parametrization of the isomorphism classes of irreducible representations of G by the dominant weights. The *character* of \pi_\lambda is the function \chi_\lambda(g) = tr(\pi_\lambda(g)). It is determined by its values on T. If \mathbf(z) \in T and \mu \in \Lambda, let us write \mathbf{z}^\mu for the value of \mu on \mathbf{z}. Then the character: .. MATH:: \chi_\lambda(\mathbf{z}) = \sum_{\mu\in\Lambda}m(\mu)\,\mathbf{z}^\lambda. Sometimes this is written .. MATH:: \chi_\lambda = \sum_{\mu\in\Lambda}m(\mu)\,e^\lambda. The meaning of e^\lambda is subject to interpretation, but we may regard it as the image of the additive group \Lambda in its group algebra. The character is then regarded as an element of this ring, the group algebra of \Lambda. Representations: an example --------------------------- .. image:: ../static/wcf1.png :scale: 50 In this example, G = \hbox{SL}(3,\mathbb{C}). We have drawn the weights of an irreducible representation with highest weight \lambda. The shaded region is \mathcal{C}^+. \lambda is a dominant weight, and the labeled vertices are the weights with positive multiplicity in V(\lambda). The weights weights on the outside have m(\mu) = 1, while the six interior weights (with double circles) have m(\mu) = 2. .. _Schur Polynomials: Partitions and Schur polynomials -------------------------------- The considerations of this section are particular to type A. We review the relationship between characters of GL(n,\mathbb{C}) and symmetric function theory. A *partition* \lambda is a sequence of descending nonnegative integers: .. MATH:: \lambda = (\lambda_1, \lambda_2, \dots, \lambda_n), \qquad \lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_n \ge 0. We do not distinguish between two partitions if they differ only by some trailing zeros, so (3, 2) = (3, 2, 0). If l is the last integer such that \lambda_l > 0 then we say that l is the *length* of \lambda. If k = \sum \lambda_i then we say that \lambda is a *partition* of k and write \lambda \vdash k. A partition of length \le n=r+1 is therefore a dominant weight of type ['A',r]. Not every dominant weight is a partition, since the coefficients in a dominant weight could be negative. Let us say that an element \mu = (\mu_1, \mu_2, \cdots, \mu_n) of the ['A',r] root lattice is *effective* if the \mu_i \ge 0. Thus an effective dominant weight of ['A',r] is a partition of length \le n, where n = r+1. Let \lambda be a dominant weight, and let \chi_\lambda be the character of GL(n,\mathbb{C}) with highest weight \lambda. If k is any integer we may consider the weight \lambda' = (\lambda_1+k,\dots,\lambda_n+k) obtained by adding k to each entry. Then \chi_{\lambda'} = \det^k \otimes \chi_\lambda. Clearly by choosing k large enough, we may make \lambda' effective. So the characters of irreducible representations of GL(n,\mathbb{C}) do not all correspond to partitions, but the characters indexed by partitions (effective dominant weights) are enough that we can write any character \det^{-k}\chi_{\lambda'} where \lambda' is a partition. If we take k = -\lambda_n we could also arrange that the last entry in \lambda is zero. If \lambda is an effective dominant weight, then every weight that appears in \chi_\lambda is effective. (Indeed, it lies in the convex hull of w(\lambda) where w runs through the Weyl group W = S_n.) This means that if .. MATH:: g = \left(\begin{array}{ccc} z_1 \\ & \ddots \\ && z_n \end{array}\right) \in GL(n,\mathbb{C}) then \chi_\lambda(g) is a polynomial in the eigenvalues of g. This is the *Schur polynomial* s_\lambda(z_1,\dots,z_n).
• ## new file doc/en/thematic_tutorials/lie/weight_ring.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/weight_ring.rst
 - ------------ Weight Rings ------------ You may wish to work directly with the weights of a representation. WeylCharacterRingElements are represented internally by a dictionary of their weights with multiplicities. However these are subject to a constraint: the coefficients must be invariant under the action of the Weyl group. The WeightRing is also a ring whose elements are represented internally by a dictionary of their weights with multiplicities, but it is not subject to this constraint of Weyl group invariance. The weights are allowed to be fractional, that is, elements of the ambient space. In other words, the weight ring is the group algebra over the ambient space of the weight lattice. To create a WeightRing first construct the Weyl Character Ring, then create the WeightRing as follows:: sage: A2 = WeylCharacterRing(['A',2]) sage: a2 = WeightRing(A2) You may coerce elements of the WeylCharacterRing into the weight ring. For example, if you want to see the weights of the adjoint representation of GL(3), you may use the method mlist, but another way is to coerce it into the weight ring:: sage: ad = A2(1,0,-1) sage: ad.mlist() [[(-1, 1, 0), 1], [(0, 1, -1), 1], [(1, 0, -1), 1], [(0, 0, 0), 2], [(-1, 0, 1), 1], [(0, -1, 1), 1], [(1, -1, 0), 1]] sage: a2(ad) a2(-1,0,1) + a2(-1,1,0) + a2(0,-1,1) + 2*a2(0,0,0) + a2(0,1,-1) + a2(1,-1,0) + a2(1,0,-1) For example, the Weyl denominator formula is usually written this way: .. MATH:: \prod_{\alpha\in\Phi^+}\left(e^{\alpha/2}-e^{-\alpha/2}\right) = \sum_{w\in W} (-1)^{l(w)}e^{w(\rho)}. The notation is as follows. Here if \lambda is a weight, or more generally, an element of the ambient space, then e^\lambda means the image of \lambda in the group algebra of the ambient space of the weight lattice \lambda. Since this group algebra is just the weight ring, we can interpret e^\lambda as its image in the weight ring. Let us confirm the Weyl denominator formula for A2:: sage: A2 = WeylCharacterRing("A2") sage: a2 = WeightRing(A2) sage: L = A2.space() sage: W = L.weyl_group() sage: rho = A2.coerce_to_sl(L.rho()) sage: lhs = prod(a2(alpha/2)-a2(-alpha/2) for alpha in L.positive_roots()); lhs -a2(-1,0,1) + a2(-1,1,0) + a2(0,-1,1) - a2(0,1,-1) - a2(1,-1,0) + a2(1,0,-1) sage: rhs = sum((-1)^(w.length())*a2(w.action(rho)) for w in W); rhs -a2(-1,0,1) + a2(-1,1,0) + a2(0,-1,1) - a2(0,1,-1) - a2(1,-1,0) + a2(1,0,-1) sage: lhs == rhs True Note that we have to be careful to use the right value of \rho. The reason for this is explained in :ref:SLvsGL. We have seen that elements of the WeylCharacterRing can be coerced into the WeightRing. Elements of the WeightRing can be coerced into the WeylCharacterRing *provided* they are invariant under the Weyl group.
• ## new file doc/en/thematic_tutorials/lie/weyl_character_ring.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/weyl_character_ring.rst
 - ======================= The Weyl Character Ring ======================= Weyl character rings -------------------- The Weyl character ring has a basis consisting of the irreducible representations of G, or equivalently, their characters. The addition and multiplication in the Weyl character ring correspond to direct sum and tensor product of representations. Methods of the ambient space ---------------------------- In Sage, many useful features of the Lie group are available as methods of the ambient space:: sage: S = RootSystem("B2").ambient_space(); S Ambient space of the Root system of type ['B', 2] sage: S.roots() [(1, -1), (1, 1), (1, 0), (0, 1), (-1, 1), (-1, -1), (-1, 0), (0, -1)] sage: S.fundamental_weights() Finite family {1: (1, 0), 2: (1/2, 1/2)} sage: S.positive_roots() [(1, -1), (1, 1), (1, 0), (0, 1)] sage: S.weyl_group() Weyl Group of type ['B', 2] (as a matrix group acting on the ambient space) Methods of the Weyl character ring ---------------------------------- If you are going to work with representations, you may want to create a *Weyl Character ring*. Many methods of the ambient space are available as methods of the Weyl character ring:: sage: B3 = WeylCharacterRing("B3") sage: B3.fundamental_weights() Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1/2, 1/2, 1/2)} sage: B3.simple_roots() Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 1)} sage: B3.dynkin_diagram() O---O=>=O 1   2   3 B3 Other useful methods of the Weyl character ring include: - cartan_type - highest_root - positive_root - extended_dynkin_diagram - rank Some methods of the ambient space are not implemented as methods of the Weyl character ring. However, the ambient space itself is a method, and so you have access to its methods from the Weyl character ring:: sage: B3.space().weyl_group() Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space) sage: B3.space() Ambient space of the Root system of type ['B', 3] sage: B3.space().rho() (5/2, 3/2, 1/2) sage: B3.cartan_type() ['B', 3] Coroot notation --------------- It is useful to give the Weyl character ring a name that corresponds to its Cartan type. This has the effect that the ring can parse its own output:: sage: G2 = WeylCharacterRing("G2") sage: [G2(fw) for fw in G2.fundamental_weights()] [G2(1,0,-1), G2(2,-1,-1)] sage: G2(1,0,-1) G2(1,0,-1) Actually the prefix for the ring is configurable, so you don't really have to call this ring G2. Type WeylCharacterRing? at the sage: prompt for details. There is one important option that you may want to know about. This is *coroot notation*. You select this by specifying the option style="coroots" when you create the ring. With the coroot style, the fundamental weights are represented (1,0,0, ...), (0,1,0,...) instead of as vectors in the ambient space:: sage: B3 = WeylCharacterRing("B3", style="coroots") sage: [B3(fw) for fw in B3.fundamental_weights()] [B3(1,0,0), B3(0,1,0), B3(0,0,1)] sage: B3(0,0,1) B3(0,0,1) sage: B3(0,0,1).degree() 8 The last representation is the eight dimensional spin representation of G = spin(7), the double cover of the orthogonal group SO(7). In the default notation it would be represented B3(1/2,1/2,1/2). With the coroot notation every irreducible representation is represented B3(a,b,c) where a, b and c are nonnegative integers. This is often convenient. For many purposes the coroot style is preferable. One disadvantage: in the coroot style the Lie group or Lie algebra is treated as semisimple, so you lose the distinction between GL(n) and SL(n); you also some information about representations of E6 and E7 for the same reason. Tensor products of representations ---------------------------------- The multiplication in the Weyl character ring corresponds to tensor product. This gives us a convenient way of decomposing a tensor product into irreducibles:: sage: B3 = WeylCharacterRing("B3") sage: fw = B3.fundamental_weights() sage: spinweight = fw[3]; spinweight (1/2, 1/2, 1/2) sage: spin = B3(spinweight) sage: spin.degree() 8 sage: chi = spin*spin; chi B3(0,0,0) + B3(1,0,0) + B3(1,1,0) + B3(1,1,1) We have taken the eight-dimensional spin representation and tensored with itself. We see that the tensor square splits into four irreducibles, each with multiplicity one. The highest weights that appear here are available (with their coefficients) are available through the method hlist:: sage: chi.hlist() [[(1, 1, 1), 1], [(1, 0, 0), 1], [(1, 1, 0), 1], [(0, 0, 0), 1]] sage: [p[0] for p in chi.hlist()] [(1, 1, 1), (1, 0, 0), (1, 1, 0), (0, 0, 0)] sage: [B3(p[0]) for p in chi.hlist()] [B3(1,1,1), B3(1,0,0), B3(1,1,0), B3(0,0,0)] sage: [B3(p[0]).degree() for p in chi.hlist()] [35, 7, 21, 1] sage: sum(B3(p[0]).degree() for p in chi.hlist()) 64 Here we've extracted the individual representations, computed their degrees and checked that they sum to 64. Weights ------- The weights of the character are (with their coefficients) are available through the method mlist. Continuing from the example in the last section:: sage: chi.mlist() [[(0, 1, 0), 4], [(1, -1, 1), 1], [(-1, -1, 1), 1], [(0, 1, 1), 2], [(0, -1, -1), 2], [(0, -1, 0), 4], [(1, -1, -1), 1], [(0, 1, -1), 2], [(-1, 0, 1), 2], [(-1, 1, -1), 1], [(-1, -1, 0), 2], [(-1, 1, 0),2], [(1, 0, 0), 4], [(-1, 0, 0), 4], [(1, 0, -1), 2], [(0, 0, -1), 4], [(0, -1, 1), 2], [(1, 1, -1), 1], [(0, 0, 1), 4], [(-1, 0, -1), 2], [(-1, 1, 1), 1], [(1, 0, 1), 2], [(0, 0, 0), 8], [(-1, -1, -1), 1], [(1, 1, 1), 1], [(1, 1, 0), 2], [(1, -1, 0), 2]] Frobenius-Schur indicator ------------------------- The Frobeinus-Schur indicator of an irreducible representation of a compact Lie group G with character \chi is: .. MATH:: \int_G\chi(g^2) \, dg The Haar measure is normalized so that vol(G) = 1. The Frobenius-Schur indicator equals 1 if the representation is real (orthogonal), -1 if it is quaternionic (symplectic) and 0 if it is complex (not self-contragredient). This is a method of weight ring elements corresponding to irreducible representations. Let us compute the Frobenius-Schur indicators of the spin representations of some odd spin groups:: sage: for r in [1..4]: ....:    R = WeylCharacterRing(['B',r]) ....:    spinweight = R.fundamental_weights().list()[-1] ....:    print r, R(spinweight).frobenius_schur_indicator() ....: 1 -1 2 -1 3 1 4 1 We see that the spin representations of spin(3) and spin(5) are symplectic, while those of spin(7) and spin(9) are orthogonal. Symmetric and exterior square ----------------------------- The tensor square of any representation decomposes as the direct sum of the symmetric and exterior squares:: sage: C4 = WeylCharacterRing("C4",style="coroots") sage: chi = C4(1,0,0,0); chi.degree() 8 sage: chi.symmetric_square() C4(2,0,0,0) sage: chi.exterior_square() C4(0,0,0,0) + C4(0,1,0,0) sage: chi^2 == chi.symmetric_square() + chi.exterior_square() True Since in this example the exterior square contains the trivial representation we expect the Frobenius-Schur indicator to be -1, and indeed it is:: sage: chi.frobenius_schur_indicator() -1 This is not surprising since this is the standard representation of a symplectic group, which is symplectic *by definition*! Weyl dimension formula ---------------------- If the representation is truly large you will not be able to construct it in the Weyl character ring, since internally it is represented by a dictionary of its weights. If you want to know its degree, you can still compute that since Sage implements the Weyl dimension formula. The degree of the representation is implemented as a method of its highest weight vector:: sage: L = RootSystem("E8").ambient_space() sage: [L.weyl_dimension(f) for f in L.fundamental_weights()] [3875, 147250, 6696000, 6899079264, 146325270, 2450240, 30380, 248] It is a fact that if \rho is the Weyl vector then the degree of the irreducible representation with highest weight \rho equals 2^N where N is the number of positive roots. Let us check this for E_8. In this case N = 120:: sage: len(L.positive_roots()) 120 sage: 2^120 1329227995784915872903807060280344576 sage: L.weyl_dimension(L.rho()) 1329227995784915872903807060280344576 .. _SLvsGL: SL versus GL ------------ Sage takes the weight space for type ['A',r] to be r+1 dimensional. As a biproduct, if you create the Weyl character ring with the command:: sage: A2 = WeylCharacterRing("A2") Then you are effectively working with GL(3) instead of SL(3). For example, the determinant is the character A2(1,1,1). However, as we will explain later, you can work with SL(3) if you like, so long as you are willing to work with fractional weights. On the other hand if you create the Weyl character ring with the command:: sage: A2 = WeylCharacterRing("A2", style="coroots") Then you are working with SL(3). There are some advantages to this arrangement. - The group GL(r+1) arises frequently in practice. For example, even if you care mainly about semisimple groups, the group GL(r+1) may arise as a Levi subgroup. - It avoids fractional weights. If you want to work with SL(3) the fundamental weights are (2/3,-1/3,-1/3) and (1/3,1/3,-2/3). If you work instead with GL(3), they are (1,0,0) and (1,1,0). For many mathematical purposes it doesn't make any difference which you use. This is because the difference between (2/3,-1/3,-1/3) and (1,0,0) is a vector that is orthogonal to all the simple roots. Thus these vectors are interchangeable. But for convenience avoiding fractional weights is advantageous. However if you want to be an SL purist, Sage will support you. The weight space for SL(3) can be taken to be the hyperplane in \mathbb{Q}^3 consisting of vectors (a,b,c) with a+b+c = 0. The fundamental weights for SL(3) are then (2/3,-1/3,-1/3) and (1/3,1/3,-2/3), though Sage will tell you they are (1,0,0) and (1,1,0). The work-around is to filter them through the method coerce_to_sl as follows:: sage: A2 = WeylCharacterRing("A2") sage: [fw1,fw2] = [A2.coerce_to_sl(w) for w in A2.fundamental_weights()] sage: [standard, contragredient] = [A2(fw1), A2(fw2)] sage: standard, contragredient (A2(2/3,-1/3,-1/3), A2(1/3,1/3,-2/3)) sage: standard*contragredient A2(0,0,0) + A2(1,0,-1) Sage is not confused by the fractional weights. Note that if you use coroot notation, you are working with SL automatically:: sage: A2 = WeylCharacterRing("A2", style="coroots") sage: A2(1,0).mlist() [[(2/3, -1/3, -1/3), 1], [(-1/3, 2/3, -1/3), 1], [(-1/3, -1/3, 2/3), 1]] There is no convenient way to create the determinant in the Weyl character ring if you adopt the coroot style. Just as we coerced the fundamental weights into the SL weight lattice, you may need to coerce the Weyl vector \rho if you are working with SL. The default value for \rho in type A_r is (r,r-1,\dots,0), but if you are an SL purist you want .. MATH:: \left(\frac{r}{2}, \frac{r}{2}-1,\dots,-\frac{r}{2}\right). Therefore take the value of \rho that you get from the method of the ambient space and coerce it into SL:: sage: rho = A2.coerce_to_sl(A2.space().rho()); rho (1, 0, -1) sage: rho == (1/2)*sum(a for a in A2.space().positive_roots()) True You do not need to do this for other Cartan types. If you are working with (say) F4 then a \rho is a \rho is a \rho:: sage: F4 = WeylCharacterRing("F4") sage: L = F4.space() sage: rho = L.rho() sage: rho == (1/2)*sum(a for a in L.positive_roots()) True Caching ------- You may improve the performance of a Weyl character ring by specifying cache=True when you create the ring. This means that the results of intermediate computations are saved. The amount of improvement would depend on the type of computation you are doing.
• ## new file doc/en/thematic_tutorials/lie/weyl_groups.rst

diff -r 5b338f2e484f -r fc7cc70533c4 doc/en/thematic_tutorials/lie/weyl_groups.rst
 - ------------------------------------------------ Weyl Groups, Coxeter Groups and the Bruhat Order ------------------------------------------------ Classical and affine Weyl groups -------------------------------- You can create Weyl groups and affine Weyl groups for any root system. A variety of methods are available for these. Some of these are methods are available for general Coxeter groups. By default, elements of the Weyl group are represented as matrices:: sage: WeylGroup("A3").simple_reflection(1) [0 1 0 0] [1 0 0 0] [0 0 1 0] [0 0 0 1] You may prefer a notation in which elements are written out as products of simple reflections. In order to implement this you need to specify a prefix, typically "s":: sage: W = WeylGroup("A3",prefix="s") sage: [s1,s2,s3] = W.simple_reflections() sage: (s1*s2*s1).length() 3 sage: W.long_element() s1*s2*s3*s1*s2*s1 sage: s1*s2*s3*s1*s2*s1 == s3*s2*s1*s3*s2*s3 True The Weyl group acts on the ambient space of the root lattice, which is accessed by the method domain. To illustrate this, recall that if w_0 is the long element then \alpha \mapsto -w_0(\alpha) is a permutation of the simple roots. We may compute this as follows:: sage: W = WeylGroup("E6",prefix="s") sage: w0 = W.long_element(); w0 s1*s3*s4*s5*s6*s2*s4*s5*s3*s4*s1*s3*s2*s4*s5*s6*s2*s4*s5*s3*s4*s1*s3*s2*s4*s5* s3*s4*s1*s3*s2*s4*s1*s3*s2*s1 sage: sr = W.domain().simple_roots().list(); sr [(1/2, -1/2, -1/2, -1/2, -1/2, -1/2, -1/2, 1/2), (1, 1, 0, 0, 0, 0, 0, 0), (-1, 1, 0, 0, 0, 0, 0, 0), (0, -1, 1, 0, 0, 0, 0, 0), (0, 0, -1, 1, 0, 0, 0, 0), (0, 0, 0, -1, 1, 0, 0, 0)] sage: [-w0.action(a) for a in sr] [(0, 0, 0, -1, 1, 0, 0, 0), (1, 1, 0, 0, 0, 0, 0, 0), (0, 0, -1, 1, 0, 0, 0, 0), (0, -1, 1, 0, 0, 0, 0, 0), (-1, 1, 0, 0, 0, 0, 0, 0), (1/2, -1/2, -1/2, -1/2, -1/2, -1/2, -1/2, 1/2)] We may ask when this permutation is trivial. If it is nontrivial it induces an automorphism of the Dynkin diagram, so it must be nontrivial when the Dynkin diagram has no automorphism. But if there is a nontrivial automorphism, the permutation might or might not be trivial:: sage: def roots_not_permuted(ct): ...       W = WeylGroup(ct) ...       w0 = W.long_element() ...       sr = W.domain().simple_roots() ...       return all(a == -w0.action(a) for a in sr) ... sage: for ct in [CartanType(['D',r]) for r in [2..8]]: ...      print ct,roots_not_permuted(ct) ... ['D', 2] True ['D', 3] False ['D', 4] True ['D', 5] False ['D', 6] True ['D', 7] False ['D', 8] True If \alpha is a root let r_\alpha denote the reflection in the hyperplane that is orthogonal to \alpha. We reserve the notation s_\alpha for the simple reflections, that is, the case where \alpha is a simple root. The reflections are just the conjugates of the simple reflections. The reflections are the keys in a finite family, which is a wrapper around a python dictionary. The values are the positive roots, so given a reflection, you can look up the corresponding root. If you want a list of all reflections, use the method keys for the family of reflections:: sage: W = WeylGroup("B3",prefix="s") sage: [s1,s2,s3] = W.simple_reflections() sage: ref = W.reflections(); ref sage: Finite family {s1*s2*s1: (1, 0, -1), s2: (0, 1, -1), s3*s2*s3: (0, 1, 1), s3*s1*s2*s3*s1: (1, 0, 1), s1: (1, -1, 0), s2*s3*s1*s2*s3*s1*s2: (1, 1, 0), s1*s2*s3*s2*s1: (1, 0, 0), s2*s3*s2: (0, 1, 0), s3: (0, 0, 1)} sage: ref[s3*s2*s3] (0, 1, 1) sage: ref.keys() [s1*s2*s1, s2, s3*s2*s3, s2*s3*s1*s2*s3*s1*s2, s1, s3*s1*s2*s3*s1, s1*s2*s3*s2*s1, s2*s3*s2, s3] If instead you want a dictionary whose keys are the roots and whose values are the reflections, you may use the inverse family:: sage: altref = W.reflections().inverse_family(); altref Finite family {(1, 0, 0): s1*s2*s3*s2*s1, (1, 0, 1): s3*s1*s2*s3*s1, (0, 1, 0): s2*s3*s2, (0, 1, -1): s2, (1, 0, -1): s1*s2*s1, (0, 1, 1): s3*s2*s3, (1, 1, 0): s2*s3*s1*s2*s3*s1*s2, (0, 0, 1): s3, (1, -1, 0): s1} sage: [a1,a2,a3]=W.domain().simple_roots() sage: a1+a2+a3 (1, 0, 0) sage: altref[a1+a2+a3] s1*s2*s3*s2*s1 The Weyl group is implemented as a GAP matrix group. You therefore can display its character table. The character table is returned as a string, which you can print:: sage: print WeylGroup("D4").character_table() CT1 2  6  4  5  1  3  5  5  4  3  3  1  4  6 3  1  .  .  1  .  .  .  .  .  .  1  .  1 1a 2a 2b 6a 4a 2c 2d 2e 4b 4c 3a 4d 2f X.1      1  1  1  1  1  1  1  1  1  1  1  1  1 X.2      1 -1  1  1 -1  1  1 -1 -1 -1  1  1  1 X.3      2  .  2 -1  .  2  2  .  .  . -1  2  2 X.4      3 -1  3  . -1 -1 -1 -1  1  1  . -1  3 X.5      3 -1 -1  .  1  3 -1 -1 -1  1  . -1  3 X.6      3  1  3  .  1 -1 -1  1 -1 -1  . -1  3 X.7      3  1 -1  . -1  3 -1  1  1 -1  . -1  3 X.8      3 -1 -1  .  1 -1  3 -1  1 -1  . -1  3 X.9      3  1 -1  . -1 -1  3  1 -1  1  . -1  3 X.10     4 -2  . -1  .  .  .  2  .  .  1  . -4 X.11     4  2  . -1  .  .  . -2  .  .  1  . -4 X.12     6  . -2  .  . -2 -2  .  .  .  .  2  6 X.13     8  .  .  1  .  .  .  .  .  . -1  . -8 Affine Weyl groups ------------------ Affine Weyl groups may be created the same way. You simply begin with an affine Cartan type:: sage: W = WeylGroup(['A',2,1],prefix="s") sage: W.cardinality() +Infinity sage: [s0,s1,s2] = W.simple_reflections() sage: s0*s1*s2*s1*s0 s0*s1*s2*s1*s0 The affine Weyl group differs from a classical Weyl group since it is infinite. The associated classical Weyl group is a subgroup that may be extracted as follows:: sage: W = WeylGroup(['A',2,1],prefix="s") sage: W1 = W.classical(); W1 Parabolic Subgroup of the Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root space) sage: W1.simple_reflections() Finite family {1: s1, 2: s2} Although W1 in this example is isomorphic to WeylGroup("A2") it has a different matrix realization:: sage: for s in WeylGroup(['A',2,1]).classical().simple_reflections(): ...      print s ...      print ... [ 1  0  0] [ 1 -1  1] [ 0  0  1] [ 1  0  0] [ 0  1  0] [ 1  1 -1] sage: for s in WeylGroup(['A',2]).simple_reflections(): ...      print s ...      print ... [0 1 0] [1 0 0] [0 0 1] [1 0 0] [0 0 1] [0 1 0] Bruhat order ------------ The Bruhat partial order on the Weyl group may be defined as follows. If u,v \in W, find a reduced expression of v into a product of simple reflections: v = s_1 \cdots s_n. (It is not assumed that the s_i are distinct.) If omitting some of the s_i gives a product that represents u, then u \le v. The Bruhat order is implemented in Sage as a method of Coxeter groups, and so it is available for Weyl groups, classical or affine. If u, v \in W then u.bruhat_le(v) returns true of u \le v in the Bruhat order. If u \le v then The *Bruhat interval* [u,v] is defined to be the set of all t such that u \le t \le v. One might try to implement this as follows:: sage: W = WeylGroup("A2",prefix="s") sage: [s1,s2] = W.simple_reflections() sage: def bi(u,v) : return [t for t in W if u.bruhat_le(t) and t.bruhat_le(v)] ... sage: bi(s1,s1*s2*s1) [s1, s1*s2, s1*s2*s1, s2*s1] This would not be a good definition since it would fail if W is affine and be inefficient of W is large. Sage has a Bruhat interval method:: sage: W.bruhat_interval(s1,s1*s2*s1) [s1*s2*s1, s2*s1, s1*s2, s1] This works even for affine Weyl groups. The Bruhat graph ---------------- References: - [Carrell1994]_ - [Deodhar1977]_ - [Dyer1993]_ - [BumpNakasuji2010]_ The *Bruhat Graph* is a structure on the Bruhat interval. Suppose that u \le v. The vertices of the graph are x with u \le x \le v. There is a vertex connecting x,y \in [x,y] if x = y.r where r is a reflection. If this is true then either x < y or y < x. If W is a classical Weyl group the Bruhat graph is implemented in Sage:: sage: W = WeylGroup("A3",prefix="s") sage: [s1,s2,s3] = W.simple_reflections() sage: bg = W.bruhat_graph(s2,s2*s1*s3*s2); bg Digraph on 10 vertices sage: bg.show3d() The Bruhat graph has interesting regularity properties that were investigated by Carrell and Peterson. It is a regular graph if both the Kazhdan Lusztig polynomials P_{u,v} and P_{w_0v,w_0u} are 1, where w_0 is the long Weyl group element. It is closely related to the *Deodhar conjecture* which was proved by Deodhar, Carrell and Peterson, Dyer and Polo. Deodhar proved that if u < v then the Bruhat interval [u,v] contains as many elements of odd length as it does of even length. We observe that often this can be strengthened: if there exists a reflection r such that left (or right) multiplication by r takes the Bruhat interval [u,v] to itself, then this gives an explicit bijection between the elements of odd and even length in [u,v]. Let us search for such reflections. Put the following commands in a file and load or attach the file:: W = WeylGroup("A3",prefix="s") [s1,s2,s3]=W.simple_reflections() ref = W.reflections().keys() def find_reflection(u,v): bi = W.bruhat_interval(u,v) ret = [] for r in ref: if all( r*x in bi for x in bi): ret.append(r) return ret Now inspect the output of this command:: sage: for v in W: ...      for u in W.bruhat_interval(1,v): ...         if u != v: ...            print u,v,find_reflection(u,v) This shows that the Bruhat interval is stabilized by a reflection for all pairs (u,v) with u < v except the following two: s_3s_1,s_1s_2s_3s_2s_1 and s_2,s_2s_3s_1s_2. Now these are precisely the pairs such that u\prec v in the notation of Kazhdan and Lusztig, and l(v)-l(u) > 1. One should not rashly suppose that this is a general characterization of the pairs (u,v) such that no reflection stabilizes the Bruhat interval, for this is not true, but it does suggest that the question is worthy of further investigation.
• ## sage/algebras/iwahori_hecke_algebra.py

diff -r 5b338f2e484f -r fc7cc70533c4 sage/algebras/iwahori_hecke_algebra.py
 a (T_i-q_1)*(T_i-q_2) == 0 together with the braid relations T_i T_j T_i ... == T_j T_i T_j ..., where the number of terms on both sides is k/2 with k the order of s_i s_j in the Coxeter group. where the number of terms on both sides is the order of s_i s_j in the Coxeter group. Weyl group elements form a basis of the Iwahori Hecke algebra H with the property that if w1 and w2 are Coxeter group elements