Degenerate submanifolds

An embedded (resp. immersed) degenerate submanifold of a proper pseudo-Riemannian manifold \((M,g)\) is an embedded (resp. immersed) submanifold \(H\) of \(M\) as a differentiable manifold such that pull back of the metric tensor \(g\) via the embedding (resp. immersion) endows \(H\) with the structure of a degenerate manifold.

Degenerate submanifolds are study in many fields of mathematics and physics, for instance in Differential Geometry (especially in geometry of lightlike submanifold) and in General Relativity. In geometry of lightlike submanifolds, according to the dimension \(r\) of the radical distribution (see below for definition of radical distribution), degenerate submanifolds have been classified into 4 subgroups: \(r\)-lightlike submanifolds, Coisotropic submanifolds, Isotropic submanifolds and Totally lightlike submanifolds. (See the book of Krishan L. Duggal and Aurel Bejancu [DS2010].)

In the present module, you can define any of the 4 types but most of the methods are implemented only for degenerate hypersurfaces who belong to \(r\)-lightlike submanifolds. However, they might be generalized to \(1\)-lightlike submanifolds. In the literature there is a new approach (the rigging technique) for studying \(1\)-lightlike submanifolds but here we use the method of Krishan L. Duggal and Aurel Bejancu based on the screen distribution.

Let \(H\) be a lightlike hypersurface of a pseudo-Riemannian manifold \((M,g)\). Then the normal bundle \(TH^\perp\) intersect the tangent bundle \(TH\). The radical distribution is defined as \(Rad(TH)=TH\cap TH^\perp\). In case of hypersurfaces, and more generally \(1\)-lightlike submanifolds, this is a rank 1 distribution. A screen distribution \(S(TH)\) is a complementary of \(Rad(TH)\) in \(TH\).

Giving a screen distribution \(S(TH)\) and a null vector field \(\xi\) locally defined and spanning \(Rad(TH)\), there exists a unique transversal null vector field ‘N’ locally defined and such that \(g(N,\xi)=1\). From a transverse vector ‘v’, the null rigging ‘N’ is giving by the formula

\[N = \frac{1}{g(\xi, v)}\left(v-\frac{g(v,v)}{2g(\xi, v)}\xi\right)\]

Tensors on the ambient manifold \(M\) are projected on \(H\) along \(N\) to obtain induced objects. For instance, induced connection is the linear connection defined on H through the Levi-Civitta connection of \(g\) along \(N\).

To work on a degenerate submanifold, after defining \(H\) as an instance of DifferentiableManifold, with the keyword structure='degenerate_metric', you have to set a transvervector \(v\) and screen distribution together with the radical distribution.

An example of degenerate submanifold from General Relativity is the horizon of the Schwarzschild black hole. Allow us to recall that Schwarzschild black hole is the first non-trivial solution of Einstein’s equations. It describes the metric inside a star of radius \(R = 2m\), being \(m\) the inertial mass of the star. It can be seen as an open ball in a Lorentzian manifold structure on \(\RR^4\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X_M.<t, r, th, ph> = \
....: M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
sage: var('m'); assume(m>0)
m
sage: g = M.metric()
sage: g[0,0], g[0,1], g[1,1], g[2,2], g[3,3] = \
....: -1+2*m/r, 2*m/r, 1+2*m/r, r^2, r^2*sin(th)^2
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X_M = M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi", names=('t', 'r', 'th', 'ph',)); (t, r, th, ph,) = X_M._first_ngens(4)
>>> var('m'); assume(m>Integer(0))
m
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(0),Integer(1)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1)+Integer(2)*m/r, Integer(2)*m/r, Integer(1)+Integer(2)*m/r, r**Integer(2), r**Integer(2)*sin(th)**Integer(2)
M = Manifold(4, 'M', structure='Lorentzian')
X_M.<t, r, th, ph> = \
M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
var('m'); assume(m>0)
g = M.metric()
g[0,0], g[0,1], g[1,1], g[2,2], g[3,3] = \
-1+2*m/r, 2*m/r, 1+2*m/r, r^2, r^2*sin(th)^2

Let us define the horizon as a degenerate hypersurface:

sage: H = Manifold(3, 'H', ambient=M, structure='degenerate_metric')
sage: H
degenerate hypersurface H embedded in 4-dimensional differentiable
manifold M
>>> from sage.all import *
>>> H = Manifold(Integer(3), 'H', ambient=M, structure='degenerate_metric')
>>> H
degenerate hypersurface H embedded in 4-dimensional differentiable
manifold M
H = Manifold(3, 'H', ambient=M, structure='degenerate_metric')
H

A \(2\)-dimensional degenerate submanifold of a Lorentzian manifold:

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
sage: S
2-dimensional degenerate submanifold S embedded in 4-dimensional
differentiable manifold M
sage: X_S.<u,v> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, u, v]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=[x,y])
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', V, xi)

