Tangent-Space Automorphism Fields¶
The class AutomorphismField
implements fields of automorphisms of
tangent spaces to a generic (a priori not parallelizable) differentiable
manifold, while the class AutomorphismFieldParal
is devoted to fields of automorphisms of tangent spaces to a parallelizable
manifold. The latter play the important role of transitions between vector
frames sharing the same domain on a differentiable manifold.
AUTHORS:
- Eric Gourgoulhon (2015): initial version
- Travis Scrimshaw (2016): review tweaks
-
class
sage.manifolds.differentiable.automorphismfield.
AutomorphismField
(vector_field_module, name=None, latex_name=None, is_identity=False)¶ Bases:
sage.manifolds.differentiable.tensorfield.TensorField
Field of automorphisms of tangent spaces to a generic (a priori not parallelizable) differentiable manifold.
Given a differentiable manifold \(U\) and a differentiable map \(\Phi: U \rightarrow M\) to a differentiable manifold \(M\), a field of tangent-space automorphisms along \(U\) with values on \(M \supset\Phi(U)\) is a differentiable map
\[a:\ U \longrightarrow T^{(1,1)} M,\]with \(T^{(1,1)} M\) being the tensor bundle of type \((1,1)\) over \(M\), such that
\[\forall p \in U,\ a(p) \in \mathrm{Aut}(T_{\Phi(p)} M),\]i.e. \(a(p)\) is an automorphism of the tangent space to \(M\) at the point \(\Phi(p)\).
The standard case of a field of tangent-space automorphisms on a manifold corresponds to \(U = M\) and \(\Phi = \mathrm{Id}_M\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is parallelizable, then
AutomorphismFieldParal
must be used instead.INPUT:
vector_field_module
– module \(\mathcal{X}(U,\Phi)\) of vector fields along \(U\) with values on \(M\) via the map \(\Phi\)name
– (default:None
) name given to the fieldlatex_name
– (default:None
) LaTeX symbol to denote the field; if none is provided, the LaTeX symbol is set toname
is_identity
– (default:False
) determines whether the constructed object is a field of identity automorphisms
EXAMPLES:
Field of tangent-space automorphisms on a non-parallelizable 2-dimensional manifold:
sage: M = Manifold(2, 'M') sage: U = M.open_subset('U') ; V = M.open_subset('V') sage: M.declare_union(U,V) # M is the union of U and V sage: c_xy.<x,y> = U.chart() ; c_uv.<u,v> = V.chart() sage: transf = c_xy.transition_map(c_uv, (x+y, x-y), intersection_name='W', ....: restrictions1= x>0, restrictions2= u+v>0) sage: inv = transf.inverse() sage: a = M.automorphism_field('a') ; a Field of tangent-space automorphisms a on the 2-dimensional differentiable manifold M sage: a.parent() General linear group of the Module X(M) of vector fields on the 2-dimensional differentiable manifold M
We first define the components of \(a\) with respect to the coordinate frame on \(U\):
sage: eU = c_xy.frame() ; eV = c_uv.frame() sage: a[eU,:] = [[1,x], [0,2]]
We then set the components with respect to the coordinate frame on \(V\) by extending the expressions of the components in the corresponding subframe on \(W = U \cap V\):
sage: W = U.intersection(V) sage: a.add_comp_by_continuation(eV, W, c_uv)
At this stage, the automorphims field \(a\) is fully defined:
sage: a.display(eU) a = d/dx*dx + x d/dx*dy + 2 d/dy*dy sage: a.display(eV) a = (1/4*u + 1/4*v + 3/2) d/du*du + (-1/4*u - 1/4*v - 1/2) d/du*dv + (1/4*u + 1/4*v - 1/2) d/dv*du + (-1/4*u - 1/4*v + 3/2) d/dv*dv
In particular, we may ask for its inverse on the whole manifold \(M\):
sage: ia = a.inverse() ; ia Field of tangent-space automorphisms a^(-1) on the 2-dimensional differentiable manifold M sage: ia.display(eU) a^(-1) = d/dx*dx - 1/2*x d/dx*dy + 1/2 d/dy*dy sage: ia.display(eV) a^(-1) = (-1/8*u - 1/8*v + 3/4) d/du*du + (1/8*u + 1/8*v + 1/4) d/du*dv + (-1/8*u - 1/8*v + 1/4) d/dv*du + (1/8*u + 1/8*v + 3/4) d/dv*dv
Equivalently, one can use the power minus one to get the inverse:
sage: ia is a^(-1) True
or the operator
~
:sage: ia is ~a True
-
inverse
()¶ Return the inverse automorphism of
self
.EXAMPLES:
Inverse of a field of tangent-space automorphisms on a non-parallelizable 2-dimensional manifold:
sage: M = Manifold(2, 'M') sage: U = M.open_subset('U') ; V = M.open_subset('V') sage: M.declare_union(U,V) # M is the union of U and V sage: c_xy.<x,y> = U.chart() ; c_uv.<u,v> = V.chart() sage: transf = c_xy.transition_map(c_uv, (x+y, x-y), ....: intersection_name='W', restrictions1= x>0, restrictions2= u+v>0) sage: inv = transf.inverse() sage: a = M.automorphism_field('a') sage: eU = c_xy.frame() ; eV = c_uv.frame() sage: a[eU,:] = [[1,x], [0,2]] sage: W = U.intersection(V) sage: a.add_comp_by_continuation(eV, W, c_uv) sage: ia = a.inverse() ; ia Field of tangent-space automorphisms a^(-1) on the 2-dimensional differentiable manifold M sage: a[eU,:], ia[eU,:] ( [1 x] [ 1 -1/2*x] [0 2], [ 0 1/2] ) sage: a[eV,:], ia[eV,:] ( [ 1/4*u + 1/4*v + 3/2 -1/4*u - 1/4*v - 1/2] [ 1/4*u + 1/4*v - 1/2 -1/4*u - 1/4*v + 3/2], [-1/8*u - 1/8*v + 3/4 1/8*u + 1/8*v + 1/4] [-1/8*u - 1/8*v + 1/4 1/8*u + 1/8*v + 3/4] )
Let us check that ia is indeed the inverse of a:
sage: s = a.contract(ia) sage: s[eU,:], s[eV,:] ( [1 0] [1 0] [0 1], [0 1] ) sage: s = ia.contract(a) sage: s[eU,:], s[eV,:] ( [1 0] [1 0] [0 1], [0 1] )
The result is cached:
sage: a.inverse() is ia True
Instead of
inverse()
, one can use the power minus one to get the inverse:sage: ia is a^(-1) True
or the operator
~
:sage: ia is ~a True
-
restrict
(subdomain, dest_map=None)¶ Return the restriction of
self
to some subdomain.This is a redefinition of
sage.manifolds.differentiable.tensorfield.TensorField.restrict()
to take into account the identity map.INPUT:
subdomain
–DifferentiableManifold
open subset \(V\) ofself._domain
dest_map
– (default:None
)DiffMap
; destination map \(\Phi:\ V \rightarrow N\), where \(N\) is a subdomain ofself._codomain
; ifNone
, the restriction ofself.base_module().destination_map()
to \(V\) is used
OUTPUT:
- a
AutomorphismField
representing the restriction
EXAMPLES:
Restrictions of an automorphism field on the 2-sphere:
sage: M = Manifold(2, 'S^2', start_index=1) sage: U = M.open_subset('U') # the complement of the North pole sage: stereoN.<x,y> = U.chart() # stereographic coordinates from the North pole sage: eN = stereoN.frame() # the associated vector frame sage: V = M.open_subset('V') # the complement of the South pole sage: stereoS.<u,v> = V.chart() # stereographic coordinates from the South pole sage: eS = stereoS.frame() # the associated vector frame sage: transf = stereoN.transition_map(stereoS, (x/(x^2+y^2), y/(x^2+y^2)), intersection_name='W', \ restrictions1= x^2+y^2!=0, restrictions2= u^2+v^2!=0) sage: inv = transf.inverse() # transformation from stereoS to stereoN sage: W = U.intersection(V) # the complement of the North and South poles sage: stereoN_W = W.atlas()[0] # restriction of stereographic coord. from North pole to W sage: stereoS_W = W.atlas()[1] # restriction of stereographic coord. from South pole to W sage: eN_W = stereoN_W.frame() ; eS_W = stereoS_W.frame() sage: a = M.automorphism_field(name='a') ; a Field of tangent-space automorphisms a on the 2-dimensional differentiable manifold S^2 sage: a[eN,:] = [[1, atan(x^2+y^2)], [0,3]] sage: a.add_comp_by_continuation(eS, W, chart=stereoS) sage: a.restrict(U) Field of tangent-space automorphisms a on the Open subset U of the 2-dimensional differentiable manifold S^2 sage: a.restrict(U)[eN,:] [ 1 arctan(x^2 + y^2)] [ 0 3] sage: a.restrict(V) Field of tangent-space automorphisms a on the Open subset V of the 2-dimensional differentiable manifold S^2 sage: a.restrict(V)[eS,:] [ (u^4 + 10*u^2*v^2 + v^4 + 2*(u^3*v - u*v^3)*arctan(1/(u^2 + v^2)))/(u^4 + 2*u^2*v^2 + v^4) -(4*u^3*v - 4*u*v^3 + (u^4 - 2*u^2*v^2 + v^4)*arctan(1/(u^2 + v^2)))/(u^4 + 2*u^2*v^2 + v^4)] [ 4*(u^2*v^2*arctan(1/(u^2 + v^2)) - u^3*v + u*v^3)/(u^4 + 2*u^2*v^2 + v^4) (3*u^4 - 2*u^2*v^2 + 3*v^4 - 2*(u^3*v - u*v^3)*arctan(1/(u^2 + v^2)))/(u^4 + 2*u^2*v^2 + v^4)] sage: a.restrict(W) Field of tangent-space automorphisms a on the Open subset W of the 2-dimensional differentiable manifold S^2 sage: a.restrict(W)[eN_W,:] [ 1 arctan(x^2 + y^2)] [ 0 3]
Restrictions of the field of tangent-space identity maps:
sage: id = M.tangent_identity_field() ; id Field of tangent-space identity maps on the 2-dimensional differentiable manifold S^2 sage: id.restrict(U) Field of tangent-space identity maps on the Open subset U of the 2-dimensional differentiable manifold S^2 sage: id.restrict(U)[eN,:] [1 0] [0 1] sage: id.restrict(V) Field of tangent-space identity maps on the Open subset V of the 2-dimensional differentiable manifold S^2 sage: id.restrict(V)[eS,:] [1 0] [0 1] sage: id.restrict(W)[eN_W,:] [1 0] [0 1] sage: id.restrict(W)[eS_W,:] [1 0] [0 1]
-
class
sage.manifolds.differentiable.automorphismfield.
AutomorphismFieldParal
(vector_field_module, name=None, latex_name=None, is_identity=False)¶ Bases:
sage.tensor.modules.free_module_automorphism.FreeModuleAutomorphism
,sage.manifolds.differentiable.tensorfield_paral.TensorFieldParal
Field of tangent-space automorphisms with values on a parallelizable manifold.
Given a differentiable manifold \(U\) and a differentiable map \(\Phi: U \rightarrow M\) to a parallelizable manifold \(M\), a field of tangent-space automorphisms along \(U\) with values on \(M\supset\Phi(U)\) is a differentiable map
\[a:\ U \longrightarrow T^{(1,1)}M\](\(T^{(1,1)}M\) being the tensor bundle of type \((1,1)\) over \(M\)) such that
\[\forall p \in U,\ a(p) \in \mathrm{Aut}(T_{\Phi(p)} M)\]i.e. \(a(p)\) is an automorphism of the tangent space to \(M\) at the point \(\Phi(p)\).
The standard case of a field of tangent-space automorphisms on a manifold corresponds to \(U=M\) and \(\Phi = \mathrm{Id}_M\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is not parallelizable, the class
AutomorphismField
must be used instead.INPUT:
vector_field_module
– free module \(\mathcal{X}(U,\Phi)\) of vector fields along \(U\) with values on \(M\) via the map \(\Phi\)name
– (default:None
) name given to the fieldlatex_name
– (default:None
) LaTeX symbol to denote the field; if none is provided, the LaTeX symbol is set toname
is_identity
– (default:False
) determines whether the constructed object is a field of identity automorphisms
EXAMPLES:
A \(\pi/3\)-rotation in the Euclidean 2-plane:
sage: M = Manifold(2,'R^2') sage: c_xy.<x,y> = M.chart() sage: rot = M.automorphism_field('R') ; rot Field of tangent-space automorphisms R on the 2-dimensional differentiable manifold R^2 sage: rot[:] = [[sqrt(3)/2, -1/2], [1/2, sqrt(3)/2]] sage: rot.parent() General linear group of the Free module X(R^2) of vector fields on the 2-dimensional differentiable manifold R^2
The inverse automorphism is obtained via the method
inverse()
:sage: inv = rot.inverse() ; inv Field of tangent-space automorphisms R^(-1) on the 2-dimensional differentiable manifold R^2 sage: latex(inv) R^{-1} sage: inv[:] [1/2*sqrt(3) 1/2] [ -1/2 1/2*sqrt(3)] sage: rot[:] [1/2*sqrt(3) -1/2] [ 1/2 1/2*sqrt(3)] sage: inv[:] * rot[:] # check [1 0] [0 1]
Equivalently, one can use the power minus one to get the inverse:
sage: inv is rot^(-1) True
or the operator
~
:sage: inv is ~rot True
-
at
(point)¶ Value of
self
at a given point.If the current field of tangent-space automorphisms is
\[a:\ U \longrightarrow T^{(1,1)} M\]associated with the differentiable map
\[\Phi:\ U \longrightarrow M,\]where \(U\) and \(M\) are two manifolds (possibly \(U = M\) and \(\Phi = \mathrm{Id}_M\)), then for any point \(p \in U\), \(a(p)\) is an automorphism of the tangent space \(T_{\Phi(p)}M\).
INPUT:
point
–ManifoldPoint
; point \(p\) in the domain of the field of automorphisms \(a\)
OUTPUT:
- the automorphism \(a(p)\) of the tangent vector space \(T_{\Phi(p)}M\)
EXAMPLES:
Automorphism at some point of a tangent space of a 2-dimensional manifold:
sage: M = Manifold(2, 'M') sage: c_xy.<x,y> = M.chart() sage: a = M.automorphism_field(name='a') sage: a[:] = [[1+exp(y), x*y], [0, 1+x^2]] sage: a.display() a = (e^y + 1) d/dx*dx + x*y d/dx*dy + (x^2 + 1) d/dy*dy sage: p = M.point((-2,3), name='p') ; p Point p on the 2-dimensional differentiable manifold M sage: ap = a.at(p) ; ap Automorphism a of the Tangent space at Point p on the 2-dimensional differentiable manifold M sage: ap.display() a = (e^3 + 1) d/dx*dx - 6 d/dx*dy + 5 d/dy*dy sage: ap.parent() General linear group of the Tangent space at Point p on the 2-dimensional differentiable manifold M
The identity map of the tangent space at point
p
:sage: id = M.tangent_identity_field() ; id Field of tangent-space identity maps on the 2-dimensional differentiable manifold M sage: idp = id.at(p) ; idp Identity map of the Tangent space at Point p on the 2-dimensional differentiable manifold M sage: idp is M.tangent_space(p).identity_map() True sage: idp.display() Id = d/dx*dx + d/dy*dy sage: idp.parent() General linear group of the Tangent space at Point p on the 2-dimensional differentiable manifold M sage: idp * ap == ap True
-
inverse
()¶ Return the inverse automorphism of
self
.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: a = M.automorphism_field(name='a') sage: a[:] = [[0, 2], [-1, 0]] sage: b = a.inverse(); b Field of tangent-space automorphisms a^(-1) on the 2-dimensional differentiable manifold M sage: b[:] [ 0 -1] [1/2 0] sage: a[:] [ 0 2] [-1 0]
The result is cached:
sage: a.inverse() is b True
Instead of
inverse()
, one can use the power minus one to get the inverse:sage: b is a^(-1) True
or the operator
~
:sage: b is ~a True
-
restrict
(subdomain, dest_map=None)¶ Return the restriction of
self
to some subset of its domain.If such restriction has not been defined yet, it is constructed here.
This is a redefinition of
sage.manifolds.differentiable.tensorfield_paral.TensorFieldParal.restrict()
to take into account the identity map.INPUT:
subdomain
–DifferentiableManifold
; open subset \(V\) ofself._domain
dest_map
– (default:None
)DiffMap
destination map \(\Phi:\ V \rightarrow N\), where \(N\) is a subset ofself._codomain
; ifNone
, the restriction ofself.base_module().destination_map()
to \(V\) is used
OUTPUT:
- a
AutomorphismFieldParal
representing the restriction
EXAMPLES:
Restriction of an automorphism field defined on \(\RR^2\) to a disk:
sage: M = Manifold(2, 'R^2') sage: c_cart.<x,y> = M.chart() # Cartesian coordinates on R^2 sage: D = M.open_subset('D') # the unit open disc sage: c_cart_D = c_cart.restrict(D, x^2+y^2<1) sage: a = M.automorphism_field(name='a') ; a Field of tangent-space automorphisms a on the 2-dimensional differentiable manifold R^2 sage: a[:] = [[1, x*y], [0, 3]] sage: a.restrict(D) Field of tangent-space automorphisms a on the Open subset D of the 2-dimensional differentiable manifold R^2 sage: a.restrict(D)[:] [ 1 x*y] [ 0 3]
Restriction to the disk of the field of tangent-space identity maps:
sage: id = M.tangent_identity_field() ; id Field of tangent-space identity maps on the 2-dimensional differentiable manifold R^2 sage: id.restrict(D) Field of tangent-space identity maps on the Open subset D of the 2-dimensional differentiable manifold R^2 sage: id.restrict(D)[:] [1 0] [0 1] sage: id.restrict(D) == D.tangent_identity_field() True