Lie algebra modules

Lie algebra modules in OSCAR are always finite dimensional and represented by the type LieAlgebraModule{C}. Similar to other types in OSCAR, there is the corresponding element type LieAlgebraModuleElem{C}. The type parameter C is the element type of the coefficient ring.

base_lie_algebraMethod
base_lie_algebra(V::LieAlgebraModule{C}) -> LieAlgebra{C}

Return the Lie algebra V is a module over.

source
zeroMethod
zero(V::LieAlgebraModule{C}) -> LieAlgebraModuleElem{C}

Return the zero element of the Lie algebra module V.

source
iszeroMethod
iszero(v::LieAlgebraModuleElem{C}) -> Bool

Check whether the Lie algebra module element v is zero.

source
dimMethod
dim(V::LieAlgebraModule{C}) -> Int

Return the dimension of the Lie algebra module V.

source
basisMethod
basis(V::LieAlgebraModule{C}) -> Vector{LieAlgebraModuleElem{C}}

Return a basis of the Lie algebra module V.

source
basisMethod
basis(V::LieAlgebraModule{C}, i::Int) -> LieAlgebraModuleElem{C}

Return the i-th basis element of the Lie algebra module V.

source
symbolsMethod
symbols(V::LieAlgebraModule{C}) -> Vector{Symbol}

Return the symbols used for printing basis elements of the Lie algebra module V.

source

Element constructors

(V::LieAlgebraModule{C})() returns the zero element of the Lie algebra module V.

(V::LieAlgebraModule{C})(v::LieAlgebraModuleElem{C}) returns v if v is an element of L. If V is the dual module of the parent of v, it returns the dual of v. In all other cases, it fails.

(V::LieAlgebraModule{C})(v) constructs the element of V with coefficient vector v. v can be of type Vector{C}, Vector{Int}, SRow{C}, or MatElem{C} (of size $1 \times \dim(L)$).

(V::LieAlgebraModule{C})(a::Vector{T}) where {T<:LieAlgebraModuleElem{C}}): If V is a direct sum, return its element, where the $i$-th component is equal to a[i]. If V is a tensor product, return the tensor product of the a[i]. If V is a exterior (symmetric, tensor) power, return the wedge product (product, tensor product) of the a[i]. Requires that a has a suitable length, and that the a[i] are elements of the correct modules, where correct depends on the case above.

Arithmetics

The usual arithmetics, e.g. +, -, and * (scalar multiplication), are defined for LieAlgebraModuleElems.

The module action is defined as *.

*Method
action(x::LieAlgebraElem{C}, v::LieAlgebraModuleElem{C}) -> LieAlgebraModuleElem{C}
*(x::LieAlgebraElem{C}, v::LieAlgebraModuleElem{C}) -> LieAlgebraModuleElem{C}

Apply the action of x on v.

source

Module constructors

trivial_moduleFunction
trivial_module(L::LieAlgebra{C}, d=1) -> LieAlgebraModule{C}

Construct the d-dimensional module of the Lie algebra L with trivial action.

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> trivial_module(L)
Abstract Lie algebra module
  of dimension 1
over special linear Lie algebra of degree 3 over QQ
source
standard_moduleMethod
standard_module(L::LinearLieAlgebra{C}; cached::Bool=true) -> LieAlgebraModule{C}

Construct the standard module of the linear Lie algebra L. If L is a Lie subalgebra of $\mathfrak{gl}_n(R)$, then the standard module is $R^n$ with the action of $L$ given by left multiplication.

Note

This uses the left action of $L$, and converts that to internally use the equivalent right action.

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> standard_module(L)
Standard module
  of dimension 3
over special linear Lie algebra of degree 3 over QQ
source
dualMethod
dual(V::LieAlgebraModule{C}; cached::Bool=true) -> LieAlgebraModule{C}

Construct the dual module of V.

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> V = exterior_power(standard_module(L), 2)[1]; # some module

julia> dual(V)
Dual module
  of dimension 3
  dual of
    2nd exterior power of
      standard module
over special linear Lie algebra of degree 3 over QQ
source
direct_sumMethod
direct_sum(V::LieAlgebraModule{C}...) -> LieAlgebraModule{C}
⊕(V::LieAlgebraModule{C}...) -> LieAlgebraModule{C}

Construct the direct sum of the modules V....

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> V1 = exterior_power(standard_module(L), 2)[1]; # some module

julia> V2 = symmetric_power(standard_module(L), 3)[1]; # some module

julia> direct_sum(V1, V2)
Direct sum module
  of dimension 13
  direct sum with direct summands
    2nd exterior power of
      standard module
    3rd symmetric power of
      standard module
over special linear Lie algebra of degree 3 over QQ
source
tensor_productMethod
tensor_product(Vs::LieAlgebraModule{C}...) -> LieAlgebraModule{C}
⊗(Vs::LieAlgebraModule{C}...) -> LieAlgebraModule{C}

Given modules $V_1,\dots,V_n$ over the same Lie algebra $L$, construct their tensor product $V_1 \otimes \cdots \otimes \V_n$.

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> V1 = exterior_power(standard_module(L), 2)[1]; # some module

julia> V2 = symmetric_power(standard_module(L), 3)[1]; # some module

julia> tensor_product(V1, V2)
Tensor product module
  of dimension 30
  tensor product with tensor factors
    2nd exterior power of
      standard module
    3rd symmetric power of
      standard module
over special linear Lie algebra of degree 3 over QQ
source
exterior_powerMethod
exterior_power(V::LieAlgebraModule{C}, k::Int; cached::Bool=true) -> LieAlgebraModule{C}, Map