sage: S.default_screen()
screen distribution Sc along the 2-dimensional degenerate submanifold
S embedded in 4-dimensional differentiable manifold M mapped into
the 4-dimensional Lorentzian manifold M

sage: S.ambient_metric()
Lorentzian metric g on the 4-dimensional Lorentzian manifold M

sage: S.induced_metric()
degenerate metric gamma on the 2-dimensional degenerate submanifold S
embedded in 4-dimensional differentiable manifold M

sage: S.first_fundamental_form()
Field of symmetric bilinear forms g|S along the 2-dimensional
degenerate submanifold S embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

sage: S.adapted_frame()
Vector frame (S, (vv_0,vv_1,vv_2,vv_3)) with values on the 4-dimensional Lorentzian manifold M

sage: S.projection(V)
Tensor field of type (1,0) along the 2-dimensional degenerate submanifold S
embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

sage: S.weingarten_map()  # long time
Tensor field nabla_g(xi)|X(S) of type (1,1) along the 2-dimensional
degenerate submanifold S embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

sage: SO = S.shape_operator()  # long time
sage: SO.display()             # long time
A^* = 0

sage: S.is_tangent(xi.along(Phi))
True
sage: v = M.vector_field(); v[1] = 1
sage: S.is_tangent(v.along(Phi))
False
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(2), 'S', ambient=M, structure='degenerate_metric')
>>> S
2-dimensional degenerate submanifold S embedded in 4-dimensional
differentiable manifold M
>>> X_S = S.chart(names=('u', 'v',)); (u, v,) = X_S._first_ngens(2)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, u, v]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=[x,y])
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', V, xi)

>>> S.default_screen()
screen distribution Sc along the 2-dimensional degenerate submanifold
S embedded in 4-dimensional differentiable manifold M mapped into
the 4-dimensional Lorentzian manifold M

>>> S.ambient_metric()
Lorentzian metric g on the 4-dimensional Lorentzian manifold M

>>> S.induced_metric()
degenerate metric gamma on the 2-dimensional degenerate submanifold S
embedded in 4-dimensional differentiable manifold M

>>> S.first_fundamental_form()
Field of symmetric bilinear forms g|S along the 2-dimensional
degenerate submanifold S embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

>>> S.adapted_frame()
Vector frame (S, (vv_0,vv_1,vv_2,vv_3)) with values on the 4-dimensional Lorentzian manifold M

>>> S.projection(V)
Tensor field of type (1,0) along the 2-dimensional degenerate submanifold S
embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

>>> S.weingarten_map()  # long time
Tensor field nabla_g(xi)|X(S) of type (1,1) along the 2-dimensional
degenerate submanifold S embedded in 4-dimensional differentiable manifold M
with values on the 4-dimensional Lorentzian manifold M

>>> SO = S.shape_operator()  # long time
>>> SO.display()             # long time
A^* = 0

>>> S.is_tangent(xi.along(Phi))
True
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.is_tangent(v.along(Phi))
False
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
S
X_S.<u,v> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, u, v]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=[x,y])
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', V, xi)
S.default_screen()
S.ambient_metric()
S.induced_metric()
S.first_fundamental_form()
S.adapted_frame()
S.projection(V)
S.weingarten_map()  # long time
SO = S.shape_operator()  # long time
SO.display()             # long time
S.is_tangent(xi.along(Phi))
v = M.vector_field(); v[1] = 1
S.is_tangent(v.along(Phi))

AUTHORS:

  • Hans Fotsing Tetsing (2019) : initial version

REFERENCES:

class sage.manifolds.differentiable.degenerate_submanifold.DegenerateSubmanifold(n, name, ambient=None, metric_name=None, signature=None, base_manifold=None, diff_degree=+Infinity, latex_name=None, metric_latex_name=None, start_index=0, category=None, unique_tag=None)[source]

Bases: DegenerateManifold, DifferentiableSubmanifold

Degenerate submanifolds.

An embedded (resp. immersed) degenerate submanifold of a proper pseudo-Riemannian manifold \((M,g)\) is an embedded (resp. immersed) submanifold \(H\) of \(M\) as a differentiable manifold such that pull back of the metric tensor \(g\) via the embedding (resp. immersion) endows \(H\) with the structure of a degenerate manifold.

