Tangent Spaces¶

The class TangentSpace implements tangent vector spaces to a differentiable manifold.

AUTHORS:

• Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
• Travis Scrimshaw (2016): review tweaks

REFERENCES:

class sage.manifolds.differentiable.tangent_space.TangentSpace(point)

Tangent space to a differentiable manifold at a given point.

Let $$M$$ be a differentiable manifold of dimension $$n$$ over a topological field $$K$$ and $$p \in M$$. The tangent space $$T_p M$$ is an $$n$$-dimensional vector space over $$K$$ (without a distinguished basis).

INPUT:

EXAMPLES:

Tangent space on a 2-dimensional manifold:

sage: M = Manifold(2, 'M')
sage: c_xy.<x,y> = M.chart()
sage: p = M.point((-1,2), name='p')
sage: Tp = M.tangent_space(p) ; Tp
Tangent space at Point p on the 2-dimensional differentiable manifold M


Tangent spaces are free modules of finite rank over SymbolicRing (actually vector spaces of finite dimension over the manifold base field $$K$$, with $$K=\RR$$ here):

sage: Tp.base_ring()
Symbolic Ring
sage: Tp.category()
Category of finite dimensional vector spaces over Symbolic Ring
sage: Tp.rank()
2
sage: dim(Tp)
2


The tangent space is automatically endowed with bases deduced from the vector frames around the point:

sage: Tp.bases()
[Basis (d/dx,d/dy) on the Tangent space at Point p on the 2-dimensional
differentiable manifold M]
sage: M.frames()
[Coordinate frame (M, (d/dx,d/dy))]


At this stage, only one basis has been defined in the tangent space, but new bases can be added from vector frames on the manifold by means of the method at(), for instance, from the frame associated with some new coordinates:

sage: c_uv.<u,v> = M.chart()
sage: c_uv.frame().at(p)
Basis (d/du,d/dv) on the Tangent space at Point p on the 2-dimensional
differentiable manifold M
sage: Tp.bases()
[Basis (d/dx,d/dy) on the Tangent space at Point p on the 2-dimensional
differentiable manifold M,
Basis (d/du,d/dv) on the Tangent space at Point p on the 2-dimensional
differentiable manifold M]


All the bases defined on Tp are on the same footing. Accordingly the tangent space is not in the category of modules with a distinguished basis:

sage: Tp in ModulesWithBasis(SR)
False


It is simply in the category of modules:

sage: Tp in Modules(SR)
True


Since the base ring is a field, it is actually in the category of vector spaces:

sage: Tp in VectorSpaces(SR)
True


A typical element:

sage: v = Tp.an_element() ; v
Tangent vector at Point p on the
2-dimensional differentiable manifold M
sage: v.display()
d/dx + 2 d/dy
sage: v.parent()
Tangent space at Point p on the
2-dimensional differentiable manifold M


The zero vector:

sage: Tp.zero()
Tangent vector zero at Point p on the
2-dimensional differentiable manifold M
sage: Tp.zero().display()
zero = 0
sage: Tp.zero().parent()
Tangent space at Point p on the
2-dimensional differentiable manifold M


Tangent spaces are unique:

sage: M.tangent_space(p) is Tp
True
sage: p1 = M.point((-1,2))
sage: M.tangent_space(p1) is Tp
True


even if points are not:

sage: p1 is p
False


Actually p1 and p share the same tangent space because they compare equal:

sage: p1 == p
True


The tangent-space uniqueness holds even if the points are created in different coordinate systems:

sage: xy_to_uv = c_xy.transition_map(c_uv, (x+y, x-y))
sage: uv_to_xv = xy_to_uv.inverse()
sage: p2 = M.point((1, -3), chart=c_uv, name='p_2')
sage: p2 is p
False
sage: M.tangent_space(p2) is Tp
True
sage: p2 == p
True


FiniteRankFreeModule for more documentation.

Element
base_point()

Return the manifold point at which self is defined.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.base_point()
Point p on the 2-dimensional differentiable manifold M
sage: Tp.base_point() is p
True

dim()

Return the vector space dimension of self.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.dimension()
2


A shortcut is dim():

sage: Tp.dim()
2


One can also use the global function dim:

sage: dim(Tp)
2

dimension()

Return the vector space dimension of self.

EXAMPLES:

sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: p = M.point((1,-2), name='p')
sage: Tp = M.tangent_space(p)
sage: Tp.dimension()
2


A shortcut is dim():

sage: Tp.dim()
2


One can also use the global function dim:

sage: dim(Tp)
2