Heisenberg Group#
AUTHORS:
Hilder Vitor Lima Pereira (2017-08): initial version
- class sage.groups.matrix_gps.heisenberg.HeisenbergGroup(n=1, R=0)[source]#
Bases:
UniqueRepresentation
,FinitelyGeneratedMatrixGroup_gap
The Heisenberg group of degree \(n\).
Let \(R\) be a ring, and let \(n\) be a positive integer. The Heisenberg group of degree \(n\) over \(R\) is a multiplicative group whose elements are matrices with the following form:
\[\begin{split}\begin{pmatrix} 1 & x^T & z \\ 0 & I_n & y \\ 0 & 0 & 1 \end{pmatrix},\end{split}\]where \(x\) and \(y\) are column vectors in \(R^n\), \(z\) is a scalar in \(R\), and \(I_n\) is the identity matrix of size \(n\).
INPUT:
n
– the degree of the Heisenberg groupR
– (default: \(\ZZ\)) the ring \(R\) or a positive integer as a shorthand for the ring \(\ZZ/R\ZZ\)
EXAMPLES:
sage: H = groups.matrix.Heisenberg(); H Heisenberg group of degree 1 over Integer Ring sage: H.gens() ( [1 1 0] [1 0 0] [1 0 1] [0 1 0] [0 1 1] [0 1 0] [0 0 1], [0 0 1], [0 0 1] ) sage: X, Y, Z = H.gens() sage: Z * X * Y**-1 [ 1 1 0] [ 0 1 -1] [ 0 0 1] sage: X * Y * X**-1 * Y**-1 == Z True sage: H = groups.matrix.Heisenberg(R=5); H Heisenberg group of degree 1 over Ring of integers modulo 5 sage: H = groups.matrix.Heisenberg(n=3, R=13); H Heisenberg group of degree 3 over Ring of integers modulo 13
>>> from sage.all import * >>> H = groups.matrix.Heisenberg(); H Heisenberg group of degree 1 over Integer Ring >>> H.gens() ( [1 1 0] [1 0 0] [1 0 1] [0 1 0] [0 1 1] [0 1 0] [0 0 1], [0 0 1], [0 0 1] ) >>> X, Y, Z = H.gens() >>> Z * X * Y**-Integer(1) [ 1 1 0] [ 0 1 -1] [ 0 0 1] >>> X * Y * X**-Integer(1) * Y**-Integer(1) == Z True >>> H = groups.matrix.Heisenberg(R=Integer(5)); H Heisenberg group of degree 1 over Ring of integers modulo 5 >>> H = groups.matrix.Heisenberg(n=Integer(3), R=Integer(13)); H Heisenberg group of degree 3 over Ring of integers modulo 13
REFERENCES:
- cardinality()[source]#
Return the order of
self
.EXAMPLES:
sage: H = groups.matrix.Heisenberg() sage: H.order() +Infinity sage: H = groups.matrix.Heisenberg(n=4) sage: H.order() +Infinity sage: H = groups.matrix.Heisenberg(R=3) sage: H.order() 27 sage: H = groups.matrix.Heisenberg(n=2, R=3) sage: H.order() 243 sage: H = groups.matrix.Heisenberg(n=2, R=GF(4)) sage: H.order() 1024
>>> from sage.all import * >>> H = groups.matrix.Heisenberg() >>> H.order() +Infinity >>> H = groups.matrix.Heisenberg(n=Integer(4)) >>> H.order() +Infinity >>> H = groups.matrix.Heisenberg(R=Integer(3)) >>> H.order() 27 >>> H = groups.matrix.Heisenberg(n=Integer(2), R=Integer(3)) >>> H.order() 243 >>> H = groups.matrix.Heisenberg(n=Integer(2), R=GF(Integer(4))) >>> H.order() 1024
- center()[source]#
Return the center of
self
.This is the subgroup generated by the \(z\), the matrix with a \(1\) in the upper right corner and along the diagonal.
EXAMPLES:
sage: H = groups.matrix.Heisenberg(2) sage: H.center() Subgroup with 1 generators ( [1 0 0 1] [0 1 0 0] [0 0 1 0] [0 0 0 1] ) of Heisenberg group of degree 2 over Integer Ring sage: H = groups.matrix.Heisenberg(3, 4) sage: H.center() Subgroup with 1 generators ( [1 0 0 0 1] [0 1 0 0 0] [0 0 1 0 0] [0 0 0 1 0] [0 0 0 0 1] ) of Heisenberg group of degree 3 over Ring of integers modulo 4
>>> from sage.all import * >>> H = groups.matrix.Heisenberg(Integer(2)) >>> H.center() Subgroup with 1 generators ( [1 0 0 1] [0 1 0 0] [0 0 1 0] [0 0 0 1] ) of Heisenberg group of degree 2 over Integer Ring >>> H = groups.matrix.Heisenberg(Integer(3), Integer(4)) >>> H.center() Subgroup with 1 generators ( [1 0 0 0 1] [0 1 0 0 0] [0 0 1 0 0] [0 0 0 1 0] [0 0 0 0 1] ) of Heisenberg group of degree 3 over Ring of integers modulo 4
- order()[source]#
Return the order of
self
.EXAMPLES:
sage: H = groups.matrix.Heisenberg() sage: H.order() +Infinity sage: H = groups.matrix.Heisenberg(n=4) sage: H.order() +Infinity sage: H = groups.matrix.Heisenberg(R=3) sage: H.order() 27 sage: H = groups.matrix.Heisenberg(n=2, R=3) sage: H.order() 243 sage: H = groups.matrix.Heisenberg(n=2, R=GF(4)) sage: H.order() 1024
>>> from sage.all import * >>> H = groups.matrix.Heisenberg() >>> H.order() +Infinity >>> H = groups.matrix.Heisenberg(n=Integer(4)) >>> H.order() +Infinity >>> H = groups.matrix.Heisenberg(R=Integer(3)) >>> H.order() 27 >>> H = groups.matrix.Heisenberg(n=Integer(2), R=Integer(3)) >>> H.order() 243 >>> H = groups.matrix.Heisenberg(n=Integer(2), R=GF(Integer(4))) >>> H.order() 1024