Differentiable Manifolds¶
Given a non-discrete topological field \(K\) (in most applications, \(K = \RR\) or \(K = \CC\); see however [4] for \(K = \QQ_p\) and [5] for other fields), a differentiable manifold over \(K\) is a topological manifold \(M\) over \(K\) equipped with an atlas whose transitions maps are of class \(C^k\) (i.e. \(k\)-times continuously differentiable) for a fixed positive integer \(k\) (possibly \(k=\infty\)). \(M\) is then called a \(C^k\)-manifold over \(K\).
Note that
- if the mention of \(K\) is omitted, then \(K=\RR\) is assumed;
- if \(K=\CC\), any \(C^k\)-manifold with \(k\geq 1\) is actually a \(C^\infty\)-manifold (even an analytic manifold);
- if \(K=\RR\), any \(C^k\)-manifold with \(k\geq 1\) admits a compatible \(C^\infty\)-structure (Whitney’s smoothing theorem).
Differentiable manifolds are implemented via the class
DifferentiableManifold
.
Open subsets of differentiable manifolds are also implemented via
DifferentiableManifold
, since they are differentiable manifolds by
themselves.
The user interface is provided by the generic function
Manifold()
, with
the argument structure
set to 'differentiable'
and the argument
diff_degree
set to \(k\), or the argument structure
set to 'smooth'
(the default value).
Example 1: the 2-sphere as a differentiable manifold of dimension 2 over \(\RR\)
One starts by declaring \(S^2\) as a 2-dimensional differentiable manifold:
sage: M = Manifold(2, 'S^2')
sage: M
2-dimensional differentiable manifold S^2
Since the base topological field has not been specified in the argument list
of Manifold
, \(\RR\) is assumed:
sage: M.base_field()
Real Field with 53 bits of precision
sage: dim(M)
2
By default, the created object is a smooth manifold:
sage: M.diff_degree()
+Infinity
Let us consider the complement of a point, the “North pole” say; this is an open subset of \(S^2\), which we call \(U\):
sage: U = M.open_subset('U'); U
Open subset U of the 2-dimensional differentiable manifold S^2
A standard chart on \(U\) is provided by the stereographic projection from the North pole to the equatorial plane:
sage: stereoN.<x,y> = U.chart(); stereoN
Chart (U, (x, y))
Thanks to the operator <x,y>
on the left-hand side, the coordinates
declared in a chart (here \(x\) and \(y\)), are accessible by their names; they are
Sage’s symbolic variables:
sage: y
y
sage: type(y)
<type 'sage.symbolic.expression.Expression'>
The South pole is the point of coordinates \((x,y)=(0,0)\) in the above chart:
sage: S = U.point((0,0), chart=stereoN, name='S'); S
Point S on the 2-dimensional differentiable manifold S^2
Let us call \(V\) the open subset that is the complement of the South pole and let us introduce on it the chart induced by the stereographic projection from the South pole to the equatorial plane:
sage: V = M.open_subset('V'); V
Open subset V of the 2-dimensional differentiable manifold S^2
sage: stereoS.<u,v> = V.chart(); stereoS
Chart (V, (u, v))
The North pole is the point of coordinates \((u,v)=(0,0)\) in this chart:
sage: N = V.point((0,0), chart=stereoS, name='N'); N
Point N on the 2-dimensional differentiable manifold S^2
To fully construct the manifold, we declare that it is the union of \(U\) and \(V\):
sage: M.declare_union(U,V)
and we provide the transition map between the charts stereoN
= \((U, (x, y))\)
and stereoS
= \((V, (u, v))\), denoting by \(W\) the intersection of \(U\) and
\(V\) (\(W\) is the subset of \(U\) defined by \(x^2+y^2\not=0\), as well as the subset
of \(V\) defined by \(u^2+v^2\not=0\)):
sage: stereoN_to_S = 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: stereoN_to_S
Change of coordinates from Chart (W, (x, y)) to Chart (W, (u, v))
sage: stereoN_to_S.display()
u = x/(x^2 + y^2)
v = y/(x^2 + y^2)
We give the name W
to the Python variable representing \(W=U\cap V\):
sage: W = U.intersection(V)
The inverse of the transition map is computed by the method inverse()
:
sage: stereoN_to_S.inverse()
Change of coordinates from Chart (W, (u, v)) to Chart (W, (x, y))
sage: stereoN_to_S.inverse().display()
x = u/(u^2 + v^2)
y = v/(u^2 + v^2)
At this stage, we have four open subsets on \(S^2\):
sage: M.list_of_subsets()
[2-dimensional differentiable manifold S^2,
Open subset U of the 2-dimensional differentiable manifold S^2,
Open subset V of the 2-dimensional differentiable manifold S^2,
Open subset W of the 2-dimensional differentiable manifold S^2]
\(W\) is the open subset that is the complement of the two poles:
sage: N in W or S in W
False
The North pole lies in \(V\) and the South pole in \(U\):
sage: N in V, N in U
(True, False)
sage: S in U, S in V
(True, False)
The manifold’s (user) atlas contains four charts, two of them being restrictions of charts to a smaller domain:
sage: M.atlas()
[Chart (U, (x, y)), Chart (V, (u, v)), Chart (W, (x, y)), Chart (W, (u, v))]
Let us consider the point of coordinates (1,2) in the chart stereoN
:
sage: p = M.point((1,2), chart=stereoN, name='p'); p
Point p on the 2-dimensional differentiable manifold S^2
sage: p.parent()
2-dimensional differentiable manifold S^2
sage: p in W
True
The coordinates of \(p\) in the chart stereoS
are computed by letting
the chart act on the point:
sage: stereoS(p)
(1/5, 2/5)
Given the definition of \(p\), we have of course:
sage: stereoN(p)
(1, 2)
Similarly:
sage: stereoS(N)
(0, 0)
sage: stereoN(S)
(0, 0)
A differentiable scalar field on the sphere:
sage: f = M.scalar_field({stereoN: atan(x^2+y^2), stereoS: pi/2-atan(u^2+v^2)},
....: name='f')
sage: f
Scalar field f on the 2-dimensional differentiable manifold S^2
sage: f.display()
f: S^2 --> R
on U: (x, y) |--> arctan(x^2 + y^2)
on V: (u, v) |--> 1/2*pi - arctan(u^2 + v^2)
sage: f(p)
arctan(5)
sage: f(N)
1/2*pi
sage: f(S)
0
sage: f.parent()
Algebra of differentiable scalar fields on the 2-dimensional differentiable
manifold S^2
sage: f.parent().category()
Category of commutative algebras over Symbolic Ring
Example 2: the Riemann sphere as a differentiable manifold of dimension 1 over \(\CC\)
We declare the Riemann sphere \(\CC^*\) as a 1-dimensional differentiable manifold over \(\CC\):
sage: M = Manifold(1, 'C*', field='complex'); M
1-dimensional complex manifold C*
We introduce a first open subset, which is actually \(\CC = \CC^*\setminus\{\infty\}\) if we interpret \(\CC^*\) as the Alexandroff one-point compactification of \(\CC\):
sage: U = M.open_subset('U')
A natural chart on \(U\) is then nothing but the identity map of \(\CC\), hence we denote the associated coordinate by \(z\):
sage: Z.<z> = U.chart()
The origin of the complex plane is the point of coordinate \(z=0\):
sage: O = U.point((0,), chart=Z, name='O'); O
Point O on the 1-dimensional complex manifold C*
Another open subset of \(\CC^*\) is \(V = \CC^*\setminus\{O\}\):
sage: V = M.open_subset('V')
We define a chart on \(V\) such that the point at infinity is the point of coordinate 0 in this chart:
sage: W.<w> = V.chart(); W
Chart (V, (w,))
sage: inf = M.point((0,), chart=W, name='inf', latex_name=r'\infty')
sage: inf
Point inf on the 1-dimensional complex manifold C*
To fully construct the Riemann sphere, we declare that it is the union of \(U\) and \(V\):
sage: M.declare_union(U,V)
and we provide the transition map between the two charts as \(w=1/z\) on on \(A = U\cap V\):
sage: Z_to_W = Z.transition_map(W, 1/z, intersection_name='A',
....: restrictions1= z!=0, restrictions2= w!=0)
sage: Z_to_W
Change of coordinates from Chart (A, (z,)) to Chart (A, (w,))
sage: Z_to_W.display()
w = 1/z
sage: Z_to_W.inverse()
Change of coordinates from Chart (A, (w,)) to Chart (A, (z,))
sage: Z_to_W.inverse().display()
z = 1/w
Let consider the complex number \(i\) as a point of the Riemann sphere:
sage: i = M((I,), chart=Z, name='i'); i
Point i on the 1-dimensional complex manifold C*
Its coordinates w.r.t. the charts Z
and W
are:
sage: Z(i)
(I,)
sage: W(i)
(-I,)
and we have:
sage: i in U
True
sage: i in V
True
The following subsets and charts have been defined:
sage: M.list_of_subsets()
[Open subset A of the 1-dimensional complex manifold C*,
1-dimensional complex manifold C*,
Open subset U of the 1-dimensional complex manifold C*,
Open subset V of the 1-dimensional complex manifold C*]
sage: M.atlas()
[Chart (U, (z,)), Chart (V, (w,)), Chart (A, (z,)), Chart (A, (w,))]
A constant map \(\CC^* \rightarrow \CC\):
sage: f = M.constant_scalar_field(3+2*I, name='f'); f
Scalar field f on the 1-dimensional complex manifold C*
sage: f.display()
f: C* --> C
on U: z |--> 2*I + 3
on V: w |--> 2*I + 3
sage: f(O)
2*I + 3
sage: f(i)
2*I + 3
sage: f(inf)
2*I + 3
sage: f.parent()
Algebra of differentiable scalar fields on the 1-dimensional complex
manifold C*
sage: f.parent().category()
Category of commutative algebras over Symbolic Ring
AUTHORS:
- Eric Gourgoulhon (2015): initial version
REFERENCES:
[1] | J.M. Lee : Introduction to Smooth Manifolds, 2nd ed., Springer (New York) (2012); doi:10.1007/978-1-4419-9982-5 |
[2] | S. Kobayashi & K. Nomizu : Foundations of Differential Geometry, vol. 1, Interscience Publishers (New York) (1963) |
[3] | D. Huybrechts : Complex Geometry, Springer (Berlin) (2005); doi:10.1007/b137952 |
[4] | (1, 2) J.-P. Serre : Lie Algebras and Lie Groups, 2nd ed., Springer (Berlin) (1992); doi:10.1007/978-3-540-70634-2 |
[5] | (1, 2) W. Bertram : Differential Geometry, Lie Groups and Symmetric Spaces over General Base Fields and Rings, Memoirs of the American Mathematical Society, vol. 192 (2008); doi:10.1090/memo/0900; Arxiv math/0502168 |
[6] | M. Berger & B. Gostiaux : Differential Geometry: Manifolds, Curves and Surfaces, Springer (New York) (1988); doi:10.1007/978-1-4612-1033-7 |
-
class
sage.manifolds.differentiable.manifold.
DifferentiableManifold
(n, name, field, structure, ambient=None, diff_degree=+Infinity, latex_name=None, start_index=0, category=None, unique_tag=None)¶ Bases:
sage.manifolds.manifold.TopologicalManifold
Differentiable manifold over a topological field \(K\).
Given a non-discrete topological field \(K\) (in most applications, \(K = \RR\) or \(K = \CC\); see however [4] for \(K = \QQ_p\) and [5] for other fields), a differentiable manifold over \(K\) is a topological manifold \(M\) over \(K\) equipped with an atlas whose transitions maps are of class \(C^k\) (i.e. \(k\)-times continuously differentiable) for a fixed positive integer \(k\) (possibly \(k=\infty\)). \(M\) is then called a \(C^k\)-manifold over \(K\).
Note that
- if the mention of \(K\) is omitted, then \(K=\RR\) is assumed;
- if \(K=\CC\), any \(C^k\)-manifold with \(k\geq 1\) is actually a \(C^\infty\)-manifold (even an analytic manifold);
- if \(K=\RR\), any \(C^k\)-manifold with \(k\geq 1\) admits a compatible \(C^\infty\)-structure (Whitney’s smoothing theorem).
INPUT:
n
– positive integer; dimension of the manifoldname
– string; name (symbol) given to the manifoldfield
– field \(K\) on which the manifold is defined; allowed values are'real'
or an object of typeRealField
(e.g.,RR
) for a manifold over \(\RR\)'complex'
or an object of typeComplexField
(e.g.,CC
) for a manifold over \(\CC\)- an object in the category of topological fields (see
Fields
andTopologicalSpaces
) for other types of manifolds
structure
– manifold structure (seeDifferentialStructure
orRealDifferentialStructure
)ambient
– (default:None
) if notNone
, must be a differentiable manifold; the created object is then an open subset ofambient
diff_degree
– (default:infinity
) degree \(k\) of differentiabilitylatex_name
– (default:None
) string; LaTeX symbol to denote the manifold; if none is provided, it is set toname
start_index
– (default: 0) integer; lower value of the range of indices used for “indexed objects” on the manifold, e.g. coordinates in a chartcategory
– (default:None
) to specify the category; ifNone
,Manifolds(field).Differentiable()
(orManifolds(field).Smooth()
ifdiff_degree
=infinity
) is assumed (see the categoryManifolds
)unique_tag
– (default:None
) tag used to force the construction of a new object when all the other arguments have been used previously (withoutunique_tag
, theUniqueRepresentation
behavior inherited fromManifoldSubset
, viaTopologicalManifold
, would return the previously constructed object corresponding to these arguments).
EXAMPLES:
A 4-dimensional differentiable manifold (over \(\RR\)):
sage: M = Manifold(4, 'M', latex_name=r'\mathcal{M}'); M 4-dimensional differentiable manifold M sage: type(M) <class 'sage.manifolds.differentiable.manifold.DifferentiableManifold_with_category'> sage: latex(M) \mathcal{M} sage: dim(M) 4
Since the base field has not been specified, \(\RR\) has been assumed:
sage: M.base_field() Real Field with 53 bits of precision
Since the degree of differentiability has not been specified, the default value, \(C^\infty\), has been assumed:
sage: M.diff_degree() +Infinity
The input parameter
start_index
defines the range of indices on the manifold:sage: M = Manifold(4, 'M') sage: list(M.irange()) [0, 1, 2, 3] sage: M = Manifold(4, 'M', start_index=1) sage: list(M.irange()) [1, 2, 3, 4] sage: list(Manifold(4, 'M', start_index=-2).irange()) [-2, -1, 0, 1]
A complex manifold:
sage: N = Manifold(3, 'N', field='complex'); N 3-dimensional complex manifold N
A differentiable manifold over \(\QQ_5\), the field of 5-adic numbers:
sage: N = Manifold(2, 'N', field=Qp(5)); N 2-dimensional differentiable manifold N over the 5-adic Field with capped relative precision 20
A differentiable manifold is of course a topological manifold:
sage: isinstance(M, sage.manifolds.manifold.TopologicalManifold) True sage: isinstance(N, sage.manifolds.manifold.TopologicalManifold) True
A differentiable manifold is a Sage parent object, in the category of differentiable (here smooth) manifolds over a given topological field (see
Manifolds
):sage: isinstance(M, Parent) True sage: M.category() Category of smooth manifolds over Real Field with 53 bits of precision sage: from sage.categories.manifolds import Manifolds sage: M.category() is Manifolds(RR).Smooth() True sage: M.category() is Manifolds(M.base_field()).Smooth() True sage: M in Manifolds(RR).Smooth() True sage: N in Manifolds(Qp(5)).Smooth() True
The corresponding Sage elements are points:
sage: X.<t, x, y, z> = M.chart() sage: p = M.an_element(); p Point on the 4-dimensional differentiable manifold M sage: p.parent() 4-dimensional differentiable manifold M sage: M.is_parent_of(p) True sage: p in M True
The manifold’s points are instances of class
ManifoldPoint
:sage: isinstance(p, sage.manifolds.point.ManifoldPoint) True
Since an open subset of a differentiable manifold \(M\) is itself a differentiable manifold, open subsets of \(M\) have all attributes of manifolds:
sage: U = M.open_subset('U', coord_def={X: t>0}); U Open subset U of the 4-dimensional differentiable manifold M sage: U.category() Join of Category of subobjects of sets and Category of smooth manifolds over Real Field with 53 bits of precision sage: U.base_field() == M.base_field() True sage: dim(U) == dim(M) True
The manifold passes all the tests of the test suite relative to its category:
sage: TestSuite(M).run()
-
diff_degree
()¶ Return the manifold’s degree of differentiability.
The degree of differentiability is the integer \(k\) (possibly \(k=\infty\)) such that the manifold is a \(C^k\)-manifold over its base field.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: M.diff_degree() +Infinity sage: M = Manifold(2, 'M', structure='differentiable', diff_degree=3) sage: M.diff_degree() 3
-
diff_map
(codomain, coord_functions=None, chart1=None, chart2=None, name=None, latex_name=None)¶ Define a differentiable map between the current differentiable manifold and a differentiable manifold over the same topological field.
See
DiffMap
for a complete documentation.INPUT:
codomain
– the map codomain (a differentiable manifold over the same topological field as the current differentiable manifold)coord_functions
– (default:None
) if notNone
, must be either- (i) a dictionary of
the coordinate expressions (as lists (or tuples) of the
coordinates of the image expressed in terms of the coordinates of
the considered point) with the pairs of charts (chart1, chart2)
as keys (chart1 being a chart on the current manifold and chart2 a
chart on
codomain
) - (ii) a single coordinate expression in a given pair of charts, the
latter being provided by the arguments
chart1
andchart2
In both cases, if the dimension of the arrival manifold is 1, a single coordinate expression can be passed instead of a tuple with a single element
- (i) a dictionary of
the coordinate expressions (as lists (or tuples) of the
coordinates of the image expressed in terms of the coordinates of
the considered point) with the pairs of charts (chart1, chart2)
as keys (chart1 being a chart on the current manifold and chart2 a
chart on
chart1
– (default:None
; used only in case (ii) above) chart on the current manifold defining the start coordinates involved incoord_functions
for case (ii); if none is provided, the coordinates are assumed to refer to the manifold’s default chartchart2
– (default:None
; used only in case (ii) above) chart oncodomain
defining the arrival coordinates involved incoord_functions
for case (ii); if none is provided, the coordinates are assumed to refer to the default chart ofcodomain
name
– (default:None
) name given to the differentiable maplatex_name
– (default:None
) LaTeX symbol to denote the differentiable map; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- the differentiable map, as an instance of
DiffMap
EXAMPLES:
A differentiable map between an open subset of \(S^2\) covered by regular spherical coordinates and \(\RR^3\):
sage: M = Manifold(2, 'S^2') sage: U = M.open_subset('U') sage: c_spher.<th,ph> = U.chart(r'th:(0,pi):\theta ph:(0,2*pi):\phi') sage: N = Manifold(3, 'R^3', r'\RR^3') sage: c_cart.<x,y,z> = N.chart() # Cartesian coord. on R^3 sage: Phi = U.diff_map(N, (sin(th)*cos(ph), sin(th)*sin(ph), cos(th)), ....: name='Phi', latex_name=r'\Phi') sage: Phi Differentiable map Phi from the Open subset U of the 2-dimensional differentiable manifold S^2 to the 3-dimensional differentiable manifold R^3
The same definition, but with a dictionary with pairs of charts as keys (case (i) above):
sage: Phi1 = U.diff_map(N, ....: {(c_spher, c_cart): (sin(th)*cos(ph), sin(th)*sin(ph), ....: cos(th))}, name='Phi', latex_name=r'\Phi') sage: Phi1 == Phi True
The differentiable map acting on a point:
sage: p = U.point((pi/2, pi)) ; p Point on the 2-dimensional differentiable manifold S^2 sage: Phi(p) Point on the 3-dimensional differentiable manifold R^3 sage: Phi(p).coord(c_cart) (-1, 0, 0) sage: Phi1(p) == Phi(p) True
See the documentation of class
DiffMap
for more examples.
-
diff_mapping
(codomain, coord_functions=None, chart1=None, chart2=None, name=None, latex_name=None)¶ Deprecated.
Use
diff_map()
instead.EXAMPLE:
sage: M = Manifold(2, 'M'); X.<x,y> = M.chart() sage: N = Manifold(2, 'N'); Y.<u,v> = N.chart() sage: Phi = M.diff_mapping(N, {(X,Y): [x+y, x-y]}, name='Phi') doctest:...: DeprecationWarning: Use diff_map() instead. See http://trac.sagemath.org/18783 for details. sage: Phi Differentiable map Phi from the 2-dimensional differentiable manifold M to the 2-dimensional differentiable manifold N
-
diffeomorphism
(codomain, coord_functions=None, chart1=None, chart2=None, name=None, latex_name=None)¶ Define a diffeomorphism between the current manifold and another one.
See
DiffMap
for a complete documentation.INPUT:
codomain
– codomain of the diffeomorphism (the arrival manifold or some subset of it)coord_functions
– (default:None
) if notNone
, must be either- (i) a dictionary of
the coordinate expressions (as lists (or tuples) of the
coordinates of the image expressed in terms of the coordinates of
the considered point) with the pairs of charts (chart1, chart2)
as keys (chart1 being a chart on the current manifold and chart2
a chart on
codomain
) - (ii) a single coordinate expression in a given pair of charts, the
latter being provided by the arguments
chart1
andchart2
In both cases, if the dimension of the arrival manifold is 1, a single coordinate expression can be passed instead of a tuple with a single element
- (i) a dictionary of
the coordinate expressions (as lists (or tuples) of the
coordinates of the image expressed in terms of the coordinates of
the considered point) with the pairs of charts (chart1, chart2)
as keys (chart1 being a chart on the current manifold and chart2
a chart on
chart1
– (default:None
; used only in case (ii) above) chart on the current manifold defining the start coordinates involved incoord_functions
for case (ii); if none is provided, the coordinates are assumed to refer to the manifold’s default chartchart2
– (default:None
; used only in case (ii) above) chart oncodomain
defining the arrival coordinates involved incoord_functions
for case (ii); if none is provided, the coordinates are assumed to refer to the default chart ofcodomain
name
– (default:None
) name given to the diffeomorphismlatex_name
– (default:None
) LaTeX symbol to denote the diffeomorphism; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- the diffeomorphism, as an instance of
DiffMap
EXAMPLE:
Diffeomorphism between the open unit disk in \(\RR^2\) and \(\RR^2\):
sage: M = Manifold(2, 'M') # the open unit disk sage: forget() # for doctests only sage: c_xy.<x,y> = M.chart('x:(-1,1) y:(-1,1)') # Cartesian coord on M sage: c_xy.add_restrictions(x^2+y^2<1) sage: N = Manifold(2, 'N') # R^2 sage: c_XY.<X,Y> = N.chart() # canonical coordinates on R^2 sage: Phi = M.diffeomorphism(N, [x/sqrt(1-x^2-y^2), y/sqrt(1-x^2-y^2)], ....: name='Phi', latex_name=r'\Phi') sage: Phi Diffeomorphism Phi from the 2-dimensional differentiable manifold M to the 2-dimensional differentiable manifold N sage: Phi.display() Phi: M --> N (x, y) |--> (X, Y) = (x/sqrt(-x^2 - y^2 + 1), y/sqrt(-x^2 - y^2 + 1))
The inverse diffeomorphism:
sage: Phi^(-1) Diffeomorphism Phi^(-1) from the 2-dimensional differentiable manifold N to the 2-dimensional differentiable manifold M sage: (Phi^(-1)).display() Phi^(-1): N --> M (X, Y) |--> (x, y) = (X/sqrt(X^2 + Y^2 + 1), Y/sqrt(X^2 + Y^2 + 1))
See the documentation of class
DiffMap
for more examples.
-
open_subset
(name, latex_name=None, coord_def={})¶ Create an open subset of the manifold.
An open subset is a set that is (i) included in the manifold and (ii) open with respect to the manifold’s topology. It is a differentiable manifold by itself. Hence the returned object is an instance of
DifferentiableManifold
.INPUT:
name
– name given to the open subsetlatex_name
– (default:None
) LaTeX symbol to denote the subset; if none is provided, it is set toname
coord_def
– (default: {}) definition of the subset in terms of coordinates;coord_def
must a be dictionary with keys charts in the manifold’s atlas and values the symbolic expressions formed by the coordinates to define the subset.
OUTPUT:
- the open subset, as an instance of
DifferentiableManifold
EXAMPLES:
Creating an open subset of a differentiable manifold:
sage: M = Manifold(2, 'M') sage: A = M.open_subset('A'); A Open subset A of the 2-dimensional differentiable manifold M
As an open subset of a differentiable manifold,
A
is itself a differentiable manifold, on the same topological field and of the same dimension asM
:sage: A.category() Join of Category of subobjects of sets and Category of smooth manifolds over Real Field with 53 bits of precision sage: A.base_field() == M.base_field() True sage: dim(A) == dim(M) True
Creating an open subset of
A
:sage: B = A.open_subset('B'); B Open subset B of the 2-dimensional differentiable manifold M
We have then:
sage: A.list_of_subsets() [Open subset A of the 2-dimensional differentiable manifold M, Open subset B of the 2-dimensional differentiable manifold M] sage: B.is_subset(A) True sage: B.is_subset(M) True
Defining an open subset by some coordinate restrictions: the open unit disk in of the Euclidean plane:
sage: X.<x,y> = M.chart() # Cartesian coordinates on M sage: U = M.open_subset('U', coord_def={X: x^2+y^2<1}); U Open subset U of the 2-dimensional differentiable manifold M
Since the argument
coord_def
has been set,U
is automatically endowed with a chart, which is the restriction ofX
toU
:sage: U.atlas() [Chart (U, (x, y))] sage: U.default_chart() Chart (U, (x, y)) sage: U.default_chart() is X.restrict(U) True
An point in
U
:sage: p = U.an_element(); p Point on the 2-dimensional differentiable manifold M sage: X(p) # the coordinates (x,y) of p (0, 0) sage: p in U True
Checking whether various points, defined by their coordinates w.r.t. chart
X
, are inU
:sage: M((0,1/2)) in U True sage: M((0,1)) in U False sage: M((1/2,1)) in U False sage: M((-1/2,1/3)) in U True