# 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)

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 $$\mathfrak{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(name='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]]


It is equivalent to pass the components while defining $$a$$:

sage: a = M.automorphism_field({eU: [[1,x], [0,2]]}, name='a')


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)


At this stage, the automorphism 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: W = U.intersection(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: eU = c_xy.frame() ; eV = c_uv.frame()
sage: a = M.automorphism_field({eU: [[1,x], [0,2]]}, name='a')
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 stereo. coord. from North pole to W
sage: stereoS_W = W.atlas()[1]  # restriction of stereo. coord. from South pole to W
sage: eN_W = stereoN_W.frame() ; eS_W = stereoS_W.frame()
sage: a = M.automorphism_field({eN: [[1, atan(x^2+y^2)], [0,3]]},
....:                          name='a')
Field of tangent-space automorphisms a on the 2-dimensional
differentiable manifold S^2
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)

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 $$\mathfrak{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([[sqrt(3)/2, -1/2], [1/2, sqrt(3)/2]],
....:                            name='R'); rot
Field of tangent-space automorphisms R on the 2-dimensional
differentiable manifold R^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:

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([[1+exp(y), x*y], [0, 1+x^2]],
....:                          name='a')
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([[0, 2], [-1, 0]], name='a')
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([[1, x*y], [0, 3]], name='a'); a
Field of tangent-space automorphisms a on the 2-dimensional
differentiable manifold R^2
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