INPUT:

  • n – positive integer; dimension of the manifold

  • name – string; name (symbol) given to the manifold

  • ambient – (default: None) pseudo-Riemannian manifold \(M\) in which the submanifold is embedded (or immersed). If None, it is set to self

  • metric_name – (default: None) string; name (symbol) given to the metric; if None, 'g' is used

  • signature – (default: None) signature \(S\) of the metric as a tuple: \(S = (n_+, n_-, n_0)\), where \(n_+\) (resp. \(n_-\), resp. \(n_0\)) is the number of positive terms (resp. negative terms, resp. zero tems) in any diagonal writing of the metric components; if signature is not provided, \(S\) is set to \((ndim-1, 0, 1)\), being \(ndim\) the manifold’s dimension

  • base_manifold – (default: None) if not None, must be a topological manifold; the created object is then an open subset of base_manifold

  • diff_degree – (default: infinity) degree of differentiability

  • latex_name – (default: None) string; LaTeX symbol to denote the manifold; if none are provided, it is set to name

  • metric_latex_name – (default: None) string; LaTeX symbol to denote the metric; if none is provided, it is set to metric_name

  • start_index – (default: 0) integer; lower value of the range of indices used for “indexed objects” on the manifold, e.g., coordinates in a chart - category – (default: None) to specify the category; if None, Manifolds(field) is assumed (see the category Manifolds)

  • unique_tag – (default: None) tag used to force the construction of a new object when all the other arguments have been used previously (without unique_tag, the UniqueRepresentation behavior inherited from ManifoldSubset would return the previously constructed object corresponding to these arguments)

adapted_frame(screen=None)[source]

Return a frame \((e_1,\ldots,e_p, \xi_1,\ldots, \xi_r, v_1,\ldots, v_q, N_1, \ldots, N_n)\) of the ambient manifold along the submanifold, being \(e_i\) vector fields spanning the giving screen distribution, \(\xi_i\) vector fields spanning radical distribution, \(v_i\) normal transversal vector fields, \(N_i\) rigging vector fields corresponding to the giving screen.

INPUT:

  • screen – (default: None) an instance of Screen. if None default screen is used.

OUTPUT: a frame on the ambient manifold along the submanifold

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: T = S.adapted_frame(); T         # long time
Vector frame (S, (vv_0,vv_1,vv_2,vv_3)) with values on the 4-dimensional
Lorentzian manifold M
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> T = S.adapted_frame(); T         # long time
Vector frame (S, (vv_0,vv_1,vv_2,vv_3)) with values on the 4-dimensional
Lorentzian manifold M
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
T = S.adapted_frame(); T         # long time
ambient_metric()[source]

Return the metric of the ambient manifold. The submanifold has to be embedded

OUTPUT: the metric of the ambient manifold

EXAMPLES:

The lightcone of the 3D Minkowski space:

sage: M = Manifold(3, 'M', structure='Lorentzian')
sage: X.<t,x,y> = M.chart()
sage: S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v]},
....:           name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
....:               latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: S.ambient_metric()
Lorentzian metric g on the 3-dimensional Lorentzian manifold M
>>> from sage.all import *
>>> M = Manifold(Integer(3), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y',)); (t, x, y,) = X._first_ngens(3)
>>> S = Manifold(Integer(2), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v',)); (u, v,) = X_S._first_ngens(2)
>>> Phi = S.diff_map(M, {(X_S, X): [sqrt(u**Integer(2)+v**Integer(2)), u, v]},
...           name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
...               latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> S.ambient_metric()
Lorentzian metric g on the 3-dimensional Lorentzian manifold M
M = Manifold(3, 'M', structure='Lorentzian')
X.<t,x,y> = M.chart()
S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v]},
          name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
              latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
S.ambient_metric()
default_screen()[source]

Return the default screen distribution.

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi)  # long time
sage: S.default_screen()              # long time
screen distribution Sc along the degenerate hypersurface S embedded
in 4-dimensional differentiable manifold M mapped into the 4-dimensional
Lorentzian manifold M
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi)  # long time
>>> S.default_screen()              # long time
screen distribution Sc along the degenerate hypersurface S embedded
in 4-dimensional differentiable manifold M mapped into the 4-dimensional
Lorentzian manifold M
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi)  # long time
S.default_screen()              # long time
extrinsic_curvature(screen=None)[source]

This method is implemented only for null hypersurfaces. The method returns a tensor \(B\) of type \((0,2)\) instance of TangentTensor such that for two vector fields \(U, V\) on the ambient manifold along the null hypersurface, one has:

\[\nabla_UV=D(U,V)+B(U,V)N\]

being \(\nabla\) the ambient connection, \(D\) the induced connection and \(N\) the chosen rigging.

INPUT:

  • screen – (default: None) an instance of Screen. If None, the default screen is used

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);   # long time
sage: B = S.second_fundamental_form();  # long time
sage: B.display()                       # long time
B = 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);   # long time
>>> B = S.second_fundamental_form();  # long time
>>> B.display()                       # long time
B = 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);   # long time
B = S.second_fundamental_form();  # long time
B.display()                       # long time
first_fundamental_form()[source]

