Integrable Representations of Affine Lie Algebras¶
-
sage.combinat.root_system.integrable_representations.
IntegrableRepresentation
¶ An irreducible integrable highest weight representation of an affine Lie algebra.
INPUT:
Lam
– a dominant weight in an extended weight lattice of affine type
REFERENCES:
[KMPS] Kass, Moody, Patera and Slansky, Affine Lie algebras, weight multiplicities, and branching rules. Vols. 1, 2. University of California Press, Berkeley, CA, 1990. [KacPeterson] Kac and Peterson. Infinite-dimensional Lie algebras, theta functions and modular forms. Adv. in Math. 53 (1984), no. 2, 125-264. [Carter] Carter, Lie algebras of finite and affine type. Cambridge University Press, 2005 If \(\Lambda\) is a dominant integral weight for an affine root system, there exists a unique integrable representation \(V=V_\Lambda\) of highest weight \(\Lambda\). If \(\mu\) is another weight, let \(m(\mu)\) denote the multiplicity of the weight \(\mu\) in this representation. The set \(\operatorname{supp}(V)\) of \(\mu\) such that \(m(\mu) > 0\) is contained in the paraboloid
\[(\Lambda+\rho | \Lambda+\rho) - (\mu+\rho | \mu+\rho) \geq 0\]where \((\, | \,)\) is the invariant inner product on the weight lattice and \(\rho\) is the Weyl vector. Moreover if \(m(\mu)>0\) then \(\mu\in\operatorname{supp}(V)\) differs from \(\Lambda\) by an element of the root lattice ([Ka1990], Propositions 11.3 and 11.4).
Let \(\delta\) be the nullroot, which is the lowest positive imaginary root. Then by [Ka1990], Proposition 11.3 or Corollary 11.9, for fixed \(\mu\) the function \(m(\mu - k\delta)\) is a monotone increasing function of \(k\). It is useful to take \(\mu\) to be such that this function is nonzero if and only if \(k \geq 0\). Therefore we make the following definition. If \(\mu\) is such that \(m(\mu) \neq 0\) but \(m(\mu + \delta) = 0\) then \(\mu\) is called maximal.
Since \(\delta\) is fixed under the action of the affine Weyl group, and since the weight multiplicities are Weyl group invariant, the function \(k \mapsto m(\mu - k \delta)\) is unchanged if \(\mu\) is replaced by an equivalent weight. Therefore in tabulating these functions, we may assume that \(\mu\) is dominant. There are only a finite number of dominant maximal weights.
Since every nonzero weight multiplicity appears in the string \(\mu - k\delta\) for one of the finite number of dominant maximal weights \(\mu\), it is important to be able to compute these. We may do this as follows.
EXAMPLES:
sage: Lambda = RootSystem(['A',3,1]).weight_lattice(extended=true).fundamental_weights() sage: IntegrableRepresentation(Lambda[1]+Lambda[2]+Lambda[3]).print_strings() 2*Lambda[0] + Lambda[2]: 4 31 161 665 2380 7658 22721 63120 166085 417295 1007601 2349655 Lambda[0] + 2*Lambda[1]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570 Lambda[0] + 2*Lambda[3]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570 Lambda[1] + Lambda[2] + Lambda[3]: 1 10 60 274 1056 3601 11199 32354 88009 227555 563390 1343178 3*Lambda[2] - delta: 3 21 107 450 1638 5367 16194 45687 121876 310056 757056 1783324 sage: Lambda = RootSystem(['D',4,1]).weight_lattice(extended=true).fundamental_weights() sage: IntegrableRepresentation(Lambda[0]+Lambda[1]).print_strings() # long time Lambda[0] + Lambda[1]: 1 10 62 293 1165 4097 13120 38997 109036 289575 735870 1799620 Lambda[3] + Lambda[4] - delta: 3 25 136 590 2205 7391 22780 65613 178660 463842 1155717 2777795
In this example, we construct the extended weight lattice of Cartan type \(A_3^{(1)}\), then define
Lambda
to be the fundamental weights \((\Lambda_i)_{i \in I}\). We find there are 5 maximal dominant weights in irreducible representation of highest weight \(\Lambda_1 + \Lambda_2 + \Lambda_3\), and we determine their strings.It was shown in [KacPeterson] that each string is the set of Fourier coefficients of a modular form.
Every weight \(\mu\) such that the weight multiplicity \(m(\mu)\) is nonzero has the form
\[\Lambda - n_0 \alpha_0 - n_1 \alpha_1 - \cdots,\]where the \(n_i\) are nonnegative integers. This is represented internally as a tuple \((n_0, n_1, n_2, \ldots)\). If you want an individual multiplicity you use the method
m()
and supply it with this tuple:sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights() sage: V = IntegrableRepresentation(2*Lambda[0]); V Integrable representation of ['C', 2, 1] with highest weight 2*Lambda[0] sage: V.m((3,5,3)) 18
The
IntegrableRepresentation
class has methodsto_weight()
andfrom_weight()
to convert between this internal representation and the weight lattice:sage: delta = V.weight_lattice().null_root() sage: V.to_weight((4,3,2)) -3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta sage: V.from_weight(-3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta) (4, 3, 2)
To get more values, use the depth parameter:
sage: L0 = RootSystem(["A",1,1]).weight_lattice(extended=true).fundamental_weight(0); L0 Lambda[0] sage: IntegrableRepresentation(4*L0).print_strings(depth=20) 4*Lambda[0]: 1 1 3 6 13 23 44 75 131 215 354 561 889 1368 2097 3153 4712 6936 10151 14677 2*Lambda[0] + 2*Lambda[1] - delta: 1 2 5 10 20 36 66 112 190 310 501 788 1230 1880 2850 4256 6303 9222 13396 19262 4*Lambda[1] - 2*delta: 1 2 6 11 23 41 75 126 215 347 561 878 1368 2082 3153 4690 6936 10121 14677 21055
An example in type \(C_2^{(1)}\):
sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights() sage: V = IntegrableRepresentation(2*Lambda[0]) sage: V.print_strings() # long time 2*Lambda[0]: 1 2 9 26 77 194 477 1084 2387 5010 10227 20198 Lambda[0] + Lambda[2] - delta: 1 5 18 55 149 372 872 1941 4141 8523 17005 33019 2*Lambda[1] - delta: 1 4 15 44 122 304 721 1612 3469 7176 14414 28124 2*Lambda[2] - 2*delta: 2 7 26 72 194 467 1084 2367 5010 10191 20198 38907
Examples for twisted affine types:
sage: Lambda = RootSystem(["A",2,2]).weight_lattice(extended=True).fundamental_weights() sage: IntegrableRepresentation(Lambda[0]).strings() {Lambda[0]: [1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56]} sage: Lambda = RootSystem(['G',2,1]).dual.weight_lattice(extended=true).fundamental_weights() sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[2]) sage: V.print_strings() # long time 6*Lambdacheck[0]: 4 28 100 320 944 2460 6064 14300 31968 69020 144676 293916 4*Lambdacheck[0] + Lambdacheck[2]: 4 22 84 276 800 2124 5288 12470 28116 61056 128304 261972 3*Lambdacheck[0] + Lambdacheck[1]: 2 16 58 192 588 1568 3952 9520 21644 47456 100906 207536 Lambdacheck[0] + Lambdacheck[1] + Lambdacheck[2]: 1 6 26 94 294 832 2184 5388 12634 28390 61488 128976 2*Lambdacheck[1] - deltacheck: 2 8 32 120 354 980 2576 6244 14498 32480 69776 145528 2*Lambdacheck[0] + 2*Lambdacheck[2]: 2 12 48 164 492 1344 3428 8256 18960 41844 89208 184512 3*Lambdacheck[2] - deltacheck: 4 16 60 208 592 1584 4032 9552 21728 47776 101068 207888 sage: Lambda = RootSystem(['A',6,2]).weight_lattice(extended=true).fundamental_weights() sage: V = IntegrableRepresentation(Lambda[0]+2*Lambda[1]) sage: V.print_strings() # long time 5*Lambda[0]: 3 42 378 2508 13707 64650 272211 1045470 3721815 12425064 39254163 118191378 3*Lambda[0] + Lambda[2]: 1 23 234 1690 9689 47313 204247 800029 2893198 9786257 31262198 95035357 Lambda[0] + 2*Lambda[1]: 1 14 154 1160 6920 34756 153523 612354 2248318 7702198 24875351 76341630 Lambda[0] + Lambda[1] + Lambda[3] - 2*delta: 6 87 751 4779 25060 113971 464842 1736620 6034717 19723537 61152367 181068152 Lambda[0] + 2*Lambda[2] - 2*delta: 3 54 499 3349 18166 84836 353092 1341250 4725259 15625727 48938396 146190544 Lambda[0] + 2*Lambda[3] - 4*delta: 15 195 1539 9186 45804 200073 789201 2866560 9723582 31120281 94724550 275919741