Matrix groups

matrix_groupMethod
matrix_group(m::Int, R::Ring, V::T...) where T<:Union{MatElem,MatrixGroupElem}
matrix_group(m::Int, R::Ring, V::AbstractVector{T}) where T<:Union{MatElem,MatrixGroupElem}
matrix_group(V::T...) where T<:Union{MatElem,MatrixGroupElem}
matrix_group(V::AbstractVector{T}) where T<:Union{MatElem,MatrixGroupElem}

Return the matrix group generated by matrices in V. If the degree m and coefficient ring R are not given, then V must be non-empty

source
MatrixGroupType
MatrixGroup{RE<:RingElem, T<:MatElem{RE}} <: GAPGroup

Type of groups G of n x n matrices over the ring R, where n = degree(G) and R = base_ring(G).

At the moment, only rings of type fqPolyRepField are supported.

source
MatrixGroupElemType
MatrixGroupElem{RE<:RingElem, T<:MatElem{RE}} <: AbstractMatrixGroupElem

Elements of a group of type MatrixGroup{RE<:RingElem, T<:MatElem{RE}}

source
base_ringMethod
base_ring(G::MatrixGroup)

Return the base ring of the matrix group G.

source
degreeMethod
degree(G::MatrixGroup)

Return the degree of the matrix group G, i.e. the number of rows of its matrices.

source
centralizerMethod
centralizer(G::MatrixGroup{T}, x::MatrixGroupElem{T})

Return (C,f), where C is the centralizer of x in C and f is the embedding of C into G. If G = GL(n,F) or SL(n,F), then f = nothing. In this case, to get the embedding homomorphism of C into G, use

is_subgroup(C, G)[2]

source

Elements of matrix groups

matrixMethod
matrix(x::MatrixGroupElem)

Return the underlying matrix of x.

source
base_ringMethod
base_ring(x::MatrixGroupElem)

Return the base ring of the underlying matrix of x.

source
nrowsMethod
nrows(x::MatrixGroupElem)

Return the number of rows of the underlying matrix of x.

source
detMethod
det(x::MatrixGroupElem)

Return the determinant of the underlying matrix of x.

source
trMethod
tr(x::MatrixGroupElem)

Return the trace of the underlying matrix of x.

source
multiplicative_jordan_decompositionMethod
multiplicative_jordan_decomposition(M::MatrixGroupElem)

Return S and U in the group G = parent(M) such that S is semisimple, U is unipotent and M = SU = US.

WARNING:

this is NOT, in general, the same output returned when M has type MatElem.

source
is_semisimpleMethod
is_semisimple(x::MatrixGroupElem{T}) where T <: FinFieldElem

Return whether x is semisimple, i.e. has order coprime with the characteristic of its base ring.

source
is_unipotentMethod
is_unipotent(x::MatrixGroupElem{T}) where T <: FinFieldElem

Return whether x is unipotent, i.e. its order is a power of the characteristic of its base ring.

source

Sesquilinear forms

SesquilinearFormType
SesquilinearForm{T<:RingElem}

Type of groups G of n x n matrices over the ring R, where n = degree(G) and R = base_ring(G). At the moment, only rings of type fqPolyRepField are supported.

source
is_alternating_formMethod
is_alternating_form(f::SesquilinearForm)

Return whether the form f is an alternating form.

source
is_hermitian_formMethod
is_hermitian_form(f::SesquilinearForm)

Return whether the form f is a hermitian form.

source
is_quadratic_formMethod
is_quadratic_form(f::SesquilinearForm)

Return whether the form f is a quadratic form.

source
is_symmetric_formMethod
is_symmetric_form(f::SesquilinearForm)

Return whether the form f is a symmetric form.

source
alternating_formMethod
alternating_form(B::MatElem{T})

Return the alternating form with Gram matrix B.

source
symmetric_formMethod
symmetric_form(B::MatElem{T})

Return the symmetric form with Gram matrix B.

source
hermitian_formMethod
hermitian_form(B::MatElem{T})

Return the hermitian form with Gram matrix B.

source
quadratic_formMethod
quadratic_form(B::MatElem{T})

Return the quadratic form with Gram matrix B.

source
quadratic_formMethod
quadratic_form(f::MPolyRingElem{T}; check=true)