Return the restriction of the ambient metric on vector field along the submanifold and tangent to it. It is difference from induced metric who gives the pullback of the ambient metric on the submanifold.

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: h = S.first_fundamental_form()   # long time
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> h = S.first_fundamental_form()   # long time
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
h = S.first_fundamental_form()   # long time
gauss_curvature(screen=None)[source]

Gauss curvature is the product of all eigenfunctions of the shape operator.

INPUT:

  • screen – (default: None) an instance of Screen. If None the default screen is used.

OUTPUT: a scalar function on self

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: K = S.gauss_curvature();         # long time
sage: K.display()                      # long time
S → ℝ
(u, v, w) ↦ 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> K = S.gauss_curvature();         # long time
>>> K.display()                      # long time
S → ℝ
(u, v, w) ↦ 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
K = S.gauss_curvature();         # long time
K.display()                      # long time
induced_metric()[source]

Return the pullback of the ambient metric.

OUTPUT:

EXAMPLES:

Section of the lightcone of the Minkowski space with a hyperplane passing through the origin:

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v, 0]},
....:             name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: h = S.induced_metric(); h  # long time
degenerate metric gamma on the 2-dimensional degenerate
submanifold S embedded in 4-dimensional differentiable manifold M
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(2), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v',)); (u, v,) = X_S._first_ngens(2)
>>> Phi = S.diff_map(M, {(X_S, X): [sqrt(u**Integer(2)+v**Integer(2)), u, v, Integer(0)]},
...             name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> h = S.induced_metric(); h  # long time
degenerate metric gamma on the 2-dimensional degenerate
submanifold S embedded in 4-dimensional differentiable manifold M
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v, 0]},
            name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
h = S.induced_metric(); h  # long time
is_tangent(v)[source]

Determine whether a vector field on the ambient manifold along self is tangent to self or not.

INPUT:

  • v – field on the ambient manifold along self

OUTPUT:

  • True if v is everywhere tangent to self or False if not

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: v = M.vector_field(); v[1] = 1
sage: S.set_transverse(rigging=v)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: S.is_tangent(xi.along(Phi))      # long time
True
sage: S.is_tangent(v.along(Phi))       # long time
False
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.set_transverse(rigging=v)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> S.is_tangent(xi.along(Phi))      # long time
True
>>> S.is_tangent(v.along(Phi))       # long time
False
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
v = M.vector_field(); v[1] = 1
S.set_transverse(rigging=v)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
S.is_tangent(xi.along(Phi))      # long time
S.is_tangent(v.along(Phi))       # long time
list_of_screens()[source]

Return the default screen distribution.

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:                  name='Phi', latex_name=r'\Phi')
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:                      latex_name=r'\Phi^{-1}')
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi)  # long time
sage: S.list_of_screens()             # long time
{'Sc': screen distribution Sc along the degenerate hypersurface S
embedded in 4-dimensional differentiable manifold M mapped into the
4-dimensional Lorentzian manifold M}
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...                  name='Phi', latex_name=r'\Phi')
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...                      latex_name=r'\Phi^{-1}')
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi)  # long time
>>> S.list_of_screens()             # long time
{'Sc': screen distribution Sc along the degenerate hypersurface S
embedded in 4-dimensional differentiable manifold M mapped into the
4-dimensional Lorentzian manifold M}
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
                 name='Phi', latex_name=r'\Phi')
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
                     latex_name=r'\Phi^{-1}')
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi)  # long time
S.list_of_screens()             # long time
mean_curvature(screen=None)[source]

Mean curvature is the sum of principal curvatures. This method is implemented only for hypersurfaces.

INPUT:

  • screen – (default: None) an instance of Screen. If None the default screen is used.

OUTPUT: the mean curvature, as a scalar field on the submanifold

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: m = S.mean_curvature(); m        # long time
Scalar field on the degenerate hypersurface S embedded in 4-dimensional
differentiable manifold M
sage: m.display()                      # long time
S → ℝ
(u, v, w) ↦ 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> m = S.mean_curvature(); m        # long time
Scalar field on the degenerate hypersurface S embedded in 4-dimensional
differentiable manifold M
>>> m.display()                      # long time
S → ℝ
(u, v, w) ↦ 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
m = S.mean_curvature(); m        # long time
m.display()                      # long time
principal_directions(screen=None)[source]

Principal directions are eigenvectors of the shape operator. This method is implemented only for hypersurfaces.

INPUT:

  • screen – (default: None) an instance of Screen. If None default screen is used.

OUTPUT:

  • list of pairs (vector field, scalar field) representing the principal directions and the associated principal curvatures

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi); T = S.adapted_frame()  # long time
sage: PD = S.principal_directions()                          # long time
sage: PD[2][0].display(T)                                    # long time
e_2 = xi
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi); T = S.adapted_frame()  # long time
>>> PD = S.principal_directions()                          # long time
>>> PD[Integer(2)][Integer(0)].display(T)                                    # long time
e_2 = xi
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi); T = S.adapted_frame()  # long time
PD = S.principal_directions()                          # long time
PD[2][0].display(T)                                    # long time
projection(tensor, screen=None)[source]