Construct the k-th exterior power $\bigwedge^k (V)$ of the module V, together with a map that computes the wedge product of k elements of V.

Examples

julia> L = special_linear_lie_algebra(QQ, 2);

julia> V = symmetric_power(standard_module(L), 2)[1]; # some module

julia> E, map = exterior_power(V, 2)
(Exterior power module of dimension 3 over sl_2, Map: parent of tuples of type Tuple{LieAlgebraModuleElem{QQFieldElem}, LieAlgebraModuleElem{QQFieldElem}} -> exterior power module)

julia> E
Exterior power module
  of dimension 3
  2nd exterior power of
    2nd symmetric power of
      standard module
over special linear Lie algebra of degree 2 over QQ

julia> basis(E)
3-element Vector{LieAlgebraModuleElem{QQFieldElem}}:
 (v_1^2)^(v_1*v_2)
 (v_1^2)^(v_2^2)
 (v_1*v_2)^(v_2^2)
source
symmetric_powerMethod
symmetric_power(V::LieAlgebraModule{C}, k::Int; cached::Bool=true) -> LieAlgebraModule{C}, Map

Construct the k-th symmetric power $S^k (V)$ of the module V, together with a map that computes the product of k elements of V.

Examples

julia> L = special_linear_lie_algebra(QQ, 4);

julia> V = exterior_power(standard_module(L), 3)[1]; # some module

julia> S, map = symmetric_power(V, 2)
(Symmetric power module of dimension 10 over sl_4, Map: parent of tuples of type Tuple{LieAlgebraModuleElem{QQFieldElem}, LieAlgebraModuleElem{QQFieldElem}} -> symmetric power module)

julia> S
Symmetric power module
  of dimension 10
  2nd symmetric power of
    3rd exterior power of
      standard module
over special linear Lie algebra of degree 4 over QQ

julia> basis(S)
10-element Vector{LieAlgebraModuleElem{QQFieldElem}}:
 (v_1^v_2^v_3)^2
 (v_1^v_2^v_3)*(v_1^v_2^v_4)
 (v_1^v_2^v_3)*(v_1^v_3^v_4)
 (v_1^v_2^v_3)*(v_2^v_3^v_4)
 (v_1^v_2^v_4)^2
 (v_1^v_2^v_4)*(v_1^v_3^v_4)
 (v_1^v_2^v_4)*(v_2^v_3^v_4)
 (v_1^v_3^v_4)^2
 (v_1^v_3^v_4)*(v_2^v_3^v_4)
 (v_2^v_3^v_4)^2
source
tensor_powerMethod
tensor_power(V::LieAlgebraModule{C}, k::Int; cached::Bool=true) -> LieAlgebraModule{C}, Map

Construct the k-th tensor power $T^k (V)$ of the module V, together with a map that computes the tensor product of k elements of V.

Examples

julia> L = special_linear_lie_algebra(QQ, 3);

julia> V = exterior_power(standard_module(L), 2)[1]; # some module

julia> T, map = tensor_power(V, 2)
(Tensor power module of dimension 9 over sl_3, Map: parent of tuples of type Tuple{LieAlgebraModuleElem{QQFieldElem}, LieAlgebraModuleElem{QQFieldElem}} -> tensor power module)

julia> T
Tensor power module
  of dimension 9
  2nd tensor power of
    2nd exterior power of
      standard module
over special linear Lie algebra of degree 3 over QQ

julia> basis(T)
9-element Vector{LieAlgebraModuleElem{QQFieldElem}}:
 (v_1^v_2)(x)(v_1^v_2)
 (v_1^v_2)(x)(v_1^v_3)
 (v_1^v_2)(x)(v_2^v_3)
 (v_1^v_3)(x)(v_1^v_2)
 (v_1^v_3)(x)(v_1^v_3)
 (v_1^v_3)(x)(v_2^v_3)
 (v_2^v_3)(x)(v_1^v_2)
 (v_2^v_3)(x)(v_1^v_3)
 (v_2^v_3)(x)(v_2^v_3)
source
abstract_moduleMethod
abstract_module(L::LieAlgebra{C}, dimV::Int, transformation_matrices::Vector{<:MatElem{C}}, s::Vector{<:VarName}; check::Bool) -> LieAlgebraModule{C}

Construct the the Lie algebra module over L of dimension dimV given by transformation_matrices and with basis element names s.

  • transformation_matrices: The action of the $i$-th basis element of L on some element $v$ of the constructed module is given by right multiplication of the matrix transformation_matrices[i] to the coefficient vector of $v$.
  • s: A vector of basis element names. This is [Symbol("v_$i") for i in 1:dimV] by default.
  • check: If true, check that the structure constants are anti-symmetric and satisfy the Jacobi identity. This is true by default.
source
abstract_moduleMethod
abstract_module(L::LieAlgebra{C}, dimV::Int, struct_consts::Matrix{SRow{C}}, s::Vector{<:VarName}; check::Bool) -> LieAlgebraModule{C}

Construct the the Lie algebra module over L of dimension dimV given by structure constants struct_consts and with basis element names s.

The action on the newly constructed Lie algebra module V is determined by the structure constants in struct_consts as follows: let $x_i$ denote the $i$-th standard basis vector of L, and $v_i$ the $i$-th standard basis vector of V. Then the entry struct_consts[i,j][k] is a scalar $a_{i,j,k}$ such that $x_i * v_j = \sum_k a_{i,j,k} v_k$.

  • s: A vector of basis element names. This is [Symbol("v_$i") for i in 1:dimV] by default.
  • check: If true, check that the structure constants are anti-symmetric and satisfy the Jacobi identity. This is true by default.
source