The general orthogonal group consists of all
matrices over the ring
preserving an
-ary positive definite
quadratic form. In cases where there are muliple non-isomorphic
quadratic forms, additional data needs to be specified to
disambiguate. The special orthogonal group is the normal subgroup of
matrices of determinant one.
In characteristics different from 2, a quadratic form is equivalent to
a bilinear symmetric form. Furthermore, over the real numbers a
positive definite quadratic form is equivalent to the diagonal
quadratic form, equivalent to the bilinear symmetric form defined by
the identity matrix. Hence, the orthogonal group is the
group of orthogonal matrices in the usual sense.
In the case of a finite field and if the degree is even, then
there are two inequivalent quadratic forms and a third parameter e
must be specified to disambiguate these two possibilities. The index
of
in
is
if
is odd, but
if
is even.)
Warning
GAP and Sage use different notations:
EXAMPLES:
sage: GO(3,7)
General Orthogonal Group of degree 3 over Finite Field of size 7
sage: G = SO( 4, GF(7), 1); G
Special Orthogonal Group of degree 4 and form parameter 1 over Finite Field of size 7
sage: G.random_element() # random
[4 3 5 2]
[6 6 4 0]
[0 4 6 0]
[4 4 5 1]
TESTS:
sage: G = GO(3, GF(5))
sage: latex(G)
\text{GO}_{3}(\Bold{F}_{5})
sage: G = SO(3, GF(5))
sage: latex(G)
\text{SO}_{3}(\Bold{F}_{5})
sage: G = SO(4, GF(5), 1)
sage: latex(G)
\text{SO}_{4}(\Bold{F}_{5}, +)
AUTHORS:
Return the general orthogonal group.
The general orthogonal group
consists of all
matrices over the ring
preserving an
-ary positive definite quadratic form. In cases where there are muliple non-isomorphic quadratic forms, additional data needs to be specified to disambiguate.
In the case of a finite field and if the degree
is even, then there are two inequivalent quadratic forms and a third parameter e must be specified to disambiguate these two possibilities.
Note
This group is also available via groups.matrix.GO().
INPUT:
- n – integer. The degree.
- R – ring or an integer. If an integer is specified, the corresponding finite field is used.
- e – +1 or -1, and ignored by default. Only relevant for finite fields and if the degree is even. A parameter that distinguishes inequivalent invariant forms.
OUTPUT:
The general orthogonal group of given degree, base ring, and choice of invariant form.
EXAMPLES:
sage: GO( 3, GF(7)) General Orthogonal Group of degree 3 over Finite Field of size 7 sage: GO( 3, GF(7)).order() 672 sage: GO( 3, GF(7)).gens() ( [3 0 0] [0 1 0] [0 5 0] [1 6 6] [0 0 1], [0 2 1] )TESTS:
sage: groups.matrix.GO(2, 3, e=-1) General Orthogonal Group of degree 2 and form parameter -1 over Finite Field of size 3
Bases: sage.groups.matrix_gps.orthogonal.OrthogonalMatrixGroup_generic, sage.groups.matrix_gps.named_group.NamedMatrixGroup_gap
Base class for “named” matrix groups using LibGAP
INPUT:
EXAMPLES:
sage: G = GL(2, GF(3))
sage: from sage.groups.matrix_gps.named_group import NamedMatrixGroup_gap
sage: isinstance(G, NamedMatrixGroup_gap)
True
Return the symmetric bilinear form preserved by the orthogonal group.
OUTPUT:
A matrix such that, for every group element g, the
identity
holds. In characteristic different from
two, this uniquely determines the orthogonal group.
EXAMPLES:
sage: G = GO(4, GF(7), -1)
sage: G.invariant_bilinear_form()
[0 1 0 0]
[1 0 0 0]
[0 0 2 0]
[0 0 0 2]
sage: G = GO(4, GF(7), +1)
sage: G.invariant_bilinear_form()
[0 1 0 0]
[1 0 0 0]
[0 0 6 0]
[0 0 0 2]
sage: G = GO(4, QQ)
sage: G.invariant_bilinear_form()
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
sage: G = SO(4, GF(7), -1)
sage: G.invariant_bilinear_form()
[0 1 0 0]
[1 0 0 0]
[0 0 2 0]
[0 0 0 2]
Return the quadratic form preserved by the orthogonal group.
OUTPUT:
The matrix defining “orthogonal” as follows. The matrix
determines a quadratic form
on the natural vector space
, on which
acts, by
. A matrix
for all
.
EXAMPLES:
sage: G = GO(4, GF(7), -1)
sage: G.invariant_quadratic_form()
[0 1 0 0]
[0 0 0 0]
[0 0 1 0]
[0 0 0 1]
sage: G = GO(4, GF(7), +1)
sage: G.invariant_quadratic_form()
[0 1 0 0]
[0 0 0 0]
[0 0 3 0]
[0 0 0 1]
sage: G = GO(4, QQ)
sage: G.invariant_quadratic_form()
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
sage: G = SO(4, GF(7), -1)
sage: G.invariant_quadratic_form()
[0 1 0 0]
[0 0 0 0]
[0 0 1 0]
[0 0 0 1]
Bases: sage.groups.matrix_gps.named_group.NamedMatrixGroup_generic
Base class for “named” matrix groups
INPUT:
EXAMPLES:
sage: G = GL(2, QQ)
sage: from sage.groups.matrix_gps.named_group import NamedMatrixGroup_generic
sage: isinstance(G, NamedMatrixGroup_generic)
True
Return the symmetric bilinear form preserved by the orthogonal group.
OUTPUT:
A matrix.
EXAMPLES:
sage: GO(2,3,+1).invariant_bilinear_form()
[0 1]
[1 0]
sage: GO(2,3,-1).invariant_bilinear_form()
[2 1]
[1 1]
Return the quadratic form preserved by the orthogonal group.
OUTPUT:
A matrix.
EXAMPLES:
sage: GO(2,3,+1).invariant_quadratic_form()
[0 1]
[0 0]
sage: GO(2,3,-1).invariant_quadratic_form()
[1 1]
[0 2]
Return the special orthogonal group.
The special orthogonal group consists of all
matrices with determint one over the ring
preserving an
-ary positive definite quadratic form. In cases where there are
muliple non-isomorphic quadratic forms, additional data needs to
be specified to disambiguate.
Note
This group is also available via groups.matrix.SO().
INPUT:
OUTPUT:
The special orthogonal group of given degree, base ring, and choice of invariant form.
EXAMPLES:
sage: G = SO(3,GF(5))
sage: G
Special Orthogonal Group of degree 3 over Finite Field of size 5
sage: G = SO(3,GF(5))
sage: G.gens()
(
[2 0 0] [3 2 3] [1 4 4]
[0 3 0] [0 2 0] [4 0 0]
[0 0 1], [0 3 1], [2 0 4]
)
sage: G = SO(3,GF(5))
sage: G.as_matrix_group()
Matrix group over Finite Field of size 5 with 3 generators (
[2 0 0] [3 2 3] [1 4 4]
[0 3 0] [0 2 0] [4 0 0]
[0 0 1], [0 3 1], [2 0 4]
)
TESTS:
sage: groups.matrix.SO(2, 3, e=1)
Special Orthogonal Group of degree 2 and form parameter 1 over Finite Field of size 3
Normalize the arguments that relate the choice of quadratic form for special orthogonal groups over finite fields.
INPUT:
OUTPUT:
The integer e with values required by GAP.
TESTS:
sage: from sage.groups.matrix_gps.orthogonal import normalize_args_e
sage: normalize_args_e(2, GF(3), +1)
1
sage: normalize_args_e(3, GF(3), 0)
0
sage: normalize_args_e(3, GF(3), +1)
0
sage: normalize_args_e(2, GF(3), 0)
Traceback (most recent call last):
...
ValueError: must have e=-1 or e=1 for even degree