For a given tensor \(T\) of type \((r, 1)\) on the ambient manifold, this method returns the tensor \(T'\) of type \((r,1)\) such that for \(r\) vector fields \(v_1,\ldots,v_r\), \(T'(v_1,\ldots,v_r)\) is the projection of \(T(v_1,\ldots,v_r)\) on self along the bundle spanned by the transversal vector fields provided by set_transverse().

INPUT:

  • tensor – a tensor of type \((r,1)\) on the ambient manifold

OUTPUT:

  • a tensor of type \((r,1)\) on the ambient manifold along self

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: U1 = S.projection(U)             # long time
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> U1 = S.projection(U)             # long time
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
U1 = S.projection(U)             # long time
screen(name, screen, rad, latex_name=None)[source]

For setting a screen distribution and vector fields of the radical distribution that will be used for computations

INPUT:

  • name – string (default: None); name given to the screen

  • latex_name – string (default: None); LaTeX symbol to denote the screen; if None, the LaTeX symbol is set to name

  • screen – list or tuple of vector fields of the ambient manifold or chart function; of the ambient manifold in the latter case, the corresponding gradient vector field with respect to the ambient metric is calculated; the vectors must be linearly independent, tangent to the submanifold but not normal

  • rad – – list or tuple of vector fields of the ambient manifold or chart function; of the ambient manifold in the latter case, the corresponding gradient vector field with respect to the ambient metric is calculated; the vectors must be linearly independent, tangent and normal to the submanifold

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi); Sc  # long time
screen distribution Sc along the degenerate hypersurface S embedded
in 4-dimensional differentiable manifold M mapped into the 4-dimensional
Lorentzian manifold M
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi); Sc  # long time
screen distribution Sc along the degenerate hypersurface S embedded
in 4-dimensional differentiable manifold M mapped into the 4-dimensional
Lorentzian manifold M
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi); Sc  # long time
screen_projection(tensor, screen=None)[source]

For a given tensor \(T\) of type \((r, 1)\) on the ambient manifold, this method returns the tensor \(T'\) of type \((r,1)\) such that for \(r\) vector fields \(v_1,\ldots,v_r\), \(T'(v_1,\ldots,v_r)\) is the projection of \(T(v_1,\ldots,v_r)\) on the bundle spanned by screen along the bundle spanned by the transversal plus the radical vector fields provided.

INPUT:

  • tensor – a tensor of type \((r,1)\) on the ambient manifold

OUTPUT:

  • a tensor of type \((r,1)\) on the ambient manifold

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: U1 = S.screen_projection(U);     # long time
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> U1 = S.screen_projection(U);     # long time
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
U1 = S.screen_projection(U);     # long time
second_fundamental_form(screen=None)[source]

This method is implemented only for null hypersurfaces. The method returns a tensor \(B\) of type \((0,2)\) instance of TangentTensor such that for two vector fields \(U, V\) on the ambient manifold along the null hypersurface, one has:

\[\nabla_UV=D(U,V)+B(U,V)N\]

being \(\nabla\) the ambient connection, \(D\) the induced connection and \(N\) the chosen rigging.

INPUT:

  • screen – (default: None) an instance of Screen. If None, the default screen is used

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: S.set_transverse(rigging=x)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);   # long time
sage: B = S.second_fundamental_form();  # long time
sage: B.display()                       # long time
B = 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=x)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);   # long time
>>> B = S.second_fundamental_form();  # long time
>>> B.display()                       # long time
B = 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
S.set_transverse(rigging=x)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);   # long time
B = S.second_fundamental_form();  # long time
B.display()                       # long time
set_transverse(rigging=None, normal=None)[source]

For setting a transversal distribution of the degenerate submanifold.

According to the type of the submanifold among the 4 possible types, one must enter a list of normal transversal vector fields and/or a list of transversal and not normal vector fields spanning a transverse distribution.

INPUT:

  • rigging – list or tuple (default: None); list of vector fields of the ambient manifold or chart function; of the ambient manifold in the latter case, the corresponding gradient vector field with respect to the ambient metric is calculated; the vectors must be linearly independent, transversal to the submanifold but not normal

  • normal – list or tuple (default: None); list of vector fields of the ambient manifold or chart function; of the ambient manifold in the latter case, the corresponding gradient vector field with respect to the ambient metric is calculated; the vectors must be linearly independent, transversal and normal to the submanifold

EXAMPLES:

The lightcone of the 3-dimensional Minkowski space \(\RR^3_1\):

