Skip to content

Commit

Permalink
Lie algebras: Add root system detection (#4084)
Browse files Browse the repository at this point in the history
  • Loading branch information
lgoettgens committed Sep 19, 2024
1 parent 16ee5ef commit 7deb725
Show file tree
Hide file tree
Showing 16 changed files with 670 additions and 138 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
cohomCalg_jll = "5558cf25-a90e-53b0-b813-cadaa3ae7ade"

[compat]
AbstractAlgebra = "0.42.3"
AbstractAlgebra = "0.42.5"
AlgebraicSolving = "0.5.1"
Distributed = "1.6"
GAP = "0.11.3"
Expand Down
22 changes: 22 additions & 0 deletions docs/oscar_references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,17 @@ @InProceedings{GHJ16
year = {2016}
}

@Article{GIR96,
author = {de Graaf, Willem A. and Ivanyos, Gábor and Rónyai, Lajos},
title = {Computing Cartan subalgebras of Lie algebras},
journal = {Appl. Algebra Eng. Commun. Comput.},
volume = {7},
number = {5},
pages = {339--349},
year = {1996},
doi = {10.1007/BF01293593}
}

@InCollection{GJ00,
author = {Gawrilow, Ewgenij and Joswig, Michael},
title = {polymake: a Framework for Analyzing Convex Polytopes},
Expand Down Expand Up @@ -1222,6 +1233,17 @@ @Article{Gat96
doi = {10.1007/BF01191379}
}

@Book{Gra00,
author = {de Graaf, Willem A.},
title = {Lie algebras: theory and algorithms},
series = {North-Holland Mathematical Library},
volume = {56},
publisher = {North-Holland Publishing Co., Amsterdam},
pages = {xii+393},
year = {2000},
url = {https://www.sciencedirect.com/bookseries/north-holland-mathematical-library/vol/56/}
}

@PhDThesis{Gro20,
author = {Gromada, Daniel},
title = {Compact matrix quantum groups and their representation categories},
Expand Down
4 changes: 2 additions & 2 deletions experimental/LieAlgebras/docs/src/ideals_and_subalgebras.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ They are used similarly in most cases.
dim(::LieAlgebraIdeal)
basis(::LieAlgebraIdeal)
basis(::LieAlgebraIdeal, ::Int)
Base.in(::LieAlgebraElem, ::LieAlgebraIdeal)
Base.in(::LieAlgebraElem{C}, ::LieAlgebraIdeal{C}) where {C<:FieldElem}
bracket(::LieAlgebraIdeal{C,LieT}, ::LieAlgebraIdeal{C,LieT}) where {C<:FieldElem,LieT<:LieAlgebraElem{C}}
normalizer(::LieAlgebra, ::LieAlgebraIdeal)
centralizer(::LieAlgebra, ::LieAlgebraIdeal)
Expand All @@ -29,7 +29,7 @@ centralizer(::LieAlgebra, ::LieAlgebraIdeal)
dim(::LieSubalgebra)
basis(::LieSubalgebra)
basis(::LieSubalgebra, ::Int)
Base.in(::LieAlgebraElem, ::LieSubalgebra)
Base.in(::LieAlgebraElem{C}, ::LieSubalgebra{C}) where {C<:FieldElem}
bracket(::LieSubalgebra{C,LieT}, ::LieSubalgebra{C,LieT}) where {C<:FieldElem,LieT<:LieAlgebraElem{C}}
normalizer(::LieAlgebra, ::LieSubalgebra)
centralizer(::LieAlgebra, ::LieSubalgebra)
Expand Down
33 changes: 19 additions & 14 deletions experimental/LieAlgebras/src/AbstractLieAlgebra.jl
Original file line number Diff line number Diff line change
Expand Up @@ -95,22 +95,20 @@ end
has_root_system(L::AbstractLieAlgebra) = isdefined(L, :root_system)

function root_system(L::AbstractLieAlgebra)
@req has_root_system(L) "no root system known."
assure_root_system(L)
return L.root_system
end

function chevalley_basis(L::AbstractLieAlgebra)
@req has_root_system(L) "no root system known."
# TODO: once there is root system detection, this function needs to be updated to indeed return the Chevalley basis

npos = n_positive_roots(root_system(L))
b = basis(L)
# root vectors
r_plus = b[1:npos]
r_minus = b[(npos + 1):(2 * npos)]
# basis for cartan algebra
h = b[(2 * npos + 1):dim(L)]
return (r_plus, r_minus, h)
assure_root_system(L)
return L.chevalley_basis::NTuple{3,Vector{elem_type(L)}}
end

function set_root_system_and_chevalley_basis!(
L::AbstractLieAlgebra{C}, R::RootSystem, chev::NTuple{3,Vector{AbstractLieAlgebraElem{C}}}
) where {C<:FieldElem}
L.root_system = R
L.chevalley_basis = chev
end

###############################################################################
Expand Down Expand Up @@ -234,7 +232,7 @@ function lie_algebra(
@req fl "Not closed under the bracket."
struct_consts[i, j] = sparse_row(row)
end
s = map(AbstractAlgebra.obj_to_string, basis)
s = map(AbstractAlgebra.obj_to_string_wrt_times, basis)
return lie_algebra(R, struct_consts, s; check)
end

Expand Down Expand Up @@ -264,7 +262,14 @@ function lie_algebra(
]

L = lie_algebra(R, struct_consts, s; check=false)
L.root_system = rs

npos = n_positive_roots(rs)
# set Chevalley basis
r_plus = basis(L)[1:npos]
r_minus = basis(L)[(npos + 1):(2 * npos)]
h = basis(L)[(2 * npos + 1):end]
chev = (r_plus, r_minus, h)
set_root_system_and_chevalley_basis!(L, rs, chev)
return L
end

Expand Down
23 changes: 20 additions & 3 deletions experimental/LieAlgebras/src/DirectSumLieAlgebra.jl
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,26 @@ end
#
###############################################################################

# The following implementation needs direct sums of root systems, which
# is not yet implemented.
# has_root_system(D::DirectSumLieAlgebra) = all(has_root_system, D.summands)
has_root_system(D::DirectSumLieAlgebra) = isdefined(D, :root_system)

function root_system(D::DirectSumLieAlgebra)
assure_root_system(D)
return D.root_system
end

function chevalley_basis(D::DirectSumLieAlgebra)
assure_root_system(D)
return D.chevalley_basis::NTuple{3,Vector{elem_type(D)}}
end

function set_root_system_and_chevalley_basis!(
D::DirectSumLieAlgebra{C},
R::RootSystem,
chev::NTuple{3,Vector{DirectSumLieAlgebraElem{C}}},
) where {C<:FieldElem}
D.root_system = R
D.chevalley_basis = chev
end

###############################################################################
#
Expand Down
Loading

0 comments on commit 7deb725

Please sign in to comment.