Unitary Groups \(GU(n,q)\) and \(SU(n,q)\) - Groups

Skip to content
Back to top
View this page
Edit this page

# Unitary Groups \(GU(n,q)\) and \(SU(n,q)\)

These are \(n \times n\) unitary matrices with entries in \(GF(q^2)\).

EXAMPLES:

Sage

    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

Python

    >>> 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)

  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

      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]
      )

  Python

      >>> 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_form` option:

  Sage

      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

  [Python]

      >>> 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)

  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

      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

  Python

      >>> 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_form` option:

  Sage

      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

  [Python]

      >>> 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)

  Bases: `NamedMatrixGroup_generic`

  General Unitary Group over arbitrary rings.

  EXAMPLES:

  Sage

      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)

  Python

      >>> 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()

    Return the hermitian form preserved by the unitary group.

    OUTPUT: a square matrix describing the bilinear form

    EXAMPLES:

    Sage

        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]

    Python

        >>> 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)

  Helper function.

  OUTPUT: integer \(q\) such that `ring` is the finite field with \(q^2\) elements

  EXAMPLES:

  Sage

      sage: from sage.groups.matrix_gps.unitary import finite_field_sqrt
      sage: finite_field_sqrt(GF(4, 'a'))                                             # needs sage.rings.finite_rings
      2

  Python

      >>> 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