Heisenberg Algebras¶
AUTHORS:
- Travis Scrimshaw (2013-08-13): Initial version 
- class sage.algebras.lie_algebras.heisenberg.HeisenbergAlgebra(R, n)[source]¶
- Bases: - HeisenbergAlgebra_fd,- HeisenbergAlgebra_abstract,- LieAlgebraWithGenerators- A Heisenberg algebra defined using structure coefficients. - The \(n\)-th Heisenberg algebra (where \(n\) is a nonnegative integer or infinity) is the Lie algebra with basis \(\{p_i\}_{1 \leq i \leq n} \cup \{q_i\}_{1 \leq i \leq n} \cup \{z\}\) with the following relations: \[[p_i, q_j] = \delta_{ij} z, \quad [p_i, z] = [q_i, z] = [p_i, p_j] = [q_i, q_j] = 0.\]- This Lie algebra is also known as the Heisenberg algebra of rank \(n\). - Note - The relations \([p_i, q_j] = \delta_{ij} z\), \([p_i, z] = 0\), and \([q_i, z] = 0\) are known as canonical commutation relations. See Wikipedia article Canonical_commutation_relations. - Warning - The \(n\) in the above definition is called the “rank” of the Heisenberg algebra; it is not, however, a rank in any of the usual meanings that this word has in the theory of Lie algebras. - INPUT: - R– the base ring
- n– the rank of the Heisenberg algebra
 - REFERENCES: - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 2) - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(2)) 
- class sage.algebras.lie_algebras.heisenberg.HeisenbergAlgebra_abstract(I)[source]¶
- Bases: - IndexedGenerators- The common methods for the (non-matrix) Heisenberg algebras. - class Element[source]¶
- Bases: - LieAlgebraElement
 - bracket_on_basis(x, y)[source]¶
- Return the bracket of basis elements indexed by - xand- ywhere- x < y.- The basis of a Heisenberg algebra is ordered in such a way that the \(p_i\) come first, the \(q_i\) come next, and the \(z\) comes last. - EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 3) sage: p1 = ('p', 1) sage: q1 = ('q', 1) sage: H.bracket_on_basis(p1, q1) z - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(3)) >>> p1 = ('p', Integer(1)) >>> q1 = ('q', Integer(1)) >>> H.bracket_on_basis(p1, q1) z 
 - p(i)[source]¶
- The generator \(p_i\) of the Heisenberg algebra. - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, oo) sage: L.p(2) p2 - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, oo) >>> L.p(Integer(2)) p2 
 - q(i)[source]¶
- The generator \(q_i\) of the Heisenberg algebra. - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, oo) sage: L.q(2) q2 - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, oo) >>> L.q(Integer(2)) q2 
 - step()[source]¶
- Return the nilpotency step of - self.- EXAMPLES: - sage: h = lie_algebras.Heisenberg(ZZ, 10) sage: h.step() 2 sage: h = lie_algebras.Heisenberg(ZZ, oo) sage: h.step() 2 - >>> from sage.all import * >>> h = lie_algebras.Heisenberg(ZZ, Integer(10)) >>> h.step() 2 >>> h = lie_algebras.Heisenberg(ZZ, oo) >>> h.step() 2 
 
- class sage.algebras.lie_algebras.heisenberg.HeisenbergAlgebra_fd(n)[source]¶
- Bases: - object- Common methods for finite-dimensional Heisenberg algebras. - basis()[source]¶
- Return the basis of - self.- EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 1) sage: H.basis() Finite family {'p1': p1, 'q1': q1, 'z': z} - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(1)) >>> H.basis() Finite family {'p1': p1, 'q1': q1, 'z': z} 
 - gen(i)[source]¶
- Return the - i-th generator of- self.- EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 2) sage: H.gen(0) p1 sage: H.gen(3) q2 - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(2)) >>> H.gen(Integer(0)) p1 >>> H.gen(Integer(3)) q2 
 - gens()[source]¶
- Return the Lie algebra generators of - self.- EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 2) sage: H.gens() (p1, p2, q1, q2) sage: H = lie_algebras.Heisenberg(QQ, 0) sage: H.gens() (z,) - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(2)) >>> H.gens() (p1, p2, q1, q2) >>> H = lie_algebras.Heisenberg(QQ, Integer(0)) >>> H.gens() (z,) 
 - lie_algebra_generators()[source]¶
- Return the Lie algebra generators of - self.- EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 1) sage: H.lie_algebra_generators() Finite family {'p1': p1, 'q1': q1} sage: H = lie_algebras.Heisenberg(QQ, 0) sage: H.lie_algebra_generators() Finite family {'z': z} - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(1)) >>> H.lie_algebra_generators() Finite family {'p1': p1, 'q1': q1} >>> H = lie_algebras.Heisenberg(QQ, Integer(0)) >>> H.lie_algebra_generators() Finite family {'z': z} 
 - n()[source]¶
