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 field
  • latex_name – (default: None) LaTeX symbol to denote the field; if none is provided, the LaTeX symbol is set to name
  • 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:

  • subdomainDifferentiableManifold open subset \(V\) of self._domain
  • dest_map – (default: None) DiffMap; destination map \(\Phi:\ V \rightarrow N\), where \(N\) is a subdomain of self._codomain; if None, the restriction of self.base_module().destination_map() to \(V\) is used

OUTPUT:

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 field
  • latex_name – (default: None) LaTeX symbol to denote the field; if none is provided, the LaTeX symbol is set to name
  • 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:

  • pointManifoldPoint; 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:

  • subdomainDifferentiableManifold; open subset \(V\) of self._domain
  • dest_map – (default: None) DiffMap destination map \(\Phi:\ V \rightarrow N\), where \(N\) is a subset of self._codomain; if None, the restriction of self.base_module().destination_map() to \(V\) is used

OUTPUT:

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