Unitary Groups \(GU(n,q)\) and \(SU(n,q)\)¶
These are \(n \times n\) unitary matrices with entries in \(GF(q^2)\).
EXAMPLES:
sage: # needs sage.rings.finite_rings
sage: G = SU(3,5)
sage: G.order()                                                                     # needs sage.libs.gap
378000
sage: G
Special Unitary Group of degree 3 over Finite Field in a of size 5^2
sage: G.gens()                                                                      # needs sage.libs.gap
(
[      a       0       0]  [4*a   4   1]
[      0 2*a + 2       0]  [  4   4   0]
[      0       0     3*a], [  1   0   0]
)
sage: G.base_ring()
Finite Field in a of size 5^2
>>> from sage.all import *
>>> # needs sage.rings.finite_rings
>>> G = SU(Integer(3),Integer(5))
>>> G.order()                                                                     # needs sage.libs.gap
378000
>>> G
Special Unitary Group of degree 3 over Finite Field in a of size 5^2
>>> G.gens()                                                                      # needs sage.libs.gap
(
[      a       0       0]  [4*a   4   1]
[      0 2*a + 2       0]  [  4   4   0]
[      0       0     3*a], [  1   0   0]
)
>>> G.base_ring()
Finite Field in a of size 5^2
AUTHORS:
- David Joyner (2006-03): initial version, modified from special_linear (by W. Stein) 
- David Joyner (2006-05): minor additions (examples, _latex_, __str__, gens) 
- William Stein (2006-12): rewrite 
- Volker Braun (2013-1) port to new Parent, libGAP, extreme refactoring. 
- Sebastian Oehms (2018-8) add - _UG,- invariant_form(), option for user defined invariant bilinear form, and bug-fix in- _check_matrix(see Issue #26028)
- sage.groups.matrix_gps.unitary.GU(n, R, var='a', invariant_form=None)[source]¶
- Return the general unitary group. - The general unitary group \(GU( d, R )\) consists of all \(d \times d\) matrices that preserve a nondegenerate sesquilinear form over the ring \(R\). - Note - For a finite field, the matrices that preserve a sesquilinear form over \(\GF{q}\) live over \(\GF{q^2}\). So - GU(n,q)for a prime power \(q\) constructs the matrix group over the base ring- GF(q^2).- Note - This group is also available via - groups.matrix.GU().- INPUT: - n– positive integer
- R– ring or an integer; if an integer is specified, the corresponding finite field is used
- var– (default:- 'a') variable used to represent generator of the finite field, if needed
- invariant_form– (optional) instances being accepted by the matrix-constructor which define a \(n \times n\) square matrix over \(R\) describing the hermitian form to be kept invariant by the unitary group; the form is checked to be non-degenerate and hermitian but not to be positive definite
 - OUTPUT: the general unitary group - EXAMPLES: - sage: G = GU(3, 7); G # needs sage.rings.finite_rings General Unitary Group of degree 3 over Finite Field in a of size 7^2 sage: G.gens() # needs sage.libs.gap sage.rings.finite_rings ( [ a 0 0] [6*a 6 1] [ 0 1 0] [ 6 6 0] [ 0 0 5*a], [ 1 0 0] ) sage: GU(2, QQ) General Unitary Group of degree 2 over Rational Field sage: G = GU(3, 5, var='beta') # needs sage.rings.finite_rings sage: G.base_ring() # needs sage.rings.finite_rings Finite Field in beta of size 5^2 sage: G.gens() # needs sage.libs.gap sage.rings.finite_rings ( [ beta 0 0] [4*beta 4 1] [ 0 1 0] [ 4 4 0] [ 0 0 3*beta], [ 1 0 0] ) - >>> from sage.all import * >>> G = GU(Integer(3), Integer(7)); G # needs sage.rings.finite_rings General Unitary Group of degree 3 over Finite Field in a of size 7^2 >>> G.gens() # needs sage.libs.gap sage.rings.finite_rings ( [ a 0 0] [6*a 6 1] [ 0 1 0] [ 6 6 0] [ 0 0 5*a], [ 1 0 0] ) >>> GU(Integer(2), QQ) General Unitary Group of degree 2 over Rational Field >>> G = GU(Integer(3), Integer(5), var='beta') # needs sage.rings.finite_rings >>> G.base_ring() # needs sage.rings.finite_rings Finite Field in beta of size 5^2 >>> G.gens() # needs sage.libs.gap sage.rings.finite_rings ( [ beta 0 0] [4*beta 4 1] [ 0 1 0] [ 4 4 0] [ 0 0 3*beta], [ 1 0 0] ) - Using the - invariant_formoption:- sage: # needs sage.libs.gap sage.rings.number_field sage: UCF = UniversalCyclotomicField(); e5 = UCF.gen(5) sage: m = matrix(UCF, 3, 3, [[1,e5,0], [e5.conjugate(),2,0], [0,0,1]]) sage: G = GU(3, UCF) sage: Gm = GU(3, UCF, invariant_form=m) sage: G == Gm False sage: G.invariant_form() [1 0 0] [0 1 0] [0 0 1] sage: Gm.invariant_form() [ 1 E(5) 0] [E(5)^4 2 0] [ 0 0 1] sage: pm = Permutation((1,2,3)).to_matrix() sage: g = G(pm); g in G; g # needs sage.combinat True [0 0 1] [1 0 0] [0 1 0] sage: Gm(pm) # needs sage.combinat Traceback (most recent call last): ... TypeError: matrix must be unitary with respect to the hermitian form [ 1 E(5) 0] [E(5)^4 2 0] [ 0 0 1] sage: GU(3, 3, invariant_form=[[1,0,0], [0,2,0], [0,0,1]]) # needs sage.libs.pari Traceback (most recent call last): ... NotImplementedError: invariant_form for finite groups is fixed by GAP sage: GU(2, QQ, invariant_form=[[1,0], [2,0]]) Traceback (most recent call last): ... ValueError: invariant_form must be non-degenerate - >>> from sage.all import * >>> # needs sage.libs.gap sage.rings.number_field >>> UCF = UniversalCyclotomicField(); e5 = UCF.gen(Integer(5)) >>> m = matrix(UCF, Integer(3), Integer(3), [[Integer(1),e5,Integer(0)], [e5.conjugate(),Integer(2),Integer(0)], [Integer(0),Integer(0),Integer(1)]]) >>> G = GU(Integer(3), UCF) >>> Gm = GU(Integer(3), UCF, invariant_form=m) >>> G == Gm False >>> G.invariant_form() [1 0 0] [0 1 0] [0 0 1] >>> Gm.invariant_form() [ 1 E(5) 0] [E(5)^4 2 0] [ 0 0 1] >>> pm = Permutation((Integer(1),Integer(2),Integer(3))).to_matrix() >>> g = G(pm); g in G; g # needs sage.combinat True [0 0 1] [1 0 0] [0 1 0] >>> Gm(pm) # needs sage.combinat Traceback (most recent call last): ... TypeError: matrix must be unitary with respect to the hermitian form [ 1 E(5) 0] [E(5)^4 2 0] [ 0 0 1] >>> GU(Integer(3), Integer(3), invariant_form=[[Integer(1),Integer(0),Integer(0)], [Integer(0),Integer(2),Integer(0)], [Integer(0),Integer(0),Integer(1)]]) # needs sage.libs.pari Traceback (most recent call last): ... NotImplementedError: invariant_form for finite groups is fixed by GAP >>> GU(Integer(2), QQ, invariant_form=[[Integer(1),Integer(0)], [Integer(2),Integer(0)]]) Traceback (most recent call last): ... ValueError: invariant_form must be non-degenerate 
- sage.groups.matrix_gps.unitary.SU(n, R, var='a', invariant_form=None)[source]¶
- The special unitary group \(SU( d, R )\) consists of all \(d \times d\) matrices that preserve a nondegenerate sesquilinear form over the ring \(R\) and have determinant \(1\). - Note - For a finite field the matrices that preserve a sesquilinear form over \(\GF{q}\) live over \(\GF{q^2}\). So - SU(n,q)for a prime power \(q\) constructs the matrix group over the base ring- GF(q^2).- Note - This group is also available via - groups.matrix.SU().- INPUT: - n– positive integer
- R– ring or an integer; if an integer is specified, the corresponding finite field is used
- var– (default:- 'a') variable used to represent generator of the finite field, if needed
- invariant_form– (optional) instances being accepted by the matrix-constructor which define a \(n \times n\) square matrix over R describing the hermitian form to be kept invariant by the unitary group; the form is checked to be non-degenerate and hermitian but not to be positive definite
 - OUTPUT: the special unitary group - EXAMPLES: - sage: SU(3,5) # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 sage: SU(3, GF(5)) # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 sage: SU(3, QQ) Special Unitary Group of degree 3 over Rational Field - >>> from sage.all import * >>> SU(Integer(3),Integer(5)) # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 >>> SU(Integer(3), GF(Integer(5))) # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 >>> SU(Integer(3), QQ) Special Unitary Group of degree 3 over Rational Field - Using the - invariant_formoption:- sage: # needs sage.rings.number_field sage: CF3 = CyclotomicField(3); e3 = CF3.gen() sage: m = matrix(CF3, 3, 3, [[1,e3,0], [e3.conjugate(),2,0], [0,0,1]]) sage: G = SU(3, CF3) sage: Gm = SU(3, CF3, invariant_form=m) sage: G == Gm False sage: G.invariant_form() [1 0 0] [0 1 0] [0 0 1] sage: Gm.invariant_form() [ 1 zeta3 0] [-zeta3 - 1 2 0] [ 0 0 1] sage: pm = Permutation((1,2,3)).to_matrix() sage: G(pm) # needs sage.combinat [0 0 1] [1 0 0] [0 1 0] sage: Gm(pm) # needs sage.combinat Traceback (most recent call last): ... TypeError: matrix must be unitary with respect to the hermitian form [ 1 zeta3 0] [-zeta3 - 1 2 0] [ 0 0 1] sage: SU(3, 5, invariant_form=[[1,0,0], [0,2,0], [0,0,3]]) # needs sage.rings.finite_rings Traceback (most recent call last): ... NotImplementedError: invariant_form for finite groups is fixed by GAP - >>> from sage.all import * >>> # needs sage.rings.number_field >>> CF3 = CyclotomicField(Integer(3)); e3 = CF3.gen() >>> m = matrix(CF3, Integer(3), Integer(3), [[Integer(1),e3,Integer(0)], [e3.conjugate(),Integer(2),Integer(0)], [Integer(0),Integer(0),Integer(1)]]) >>> G = SU(Integer(3), CF3) >>> Gm = SU(Integer(3), CF3, invariant_form=m) >>> G == Gm False >>> G.invariant_form() [1 0 0] [0 1 0] [0 0 1] >>> Gm.invariant_form() [ 1 zeta3 0] [-zeta3 - 1 2 0] [ 0 0 1] >>> pm = Permutation((Integer(1),Integer(2),Integer(3))).to_matrix() >>> G(pm) # needs sage.combinat [0 0 1] [1 0 0] [0 1 0] >>> Gm(pm) # needs sage.combinat Traceback (most recent call last): ... TypeError: matrix must be unitary with respect to the hermitian form [ 1 zeta3 0] [-zeta3 - 1 2 0] [ 0 0 1] >>> SU(Integer(3), Integer(5), invariant_form=[[Integer(1),Integer(0),Integer(0)], [Integer(0),Integer(2),Integer(0)], [Integer(0),Integer(0),Integer(3)]]) # needs sage.rings.finite_rings Traceback (most recent call last): ... NotImplementedError: invariant_form for finite groups is fixed by GAP 
- class sage.groups.matrix_gps.unitary.UnitaryMatrixGroup_generic(degree, base_ring, special, sage_name, latex_string, category=None, invariant_form=None)[source]¶
- Bases: - NamedMatrixGroup_generic- General Unitary Group over arbitrary rings. - EXAMPLES: - sage: G = GU(3, GF(7)); G # needs sage.rings.finite_rings General Unitary Group of degree 3 over Finite Field in a of size 7^2 sage: latex(G) # needs sage.rings.finite_rings \text{GU}_{3}(\Bold{F}_{7^{2}}) sage: G = SU(3, GF(5)); G # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 sage: latex(G) # needs sage.rings.finite_rings \text{SU}_{3}(\Bold{F}_{5^{2}}) sage: # needs sage.rings.number_field sage: CF3 = CyclotomicField(3); e3 = CF3.gen() sage: m = matrix(CF3, 3, 3, [[1,e3,0], [e3.conjugate(),2,0], [0,0,1]]) sage: G = SU(3, CF3, invariant_form=m) sage: latex(G) \text{SU}_{3}(\Bold{Q}(\zeta_{3}))\text{ with respect to positive definite hermitian form }\left(\begin{array}{rrr} 1 & \zeta_{3} & 0 \\ -\zeta_{3} - 1 & 2 & 0 \\ 0 & 0 & 1 \end{array}\right) - >>> from sage.all import * >>> G = GU(Integer(3), GF(Integer(7))); G # needs sage.rings.finite_rings General Unitary Group of degree 3 over Finite Field in a of size 7^2 >>> latex(G) # needs sage.rings.finite_rings \text{GU}_{3}(\Bold{F}_{7^{2}}) >>> G = SU(Integer(3), GF(Integer(5))); G # needs sage.rings.finite_rings Special Unitary Group of degree 3 over Finite Field in a of size 5^2 >>> latex(G) # needs sage.rings.finite_rings \text{SU}_{3}(\Bold{F}_{5^{2}}) >>> # needs sage.rings.number_field >>> CF3 = CyclotomicField(Integer(3)); e3 = CF3.gen() >>> m = matrix(CF3, Integer(3), Integer(3), [[Integer(1),e3,Integer(0)], [e3.conjugate(),Integer(2),Integer(0)], [Integer(0),Integer(0),Integer(1)]]) >>> G = SU(Integer(3), CF3, invariant_form=m) >>> latex(G) \text{SU}_{3}(\Bold{Q}(\zeta_{3}))\text{ with respect to positive definite hermitian form }\left(\begin{array}{rrr} 1 & \zeta_{3} & 0 \\ -\zeta_{3} - 1 & 2 & 0 \\ 0 & 0 & 1 \end{array}\right) - invariant_form()[source]¶
- Return the hermitian form preserved by the unitary group. - OUTPUT: a square matrix describing the bilinear form - EXAMPLES: - sage: SU4 = SU(4, QQ) sage: SU4.invariant_form() [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] - >>> from sage.all import * >>> SU4 = SU(Integer(4), QQ) >>> SU4.invariant_form() [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] 
 
- sage.groups.matrix_gps.unitary.finite_field_sqrt(ring)[source]¶
- Helper function. - OUTPUT: integer \(q\) such that - ringis the finite field with \(q^2\) elements- EXAMPLES: - sage: from sage.groups.matrix_gps.unitary import finite_field_sqrt sage: finite_field_sqrt(GF(4, 'a')) # needs sage.rings.finite_rings 2 - >>> from sage.all import * >>> from sage.groups.matrix_gps.unitary import finite_field_sqrt >>> finite_field_sqrt(GF(Integer(4), 'a')) # needs sage.rings.finite_rings 2