Return the quadratic form described by the polynomial f. Here, f must be a homogeneous polynomial of degree 2. If check is set as false, it does not check whether the polynomial is homogeneous of degree 2. To define quadratic forms of dimension 1, f can also have type PolyRingElem{T}.

source
corresponding_bilinear_formMethod
corresponding_bilinear_form(Q::SesquilinearForm)

Given a quadratic form Q, return the bilinear form B defined by B(u,v) = Q(u+v)-Q(u)-Q(v).

source
corresponding_quadratic_formMethod
corresponding_quadratic_form(Q::SesquilinearForm)

Given a symmetric form f, returns the quadratic form Q defined by Q(v) = f(v,v)/2. It is defined only in odd characteristic.

source
gram_matrixMethod
gram_matrix(B::SesquilinearForm)

Return the Gram matrix of a sesquilinear or quadratic form B.

source
defining_polynomialMethod
defining_polynomial(f::SesquilinearForm)

Return the polynomial that defines the quadratic form f.

source
radicalMethod
radical(f::SesquilinearForm{T})

Return the radical of the sesquilinear form f, i.e. the subspace of all v such that f(u,v)=0 for all u. The radical of a quadratic form Q is the set of vectors v such that Q(v)=0 and v lies in the radical of the corresponding bilinear form.

source
 radical(A::AbsAlgAss) -> AbsAlgAssIdl

Returns the Jacobson-Radical of $A$.

witt_indexMethod
witt_index(f::SesquilinearForm{T})

Return the Witt index of the form induced by f on V/Rad(f). The Witt Index is the dimension of a maximal totally isotropic (singular for quadratic forms) subspace.

source
is_degenerateMethod
is_degenerate(f::SesquilinearForm{T})

Return whether f is degenerate, i.e. f has nonzero radical. A quadratic form is degenerate if the corresponding bilinear form is.

source
is_singularMethod
is_singular(Q::SesquilinearForm{T})

For a quadratic form Q, return whether Q is singular, i.e. Q has nonzero radical.

source
is_congruentMethod
is_congruent(f::SesquilinearForm{T}, g::SesquilinearForm{T}) where T <: RingElem

If f and g are sesquilinear forms, return (true, C) if there exists a matrix C such that f^C = g, or equivalently, CBC* = A, where A and B are the Gram matrices of f and g respectively, and C* is the transpose-conjugate matrix of C. If such C does not exist, then return (false, nothing).

If f and g are quadratic forms, return (true, C) if there exists a matrix C such that f^A = ag for some scalar a. If such C does not exist, then return (false, nothing).

source

Invariant forms

invariant_bilinear_formsMethod
invariant_bilinear_forms(G::MatrixGroup)

Return a generating set for the vector spaces of bilinear forms preserved by the group G.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

source
invariant_sesquilinear_formsMethod
invariant_sesquilinear_forms(G::MatrixGroup)

Return a generating set for the vector spaces of sesquilinear non-bilinear forms preserved by the group G. An exception is thrown if base_ring(G) is not a finite field with even degree over its prime subfield.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

source
invariant_quadratic_formsMethod
invariant_quadratic_forms(G::MatrixGroup)

Return a generating set for the vector spaces of quadratic forms preserved by the group G.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

source
invariant_symmetric_formsMethod
invariant_symmetric_forms(G::MatrixGroup)

Return a generating set for the vector spaces of symmetric forms preserved by the group G.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

Note:

Work properly only in odd characteristic. In even characteristic, only alternating forms are found.

source
invariant_alternating_formsMethod
invariant_alternating_forms(G::MatrixGroup)

Return a generating set for the vector spaces of alternating forms preserved by the group G.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

source
invariant_hermitian_formsMethod
invariant_hermitian_forms(G::MatrixGroup)

Return a generating set for the vector spaces of hermitian forms preserved by the group G. An exception is thrown if base_ring(G) is not a finite field with even degree over its prime subfield.

Note:

At the moment, elements of the generating set are returned of type mat_elem_type(G).

source
invariant_bilinear_formMethod
invariant_bilinear_form(G::MatrixGroup)

Return an invariant bilinear form for the group G. An exception is thrown if the module induced by the action of G is not absolutely irreducible.

Note:

At the moment, the output is returned of type mat_elem_type(G).

source
invariant_sesquilinear_formMethod
invariant_sesquilinear_form(G::MatrixGroup)

Return an invariant sesquilinear (non bilinear) form for the group G. An exception is thrown if the module induced by the action of G is not absolutely irreducible or if the group is defined over a finite field of odd degree over the prime field.

Note:

At the moment, the output is returned of type mat_elem_type(G).

source
invariant_quadratic_formMethod
invariant_quadratic_form(G::MatrixGroup)

Return an invariant quadratic form for the group G. An exception is thrown if the module induced by the action of G is not absolutely irreducible.

Note:

At the moment, the output is returned of type mat_elem_type(G).

source
preserved_quadratic_formsMethod
preserved_quadratic_forms(G::MatrixGroup)

Uses random methods to find all of the quadratic forms preserved by G up to a scalar (i.e. such that G is a group of similarities for the forms). Since the procedure relies on a pseudo-random generator, the user may need to execute the operation more than once to find all invariant quadratic forms.

source
preserved_sesquilinear_formsMethod
preserved_sesquilinear_forms(G::MatrixGroup)

Uses random methods to find all of the sesquilinear forms preserved by G up to a scalar (i.e. such that G is a group of similarities for the forms). Since the procedure relies on a pseudo-random generator, the user may need to execute the operation more than once to find all invariant sesquilinear forms.

source
isometry_groupMethod
isometry_group(f::SesquilinearForm{T})

Return the group of isometries for the sesquilinear form f.

source
orthogonal_signMethod
orthogonal_sign(G::MatrixGroup)

For absolutely irreducible G of degree n and such that base_ring(G) is a finite field, return

  • nothing if G does not preserve a nonzero quadratic form,
  • 0 if n is odd and G preserves a nonzero quadratic form,
  • 1 if n is even and G preserves a nonzero quadratic form of + type,
  • -1 if n is even and G preserves a nonzero quadratic form of - type.
source

Utilities for matrices (replace by available functions, or document elsewhere?)

pol_elementary_divisorsMethod
pol_elementary_divisors(x::MatElem)
pol_elementary_divisors(x::MatrixGroupElem)

Return a list of pairs (f_i,m_i), for irreducible polynomials f_i and positive integers m_i, where the f_i^m_i are the elementary divisors of x.

source
generalized_jordan_blockMethod
generalized_jordan_block(f::T, n::Int) where T<:PolyRingElem

Return the Jordan block of dimension n corresponding to the polynomial f.

source
generalized_jordan_formMethod
generalized_jordan_form(A::MatElem{T}; with_pol::Bool=false) where T

Return (J,Z), where Z^-1*J*Z = A and J is a diagonal join of Jordan blocks (corresponding to irreducible polynomials).

source
matrixMethod
matrix(A::Vector{AbstractAlgebra.Generic.FreeModuleElem})

Return the matrix whose rows are the vectors in A. All vectors in A must have the same length and the same base ring.

source
upper_triangular_matrixMethod
upper_triangular_matrix(L)

Return the upper triangular matrix whose entries on and above the diagonal are the elements of L.

An exception is thrown whenever the length of L is not equal to $n(n+1)/2$, for some integer $n$.

source
lower_triangular_matrixMethod
lower_triangular_matrix(L)

Return the upper triangular matrix whose entries on and below the diagonal are the elements of L.

An exception is thrown whenever the length of L is not equal to $n(n+1)/2$, for some integer $n$.

source
conjugate_transposeMethod
conjugate_transpose(x::MatElem{T}) where T <: FinFieldElem

If the base ring of x is GF(q^2), return the matrix transpose( map ( y -> y^q, x) ). An exception is thrown if the base ring does not have even degree.

source
complementMethod
complement(V::AbstractAlgebra.Generic.FreeModule{T}, W::AbstractAlgebra.Generic.Submodule{T}) where T <: FieldElem

Return a complement for W in V, i.e. a subspace U of V such that V is direct sum of U and W.

source
permutation_matrixMethod
permutation_matrix(F::Ring, Q::AbstractVector{T}) where T <: Int
permutation_matrix(F::Ring, p::PermGroupElem)

Return the permutation matrix over the ring R corresponding to the sequence Q or to the permutation p. If Q is a sequence, then Q must contain exactly once every integer from 1 to some n.

