Overview

The standard interfaces for groups are implemented, including has_gens, number_of_generators, gens, gen, is_finite and order. Basic operations for group elements are also implemented. See Basics of Groups for more details. Additionally, we provide normalizer, centralizer, is_conjugate, conjugate_group, and in.

Warning

Currently only simply connected linear algebraic groups of type $A_n$ are supported. In the future, the functionality could be extended to support arbitrary root data.

Warning

Most functionality is currently limited to finite fields.

Table of contents

Constructing groups

linear_algebraic_groupMethod
linear_algebraic_group(rs::RootSystem, k::Field) -> LinearAlgebraicGroup
linear_algebraic_group(type::Symbol, n::Int, k::Field) -> LinearAlgebraicGroup

Construct the simply connected linear algebraic group of the given type over $k$.

Only type $A_n$ is implemented so far and results in $SL_{n+1}$. In the future we hope to support arbitrary root data.

Examples

julia> F, _  = finite_field(5);

julia> rs = root_system(:A, 3);

julia> LAG = linear_algebraic_group(rs, F)
Linear algebraic group of type A3
  over prime field of characteristic 5

julia> LAG = linear_algebraic_group(:A, 3, F)
Linear algebraic group of type A3
  over prime field of characteristic 5
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Constructing elements

linear_algebraic_group_elemMethod
linear_algebraic_group_elem(LAG::LinearAlgebraicGroup, m::MatGroupElem; check::Bool = true) -> LinearAlgebraicGroupElem
linear_algebraic_group_elem(LAG::LinearAlgebraicGroup, m::MatElem{<:FieldElem}; check::Bool = true) -> LinearAlgebraicGroupElem

Coerce m into an element of LAG.

Setting check to false disables the check whether the element m actually lies in the group.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 2, F);

julia> m = matrix(F, [2 1 0; 1 4 3; 0 1 1]);

julia> MGE = MatGroupElem(GL(3,F), m);

julia> linear_algebraic_group_elem(LAG, MGE)
[2   1   0]
[1   4   3]
[0   1   1]

julia> linear_algebraic_group_elem(LAG, m)
[2   1   0]
[1   4   3]
[0   1   1]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Properties

Use root_system to obtain the root system of the linear algebraic group. base_ring returns the field the group is defined over.

Special subgroups

Root subgroups

root_subgroupMethod
root_subgroup(LAG::LinearAlgebraicGroup, alpha::RootSpaceElem) -> MatGroup

Return the root subgroup of LAG corresponding to the root alpha.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> alpha = simple_root(root_system(LAG),2);

julia> root_subgroup(LAG, alpha)
Matrix group of degree 4
  over prime field of characteristic 5
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Maximal torus

maximal_torusMethod
maximal_torus(LAG::LinearAlgebraicGroup) -> MatGroup

Return the standard maximal torus of LAG.

In the case of type $A$ and $SL_n$, this is the subgroup of diagonal matrices with determinant 1.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> maximal_torus(LAG)
Matrix group of degree 4
  over prime field of characteristic 5
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
torus_elementMethod
torus_element(LAG::LinearAlgebraicGroup, diag::Vector{T}) where {T<:FieldElem} -> LinearAlgebraicGroupElem

Return the element of the standard maximal torus (see maximal_torus) which is parameterized by diag.

In the case of type $A$ and $SL_n$, this is a diagonal matrix with diagonal diag.

Setting check to false disables the check whether the element actually lies in the group.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> torus_element(LAG, [1,2,1,3])
[1   0   0   0]
[0   2   0   0]
[0   0   1   0]
[0   0   0   3]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

A root alpha can be applied to a torus element t by doing alpha(t).

Borel subgroup

borel_subgroupMethod
borel_subgroup(LAG::LinearAlgebraicGroup) -> MatGroup

Return the standard Borel subgroup of LAG.

In the case of type $A$ and $SL_n$, this consists of the upper triangular matrices with determinant 1.

Examples

julia> F, _  = finite_field(3);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> borel_subgroup(LAG)
Matrix group of degree 4
  over prime field of characteristic 3
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Bruhat decomposition

bruhat_cell_representativeMethod
bruhat_cell_representative(LAG::LinearAlgebraicGroup, w::WeylGroupElem) -> MatGroupElem

Return a representative $n_w \in G$ of the Bruhat cell corresponding to the Weyl group element w, i.e. $BwB = Bn_w B$.

$B$ is the Borel subgroup returned by borel_subgroup.

To obtain the Bruhat cell as a double coset, use bruhat_cell instead.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> W = weyl_group(root_system(LAG));

julia> w = W([1,2]);

julia> bruhat_cell_representative(LAG, w)
[0   0   1   0]
[1   0   0   0]
[0   1   0   0]
[0   0   0   1]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
bruhat_cellMethod
bruhat_cell(LAG::LinearAlgebraicGroup, w::WeylGroupElem) -> GroupDoubleCoset{MatGroup, MatGroupElem}

Return the Bruhat cell $BwB$ corresponding to the Weyl group element w as a double coset.

$B$ is the Borel subgroup returned by borel_subgroup.

If only a representative of the Bruhat cell is needed, use bruhat_cell_representative instead.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 3, F);

julia> W = weyl_group(root_system(LAG));

julia> w = W([1,2]);

julia> bruhat_cell(LAG,w)
Double coset of matrix group of degree 4 over F
  and matrix group of degree 4 over F
  with representative [0 0 1 0; 1 0 0 0; 0 1 0 0; 0 0 0 1]
  in SL(4,5)
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
bruhat_decompositionMethod
bruhat_decomposition(LAG::LinearAlgebraicGroup) -> Vector{GroupDoubleCoset{MatGroup, MatGroupElem}}

Return a Bruhat decompostion of LAG, i.e. a list of all Bruhat cells $BwB$ as double cosets.

$B$ is the Borel subgroup returned by borel_subgroup.

See bruhat_cell for a single Bruhat cell.

Examples

julia> F, _  = finite_field(5);

julia> LAG = linear_algebraic_group(:A, 2, F);

julia> bruhat_decomposition(LAG)
6-element Vector{GroupDoubleCoset{MatGroup{FqFieldElem, FqMatrix}, MatGroupElem{FqFieldElem, FqMatrix}}}:
 Double coset of matrix group and matrix group with representative [1 0 0; 0 1 0; 0 0 1]
 Double coset of matrix group and matrix group with representative [0 4 0; 1 0 0; 0 0 1]
 Double coset of matrix group and matrix group with representative [0 4 0; 0 0 4; 1 0 0]
 Double coset of matrix group and matrix group with representative [0 0 1; 0 4 0; 1 0 0]
 Double coset of matrix group and matrix group with representative [1 0 0; 0 0 4; 0 1 0]
 Double coset of matrix group and matrix group with representative [0 0 1; 1 0 0; 0 1 0]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Technicalities

The used types are LinearAlgebraicGroup{C} for the groups and LinearAlgebraicGroupElem{C} for their elements. The type parameter C is the element type of the base field. These types wrap a MatGroup{C} or a MatGroupElem{C} respectively, but can store additional information about the group that would not be possible if we would just use the existing matrix groups.