Quantum Group Representations¶
AUTHORS:
Travis Scrimshaw (2018): initial version
- class sage.algebras.quantum_groups.representations.AdjointRepresentation(R, C, q)[source]¶
Bases:
CyclicRepresentation
An (generalized) adjoint representation of a quantum group.
We define an (generalized) adjoint representation \(V\) of a quantum group \(U_q\) to be a cyclic \(U_q\)-module with a weight space decomposition \(V = \bigoplus_{\mu} V_{\mu}\) such that \(\dim V_{\mu} \leq 1\) unless \(\mu = 0\). Moreover, we require that there exists a basis \(\{y_j | j \in J\}\) for \(V_0\) such that \(e_i y_j = 0\) for all \(j \neq i \in I\).
For a base ring \(R\), we construct an adjoint representation from its (combinatorial) crystal \(B\) by \(V = R \{v_b | b \in B\}\) with
\[\begin{split}\begin{aligned} e_i v_b & = \begin{cases} v_{e_i b} / [\varphi_i(e_i b)]_{q_i}, & \text{if } \operatorname{wt}(b) \neq 0, \\ v_{e_i b} + \sum_{j \neq i} [-A_{ij}]_{q_i} / [2]_{q_i} v_{y_j} & \text{otherwise} \end{cases} \\ f_i v_b & = \begin{cases} v_{f_i b} / [\varepsilon_i(f_i b)]_{q_i}, & \text{if } \operatorname{wt}(b) \neq 0, \\ v_{f_i b} + \sum_{j \neq i} [-A_{ij}]_{q_i} / [2]_{q_i} v_{y_j} & \text{otherwise} \end{cases} \\ K_i v_b & = q^{\langle h_i, \operatorname{wt}(b) \rangle} v_b, \end{aligned}\end{split}\]where \((A_{ij})_{i,j \in I}\) is the Cartan matrix, and we consider \(v_0 := 0\).
INPUT:
C
– the crystal corresponding to the representationR
– the base ringq
– (default: the generator ofR
) the parameter \(q\) of the quantum group
Warning
This assumes that \(q\) is generic.
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import AdjointRepresentation sage: R = ZZ['q'].fraction_field() sage: C = crystals.Tableaux(['D',4], shape=[1,1]) sage: V = AdjointRepresentation(R, C) sage: V V((1, 1, 0, 0)) sage: v = V.an_element(); v 2*B[[[1], [2]]] + 2*B[[[1], [3]]] + 3*B[[[2], [3]]] sage: v.e(2) 2*B[[[1], [2]]] sage: v.f(2) 2*B[[[1], [3]]] sage: v.f(4) 2*B[[[1], [-4]]] + 3*B[[[2], [-4]]] sage: v.K(3) 2*B[[[1], [2]]] + 2*q*B[[[1], [3]]] + 3*q*B[[[2], [3]]] sage: v.K(2,-2) 2/q^2*B[[[1], [2]]] + 2*q^2*B[[[1], [3]]] + 3*B[[[2], [3]]] sage: La = RootSystem(['F',4,1]).weight_space().fundamental_weights() sage: K = crystals.ProjectedLevelZeroLSPaths(La[4]) sage: A = AdjointRepresentation(R, K) sage: A V(-Lambda[0] + Lambda[4])
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import AdjointRepresentation >>> R = ZZ['q'].fraction_field() >>> C = crystals.Tableaux(['D',Integer(4)], shape=[Integer(1),Integer(1)]) >>> V = AdjointRepresentation(R, C) >>> V V((1, 1, 0, 0)) >>> v = V.an_element(); v 2*B[[[1], [2]]] + 2*B[[[1], [3]]] + 3*B[[[2], [3]]] >>> v.e(Integer(2)) 2*B[[[1], [2]]] >>> v.f(Integer(2)) 2*B[[[1], [3]]] >>> v.f(Integer(4)) 2*B[[[1], [-4]]] + 3*B[[[2], [-4]]] >>> v.K(Integer(3)) 2*B[[[1], [2]]] + 2*q*B[[[1], [3]]] + 3*q*B[[[2], [3]]] >>> v.K(Integer(2),-Integer(2)) 2/q^2*B[[[1], [2]]] + 2*q^2*B[[[1], [3]]] + 3*B[[[2], [3]]] >>> La = RootSystem(['F',Integer(4),Integer(1)]).weight_space().fundamental_weights() >>> K = crystals.ProjectedLevelZeroLSPaths(La[Integer(4)]) >>> A = AdjointRepresentation(R, K) >>> A V(-Lambda[0] + Lambda[4])
Sort the summands uniformly in Python 2 and Python 3:
sage: A.print_options(sorting_key=lambda x: str(x)) sage: v = A.an_element(); v 2*B[(-Lambda[0] + Lambda[3] - Lambda[4],)] + 2*B[(-Lambda[0] + Lambda[4],)] + 3*B[(Lambda[0] - Lambda[1] + Lambda[4],)] sage: v.e(0) 2*B[(Lambda[0] - Lambda[1] + Lambda[3] - Lambda[4],)] + 2*B[(Lambda[0] - Lambda[1] + Lambda[4],)] sage: v.f(0) 3*B[(-Lambda[0] + Lambda[4],)]
>>> from sage.all import * >>> A.print_options(sorting_key=lambda x: str(x)) >>> v = A.an_element(); v 2*B[(-Lambda[0] + Lambda[3] - Lambda[4],)] + 2*B[(-Lambda[0] + Lambda[4],)] + 3*B[(Lambda[0] - Lambda[1] + Lambda[4],)] >>> v.e(Integer(0)) 2*B[(Lambda[0] - Lambda[1] + Lambda[3] - Lambda[4],)] + 2*B[(Lambda[0] - Lambda[1] + Lambda[4],)] >>> v.f(Integer(0)) 3*B[(-Lambda[0] + Lambda[4],)]
REFERENCES:
- e_on_basis(i, b)[source]¶
Return the action of \(e_i\) on the basis element indexed by
b
.INPUT:
i
– an element of the index setb
– an element of basis keys
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import AdjointRepresentation sage: K = crystals.KirillovReshetikhin(['D',3,2], 1,1) sage: R = ZZ['q'].fraction_field() sage: V = AdjointRepresentation(R, K) sage: mg0 = K.module_generators[0]; mg0 [] sage: mg1 = K.module_generators[1]; mg1 [[1]] sage: V.e_on_basis(0, mg0) ((q^2+1)/q)*B[[[-1]]] sage: V.e_on_basis(0, mg1) B[[]] sage: V.e_on_basis(1, mg0) 0 sage: V.e_on_basis(1, mg1) 0 sage: V.e_on_basis(2, mg0) 0 sage: V.e_on_basis(2, mg1) 0 sage: K = crystals.KirillovReshetikhin(['D',4,3], 1,1) sage: V = AdjointRepresentation(R, K) sage: V.e_on_basis(0, K.module_generator()) B[[]] + (q/(q^2+1))*B[[[0]]]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import AdjointRepresentation >>> K = crystals.KirillovReshetikhin(['D',Integer(3),Integer(2)], Integer(1),Integer(1)) >>> R = ZZ['q'].fraction_field() >>> V = AdjointRepresentation(R, K) >>> mg0 = K.module_generators[Integer(0)]; mg0 [] >>> mg1 = K.module_generators[Integer(1)]; mg1 [[1]] >>> V.e_on_basis(Integer(0), mg0) ((q^2+1)/q)*B[[[-1]]] >>> V.e_on_basis(Integer(0), mg1) B[[]] >>> V.e_on_basis(Integer(1), mg0) 0 >>> V.e_on_basis(Integer(1), mg1) 0 >>> V.e_on_basis(Integer(2), mg0) 0 >>> V.e_on_basis(Integer(2), mg1) 0 >>> K = crystals.KirillovReshetikhin(['D',Integer(4),Integer(3)], Integer(1),Integer(1)) >>> V = AdjointRepresentation(R, K) >>> V.e_on_basis(Integer(0), K.module_generator()) B[[]] + (q/(q^2+1))*B[[[0]]]
- f_on_basis(i, b)[source]¶
Return the action of \(f_i\) on the basis element indexed by
b
.INPUT:
i
– an element of the index setb
– an element of basis keys
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import AdjointRepresentation sage: K = crystals.KirillovReshetikhin(['D',3,2], 1,1) sage: R = ZZ['q'].fraction_field() sage: V = AdjointRepresentation(R, K) sage: mg0 = K.module_generators[0]; mg0 [] sage: mg1 = K.module_generators[1]; mg1 [[1]] sage: V.f_on_basis(0, mg0) ((q^2+1)/q)*B[[[1]]] sage: V.f_on_basis(0, mg1) 0 sage: V.f_on_basis(1, mg0) 0 sage: V.f_on_basis(1, mg1) B[[[2]]] sage: V.f_on_basis(2, mg0) 0 sage: V.f_on_basis(2, mg1) 0 sage: K = crystals.KirillovReshetikhin(['D',4,3], 1,1) sage: V = AdjointRepresentation(R, K) sage: lw = K.module_generator().to_lowest_weight([1,2])[0] sage: V.f_on_basis(0, lw) B[[]] + (q/(q^2+1))*B[[[0]]]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import AdjointRepresentation >>> K = crystals.KirillovReshetikhin(['D',Integer(3),Integer(2)], Integer(1),Integer(1)) >>> R = ZZ['q'].fraction_field() >>> V = AdjointRepresentation(R, K) >>> mg0 = K.module_generators[Integer(0)]; mg0 [] >>> mg1 = K.module_generators[Integer(1)]; mg1 [[1]] >>> V.f_on_basis(Integer(0), mg0) ((q^2+1)/q)*B[[[1]]] >>> V.f_on_basis(Integer(0), mg1) 0 >>> V.f_on_basis(Integer(1), mg0) 0 >>> V.f_on_basis(Integer(1), mg1) B[[[2]]] >>> V.f_on_basis(Integer(2), mg0) 0 >>> V.f_on_basis(Integer(2), mg1) 0 >>> K = crystals.KirillovReshetikhin(['D',Integer(4),Integer(3)], Integer(1),Integer(1)) >>> V = AdjointRepresentation(R, K) >>> lw = K.module_generator().to_lowest_weight([Integer(1),Integer(2)])[Integer(0)] >>> V.f_on_basis(Integer(0), lw) B[[]] + (q/(q^2+1))*B[[[0]]]
- class sage.algebras.quantum_groups.representations.CyclicRepresentation(R, C, q)[source]¶
Bases:
QuantumGroupRepresentation
A cyclic quantum group representation that is indexed by either a highest weight crystal or Kirillov-Reshetikhin crystal.
The crystal
C
must either allowC.module_generator()
, otherwise it is assumed to be generated byC.module_generators[0]
.This is meant as an abstract base class for
AdjointRepresentation
andMinusculeRepresentation
.- module_generator()[source]¶
Return the module generator of
self
.EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import AdjointRepresentation sage: C = crystals.Tableaux(['G',2], shape=[1,1]) sage: R = ZZ['q'].fraction_field() sage: V = AdjointRepresentation(R, C) sage: V.module_generator() B[[[1], [2]]] sage: K = crystals.KirillovReshetikhin(['D',4,2], 1,1) sage: A = AdjointRepresentation(R, K) sage: A.module_generator() B[[[1]]]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import AdjointRepresentation >>> C = crystals.Tableaux(['G',Integer(2)], shape=[Integer(1),Integer(1)]) >>> R = ZZ['q'].fraction_field() >>> V = AdjointRepresentation(R, C) >>> V.module_generator() B[[[1], [2]]] >>> K = crystals.KirillovReshetikhin(['D',Integer(4),Integer(2)], Integer(1),Integer(1)) >>> A = AdjointRepresentation(R, K) >>> A.module_generator() B[[[1]]]
- class sage.algebras.quantum_groups.representations.MinusculeRepresentation(R, C, q)[source]¶
Bases:
CyclicRepresentation
A minuscule representation of a quantum group.
A quantum group representation \(V\) is minuscule if it is cyclic, there is a weight space decomposition \(V = \bigoplus_{\mu} V_{\mu}\) with \(\dim V_{\mu} \leq 1\), and \(e_i^2 V = 0\) and \(f_i^2 V = 0\).
For a base ring \(R\), we construct a minuscule representation from its (combinatorial) crystal \(B\) by \(V = R \{v_b | b \in B\}\) with \(e_i v_b = v_{e_i b}\), \(f_i v_b = v_{f_i b}\), and \(K_i v_b = q^{\langle h_i, \operatorname{wt}(b) \rangle} v_b\), where we consider \(v_0 := 0\).
INPUT:
C
– the crystal corresponding to the representationR
– the base ringq
– (default: the generator ofR
) the parameter \(q\) of the quantum group
Warning
This assumes that \(q\) is generic.
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import MinusculeRepresentation sage: R = ZZ['q'].fraction_field() sage: C = crystals.Tableaux(['B',3], shape=[1/2,1/2,1/2]) sage: V = MinusculeRepresentation(R, C) sage: V V((1/2, 1/2, 1/2)) sage: v = V.an_element(); v 2*B[[+++, []]] + 2*B[[++-, []]] + 3*B[[+-+, []]] sage: v.e(3) 2*B[[+++, []]] sage: v.f(1) 3*B[[-++, []]] sage: v.f(3) 2*B[[++-, []]] + 3*B[[+--, []]] sage: v.K(2) 2*B[[+++, []]] + 2*q^2*B[[++-, []]] + 3/q^2*B[[+-+, []]] sage: v.K(3, -2) 2/q^2*B[[+++, []]] + 2*q^2*B[[++-, []]] + 3/q^2*B[[+-+, []]] sage: K = crystals.KirillovReshetikhin(['D',4,2], 3,1) sage: A = MinusculeRepresentation(R, K) sage: A V(-Lambda[0] + Lambda[3]) sage: v = A.an_element(); v 2*B[[+++, []]] + 2*B[[++-, []]] + 3*B[[+-+, []]] sage: v.f(0) 0 sage: v.e(0) 2*B[[-++, []]] + 2*B[[-+-, []]] + 3*B[[--+, []]]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import MinusculeRepresentation >>> R = ZZ['q'].fraction_field() >>> C = crystals.Tableaux(['B',Integer(3)], shape=[Integer(1)/Integer(2),Integer(1)/Integer(2),Integer(1)/Integer(2)]) >>> V = MinusculeRepresentation(R, C) >>> V V((1/2, 1/2, 1/2)) >>> v = V.an_element(); v 2*B[[+++, []]] + 2*B[[++-, []]] + 3*B[[+-+, []]] >>> v.e(Integer(3)) 2*B[[+++, []]] >>> v.f(Integer(1)) 3*B[[-++, []]] >>> v.f(Integer(3)) 2*B[[++-, []]] + 3*B[[+--, []]] >>> v.K(Integer(2)) 2*B[[+++, []]] + 2*q^2*B[[++-, []]] + 3/q^2*B[[+-+, []]] >>> v.K(Integer(3), -Integer(2)) 2/q^2*B[[+++, []]] + 2*q^2*B[[++-, []]] + 3/q^2*B[[+-+, []]] >>> K = crystals.KirillovReshetikhin(['D',Integer(4),Integer(2)], Integer(3),Integer(1)) >>> A = MinusculeRepresentation(R, K) >>> A V(-Lambda[0] + Lambda[3]) >>> v = A.an_element(); v 2*B[[+++, []]] + 2*B[[++-, []]] + 3*B[[+-+, []]] >>> v.f(Integer(0)) 0 >>> v.e(Integer(0)) 2*B[[-++, []]] + 2*B[[-+-, []]] + 3*B[[--+, []]]
REFERENCES:
- e_on_basis(i, b)[source]¶
Return the action of \(e_i\) on the basis element indexed by
b
.INPUT:
i
– an element of the index setb
– an element of basis keys
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import MinusculeRepresentation sage: C = crystals.Tableaux(['A',3], shape=[1,1]) sage: R = ZZ['q'].fraction_field() sage: V = MinusculeRepresentation(R, C) sage: lw = C.lowest_weight_vectors()[0] sage: V.e_on_basis(1, lw) 0 sage: V.e_on_basis(2, lw) B[[[2], [4]]] sage: V.e_on_basis(3, lw) 0 sage: hw = C.highest_weight_vectors()[0] sage: all(V.e_on_basis(i, hw) == V.zero() for i in V.index_set()) True
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import MinusculeRepresentation >>> C = crystals.Tableaux(['A',Integer(3)], shape=[Integer(1),Integer(1)]) >>> R = ZZ['q'].fraction_field() >>> V = MinusculeRepresentation(R, C) >>> lw = C.lowest_weight_vectors()[Integer(0)] >>> V.e_on_basis(Integer(1), lw) 0 >>> V.e_on_basis(Integer(2), lw) B[[[2], [4]]] >>> V.e_on_basis(Integer(3), lw) 0 >>> hw = C.highest_weight_vectors()[Integer(0)] >>> all(V.e_on_basis(i, hw) == V.zero() for i in V.index_set()) True
- f_on_basis(i, b)[source]¶
Return the action of \(f_i\) on the basis element indexed by
b
.INPUT:
i
– an element of the index setb
– an element of basis keys
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import MinusculeRepresentation sage: C = crystals.Tableaux(['A',3], shape=[1,1]) sage: R = ZZ['q'].fraction_field() sage: V = MinusculeRepresentation(R, C) sage: hw = C.highest_weight_vectors()[0] sage: V.f_on_basis(1, hw) 0 sage: V.f_on_basis(2, hw) B[[[1], [3]]] sage: V.f_on_basis(3, hw) 0 sage: lw = C.lowest_weight_vectors()[0] sage: all(V.f_on_basis(i, lw) == V.zero() for i in V.index_set()) True
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import MinusculeRepresentation >>> C = crystals.Tableaux(['A',Integer(3)], shape=[Integer(1),Integer(1)]) >>> R = ZZ['q'].fraction_field() >>> V = MinusculeRepresentation(R, C) >>> hw = C.highest_weight_vectors()[Integer(0)] >>> V.f_on_basis(Integer(1), hw) 0 >>> V.f_on_basis(Integer(2), hw) B[[[1], [3]]] >>> V.f_on_basis(Integer(3), hw) 0 >>> lw = C.lowest_weight_vectors()[Integer(0)] >>> all(V.f_on_basis(i, lw) == V.zero() for i in V.index_set()) True
- class sage.algebras.quantum_groups.representations.QuantumGroupRepresentation(R, C, q)[source]¶
Bases:
CombinatorialFreeModule
A representation of a quantum group whose basis is indexed by the corresponding (combinatorial) crystal.
INPUT:
C
– the crystal corresponding to the representationR
– the base ringq
– (default: the generator ofR
) the parameter \(q\) of the quantum group
- K_on_basis(i, b, power=1)[source]¶
Return the action of \(K_i\) on the basis element indexed by
b
to the powerpower
.INPUT:
i
– an element of the index setb
– an element of basis keyspower
– (default: 1) the power of \(K_i\)
EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import MinusculeRepresentation sage: C = crystals.Tableaux(['A',3], shape=[1,1]) sage: R = ZZ['q'].fraction_field() sage: V = MinusculeRepresentation(R, C) sage: [[V.K_on_basis(i, b) for i in V.index_set()] for b in C] [[B[[[1], [2]]], q*B[[[1], [2]]], B[[[1], [2]]]], [q*B[[[1], [3]]], 1/q*B[[[1], [3]]], q*B[[[1], [3]]]], [1/q*B[[[2], [3]]], B[[[2], [3]]], q*B[[[2], [3]]]], [q*B[[[1], [4]]], B[[[1], [4]]], 1/q*B[[[1], [4]]]], [1/q*B[[[2], [4]]], q*B[[[2], [4]]], 1/q*B[[[2], [4]]]], [B[[[3], [4]]], 1/q*B[[[3], [4]]], B[[[3], [4]]]]] sage: [[V.K_on_basis(i, b, -1) for i in V.index_set()] for b in C] [[B[[[1], [2]]], 1/q*B[[[1], [2]]], B[[[1], [2]]]], [1/q*B[[[1], [3]]], q*B[[[1], [3]]], 1/q*B[[[1], [3]]]], [q*B[[[2], [3]]], B[[[2], [3]]], 1/q*B[[[2], [3]]]], [1/q*B[[[1], [4]]], B[[[1], [4]]], q*B[[[1], [4]]]], [q*B[[[2], [4]]], 1/q*B[[[2], [4]]], q*B[[[2], [4]]]], [B[[[3], [4]]], q*B[[[3], [4]]], B[[[3], [4]]]]]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import MinusculeRepresentation >>> C = crystals.Tableaux(['A',Integer(3)], shape=[Integer(1),Integer(1)]) >>> R = ZZ['q'].fraction_field() >>> V = MinusculeRepresentation(R, C) >>> [[V.K_on_basis(i, b) for i in V.index_set()] for b in C] [[B[[[1], [2]]], q*B[[[1], [2]]], B[[[1], [2]]]], [q*B[[[1], [3]]], 1/q*B[[[1], [3]]], q*B[[[1], [3]]]], [1/q*B[[[2], [3]]], B[[[2], [3]]], q*B[[[2], [3]]]], [q*B[[[1], [4]]], B[[[1], [4]]], 1/q*B[[[1], [4]]]], [1/q*B[[[2], [4]]], q*B[[[2], [4]]], 1/q*B[[[2], [4]]]], [B[[[3], [4]]], 1/q*B[[[3], [4]]], B[[[3], [4]]]]] >>> [[V.K_on_basis(i, b, -Integer(1)) for i in V.index_set()] for b in C] [[B[[[1], [2]]], 1/q*B[[[1], [2]]], B[[[1], [2]]]], [1/q*B[[[1], [3]]], q*B[[[1], [3]]], 1/q*B[[[1], [3]]]], [q*B[[[2], [3]]], B[[[2], [3]]], 1/q*B[[[2], [3]]]], [1/q*B[[[1], [4]]], B[[[1], [4]]], q*B[[[1], [4]]]], [q*B[[[2], [4]]], 1/q*B[[[2], [4]]], q*B[[[2], [4]]]], [B[[[3], [4]]], q*B[[[3], [4]]], B[[[3], [4]]]]]
- cartan_type()[source]¶
Return the Cartan type of
self
.EXAMPLES:
sage: from sage.algebras.quantum_groups.representations import AdjointRepresentation sage: C = crystals.Tableaux(['C',3], shape=[1]) sage: R = ZZ['q'].fraction_field() sage: V = AdjointRepresentation(R, C) sage: V.cartan_type() ['C', 3]
>>> from sage.all import * >>> from sage.algebras.quantum_groups.representations import AdjointRepresentation >>> C = crystals.Tableaux(['C',Integer(3)], shape=[Integer(1)]) >>> R = ZZ['q'].fraction_field() >>> V = AdjointRepresentation(R, C) >>> V.cartan_type() ['C', 3]