sage: M = Manifold(3, 'M', structure='Lorentzian')
sage: X.<t,x,y> = M.chart()
sage: S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v]},
....:                   name='Phi', latex_name=r'\Phi')
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
....:                           latex_name=r'\Phi^{-1}')
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2] = -1,1,1
sage: S.set_transverse(rigging=t)
>>> from sage.all import *
>>> M = Manifold(Integer(3), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y',)); (t, x, y,) = X._first_ngens(3)
>>> S = Manifold(Integer(2), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v',)); (u, v,) = X_S._first_ngens(2)
>>> Phi = S.diff_map(M, {(X_S, X): [sqrt(u**Integer(2)+v**Integer(2)), u, v]},
...                   name='Phi', latex_name=r'\Phi')
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
...                           latex_name=r'\Phi^{-1}')
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)] = -Integer(1),Integer(1),Integer(1)
>>> S.set_transverse(rigging=t)
M = Manifold(3, 'M', structure='Lorentzian')
X.<t,x,y> = M.chart()
S = Manifold(2, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [sqrt(u^2+v^2), u, v]},
                  name='Phi', latex_name=r'\Phi')
Phi_inv = M.diff_map(S, {(X, X_S): [x, y]}, name='Phi_inv',
                          latex_name=r'\Phi^{-1}')
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2] = -1,1,1
S.set_transverse(rigging=t)
shape_operator(screen=None)[source]

This method is implemented only for hypersurfaces. shape operator is the projection of the Weingarten map on the screen distribution along the radical distribution.

INPUT:

  • screen – (default: None) an instance of Screen. If None the default screen is used.

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: v = M.vector_field(); v[1] = 1
sage: S.set_transverse(rigging=v)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: SO = S.shape_operator();         # long time
sage: SO.display()                     # long time
A^* = 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.set_transverse(rigging=v)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> SO = S.shape_operator();         # long time
>>> SO.display()                     # long time
A^* = 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
v = M.vector_field(); v[1] = 1
S.set_transverse(rigging=v)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
SO = S.shape_operator();         # long time
SO.display()                     # long time
weingarten_map(screen=None)[source]

This method is implemented only for hypersurfaces. Weigarten map is the \(1\)-form \(W\) defined for a vector field \(U\) tangent to self by

\[W(U)=\nabla_U\xi\]

being \(\nabla\) the Levi-Civita connection of the ambient manifold and \(\xi\) the chosen vector field spanning the radical distribution.

INPUT:

  • screen – (default: None) an instance of Screen. If None the default screen is used.

OUTPUT:

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: v = M.vector_field(); v[1] = 1
sage: S.set_transverse(rigging=v)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);  # long time
sage: W = S.weingarten_map();          # long time
sage: W.display()                      # long time
nabla_g(xi)|X(S) = 0
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.set_transverse(rigging=v)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);  # long time
>>> W = S.weingarten_map();          # long time
>>> W.display()                      # long time
nabla_g(xi)|X(S) = 0
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
v = M.vector_field(); v[1] = 1
S.set_transverse(rigging=v)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);  # long time
W = S.weingarten_map();          # long time
W.display()                      # long time
class sage.manifolds.differentiable.degenerate_submanifold.Screen(submanifold, name, screen, rad, latex_name=None)[source]

Bases: VectorFieldModule

Let \(H\) be a lightlike submanifold embedded in a pseudo-Riemannian manifold \((M,g)\) with \(\Phi\) the embedding map. A screen distribution is a complementary \(S(TH)\) of the radical distribution \(Rad(TM)=TH\cap TH^\perp\) in \(TH\). One then has

\[TH=S(TH)\oplus_{orth}Rad(TH)\]

INPUT:

  • submanifold – a lightlike submanifold, as an instance of DegenerateSubmanifold

  • name – name given to the screen distribution

  • screen – vector fields of the ambient manifold which span the screen distribution

  • rad – vector fields of the ambient manifold which span the radical distribution

  • latex_name – (default: None) LaTeX symbol to denote the screen distribution; if None, it is formed from name

EXAMPLES:

The horizon of the Schwarzschild black hole:

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X_M.<t, r, th, ph> = \
....: M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
sage: var('m'); assume(m>0)
m
sage: g = M.metric()
sage: g[0,0], g[0,1], g[1,1], g[2,2], g[3,3] = \
....: -1+2*m/r, 2*m/r, 1+2*m/r, r^2, r^2*sin(th)^2
sage: H = Manifold(3, 'H', ambient=M, structure='degenerate_metric')
sage: X_H.<ht,hth,hph> = \
....: H.chart(r"ht:(-oo,oo):t hth:(0,pi):\theta hph:(0,2*pi):\phi")
sage: Phi = H.diff_map(M, {(X_H, X_M): [ht, 2*m,hth, hph]}, \
....: name='Phi', latex_name=r'\Phi')
sage: Phi_inv = M.diff_map(H, {(X_M, X_H): [t,th, ph]}, \
....: name='Phi_inv', latex_name=r'\Phi^{-1}')
sage: H.set_immersion(Phi, inverse=Phi_inv); H.declare_embedding()
sage: xi = M.vector_field(-1, 0, 0, 0)
sage: v = M.vector_field(r, -r, 0, 0)
sage: e1 = M.vector_field(0, 0, 1, 0)
sage: e2 = M.vector_field(0, 0, 0, 1)
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X_M = M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi", names=('t', 'r', 'th', 'ph',)); (t, r, th, ph,) = X_M._first_ngens(4)
>>> var('m'); assume(m>Integer(0))
m
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(0),Integer(1)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1)+Integer(2)*m/r, Integer(2)*m/r, Integer(1)+Integer(2)*m/r, r**Integer(2), r**Integer(2)*sin(th)**Integer(2)
>>> H = Manifold(Integer(3), 'H', ambient=M, structure='degenerate_metric')
>>> X_H = H.chart(r"ht:(-oo,oo):t hth:(0,pi):\theta hph:(0,2*pi):\phi", names=('ht', 'hth', 'hph',)); (ht, hth, hph,) = X_H._first_ngens(3)
>>> Phi = H.diff_map(M, {(X_H, X_M): [ht, Integer(2)*m,hth, hph]}, name='Phi', latex_name=r'\Phi')
>>> Phi_inv = M.diff_map(H, {(X_M, X_H): [t,th, ph]}, name='Phi_inv', latex_name=r'\Phi^{-1}')
>>> H.set_immersion(Phi, inverse=Phi_inv); H.declare_embedding()
>>> xi = M.vector_field(-Integer(1), Integer(0), Integer(0), Integer(0))
>>> v = M.vector_field(r, -r, Integer(0), Integer(0))
>>> e1 = M.vector_field(Integer(0), Integer(0), Integer(1), Integer(0))
>>> e2 = M.vector_field(Integer(0), Integer(0), Integer(0), Integer(1))
M = Manifold(4, 'M', structure='Lorentzian')
X_M.<t, r, th, ph> = \
M.chart(r"t r:(0,oo) th:(0,pi):\theta ph:(0,2*pi):\phi")
var('m'); assume(m>0)
g = M.metric()
g[0,0], g[0,1], g[1,1], g[2,2], g[3,3] = \
-1+2*m/r, 2*m/r, 1+2*m/r, r^2, r^2*sin(th)^2
H = Manifold(3, 'H', ambient=M, structure='degenerate_metric')
X_H.<ht,hth,hph> = \
H.chart(r"ht:(-oo,oo):t hth:(0,pi):\theta hph:(0,2*pi):\phi")
Phi = H.diff_map(M, {(X_H, X_M): [ht, 2*m,hth, hph]}, \
name='Phi', latex_name=r'\Phi')
Phi_inv = M.diff_map(H, {(X_M, X_H): [t,th, ph]}, \
name='Phi_inv', latex_name=r'\Phi^{-1}')
H.set_immersion(Phi, inverse=Phi_inv); H.declare_embedding()
xi = M.vector_field(-1, 0, 0, 0)
v = M.vector_field(r, -r, 0, 0)
e1 = M.vector_field(0, 0, 1, 0)
e2 = M.vector_field(0, 0, 0, 1)

A screen distribution for the Schwarzschild black hole horizon:

sage: H.set_transverse(rigging=v)
sage: S = H.screen('S', [e1, e2], (xi)); S  # long time
screen distribution S along the degenerate hypersurface H embedded
in 4-dimensional differentiable manifold M mapped into the
4-dimensional Lorentzian manifold M
>>> from sage.all import *
>>> H.set_transverse(rigging=v)
>>> S = H.screen('S', [e1, e2], (xi)); S  # long time
screen distribution S along the degenerate hypersurface H embedded
in 4-dimensional differentiable manifold M mapped into the
4-dimensional Lorentzian manifold M
H.set_transverse(rigging=v)
S = H.screen('S', [e1, e2], (xi)); S  # long time

The corresponding normal tangent null vector field and null transversal vector field:

sage: xi = S.normal_tangent_vector(); xi.display()  # long time
xi = -∂/∂t
sage: N = S.rigging(); N.display()  # long time
N = ∂/∂t - ∂/∂r
>>> from sage.all import *
>>> xi = S.normal_tangent_vector(); xi.display()  # long time
xi = -∂/∂t
>>> N = S.rigging(); N.display()  # long time
N = ∂/∂t - ∂/∂r
xi = S.normal_tangent_vector(); xi.display()  # long time
N = S.rigging(); N.display()  # long time

Those vector fields are normalized by \(g(\xi,N)=1\):