- Return the rank of the Heisenberg algebra - self.- This is the - nsuch that- selfis the \(n\)-th Heisenberg algebra. The dimension of this Heisenberg algebra is then \(2n + 1\).- EXAMPLES: - sage: H = lie_algebras.Heisenberg(QQ, 3) sage: H.n() 3 sage: H = lie_algebras.Heisenberg(QQ, 3, representation='matrix') sage: H.n() 3 - >>> from sage.all import * >>> H = lie_algebras.Heisenberg(QQ, Integer(3)) >>> H.n() 3 >>> H = lie_algebras.Heisenberg(QQ, Integer(3), representation='matrix') >>> H.n() 3 
 
- class sage.algebras.lie_algebras.heisenberg.HeisenbergAlgebra_matrix(R, n)[source]¶
- Bases: - HeisenbergAlgebra_fd,- LieAlgebraFromAssociative- A Heisenberg algebra represented using matrices. - The \(n\)-th Heisenberg algebra over \(R\) is a Lie algebra which is defined as the Lie algebra of the \((n+2) \times (n+2)\)-matrices: \[\begin{split}\begin{bmatrix} 0 & p^T & k \\ 0 & 0_n & q \\ 0 & 0 & 0 \end{bmatrix}\end{split}\]- where \(p, q \in R^n\) and \(0_n\) in the \(n \times n\) zero matrix. It has a basis consisting of \[\begin{split}\begin{aligned} p_i & = \begin{bmatrix} 0 & e_i^T & 0 \\ 0 & 0_n & 0 \\ 0 & 0 & 0 \end{bmatrix} \qquad \text{for } 1 \leq i \leq n , \\ q_i & = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0_n & e_i \\ 0 & 0 & 0 \end{bmatrix} \qquad \text{for } 1 \leq i \leq n , \\ z & = \begin{bmatrix} 0 & 0 & 1 \\ 0 & 0_n & 0 \\ 0 & 0 & 0 \end{bmatrix}, \end{aligned}\end{split}\]- where \(\{e_i\}\) is the standard basis of \(R^n\). In other words, it has the basis \((p_1, p_2, \ldots, p_n, q_1, q_2, \ldots, q_n, z)\), where \(p_i = E_{1, i+1}\), \(q_i = E_{i+1, n+2}\) and \(z = E_{1, n+2}\) are elementary matrices. - This Lie algebra is isomorphic to the \(n\)-th Heisenberg algebra constructed in - HeisenbergAlgebra; the bases correspond to each other.- INPUT: - R– the base ring
- n– the nonnegative integer \(n\)
 - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 1, representation='matrix') sage: p = L.p(1) sage: q = L.q(1) sage: z = L.bracket(p, q); z [0 0 1] [0 0 0] [0 0 0] sage: z == L.z() True sage: L.dimension() 3 sage: L = lie_algebras.Heisenberg(QQ, 2, representation='matrix') sage: sorted(dict(L.basis()).items()) [( [0 1 0 0] [0 0 0 0] [0 0 0 0] 'p1', [0 0 0 0] ), ( [0 0 1 0] [0 0 0 0] [0 0 0 0] 'p2', [0 0 0 0] ), ( [0 0 0 0] [0 0 0 1] [0 0 0 0] 'q1', [0 0 0 0] ), ( [0 0 0 0] [0 0 0 0] [0 0 0 1] 'q2', [0 0 0 0] ), ( [0 0 0 1] [0 0 0 0] [0 0 0 0] 'z', [0 0 0 0] )] sage: L = lie_algebras.Heisenberg(QQ, 0, representation='matrix') sage: sorted(dict(L.basis()).items()) [( [0 1] 'z', [0 0] )] sage: L.gens() ( [0 1] [0 0] ) sage: L.lie_algebra_generators() Finite family {'z': [0 1] [0 0]} - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(1), representation='matrix') >>> p = L.p(Integer(1)) >>> q = L.q(Integer(1)) >>> z = L.bracket(p, q); z [0 0 1] [0 0 0] [0 0 0] >>> z == L.z() True >>> L.dimension() 3 >>> L = lie_algebras.Heisenberg(QQ, Integer(2), representation='matrix') >>> sorted(dict(L.basis()).items()) [( [0 1 0 0] [0 0 0 0] [0 0 0 0] 'p1', [0 0 0 0] ), ( [0 0 1 0] [0 0 0 0] [0 0 0 0] 'p2', [0 0 0 0] ), ( [0 0 0 0] [0 0 0 1] [0 0 0 0] 'q1', [0 0 0 0] ), ( [0 0 0 0] [0 0 0 0] [0 0 0 1] 'q2', [0 0 0 0] ), ( [0 0 0 1] [0 0 0 0] [0 0 0 0] 'z', [0 0 0 0] )] >>> L = lie_algebras.Heisenberg(QQ, Integer(0), representation='matrix') >>> sorted(dict(L.basis()).items()) [( [0 1] 'z', [0 0] )] >>> L.gens() ( [0 1] [0 0] ) >>> L.lie_algebra_generators() Finite family {'z': [0 1] [0 0]} - class Element[source]¶