Examples

julia> s = perm([3,1,2])
(1,3,2)

julia> permutation_matrix(QQ,s)
[0   0   1]
[1   0   0]
[0   1   0]
source
is_skewsymmetric_matrixMethod
is_skewsymmetric_matrix(B::MatElem{T}) where T <: Ring

Return whether the matrix B is skew-symmetric, i.e. B = -transpose(B) and B has zeros on the diagonal. Return false if B is not a square matrix.

source
is_hermitian_matrixMethod
is_hermitian_matrix(B::MatElem{T}) where T <: FinFieldElem

Return whether the matrix B is hermitian, i.e. B = conjugate_transpose(B). Return false if B is not a square matrix, or the field has not even degree.

source

Classical groups

general_linear_groupMethod
general_linear_group(n::Int, q::Int)
general_linear_group(n::Int, R::Ring)
GL = general_linear_group

Return the general linear group of dimension n over the ring R respectively the field GF(q).

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = general_linear_group(2,F)
GL(2,7)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [3 0; 0 1]
 [6 1; 6 0]
source
special_linear_groupMethod
special_linear_group(n::Int, q::Int)
special_linear_group(n::Int, R::Ring)
SL = special_linear_group

Return the special linear group of dimension n over the ring R respectively the field GF(q).

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = special_linear_group(2,F)
SL(2,7)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [3 0; 0 5]
 [6 1; 6 0]
source
symplectic_groupMethod
symplectic_group(n::Int, q::Int)
symplectic_group(n::Int, R::Ring)
Sp = symplectic_group

Return the symplectic group of dimension n over the ring R respectively the field GF(q). The dimension n must be even.

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = symplectic_group(2,F)
Sp(2,7)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [3 0; 0 5]
 [6 1; 6 0]
source
orthogonal_groupMethod
orthogonal_group(e::Int, n::Int, R::Ring)
orthogonal_group(e::Int, n::Int, q::Int)
GO = orthogonal_group

Return the orthogonal group of dimension n over the ring R respectively the field GF(q), and of type e, where e in {+1,-1} for n even and e=0 for n odd. If n is odd, e can be omitted.

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = symplectic_group(2,F)
Sp(2,7)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [3 0; 0 5]
 [6 1; 6 0]
source
special_orthogonal_groupMethod
special_orthogonal_group(e::Int, n::Int, R::Ring)
special_orthogonal_group(e::Int, n::Int, q::Int)
SO = special_orthogonal_group

Return the special orthogonal group of dimension n over the ring R respectively the field GF(q), and of type e, where e in {+1,-1} for n even and e=0 for n odd. If n is odd, e can be omitted.

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = special_orthogonal_group(1,2,F)
SO+(2,7)

julia> gens(H)
3-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [3 0; 0 5]
 [5 0; 0 3]
 [1 0; 0 1]
source
omega_groupMethod
omega_group(e::Int, n::Int, R::Ring)
omega_group(e::Int, n::Int, q::Int)

Return the Omega group of dimension n over the field GF(q) of type e, where e in {+1,-1} for n even and e=0 for n odd. If n is odd, e can be omitted.

Currently, this function only supports rings of type fqPolyRepField.

Examples

julia> F = GF(7,1)
Finite field of degree 1 over GF(7)

julia> H = omega_group(1,2,F)
Omega+(2,7)

julia> gens(H)
1-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [2 0; 0 4]
source
unitary_groupMethod
unitary_group(n::Int, q::Int)
GU = unitary_group

Return the unitary group of dimension n over the field GF(q^2).

Examples

julia> H = unitary_group(2,3)
GU(2,3)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [o 0; 0 2*o]
 [2 2*o+2; 2*o+2 0]
source
special_unitary_groupMethod
special_unitary_group(n::Int, q::Int)
SU = special_unitary_group

Return the special unitary group of dimension n over the field with q^2 elements.

Examples

julia> H = special_unitary_group(2,3)
SU(2,3)

julia> gens(H)
2-element Vector{MatrixGroupElem{fqPolyRepFieldElem, fqPolyRepMatrix}}:
 [1 2*o+2; 0 1]
 [0 2*o+2; 2*o+2 0]
source
This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.