Center of a Universal Enveloping Algebra¶
AUTHORS:
- Travis Scrimshaw (2024-01-02): Initial version 
- class sage.algebras.lie_algebras.center_uea.CenterIndices(center, indices=None)[source]¶
- Bases: - IndexedFreeAbelianMonoid- Set of basis indices for the center of a universal enveloping algebra. - This also constructs the lift from the center to the universal enveloping algebra as part of computing the generators and basis elements. The basic algorithm is to construct the centralizer of each filtered component in increasing order (as each is a finite dimensional vector space). For more precise details, see [Motsak2006]. - degree(m)[source]¶
- Return the degre of - min- self.- EXAMPLES: - sage: g = LieAlgebra(QQ, cartan_type=['E', 6]) sage: U = g.pbw_basis() sage: Z = U.center() sage: I = Z.indices() sage: [I.degree(g) for g in I.monoid_generators()] [2, 5, 6, 8, 9, 12] sage: [(elt, I.degree(elt)) for elt in I.some_elements()] [(1, 0), (Z[0], 2), (Z[0]^2, 4), (Z[1], 5), (Z[0]^3*Z[1], 11), (Z[0]^10, 20), (Z[0]*Z[1]^4, 22)] - >>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['E', Integer(6)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> I = Z.indices() >>> [I.degree(g) for g in I.monoid_generators()] [2, 5, 6, 8, 9, 12] >>> [(elt, I.degree(elt)) for elt in I.some_elements()] [(1, 0), (Z[0], 2), (Z[0]^2, 4), (Z[1], 5), (Z[0]^3*Z[1], 11), (Z[0]^10, 20), (Z[0]*Z[1]^4, 22)] 
 - lift_on_basis(m)[source]¶
- Return the image of the basis element indexed by - min the universal enveloping algebra.- EXAMPLES: - sage: g = lie_algebras.Heisenberg(QQ, 3) sage: U = g.pbw_basis() sage: Z = U.center() sage: I = Z.indices() sage: z0 = I.monoid_generators()[0] sage: I._lift_map {0: {1: 1}} sage: I.lift_on_basis(z0) PBW['z'] sage: I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}} sage: I.lift_on_basis(z0^3) PBW['z']^3 sage: I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}} sage: I._construct_next_degree() sage: I._construct_next_degree() sage: I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}, 2: {PBW['z']^2: PBW['z']^2}, 3: {PBW['z']^3: PBW['z']^3}} sage: I.lift_on_basis(z0^3) PBW['z']^3 - >>> from sage.all import * >>> g = lie_algebras.Heisenberg(QQ, Integer(3)) >>> U = g.pbw_basis() >>> Z = U.center() >>> I = Z.indices() >>> z0 = I.monoid_generators()[Integer(0)] >>> I._lift_map {0: {1: 1}} >>> I.lift_on_basis(z0) PBW['z'] >>> I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}} >>> I.lift_on_basis(z0**Integer(3)) PBW['z']^3 >>> I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}} >>> I._construct_next_degree() >>> I._construct_next_degree() >>> I._lift_map {0: {1: 1}, 1: {PBW['z']: PBW['z']}, 2: {PBW['z']^2: PBW['z']^2}, 3: {PBW['z']^3: PBW['z']^3}} >>> I.lift_on_basis(z0**Integer(3)) PBW['z']^3 
 - some_elements()[source]¶
- Return some elements of - self.- EXAMPLES: - sage: g = lie_algebras.pwitt(GF(3), 3) sage: U = g.pbw_basis() sage: Z = U.center() sage: I = Z.indices() sage: I.some_elements() [1, Z[0], Z[1], Z[2], Z[0]*Z[1]*Z[2], Z[0]*Z[2]^4, Z[0]^4*Z[1]^3] - >>> from sage.all import * >>> g = lie_algebras.pwitt(GF(Integer(3)), Integer(3)) >>> U = g.pbw_basis() >>> Z = U.center() >>> I = Z.indices() >>> I.some_elements() [1, Z[0], Z[1], Z[2], Z[0]*Z[1]*Z[2], Z[0]*Z[2]^4, Z[0]^4*Z[1]^3] 
 
