BGG Resolutions¶
AUTHORS:
Travis Scrimshaw (2024-01-07): Initial version
- class sage.algebras.lie_algebras.bgg_resolution.BGGResolution(L)[source]¶
Bases:
UniqueRepresentation
,ChainComplex_class
The BGG resolution of a simple module.
We realize the BGG resolution as a chain complex, where the \((-1)\)-th factor corresponds to the finite dimensional simple module \(L_{\lambda}\) and the \(i\)-th factor (\(i \geq 0\)) corresponds to
\[\begin{split}M_i := \bigoplus_{\substack{w \in W \\ \ell(w) = i}} M_{w\lambda}.\end{split}\]Since the morphisms can be defined in terms of the image of the highest weight vectors, we only encode this information as a (finite) chain complex. We do not include the final natural projection map \(p: M_{\lambda} \to L_{\lambda}\) since the highest weight vector of weight \(\lambda\) only occurs in \(M_{\lambda}\) and \(L_{\lambda}\).
INPUT:
L
– a simple module
EXAMPLES:
sage: g = LieAlgebra(QQ, cartan_type=['A', 2]) sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights() sage: L = g.simple_module(La[1] + 4*La[2]) sage: res = L.bgg_resolution() sage: ascii_art(res) [ 1 -1] [1] [1 1] [-1 1] [1] 0 <-- C_0 <------ C_1 <-------- C_2 <---- C_3 <-- 0 sage: g = LieAlgebra(QQ, cartan_type=['D', 4]) sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights() sage: L = g.simple_module(La[1] + La[2] + 3*La[3]) sage: res = L.bgg_resolution() sage: w0 = WeylGroup(g.cartan_type(), prefix='s').long_element() sage: all(res.differential(i) * res.differential(i+1) == 0 ....: for i in range(w0.length())) True
>>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['A', Integer(2)]) >>> La = g.cartan_type().root_system().weight_lattice().fundamental_weights() >>> L = g.simple_module(La[Integer(1)] + Integer(4)*La[Integer(2)]) >>> res = L.bgg_resolution() >>> ascii_art(res) [ 1 -1] [1] [1 1] [-1 1] [1] 0 <-- C_0 <------ C_1 <-------- C_2 <---- C_3 <-- 0 >>> g = LieAlgebra(QQ, cartan_type=['D', Integer(4)]) >>> La = g.cartan_type().root_system().weight_lattice().fundamental_weights() >>> L = g.simple_module(La[Integer(1)] + La[Integer(2)] + Integer(3)*La[Integer(3)]) >>> res = L.bgg_resolution() >>> w0 = WeylGroup(g.cartan_type(), prefix='s').long_element() >>> all(res.differential(i) * res.differential(i+Integer(1)) == Integer(0) ... for i in range(w0.length())) True
- module_order(i)[source]¶
Return a tuple of Weyl group elements of length
i
determining the ordering of the direct sum defining the differential matrix.EXAMPLES:
sage: g = LieAlgebra(QQ, cartan_type=['G', 2]) sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights() sage: L = g.simple_module(La[1]) sage: res = L.bgg_resolution() sage: [res.module_order(i) for i in range(7)] [[1], [s2, s1], [s2*s1, s1*s2], [s1*s2*s1, s2*s1*s2], [s1*s2*s1*s2, s2*s1*s2*s1], [s1*s2*s1*s2*s1, s2*s1*s2*s1*s2], [s2*s1*s2*s1*s2*s1]]
>>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['G', Integer(2)]) >>> La = g.cartan_type().root_system().weight_lattice().fundamental_weights() >>> L = g.simple_module(La[Integer(1)]) >>> res = L.bgg_resolution() >>> [res.module_order(i) for i in range(Integer(7))] [[1], [s2, s1], [s2*s1, s1*s2], [s1*s2*s1, s2*s1*s2], [s1*s2*s1*s2, s2*s1*s2*s1], [s1*s2*s1*s2*s1, s2*s1*s2*s1*s2], [s2*s1*s2*s1*s2*s1]]
- simple_module()[source]¶
Return the simple module \(L_{\lambda}\) defining
self
.EXAMPLES:
sage: g = LieAlgebra(QQ, cartan_type=['C', 2]) sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights() sage: L = g.simple_module(La[1] + La[2]) sage: res = L.bgg_resolution() sage: res.simple_module() is L True
>>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['C', Integer(2)]) >>> La = g.cartan_type().root_system().weight_lattice().fundamental_weights() >>> L = g.simple_module(La[Integer(1)] + La[Integer(2)]) >>> res = L.bgg_resolution() >>> res.simple_module() is L True
- sage.algebras.lie_algebras.bgg_resolution.build_differentials()[source]¶
Construct the differentials for the BGG resolution corresponding to the Weyl group \(W\).
ALGORITHM:
We use the fact that (parabolic) Bruhat order is built locally from squares, all values defining the differential are \(+1\) or \(-1\), and the product over the two different paths must sum to \(0\). This is outlined in Ch. 6 of [Humphreys08].
This only depends on the Coxeter group \(W\). There is no stabilizer for any dominant integral weight \(\lambda\) undert the dot action (i.e., the stabilizer of \(\lambda + \rho\) is empty).
EXAMPLES:
sage: from sage.algebras.lie_algebras.bgg_resolution import build_differentials sage: W = WeylGroup(['B', 2], prefix='s') sage: D, O = build_differentials(W) sage: D {0: [], 1: [-1 1], 2: [1 1] [1 1], 3: [ 1 -1] [-1 1], 4: [1] [1], 5: []} sage: O {0: [1], 1: [s2, s1], 2: [s2*s1, s1*s2], 3: [s2*s1*s2, s1*s2*s1], 4: [s2*s1*s2*s1]}
>>> from sage.all import * >>> from sage.algebras.lie_algebras.bgg_resolution import build_differentials >>> W = WeylGroup(['B', Integer(2)], prefix='s') >>> D, O = build_differentials(W) >>> D {0: [], 1: [-1 1], 2: [1 1] [1 1], 3: [ 1 -1] [-1 1], 4: [1] [1], 5: []} >>> O {0: [1], 1: [s2, s1], 2: [s2*s1, s1*s2], 3: [s2*s1*s2, s1*s2*s1], 4: [s2*s1*s2*s1]}