Tangent Spaces¶
The class TangentSpace
implements tangent vector spaces to a
differentiable manifold.
AUTHORS:
 Eric Gourgoulhon, Michal Bejger (20142015): initial version
 Travis Scrimshaw (2016): review tweaks
REFERENCES:
 Chap. 3 of [Lee2013]

class
sage.manifolds.differentiable.tangent_space.
TangentSpace
(point)¶ Bases:
sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule
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:
point
–ManifoldPoint
; point \(p\) at which the tangent space is defined
EXAMPLES:
Tangent space on a 2dimensional 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 2dimensional 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 2dimensional 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 2dimensional differentiable manifold M sage: Tp.bases() [Basis (d/dx,d/dy) on the Tangent space at Point p on the 2dimensional differentiable manifold M, Basis (d/du,d/dv) on the Tangent space at Point p on the 2dimensional 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 2dimensional differentiable manifold M sage: v.display() d/dx + 2 d/dy sage: v.parent() Tangent space at Point p on the 2dimensional differentiable manifold M
The zero vector:
sage: Tp.zero() Tangent vector zero at Point p on the 2dimensional differentiable manifold M sage: Tp.zero().display() zero = 0 sage: Tp.zero().parent() Tangent space at Point p on the 2dimensional 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
andp
share the same tangent space because they compare equal:sage: p1 == p True
The tangentspace uniqueness holds even if the points are created in different coordinate systems:
sage: xy_to_uv = c_xy.transition_map(c_uv, (x+y, xy)) 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
See also
FiniteRankFreeModule
for more documentation.
Element
¶ alias of
TangentVector

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 2dimensional 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