sage: g.along(Phi)(xi, N).display()  # long time
g(xi,N): H → ℝ
(ht, hth, hph) ↦ 1
>>> from sage.all import *
>>> g.along(Phi)(xi, N).display()  # long time
g(xi,N): H → ℝ
(ht, hth, hph) ↦ 1
g.along(Phi)(xi, N).display()  # long time
normal_tangent_vector()[source]

Return either a list Rad of vector fields spanning the radical distribution or (in case of a hypersurface) a normal tangent null vector field spanning the radical distribution.

OUTPUT:

  • either a list of vector fields or a single vector field in case of a hypersurface

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:                  name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:                      latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: v = M.vector_field(); v[1] = 1
sage: S.set_transverse(rigging=v)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);                  # long time
sage: Rad = Sc.normal_tangent_vector(); Rad.display()  # long time
xi = ∂/∂t + ∂/∂x
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...                  name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...                      latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.set_transverse(rigging=v)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);                  # long time
>>> Rad = Sc.normal_tangent_vector(); Rad.display()  # long time
xi = ∂/∂t + ∂/∂x
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
                 name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
                     latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
v = M.vector_field(); v[1] = 1
S.set_transverse(rigging=v)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);                  # long time
Rad = Sc.normal_tangent_vector(); Rad.display()  # long time
rigging()[source]

Return either a list Rad of vector fields spanning the complementary of the normal distribution \(TH^\perp\) in the transverse bundle or (when \(H\) is a null hypersurface) the null transversal vector field defined in [DB1996].

OUTPUT:

  • either a list made by vector fields or a vector field in case of hypersurface

EXAMPLES:

A degenerate hyperplane the 4-dimensional Minkowski space \(\RR^4_1\):

sage: M = Manifold(4, 'M', structure='Lorentzian')
sage: X.<t,x,y,z> = M.chart()
sage: S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
sage: X_S.<u,v,w> = S.chart()
sage: Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
....:         name='Phi', latex_name=r'\Phi');
sage: Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
....:           latex_name=r'\Phi^{-1}');
sage: S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
sage: g = M.metric()
sage: g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
sage: v = M.vector_field(); v[1] = 1
sage: S.set_transverse(rigging=v)
sage: xi = M.vector_field(); xi[0] = 1; xi[1] = 1
sage: U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
sage: Sc = S.screen('Sc', (U,V), xi);    # long time
sage: rig = Sc.rigging(); rig.display()  # long time
N = -1/2 ∂/∂t + 1/2 ∂/∂x
>>> from sage.all import *
>>> M = Manifold(Integer(4), 'M', structure='Lorentzian')
>>> X = M.chart(names=('t', 'x', 'y', 'z',)); (t, x, y, z,) = X._first_ngens(4)
>>> S = Manifold(Integer(3), 'S', ambient=M, structure='degenerate_metric')
>>> X_S = S.chart(names=('u', 'v', 'w',)); (u, v, w,) = X_S._first_ngens(3)
>>> Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
...         name='Phi', latex_name=r'\Phi');
>>> Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
...           latex_name=r'\Phi^{-1}');
>>> S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
>>> g = M.metric()
>>> g[Integer(0),Integer(0)], g[Integer(1),Integer(1)], g[Integer(2),Integer(2)], g[Integer(3),Integer(3)] = -Integer(1),Integer(1),Integer(1),Integer(1)
>>> v = M.vector_field(); v[Integer(1)] = Integer(1)
>>> S.set_transverse(rigging=v)
>>> xi = M.vector_field(); xi[Integer(0)] = Integer(1); xi[Integer(1)] = Integer(1)
>>> U = M.vector_field(); U[Integer(2)] = Integer(1); V = M.vector_field(); V[Integer(3)] = Integer(1)
>>> Sc = S.screen('Sc', (U,V), xi);    # long time
>>> rig = Sc.rigging(); rig.display()  # long time
N = -1/2 ∂/∂t + 1/2 ∂/∂x
M = Manifold(4, 'M', structure='Lorentzian')
X.<t,x,y,z> = M.chart()
S = Manifold(3, 'S', ambient=M, structure='degenerate_metric')
X_S.<u,v,w> = S.chart()
Phi = S.diff_map(M, {(X_S, X): [u, u, v, w]},
        name='Phi', latex_name=r'\Phi');
Phi_inv = M.diff_map(S, {(X, X_S): [x,y, z]}, name='Phi_inv',
          latex_name=r'\Phi^{-1}');
S.set_immersion(Phi, inverse=Phi_inv); S.declare_embedding()
g = M.metric()
g[0,0], g[1,1], g[2,2], g[3,3] = -1,1,1,1
v = M.vector_field(); v[1] = 1
S.set_transverse(rigging=v)
xi = M.vector_field(); xi[0] = 1; xi[1] = 1
U = M.vector_field(); U[2] = 1; V = M.vector_field(); V[3] = 1
Sc = S.screen('Sc', (U,V), xi);    # long time
rig = Sc.rigging(); rig.display()  # long time