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