Nilpotent Lie groups¶
AUTHORS:
- Eero Hakavuori (2018-09-25): initial version of nilpotent Lie groups
-
sage.groups.lie_gps.nilpotent_lie_group.
NilpotentLieGroup
¶ A nilpotent Lie group.
INPUT:
L
– the Lie algebra of the Lie group; must be a finite dimensional nilpotent Lie algebra with basis over a topological field, e.g. \(\QQ\) or \(\RR\)name
– a string; name (symbol) given to the Lie group
Two types of exponential coordinates are defined on any nilpotent Lie group using the basis of the Lie algebra, see
chart_exp1()
andchart_exp2()
.EXAMPLES:
Creation of a nilpotent Lie group:
sage: L = lie_algebras.Heisenberg(QQ, 1) sage: G = L.lie_group(); G Lie group G of Heisenberg algebra of rank 1 over Rational Field
Giving a different name to the group:
sage: L.lie_group('H') Lie group H of Heisenberg algebra of rank 1 over Rational Field
Elements can be created using the exponential map:
sage: p,q,z = L.basis() sage: g = G.exp(p); g exp(p1) sage: h = G.exp(q); h exp(q1)
Lie group multiplication has the usual product syntax:
sage: k = g*h; k exp(p1 + q1 + 1/2*z)
The identity element is given by
one()
:sage: e = G.one(); e exp(0) sage: e*k == k and k*e == k True
The default coordinate system is exponential coordinates of the first kind:
sage: G.default_chart() == G.chart_exp1() True sage: G.chart_exp1() Chart (G, (x_0, x_1, x_2))
Changing the default coordinates to exponential coordinates of the second kind will change how elements are printed:
sage: G.set_default_chart(G.chart_exp2()) sage: k exp(z)exp(q1)exp(p1) sage: G.set_default_chart(G.chart_exp1()) sage: k exp(p1 + q1 + 1/2*z)
The frames of left- or right-invariant vector fields are created using
left_invariant_frame()
andright_invariant_frame()
:sage: X = G.left_invariant_frame(); X Vector frame (G, (X_0,X_1,X_2)) sage: X[0] Vector field X_0 on the Lie group G of Heisenberg algebra of rank 1 over Rational Field
A vector field can be displayed with respect to a coordinate frame:
sage: exp1_frame = G.chart_exp1().frame() sage: exp2_frame = G.chart_exp2().frame() sage: X[0].display(exp1_frame) X_0 = d/dx_0 - 1/2*x_1 d/dx_2 sage: X[0].display(exp2_frame) X_0 = d/dy_0 sage: X[1].display(exp1_frame) X_1 = d/dx_1 + 1/2*x_0 d/dx_2 sage: X[1].display(exp2_frame) X_1 = d/dy_1 + x_0 d/dy_2
Defining a left translation by a generic point:
sage: g = G.point([var('a'), var('b'), var('c')]); g exp(a*p1 + b*q1 + c*z) sage: L_g = G.left_translation(g); L_g Diffeomorphism of the Lie group G of Heisenberg algebra of rank 1 over Rational Field sage: L_g.display() G --> G (x_0, x_1, x_2) |--> (a + x_0, b + x_1, -1/2*b*x_0 + 1/2*a*x_1 + c + x_2) (x_0, x_1, x_2) |--> (y_0, y_1, y_2) = (a + x_0, b + x_1, 1/2*a*b + 1/2*(2*a + x_0)*x_1 + c + x_2) (y_0, y_1, y_2) |--> (x_0, x_1, x_2) = (a + y_0, b + y_1, -1/2*b*y_0 + 1/2*(a - y_0)*y_1 + c + y_2) (y_0, y_1, y_2) |--> (a + y_0, b + y_1, 1/2*a*b + a*y_1 + c + y_2)
Verifying the left-invariance of the left-invariant frame:
sage: x = G(G.chart_exp1()[:]) sage: L_g.differential(x)(X[0].at(x)) == X[0].at(L_g(x)) True sage: L_g.differential(x)(X[1].at(x)) == X[1].at(L_g(x)) True sage: L_g.differential(x)(X[2].at(x)) == X[2].at(L_g(x)) True
An element of the Lie algebra can be extended to a left or right invariant vector field:
sage: X_L = G.left_invariant_extension(p + 3*q); X_L Vector field p1 + 3*q1 on the Lie group G of Heisenberg algebra of rank 1 over Rational Field sage: X_L.display(exp1_frame) p1 + 3*q1 = d/dx_0 + 3 d/dx_1 + (3/2*x_0 - 1/2*x_1) d/dx_2 sage: X_R = G.right_invariant_extension(p + 3*q) sage: X_R.display(exp1_frame) p1 + 3*q1 = d/dx_0 + 3 d/dx_1 + (-3/2*x_0 + 1/2*x_1) d/dx_2
The nilpotency step of the Lie group is the nilpotency step of its algebra. Nilpotency for Lie groups means that group commutators that are longer than the nilpotency step vanish:
sage: G.step() 2 sage: g = G.exp(p); h = G.exp(q) sage: c = g*h*~g*~h; c exp(z) sage: g*c*~g*~c exp(0)