Quantum Groups Using GAP’s QuaGroup Package¶
AUTHORS:
- Travis Scrimshaw (03-2017): initial version
The documentation for GAP’s QuaGroup package, originally authored by Willem Adriaan de Graaf, can be found at https://www.gap-system.org/Packages/quagroup.html.
-
class
sage.algebras.quantum_groups.quantum_group_gap.
CrystalGraphVertex
(V, s)¶ Bases:
sage.structure.sage_object.SageObject
Helper class used as the vertices of a crystal graph.
-
sage.algebras.quantum_groups.quantum_group_gap.
HighestWeightModule
¶ A highest weight module of a quantum group.
-
class
sage.algebras.quantum_groups.quantum_group_gap.
HighestWeightSubmodule
(ambient, gen, weight)¶ Bases:
sage.algebras.quantum_groups.quantum_group_gap.QuantumGroupModule
Initialize
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages sage: TestSuite(S).run() # optional - gap_packages
-
Element
¶ alias of
QuaGroupRepresentationElement
-
ambient
()¶ Return the ambient module of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages sage: S.ambient() is T # optional - gap_packages True
-
an_element
()¶ Return the highest weight vector of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[1] # optional - gap_packages sage: u = S.highest_weight_vector(); u # optional - gap_packages (1)*e.1 sage: u.lift() # optional - gap_packages -q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)
-
crystal_graph
(use_ambient=True)¶ Return the crystal graph of
self
.INPUT:
use_ambient
– boolean (default:True
); ifTrue
, the vertices are given in terms of the ambient module
EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[1] # optional - gap_packages sage: G = S.crystal_graph() # optional - gap_packages sage: sorted(G.vertices(), key=str) # optional - gap_packages [<-q^-1*(1*v0<x>F[a1+a2]*v0) + 1*(F[a1+a2]*v0<x>1*v0)>, <-q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)>, <-q^-1*(F[a1]*v0<x>F[a1+a2]*v0) + 1*(F[a1+a2]*v0<x>F[a1]*v0)>] sage: sorted(S.crystal_graph(False).vertices(), key=str) # optional - gap_packages [<(1)*e.1>, <(1)*e.2>, <(1)*e.3>]
-
highest_weight_vector
()¶ Return the highest weight vector of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[1] # optional - gap_packages sage: u = S.highest_weight_vector(); u # optional - gap_packages (1)*e.1 sage: u.lift() # optional - gap_packages -q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)
-
lift
()¶ The lift morphism from
self
to the ambient space.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: S = T.highest_weight_decomposition()[0] # optional - gap_packages sage: S.lift # optional - gap_packages Generic morphism: From: Highest weight submodule with weight 2*Lambda[1] generated by 1*(1*v0<x>1*v0) To: Highest weight module ... # Highest weight module ... sage: x = sum(S.basis()) # optional - gap_packages sage: x.lift() # optional - gap_packages 1*(1*v0<x>1*v0) + 1*(1*v0<x>F[a1]*v0) + 1*(1*v0<x>F[a1+a2]*v0) + q^-1*(F[a1]*v0<x>1*v0) + 1*(F[a1]*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>F[a1+a2]*v0) + q^-1*(F[a1+a2]*v0<x>1*v0) + q^-1*(F[a1+a2]*v0<x>F[a1]*v0) + 1*(F[a1+a2]*v0<x>F[a1+a2]*v0)
-
retract
(elt)¶ The retract map from the ambient space to
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: all(S.retract(S.lift(x)) == x # optional - gap_packages ....: for S in T.highest_weight_decomposition() ....: for x in S.basis()) True
-
-
sage.algebras.quantum_groups.quantum_group_gap.
LowerHalfQuantumGroup
¶ The lower half of the quantum group.
-
class
sage.algebras.quantum_groups.quantum_group_gap.
QuaGroupModuleElement
(parent, libgap_elt)¶ Bases:
sage.structure.element.Element
Base class for elements created using QuaGroup.
-
e_tilde
(i)¶ Return the action of the Kashiwara operator \(\widetilde{e}_i\) on
self
.INPUT:
i
– an element of the index set or a list to perform a string of operators
EXAMPLES:
sage: Q = QuantumGroup(['B',2]) # optional - gap_packages sage: x = Q.one().f_tilde([1,2,1,1,2,2]) # optional - gap_packages sage: x.e_tilde([2,2,1,2]) # optional - gap_packages F[a1]^(2)
-
f_tilde
(i)¶ Return the action of the Kashiwara operator \(\widetilde{f}_i\) on
self
.INPUT:
i
– an element of the index set or a list to perform a string of operators
EXAMPLES:
sage: Q = QuantumGroup(['B',2]) # optional - gap_packages sage: Q.one().f_tilde(1) # optional - gap_packages F[a1] sage: Q.one().f_tilde(2) # optional - gap_packages F[a2] sage: Q.one().f_tilde([1,2,1,1,2]) # optional - gap_packages F[a1]*F[a1+a2]^(2)
-
gap
()¶ Return the gap representation of
self
.EXAMPLES:
sage: Q = QuantumGroup(['B',3]) # optional - gap_packages sage: x = Q.an_element() # optional - gap_packages sage: x.gap() # optional - gap_packages 1+(q)*F1+E1+(q^4-1-q^-4+q^-8)*[ K1 ; 2 ]+K1+(-q^-2+q^-6)*K1[ K1 ; 1 ]
-
-
class
sage.algebras.quantum_groups.quantum_group_gap.
QuaGroupRepresentationElement
(parent, libgap_elt)¶ Bases:
sage.algebras.quantum_groups.quantum_group_gap.QuaGroupModuleElement
Element of a quantum group representation.
-
monomial_coefficients
(copy=True)¶ Return the dictionary of
self
whose keys are the basis indices and the values are coefficients.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages sage: v = V.highest_weight_vector() # optional - gap_packages sage: F1, F2 = Q.F_simple() # optional - gap_packages sage: q = Q.q() # optional - gap_packages sage: x = v + F1*v + q*F2*F1*v; x # optional - gap_packages 1*v0 + F[a1]*v0 + (q^2)*F[a1]*F[a2]*v0 + (q)*F[a1+a2]*v0 sage: sorted(x.monomial_coefficients().items(), key=str) # optional - gap_packages [(0, 1), (1, 1), (3, q^2), (4, q)]
-
-
sage.algebras.quantum_groups.quantum_group_gap.
QuantumGroup
¶ A Drinfel’d-Jimbo quantum group (implemented using the optional GAP package
QuaGroup
).EXAMPLES:
We check the quantum Serre relations. We first we import the \(q\)-binomial using the \(q\)-int for quantum groups:
sage: from sage.algebras.quantum_groups.q_numbers import q_binomial
We verify the Serre relations for type \(A_2\):
sage: Q = algebras.QuantumGroup(['A',2]) # optional - gap_packages sage: F1,F12,F2 = Q.F() # optional - gap_packages sage: q = Q.q() # optional - gap_packages sage: F1^2*F2 - q_binomial(2,1,q) * F1*F2*F1 + F2*F1^2 # optional - gap_packages 0
We verify the Serre relations for type \(B_2\):
sage: Q = algebras.QuantumGroup(['B',2]) # optional - gap_packages sage: F1, F12, F122, F2 = Q.F() # optional - gap_packages sage: F1^2*F2 - q_binomial(2,1,q^2) * F1*F2*F1 + F2*F1^2 # optional - gap_packages 0 sage: (F2^3*F1 - q_binomial(3,1,q) * F2^2*F1*F2 # optional - gap_packages ....: + q_binomial(3,2,q) * F2*F1*F2^2 - F1*F2^3) 0
REFERENCES:
-
class
sage.algebras.quantum_groups.quantum_group_gap.
QuantumGroupHomset
(X, Y, category=None, check=True, base=None)¶ Bases:
sage.categories.homset.HomsetWithBase
The homset whose domain is a quantum group.
-
sage.algebras.quantum_groups.quantum_group_gap.
QuantumGroupModule
¶ Abstract base class for quantum group representations.
-
class
sage.algebras.quantum_groups.quantum_group_gap.
QuantumGroupMorphism
(parent, im_gens, check=True)¶ Bases:
sage.categories.morphism.Morphism
A morphism whose domain is a quantum group.
-
im_gens
()¶ Return the image of the generators under
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',1]) # optional - gap_packages sage: F, K, Ki, E = Q.gens() # optional - gap_packages sage: phi = Q.hom([E, Ki, K, F]) # optional - gap_packages sage: phi.im_gens() # optional - gap_packages (E[a1], (-q + q^-1)*[ K1 ; 1 ] + K1, K1, F[a1])
-
-
class
sage.algebras.quantum_groups.quantum_group_gap.
TensorProductOfHighestWeightModules
(*modules, **options)¶ Bases:
sage.algebras.quantum_groups.quantum_group_gap.QuantumGroupModule
Initialize
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,1]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: TestSuite(T).run() # optional - gap_packages
-
Element
¶ alias of
QuaGroupRepresentationElement
-
highest_weight_decomposition
()¶ Return the highest weight decomposition of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: T.highest_weight_decomposition() # optional - gap_packages [Highest weight submodule with weight 2*Lambda[1] generated by 1*(1*v0<x>1*v0), Highest weight submodule with weight Lambda[2] generated by -q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)]
-
highest_weight_vectors
()¶ Return the highest weight vectors of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: T.highest_weight_vectors() # optional - gap_packages [1*(1*v0<x>1*v0), -q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)]
-
some_elements
()¶ Return the highest weight vectors of
self
.EXAMPLES:
sage: Q = QuantumGroup(['A',2]) # optional - gap_packages sage: V = Q.highest_weight_module([1,0]) # optional - gap_packages sage: T = tensor([V,V]) # optional - gap_packages sage: T.highest_weight_vectors() # optional - gap_packages [1*(1*v0<x>1*v0), -q^-1*(1*v0<x>F[a1]*v0) + 1*(F[a1]*v0<x>1*v0)]
-
-
sage.algebras.quantum_groups.quantum_group_gap.
projection_lower_half
(Q)¶ Return the projection onto the lower half of the quantum group.
EXAMPLES:
sage: from sage.algebras.quantum_groups.quantum_group_gap import projection_lower_half sage: Q = QuantumGroup(['G',2]) # optional - gap_packages sage: phi = projection_lower_half(Q); phi # optional - gap_packages Quantum group homomorphism endomorphism of Quantum Group of type ['G', 2] with q=q Defn: F[a1] |--> F[a1] F[a2] |--> F[a2] K1 |--> 0 K2 |--> 0 (-q + q^-1)*[ K1 ; 1 ] + K1 |--> 0 (-q^3 + q^-3)*[ K2 ; 1 ] + K2 |--> 0 E[a1] |--> 0 E[a2] |--> 0 sage: all(phi(f) == f for f in Q.F()) # optional - gap_packages True sage: all(phi(e) == Q.zero() for e in Q.E()) # optional - gap_packages True sage: all(phi(K) == Q.zero() for K in Q.K()) # optional - gap_packages True