An interface for Lie algebras

LieGroups.LieAlgebra β€” Type
LieAlgebra{𝔽, G} <: AbstractManifold{𝔽}

Represent the Lie algebra $\mathfrak g$, that is a $𝔽$ vector space with an associated lie_bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$ which fulfills

  1. $[X,X] = 0$ for all $X ∈ \mathfrak g$
  2. The Jacobi identity $[X, [Y,Z]] = [[X,Y],Z] = [Y, [X,Z]]$ holds for all $X, Y, Z ∈ \mathfrak g$.

The Lie algebras considered here are those related to a LieGroup $\mathcal G$, namely the tangent space $T_{\mathrm{e}}\mathcal G$ at the Identity, this is internally just a const of the corresponding TangentSpace.

Convention for representing tangent vectors in the Lie algebra

A vector field $\mathcal X: \mathcal G β†’ T\mathcal G$, $X(g) ∈ T_g\mathcal G$ is called a left-invariant vector field if it satisfies

\[\mathcal X(λ_g(h)) = Dλ_g(h)[\mathcal X(h)], \quad\text{for all}\quad g, h ∈ \mathcal G,\]

where $Ξ»_g: \mathcal G β†’ \mathcal G$ is the left multiplication by $g$. Hence $\mathcal X$ is determined already when $X ∈ \mathfrak g$ is given, since $\mathcal X(g) = DΞ»_g(e)[X]$, cf [HN12, Definition 9.1.7].

Throughout LieGroups.jl, we use this left-invariant convention to store tangent vectors at points on a Lie group as elements of the corresponding Lie algebra.

Constructor

LieAlgebra(G::LieGroup)

Return the Lie Algebra belonging to the LieGroup G.

source
LieGroups.DefaultLieAlgebraOrthogonalBasis β€” Type
DefaultLieAlgebraOrthogonalBasis{𝔽} <: ManifoldsBase.AbstractOrthogonalBasis{𝔽,ManifoldsBase.TangentSpaceType}

Specify an orthogonal basis for a Lie algebra. This is used as the default within hat and vee.