- Bases: - LieAlgebraMatrixWrapper,- Element- monomial_coefficients(copy=True)[source]¶
- Return a dictionary whose keys are indices of basis elements in the support of - selfand whose values are the corresponding coefficients.- INPUT: - copy– ignored
 - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 3, representation='matrix') sage: elt = L(Matrix(QQ, [[0, 1, 3, 0, 3], [0, 0, 0, 0, 0], [0, 0, 0, 0, -3], ....: [0, 0, 0, 0, 7], [0, 0, 0, 0, 0]])) sage: elt [ 0 1 3 0 3] [ 0 0 0 0 0] [ 0 0 0 0 -3] [ 0 0 0 0 7] [ 0 0 0 0 0] sage: sorted(elt.monomial_coefficients().items()) [('p1', 1), ('p2', 3), ('q2', -3), ('q3', 7), ('z', 3)] - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(3), representation='matrix') >>> elt = L(Matrix(QQ, [[Integer(0), Integer(1), Integer(3), Integer(0), Integer(3)], [Integer(0), Integer(0), Integer(0), Integer(0), Integer(0)], [Integer(0), Integer(0), Integer(0), Integer(0), -Integer(3)], ... [Integer(0), Integer(0), Integer(0), Integer(0), Integer(7)], [Integer(0), Integer(0), Integer(0), Integer(0), Integer(0)]])) >>> elt [ 0 1 3 0 3] [ 0 0 0 0 0] [ 0 0 0 0 -3] [ 0 0 0 0 7] [ 0 0 0 0 0] >>> sorted(elt.monomial_coefficients().items()) [('p1', 1), ('p2', 3), ('q2', -3), ('q3', 7), ('z', 3)] 
 
 - p(i)[source]¶
- Return the generator \(p_i\) of the Heisenberg algebra. - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 1, representation='matrix') sage: L.p(1) [0 1 0] [0 0 0] [0 0 0] - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(1), representation='matrix') >>> L.p(Integer(1)) [0 1 0] [0 0 0] [0 0 0] 
 - q(i)[source]¶
- Return the generator \(q_i\) of the Heisenberg algebra. - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 1, representation='matrix') sage: L.q(1) [0 0 0] [0 0 1] [0 0 0] - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(1), representation='matrix') >>> L.q(Integer(1)) [0 0 0] [0 0 1] [0 0 0] 
 - step()[source]¶
- Return the nilpotency step of - self.- EXAMPLES: - sage: h = lie_algebras.Heisenberg(ZZ, 2, representation='matrix') sage: h.step() 2 - >>> from sage.all import * >>> h = lie_algebras.Heisenberg(ZZ, Integer(2), representation='matrix') >>> h.step() 2 
 - z()[source]¶
- Return the basis element \(z\) of the Heisenberg algebra. - The element \(z\) spans the center of the Heisenberg algebra. - EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, 1, representation='matrix') sage: L.z() [0 0 1] [0 0 0] [0 0 0] - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, Integer(1), representation='matrix') >>> L.z() [0 0 1] [0 0 0] [0 0 0] 
 
- class sage.algebras.lie_algebras.heisenberg.InfiniteHeisenbergAlgebra(R)[source]¶
- Bases: - HeisenbergAlgebra_abstract,- LieAlgebraWithGenerators- The infinite Heisenberg algebra. - This is the Heisenberg algebra on an infinite number of generators. In other words, this is the Heisenberg algebra of rank \(\infty\). See - HeisenbergAlgebrafor more information.- basis()[source]¶
- Return the basis of - self.- EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, oo) sage: L.basis() Lazy family (basis map(i))_{i in Disjoint union of Family ({'z'}, The Cartesian product of (Positive integers, {'p', 'q'}))} sage: L.basis()['z'] z sage: L.basis()[(12, 'p')] p12 - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, oo) >>> L.basis() Lazy family (basis map(i))_{i in Disjoint union of Family ({'z'}, The Cartesian product of (Positive integers, {'p', 'q'}))} >>> L.basis()['z'] z >>> L.basis()[(Integer(12), 'p')] p12 
 - lie_algebra_generators()[source]¶
- Return the generators of - selfas a Lie algebra.- EXAMPLES: - sage: L = lie_algebras.Heisenberg(QQ, oo) sage: L.lie_algebra_generators() Lazy family (generator map(i))_{i in The Cartesian product of (Positive integers, {'p', 'q'})} - >>> from sage.all import * >>> L = lie_algebras.Heisenberg(QQ, oo) >>> L.lie_algebra_generators() Lazy family (generator map(i))_{i in The Cartesian product of (Positive integers, {'p', 'q'})}