- class sage.algebras.lie_algebras.center_uea.CenterUEA(g, UEA)[source]¶
- Bases: - CombinatorialFreeModule- The center of a universal enveloping algebra. - Todo - Generalize this to be the centralizer of any set of the UEA. - Todo - For characteristic \(p > 0\), implement the \(p\)-center of a simple Lie algebra. See, e.g., - EXAMPLES: - sage: g = LieAlgebra(QQ, cartan_type=['A', 2]) sage: U = g.pbw_basis() sage: Z = U.center() sage: B = Z.basis() sage: it = iter(B) sage: center_elts = [next(it) for _ in range(6)]; center_elts [1, Z[0], Z[1], Z[0]^2, Z[0]*Z[1], Z[1]^2] sage: elts = [U(v) for v in center_elts] # long time sage: all(v * g == g * v for g in U.algebra_generators() for v in elts) # long time True - >>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['A', Integer(2)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> B = Z.basis() >>> it = iter(B) >>> center_elts = [next(it) for _ in range(Integer(6))]; center_elts [1, Z[0], Z[1], Z[0]^2, Z[0]*Z[1], Z[1]^2] >>> elts = [U(v) for v in center_elts] # long time >>> all(v * g == g * v for g in U.algebra_generators() for v in elts) # long time True - The Heisenberg Lie algebra \(H_4\) over a finite field; note the basis elements \(b^p \in Z(U(H_4))\) for the basis elements \(b \in H_4\): - sage: g = lie_algebras.Heisenberg(GF(3), 4) sage: U = g.pbw_basis() sage: Z = U.center() sage: B = Z.basis() sage: it = iter(B) sage: center_elts = [next(it) for _ in range(12)]; center_elts [1, Z[0], Z[0]^2, Z[0]^3, Z[1], Z[2], Z[3], Z[4], Z[5], Z[6], Z[7], Z[8]] sage: elts = [U(v) for v in center_elts]; elts [1, PBW['z'], PBW['z']^2, PBW['z']^3, PBW['p1']^3, PBW['p2']^3, PBW['p3']^3, PBW['p4']^3, PBW['q1']^3, PBW['q2']^3, PBW['q3']^3, PBW['q4']^3] sage: all(v * g == g * v for g in U.algebra_generators() for v in elts) True - >>> from sage.all import * >>> g = lie_algebras.Heisenberg(GF(Integer(3)), Integer(4)) >>> U = g.pbw_basis() >>> Z = U.center() >>> B = Z.basis() >>> it = iter(B) >>> center_elts = [next(it) for _ in range(Integer(12))]; center_elts [1, Z[0], Z[0]^2, Z[0]^3, Z[1], Z[2], Z[3], Z[4], Z[5], Z[6], Z[7], Z[8]] >>> elts = [U(v) for v in center_elts]; elts [1, PBW['z'], PBW['z']^2, PBW['z']^3, PBW['p1']^3, PBW['p2']^3, PBW['p3']^3, PBW['p4']^3, PBW['q1']^3, PBW['q2']^3, PBW['q3']^3, PBW['q4']^3] >>> all(v * g == g * v for g in U.algebra_generators() for v in elts) True - An example with a free 4-step nilpotent Lie algebras on 2 generators: - sage: L = LieAlgebra(QQ, 2, step=4); L Free Nilpotent Lie algebra on 8 generators (X_1, X_2, X_12, X_112, X_122, X_1112, X_1122, X_1222) over Rational Field sage: U = L.pbw_basis() sage: Z = U.center() sage: it = iter(Z.basis()) sage: center_elts = [next(it) for _ in range(10)]; center_elts [1, Z[0], Z[1], Z[2], Z[0]^2, Z[0]*Z[1], Z[0]*Z[2], Z[1]^2, Z[1]*Z[2], Z[2]^2] sage: elts = [U(v) for v in center_elts]; elts [1, PBW[(1, 1, 1, 2)], PBW[(1, 1, 2, 2)], PBW[(1, 2, 2, 2)], PBW[(1, 1, 1, 2)]^2, PBW[(1, 1, 1, 2)]*PBW[(1, 1, 2, 2)], PBW[(1, 1, 1, 2)]*PBW[(1, 2, 2, 2)], PBW[(1, 1, 2, 2)]^2, PBW[(1, 1, 2, 2)]*PBW[(1, 2, 2, 2)], PBW[(1, 2, 2, 2)]^2] sage: all(v * g == g * v for g in U.algebra_generators() for v in elts) True - >>> from sage.all import * >>> L = LieAlgebra(QQ, Integer(2), step=Integer(4)); L Free Nilpotent Lie algebra on 8 generators (X_1, X_2, X_12, X_112, X_122, X_1112, X_1122, X_1222) over Rational Field >>> U = L.pbw_basis() >>> Z = U.center() >>> it = iter(Z.basis()) >>> center_elts = [next(it) for _ in range(Integer(10))]; center_elts [1, Z[0], Z[1], Z[2], Z[0]^2, Z[0]*Z[1], Z[0]*Z[2], Z[1]^2, Z[1]*Z[2], Z[2]^2] >>> elts = [U(v) for v in center_elts]; elts [1, PBW[(1, 1, 1, 2)], PBW[(1, 1, 2, 2)], PBW[(1, 2, 2, 2)], PBW[(1, 1, 1, 2)]^2, PBW[(1, 1, 1, 2)]*PBW[(1, 1, 2, 2)], PBW[(1, 1, 1, 2)]*PBW[(1, 2, 2, 2)], PBW[(1, 1, 2, 2)]^2, PBW[(1, 1, 2, 2)]*PBW[(1, 2, 2, 2)], PBW[(1, 2, 2, 2)]^2] >>> all(v * g == g * v for g in U.algebra_generators() for v in elts) True - Using the Engel Lie algebra: - sage: L.<X,Y,Z> = LieAlgebra(QQ, {('X','Y'): {'Z': 1}}, nilpotent=True) sage: U = L.pbw_basis() sage: Z = U.center() sage: it = iter(Z.basis()) sage: center_elts = [next(it) for _ in range(6)]; center_elts [1, Z[0], Z[0]^2, Z[0]^3, Z[0]^4, Z[0]^5] sage: elts = [U(v) for v in center_elts]; elts [1, PBW['Z'], PBW['Z']^2, PBW['Z']^3, PBW['Z']^4, PBW['Z']^5] sage: all(v * g == g * v for g in U.algebra_generators() for v in elts) True - >>> from sage.all import * >>> L = LieAlgebra(QQ, {('X','Y'): {'Z': Integer(1)}}, nilpotent=True, names=('X', 'Y', 'Z',)); (X, Y, Z,) = L._first_ngens(3) >>> U = L.pbw_basis() >>> Z = U.center() >>> it = iter(Z.basis()) >>> center_elts = [next(it) for _ in range(Integer(6))]; center_elts [1, Z[0], Z[0]^2, Z[0]^3, Z[0]^4, Z[0]^5] >>> elts = [U(v) for v in center_elts]; elts [1, PBW['Z'], PBW['Z']^2, PBW['Z']^3, PBW['Z']^4, PBW['Z']^5] >>> all(v * g == g * v for g in U.algebra_generators() for v in elts) True - algebra_generators()[source]¶
- Return the algebra generators of - self.- Warning - When the universal enveloping algebra is not known to have a finite generating set, the generating set will be the basis of - selfin a degree (weakly) increasing order indexed by \(\ZZ_{\geq 0}\). In particular, the \(0\)-th generator will be the multiplicative identity \(1\).- EXAMPLES: - sage: g = lie_algebras.Heisenberg(QQ, 3) sage: U = g.pbw_basis() sage: Z = U.center() sage: Z.algebra_generators()[0] 1 sage: Z.algebra_generators()[1] Z[0] sage: g = LieAlgebra(QQ, cartan_type=['G', 2]) sage: U = g.pbw_basis() sage: Z = U.center() sage: Z.algebra_generators() Finite family {0: Z[0], 1: Z[1]} - >>> from sage.all import * >>> g = lie_algebras.Heisenberg(QQ, Integer(3)) >>> U = g.pbw_basis() >>> Z = U.center() >>> Z.algebra_generators()[Integer(0)] 1 >>> Z.algebra_generators()[Integer(1)] Z[0] >>> g = LieAlgebra(QQ, cartan_type=['G', Integer(2)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> Z.algebra_generators() Finite family {0: Z[0], 1: Z[1]} 
 - ambient()[source]¶
- Return the ambient algebra of - self.- EXAMPLES: - sage: g = LieAlgebra(GF(5), cartan_type=['A', 2]) sage: U = g.pbw_basis() sage: Z = U.center() sage: Z.ambient() is U True - >>> from sage.all import * >>> g = LieAlgebra(GF(Integer(5)), cartan_type=['A', Integer(2)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> Z.ambient() is U True 
 - degree_on_basis(m)[source]¶
- Return the degree of the basis element indexed by - min- self.- EXAMPLES: - sage: g = LieAlgebra(QQ, cartan_type=['E', 6]) sage: U = g.pbw_basis() sage: Z = U.center() sage: I = Z.indices() sage: it = iter(I) sage: supports = [next(it) for _ in range(10)]; supports [1, Z[0], Z[0]^2, Z[1], Z[2], Z[0]^3, Z[0]*Z[1], Z[3], Z[0]*Z[2], Z[0]^4] sage: [Z.degree_on_basis(m) for m in supports] [0, 2, 4, 5, 6, 6, 7, 8, 8, 8] - >>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['E', Integer(6)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> I = Z.indices() >>> it = iter(I) >>> supports = [next(it) for _ in range(Integer(10))]; supports [1, Z[0], Z[0]^2, Z[1], Z[2], Z[0]^3, Z[0]*Z[1], Z[3], Z[0]*Z[2], Z[0]^4] >>> [Z.degree_on_basis(m) for m in supports] [0, 2, 4, 5, 6, 6, 7, 8, 8, 8] 
 - lift()[source]¶
- The lift map from - selfto the universal enveloping algebra.- EXAMPLES: - sage: g = LieAlgebra(QQ, cartan_type=['A', 1]) sage: U = g.pbw_basis() sage: Z = U.center() sage: gens = Z.algebra_generators() sage: U(gens[0]^2 + gens[0]) 4*PBW[alpha[1]]^2*PBW[-alpha[1]]^2 + 2*PBW[alpha[1]]*PBW[alphacheck[1]]^2*PBW[-alpha[1]] + 1/4*PBW[alphacheck[1]]^4 - PBW[alphacheck[1]]^3 - 2*PBW[alpha[1]]*PBW[-alpha[1]] + 1/2*PBW[alphacheck[1]]^2 + PBW[alphacheck[1]] sage: U(-1/4*gens[0]) == U.casimir_element() True - >>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['A', Integer(1)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> gens = Z.algebra_generators() >>> U(gens[Integer(0)]**Integer(2) + gens[Integer(0)]) 4*PBW[alpha[1]]^2*PBW[-alpha[1]]^2 + 2*PBW[alpha[1]]*PBW[alphacheck[1]]^2*PBW[-alpha[1]] + 1/4*PBW[alphacheck[1]]^4 - PBW[alphacheck[1]]^3 - 2*PBW[alpha[1]]*PBW[-alpha[1]] + 1/2*PBW[alphacheck[1]]^2 + PBW[alphacheck[1]] >>> U(-Integer(1)/Integer(4)*gens[Integer(0)]) == U.casimir_element() True 
 - one_basis()[source]¶
- Return the basis index of \(1\) in - self.- EXAMPLES: - sage: g = LieAlgebra(QQ['t'].fraction_field(), cartan_type=['B', 5]) sage: U = g.pbw_basis() sage: Z = U.center() sage: ob = Z.one_basis(); ob 1 sage: ob.parent() is Z.indices() True - >>> from sage.all import * >>> g = LieAlgebra(QQ['t'].fraction_field(), cartan_type=['B', Integer(5)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> ob = Z.one_basis(); ob 1 >>> ob.parent() is Z.indices() True 
 - product_on_basis(left, right)[source]¶
- Return the product of basis elements indexed by - leftand- right.- EXAMPLES: - sage: g = LieAlgebra(QQ, cartan_type=['E', 6]) sage: U = g.pbw_basis() sage: Z = U.center() sage: mg = Z.indices().monoid_generators() sage: Z.product_on_basis(mg[1]*mg[2], mg[0]*mg[1]^3*mg[2]*mg[3]^3) Z[0]*Z[1]^4*Z[2]^2*Z[3]^3 - >>> from sage.all import * >>> g = LieAlgebra(QQ, cartan_type=['E', Integer(6)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> mg = Z.indices().monoid_generators() >>> Z.product_on_basis(mg[Integer(1)]*mg[Integer(2)], mg[Integer(0)]*mg[Integer(1)]**Integer(3)*mg[Integer(2)]*mg[Integer(3)]**Integer(3)) Z[0]*Z[1]^4*Z[2]^2*Z[3]^3 
 - retract(elt)[source]¶
- The retraction map to - selffrom the universal enveloping algebra.- Todo - Implement a version of this that checks if the leading term of - eltis divisible by a product of all of the currently known generators in order to avoid constructing the full centralizer of larger degrees than needed.- EXAMPLES: - sage: g = lie_algebras.Heisenberg(QQ, 3) sage: U = g.pbw_basis() sage: Z = U.center() sage: z0 = Z.algebra_generators()[1]; z0 Z[0] sage: Z.retract(U(z0^2) - U(3*z0)) Z[0]^2 - 3*Z[0] sage: g = LieAlgebra(QQ, cartan_type=['A', 2]) sage: U = g.pbw_basis() sage: Z = U.center() sage: z0, z1 = Z.algebra_generators() sage: Z.retract(U(z0*z0) - U(z1)) # long time Z[0]^2 - Z[1] sage: zc = Z.retract(U.casimir_element()); zc -1/3*Z[0] sage: U(zc) == U.casimir_element() True - >>> from sage.all import * >>> g = lie_algebras.Heisenberg(QQ, Integer(3)) >>> U = g.pbw_basis() >>> Z = U.center() >>> z0 = Z.algebra_generators()[Integer(1)]; z0 Z[0] >>> Z.retract(U(z0**Integer(2)) - U(Integer(3)*z0)) Z[0]^2 - 3*Z[0] >>> g = LieAlgebra(QQ, cartan_type=['A', Integer(2)]) >>> U = g.pbw_basis() >>> Z = U.center() >>> z0, z1 = Z.algebra_generators() >>> Z.retract(U(z0*z0) - U(z1)) # long time Z[0]^2 - Z[1] >>> zc = Z.retract(U.casimir_element()); zc -1/3*Z[0] >>> U(zc) == U.casimir_element() True 
 
- class sage.algebras.lie_algebras.center_uea.SimpleLieCenterIndices(center)[source]¶
- Bases: - CenterIndices- Set of basis indices for the center of a universal enveloping algebra of a simple Lie algebra. - For more information, see - CenterIndices.