If not specifically overwritten/implemented for a Lie group, the DefaultOrthogonalBasis at the identity_element on the `base_manifold acts as a fallback.

Note

In order to implement the corresponding get_coordinates and get_vector functions, define get_coordinates_lie(::LieGroup, p, X, B) and get_vector_lie(::LieGroup, p, X, B), resp.

source

Functions on Lie algebras

Base.rand β€” Method
rand(::LieGroup; vector_at=nothing, Οƒ=1.0, kwargs...)
rand(::LieAlgebra; Οƒ=1.0, kwargs...)
rand!(::LieGroup, gX; vector_at=nothing, kwargs...)
rand!(::LieAlgebra, X; Οƒ=1.0, kwargs...)

Compute a random point or tangent vector on a Lie group.

For points this just means to generate a random point on the underlying manifold itself.

For tangent vectors, an element in the Lie Algebra is generated, see also rand(::LieAlgebra; kwargs...)

source
LieGroups.lie_bracket! β€” Method
lie_bracket!(𝔀::LieAlgebra, X, Y)
lie_bracket!(𝔀::LieAlgebra, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$ which fulfills

  1. $[X,X] = 0$ for all $X ∈ \mathfrak g$
  2. The Jacobi identity $[X, [Y,Z]] = [[X,Y],Z] = [Y, [X,Z]]$ holds for all $X, Y, Z ∈ \mathfrak g$.

The computation can be done in-place of Z.

source
LieGroups.lie_bracket β€” Method
lie_bracket!(𝔀::LieAlgebra, X, Y)
lie_bracket!(𝔀::LieAlgebra, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$ which fulfills

  1. $[X,X] = 0$ for all $X ∈ \mathfrak g$
  2. The Jacobi identity $[X, [Y,Z]] = [[X,Y],Z] = [Y, [X,Z]]$ holds for all $X, Y, Z ∈ \mathfrak g$.

The computation can be done in-place of Z.

source
ManifoldsBase.get_coordinates β€” Function
get_coordinates(𝔀::LieAlgebra, X::T, B::AbstractBasis)
get_coordinates!(𝔀::LieAlgebra, c, X::T, B::AbstractBasis)

Return the vector of coordinates to the decomposition of X with respect to an AbstractBasis of the LieAlgebra 𝔀. The operation can be performed in-place of c.

By default this function requires that identity_element(G, T) is available and calls the corresponding get_coordinates function of the Riemannian manifold the Lie group is build on.

The inverse operation is get_vector.

See also vee.

source
ManifoldsBase.get_coordinates! β€” Function
get_coordinates(𝔀::LieAlgebra, X::T, B::AbstractBasis)
get_coordinates!(𝔀::LieAlgebra, c, X::T, B::AbstractBasis)

Return the vector of coordinates to the decomposition of X with respect to an AbstractBasis of the LieAlgebra 𝔀. The operation can be performed in-place of c.

By default this function requires that identity_element(G, T) is available and calls the corresponding get_coordinates function of the Riemannian manifold the Lie group is build on.

The inverse operation is get_vector.

See also vee.

source
ManifoldsBase.get_vector β€” Function
get_vector(G::LieGroup, c, B::AbstractBasis; kwargs...)
get_vector(𝔀::LieAlgebra, c, B::AbstractBasis; kwargs...)
get_vector!(G::LieGroup, X::T, c, B::AbstractBasis; kwargs...)
get_vector!(𝔀::LieAlgebra, X::T, c, B::AbstractBasis; kwargs...)

Return the vector corresponding to a set of coefficients in an AbstractBasis of the LieAlgebra 𝔀. Since all tangent vectors are assumed to be represented in the Lie algebra, both signatures are equivalent. The operation can be performed in-place of a tangent vector X of type ::T.

By default this function requires identity_element(G) and calls the corresponding get_vector function of the Riemannian manifold the Lie group is build on.

The inverse operation is get_coordinates.

Keyword arguments

  • tangent_vector_type specify the tangent vector type to use for the allocating variants.

See also hat

source
ManifoldsBase.get_vector! β€” Function
get_vector(G::LieGroup, c, B::AbstractBasis; kwargs...)
get_vector(𝔀::LieAlgebra, c, B::AbstractBasis; kwargs...)
get_vector!(G::LieGroup, X::T, c, B::AbstractBasis; kwargs...)
get_vector!(𝔀::LieAlgebra, X::T, c, B::AbstractBasis; kwargs...)

Return the vector corresponding to a set of coefficients in an AbstractBasis of the LieAlgebra 𝔀. Since all tangent vectors are assumed to be represented in the Lie algebra, both signatures are equivalent. The operation can be performed in-place of a tangent vector X of type ::T.

By default this function requires identity_element(G) and calls the corresponding get_vector function of the Riemannian manifold the Lie group is build on.

The inverse operation is get_coordinates.

Keyword arguments

  • tangent_vector_type specify the tangent vector type to use for the allocating variants.

See also hat

source
ManifoldsBase.hat! β€” Method
hat(G::LieAlgebra, c)
hat(G::LieAlgebra, c, T::Type)
hat!(G::LieAlgebra, X::T, c)

Compute the hat map $(β‹…)^Μ‚ : \mathcal V β†’ 𝔀$ that maps a vector of coordinates $\mathbf{c} ∈ \mathcal V$, to a tangent vector $X ∈ \mathfrak g$. The coefficients are given with respect to a specific basis to a tangent vector in the Lie algebra

\[X = \sum_{i∈\mathcal I} c_iB_i,\]

where $\{ B_i \}_{i∈\mathcal I}$ is a basis of the Lie algebra and $\mathcal I$ a corresponding index set, which is usually $\mathcal I=\{ 1,\ldots,n \}$. Then $\mathcal V = ℝ^n$.

For the allocating variant, you can specify the type T of the tangent vector to obtain, in case there are different representations. The first signature produces the default representation.

The computation can be performed in-place of X. The inverse of hat is vee. Technically, hat is a specific case of get_vector and is implemented using the DefaultLieAlgebraOrthogonalBasis.

source
ManifoldsBase.hat β€” Method
hat(G::LieAlgebra, c)
hat(G::LieAlgebra, c, T::Type)
hat!(G::LieAlgebra, X::T, c)

Compute the hat map $(β‹…)^Μ‚ : \mathcal V β†’ 𝔀$ that maps a vector of coordinates $\mathbf{c} ∈ \mathcal V$, to a tangent vector $X ∈ \mathfrak g$. The coefficients are given with respect to a specific basis to a tangent vector in the Lie algebra

\[X = \sum_{i∈\mathcal I} c_iB_i,\]

where $\{ B_i \}_{i∈\mathcal I}$ is a basis of the Lie algebra and $\mathcal I$ a corresponding index set, which is usually $\mathcal I=\{ 1,\ldots,n \}$. Then $\mathcal V = ℝ^n$.

For the allocating variant, you can specify the type T of the tangent vector to obtain, in case there are different representations. The first signature produces the default representation.

The computation can be performed in-place of X. The inverse of hat is vee. Technically, hat is a specific case of get_vector and is implemented using the DefaultLieAlgebraOrthogonalBasis.

source
ManifoldsBase.vee! β€” Method
vee(𝔀::LieAlgebra, X)
vee!(𝔀::LieAlgebra, c, X)

Compute the vee map $(β‹…)^∨: \mathfrak g β†’ \mathcal V$ that maps a tangent vector X from the LieAlgebra \mathfrak g to its coordinates with respect to the DefaultLieAlgebraOrthogonalBasis basis in the Lie algebra

\[X = \sum_{i∈\mathcal I} c_iB_i,\]

where $\{ B_i \}_{i∈\mathcal I}$ is a basis of the Lie algebra and $\mathcal I$ a corresponding index set, which is usually $\mathcal I=\{ 1,\ldots,n \}$. Then $\mathcal V = ℝ^n$

The computation can be performed in-place of c. The inverse of vee is hat. Technically, vee is a specific case of get_coordinates and is implemented using the DefaultLieAlgebraOrthogonalBasis.

source
ManifoldsBase.vee β€” Method
vee(𝔀::LieAlgebra, X)
vee!(𝔀::LieAlgebra, c, X)

Compute the vee map $(β‹…)^∨: \mathfrak g β†’ \mathcal V$ that maps a tangent vector X from the LieAlgebra \mathfrak g to its coordinates with respect to the DefaultLieAlgebraOrthogonalBasis basis in the Lie algebra

\[X = \sum_{i∈\mathcal I} c_iB_i,\]

where $\{ B_i \}_{i∈\mathcal I}$ is a basis of the Lie algebra and $\mathcal I$ a corresponding index set, which is usually $\mathcal I=\{ 1,\ldots,n \}$. Then $\mathcal V = ℝ^n$

The computation can be performed in-place of c. The inverse of vee is hat. Technically, vee is a specific case of get_coordinates and is implemented using the DefaultLieAlgebraOrthogonalBasis.

source
ManifoldsBase.zero_vector β€” Method
zero_vector(𝔀::LieAlgebra)
zero_vector(𝔀::LieAlgebra, T::Type)
zero_vector!(𝔀::LieAlgebra, X::T)

Generate a zero_vector of type T in the LieAlgebra $𝔀$ of the LieGroup G. By default this calls zero_vector on the manifold of G at the identity_element(G,T)

For the allocating variant the type T of the zero vector can be specified.

source
Random.rand! β€” Method
rand(::LieGroup; vector_at=nothing, Οƒ=1.0, kwargs...)
rand(::LieAlgebra; Οƒ=1.0, kwargs...)
rand!(::LieGroup, gX; vector_at=nothing, kwargs...)
rand!(::LieAlgebra, X; Οƒ=1.0, kwargs...)

Compute a random point or tangent vector on a Lie group.

For points this just means to generate a random point on the underlying manifold itself.

For tangent vectors, an element in the Lie Algebra is generated, see also rand(::LieAlgebra; kwargs...)

source

Internal functions and macros

LieGroups.@default_lie_algebra_fallbacks β€” Macro
default_lie_algebra_fallbacks(TG, TF, Op, TV, Xfield::Symbol)

Introduce default fallbacks for all basic functions on Lie algebras, for Lie group of type TG with number system TF, an group operation Op, tangent vectors of type TV, with forwarding to fields Xfield and tangent vector functions

source

Literature

[HN12]
J.Β Hilgert and K.-H.Β Neeb. Structure and Geometry of Lie Groups (Springer Monographs in Mathematics, 2012).