Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ export basis_lie_highest_weight_string
export basis_lie_demazure
export basis_lie_demazure_ffl
export basis_lie_demazure_lusztig
export basis_lie_demazure_nz
export basis_lie_demazure_string

end

Expand All @@ -75,3 +77,5 @@ export basis_lie_highest_weight_string
export basis_lie_demazure
export basis_lie_demazure_ffl
export basis_lie_demazure_lusztig
export basis_lie_demazure_nz
export basis_lie_demazure_string
14 changes: 13 additions & 1 deletion experimental/BasisLieHighestWeight/src/MainAlgorithm.jl
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,19 @@ function add_new_monomials!(
zero_coordinates,
),
)
isempty(poss_mon_in_weightspace) && error("The input seems to be invalid.")
if isempty(poss_mon_in_weightspace)
if V isa SimpleModuleData
error(
"The input seems to be invalid. Not enough monomials for weightspace $(highest_weight(V) - weight_w) in module with highest weight $(highest_weight(V))"
)
elseif V isa DemazureModuleData
error(
"The input seems to be invalid. Not enough monomials for weightspace $((highest_weight(V) - weight_w) * weyl_group_elem(V)) in module with extremal weight $(highest_weight(V) * weyl_group_elem(V))"
Comment thread
janikapeters marked this conversation as resolved.
)
else
error("unreachable")
end
end
poss_mon_in_weightspace = sort(poss_mon_in_weightspace; order=monomial_ordering)

# check which monomials should get added to the basis
Expand Down
96 changes: 96 additions & 0 deletions experimental/BasisLieHighestWeight/src/UserFunctions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,54 @@ function basis_lie_demazure_lusztig(
return basis_lie_highest_weight_compute(V, operators, monomial_ordering)
end

@doc raw"""
basis_lie_demazure_string(type::Symbol, rank::Int, highest_weight::Vector{Int}, weyl_group_elem::Vector{Int}, reduced_expression::Vector{Int})

Compute a monomial basis for the demazure module with extremal weight
`highest_weight * weyl_group_elem` (in terms of the fundamental weights $\omega_i$),
for a simple Lie algebra of type `type_rank`.

Let $\omega_0 = s_{i_1} \cdots s_{i_N}$ be a reduced expression of the longest element in the Weyl group of $L$
given as indices $[i_1, \dots, i_N]$ in `reduced_expression`.
Then the birational sequence used consists of $\alpha_{i_1}, \dots, \alpha_{i_N}$.

The monomial ordering is fixed to `neglex` (negative lexicographic order).

# Examples
```jldoctest
julia> basis_lie_demazure_string(:B, 3, [1,1,1],[1,2], [3,2,3,2,1,2,3,2,1])
Monomial basis of a Demazure module
of extremal weight [1, 1, 1] * s1 * s2
of dimension 5
with monomial ordering neglex([x1, x2, x3, x4, x5, x6, x7, x8, x9])
over Lie algebra of type B3
where the used birational sequence consists of the following roots (given as coefficients w.r.t. alpha_i):
[0, 0, 1]
[0, 1, 0]
[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
and the basis was generated by Minkowski sums of the bases of the following Demazure modules:
[1, 0, 0] * s1 * s2
[0, 1, 0] * s1 * s2
[0, 0, 1] * s1 * s2
```
"""
function basis_lie_demazure_string(
type::Symbol, rank::Int, highest_weight::Vector{Int}, weyl_group_elem::Vector{Int},
reduced_expression::Vector{Int},
)
monomial_ordering = :neglex
L = lie_algebra(QQ, type, rank)
V = DemazureModuleData(L, highest_weight, weyl_group_elem)
operators = demazurify_operators(V, operators_by_index(L, reduced_expression))
return basis_lie_highest_weight_compute(V, operators, monomial_ordering)
end

@doc raw"""
basis_lie_demazure_ffl(type::Symbol, rank::Int, highest_weight::Vector{Int}, weyl_group_elem::Vector{Int})

Expand Down Expand Up @@ -742,3 +790,51 @@ function basis_lie_demazure_ffl(
# simple roots at the right end speed up the program very much
return basis_lie_highest_weight_compute(V, operators, monomial_ordering)
end

@doc raw"""
basis_lie_demazure_nz(type::Symbol, rank::Int, highest_weight::Vector{Int}, weyl_group_elem::Vector{Int}, reduced_expression::Vector{Int})

Compute a monomial basis for the demazure module with extremal weight
`highest_weight * weyl_group_elem` (in terms of the fundamental weights $\omega_i$),
for a simple Lie algebra of type `type_rank`.

Let $\omega_0 = s_{i_1} \cdots s_{i_N}$ be a reduced expression of the longest element in the Weyl group of $L$
given as indices $[i_1, \dots, i_N]$ in `reduced_expression`.
Then the birational sequence used consists of $\alpha_{i_1}, \dots, \alpha_{i_N}$.

The monomial ordering is fixed to `degrevlex` (degree reverse lexicographic order).

# Examples
```jldoctest
julia> basis_lie_demazure_nz(:B, 3, [1,1,1],[1,2], [3,2,3,2,1,2,3,2,1])
Monomial basis of a Demazure module
of extremal weight [1, 1, 1] * s1 * s2
of dimension 5
with monomial ordering degrevlex([x1, x2, x3, x4, x5, x6, x7, x8, x9])
over Lie algebra of type B3
where the used birational sequence consists of the following roots (given as coefficients w.r.t. alpha_i):
[0, 0, 1]
[0, 1, 0]
[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
and the basis was generated by Minkowski sums of the bases of the following Demazure modules:
[1, 0, 0] * s1 * s2
[0, 1, 0] * s1 * s2
[0, 0, 1] * s1 * s2
```
"""
function basis_lie_demazure_nz(
type::Symbol, rank::Int, highest_weight::Vector{Int}, weyl_group_elem::Vector{Int},
reduced_expression::Vector{Int},
)
monomial_ordering = :degrevlex
L = lie_algebra(QQ, type, rank)
V = DemazureModuleData(L, highest_weight, weyl_group_elem)
operators = demazurify_operators(V, operators_by_index(L, reduced_expression))
return basis_lie_highest_weight_compute(V, operators, monomial_ordering)
end
2 changes: 1 addition & 1 deletion experimental/BasisLieHighestWeight/src/WeylPolytope.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ function compute_zero_coordinates(
if !isdisjoint(
non_zeros, findall(!iszero, coefficients(operator_as_root(bir_sequence, c)))
)
union!(non_zeros, findall(<(0), coefficients(operator_as_weight(bir_sequence, c))))
union!(non_zeros, findall(!=(0), coefficients(operator_as_weight(bir_sequence, c))))
else
push!(zero_coordinates, c)
end
Expand Down
Loading