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.
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.
Table of contents
- Table of contents
- Constructing groups
- Constructing elements
- Properties
- Special subgroups
- Bruhat decomposition
- Technicalities
Constructing groups
linear_algebraic_group — Method
linear_algebraic_group(rs::RootSystem, k::Field) -> LinearAlgebraicGroup
linear_algebraic_group(type::Symbol, n::Int, k::Field) -> LinearAlgebraicGroupConstruct 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 5This function is part of the experimental code in Oscar. Please read here for more details.
Constructing elements
linear_algebraic_group_elem — Method
linear_algebraic_group_elem(LAG::LinearAlgebraicGroup, m::MatGroupElem; check::Bool = true) -> LinearAlgebraicGroupElem
linear_algebraic_group_elem(LAG::LinearAlgebraicGroup, m::MatElem{<:FieldElem}; check::Bool = true) -> LinearAlgebraicGroupElemCoerce 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]
This function is part of the experimental code in Oscar. Please read here for more details.
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_subgroup — Method
root_subgroup(LAG::LinearAlgebraicGroup, alpha::RootSpaceElem) -> MatGroupReturn 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 5This function is part of the experimental code in Oscar. Please read here for more details.
Maximal torus
maximal_torus — Method
maximal_torus(LAG::LinearAlgebraicGroup) -> MatGroupReturn 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 5This function is part of the experimental code in Oscar. Please read here for more details.
torus_element — Method
torus_element(LAG::LinearAlgebraicGroup, diag::Vector{T}) where {T<:FieldElem} -> LinearAlgebraicGroupElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
A root alpha can be applied to a torus element t by doing alpha(t).
Borel subgroup
borel_subgroup — Method
borel_subgroup(LAG::LinearAlgebraicGroup) -> MatGroupReturn 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 3This function is part of the experimental code in Oscar. Please read here for more details.
Bruhat decomposition
bruhat_cell_representative — Method
bruhat_cell_representative(LAG::LinearAlgebraicGroup, w::WeylGroupElem) -> MatGroupElemReturn 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]This function is part of the experimental code in Oscar. Please read here for more details.
bruhat_cell — Method
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)This function is part of the experimental code in Oscar. Please read here for more details.
bruhat_decomposition — Method
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]This function is part of the experimental code in Oscar. Please read here for more details.
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.