de Sitter spacetime¶

This worksheet demonstrates a few capabilities of SageManifolds (version 1.0, as included in SageMath 7.5) in computations regarding de Sitter spacetime.

Click here to download the worksheet file (ipynb format). To run it, you must start SageMath within the Jupyter notebook, via the command sage -n jupyter

NB: a version of SageMath at least equal to 7.5 is required to run this worksheet:

In [1]:
version()

Out[1]:
'SageMath version 7.5.1, Release Date: 2017-01-15'

First we set up the notebook to display mathematical objects using LaTeX rendering:

In [2]:
%display latex


We also define a viewer for 3D plots (use 'threejs' or 'jmol' for interactive 3D graphics):

In [3]:
viewer3D = 'threejs' # must be 'threejs', 'jmol', 'tachyon' or None (default)


Spacetime manifold¶

We declare the de Sitter spacetime as a 4-dimensional differentiable manifold:

In [4]:
M = Manifold(4, 'M', r'\mathcal{M}')
print(M) ; M

4-dimensional differentiable manifold M

Out[4]:

We consider hyperspherical coordinates $(\tau,\chi,\theta,\phi)$ on $\mathcal{M}$. Allowing for the standard coordinate singularities at $\chi=0$, $\chi=\pi$, $\theta=0$ or $\theta=\pi$, these coordinates cover the entire spacetime manifold (which is topologically $\mathbb{R}\times\mathbb{S}^3$). If we restrict ourselves to regular coordinates (i.e. to consider only mathematically well defined charts), the hyperspherical coordinates cover only an open part of $\mathcal{M}$, which we call $\mathcal{M}_0$, on which $\chi$ spans the open interval $(0,\pi)$, $\theta$ the open interval $(0,\pi)$ and $\phi$ the open interval $(0,2\pi)$. Therefore, we declare:

In [5]:
M0 = M.open_subset('M_0', r'\mathcal{M}_0')
X_hyp.<ta,ch,th,ph> = M0.chart(r'ta:\tau ch:(0,pi):\chi th:(0,pi):\theta ph:(0,2*pi):\phi')
print(X_hyp) ; X_hyp

Chart (M_0, (ta, ch, th, ph))

Out[5]:

$\mathbb{R}^5$ as an ambient space

The de Sitter metric can be defined as that induced by the embedding of $\mathcal{M}$ into a 5-dimensional Minkowski space, i.e. $\mathbb{R}^5$ equipped with a flat Lorentzian metric. We therefore introduce $\mathbb{R}^5$ as a 5-dimensional manifold covered by canonical coordinates:

In [6]:
R5 = Manifold(5, 'R5', r'\mathbb{R}^5')
X5.<T,W,X,Y,Z> = R5.chart()
print(X5) ; X5

Chart (R5, (T, W, X, Y, Z))

Out[6]:

The embedding of $\mathcal{M}$ into $\mathbb{R}^5$ is defined as a differential mapping $\Phi$ from $\mathcal{M}$ to $\mathbb{R}^5$, by providing its expression in terms of $\mathcal{M}$'s default chart (which is X_hyp = $(\mathcal{M}_0,(\tau,\chi,\theta,\phi))$ ) and $\mathbb{R}^5$'s default chart (which is X5 = $(\mathbb{R}^5,(T,W,X,Y,Z))$ ):

In [7]:
var('b', domain='real')
Phi = M.diff_map(R5, [sinh(b*ta)/b,
cosh(b*ta)/b * cos(ch),
cosh(b*ta)/b * sin(ch)*sin(th)*cos(ph),
cosh(b*ta)/b * sin(ch)*sin(th)*sin(ph),
cosh(b*ta)/b * sin(ch)*cos(th)],
name='Phi', latex_name=r'\Phi')
print(Phi) ; Phi.display()

Differentiable map Phi from the 4-dimensional differentiable manifold M to the 5-dimensional differentiable manifold R5

Out[7]:

The constant $b$ is a scale parameter. Considering de Sitter metric as a solution of vacuum Einstein equation with positive cosmological constant $\Lambda$, one has $b = \sqrt{\Lambda/3}$.

Let us evaluate the image of a point via the mapping $\Phi$:

In [8]:
p = M.point((ta, ch, th, ph), name='p') ; print(p)

Point p on the 4-dimensional differentiable manifold M

In [9]:
p.coord()

Out[9]:
In [10]:
q = Phi(p) ; print(q)

Point Phi(p) on the 5-dimensional differentiable manifold R5

In [11]:
q.coord()

Out[11]:

The image of $\mathcal{M}$ by $\Phi$ is a hyperboloid of one sheet, of equation $-T^2+W^2+X^2+Y^2+Z^2=b^{-2}$. Indeed:

In [12]:
(Tq,Wq,Xq,Yq,Zq) = q.coord()
s = -Tq^2 + Wq^2 + Xq^2 + Yq^2 + Zq^2
s.simplify_full()

Out[12]:

We may use the embedding $\Phi$ to draw the coordinate grid $(\tau,\chi)$ in terms of the coordinates $(W,X,T)$ for $\theta=\pi/2$ and $\phi=0$ (red) and $\theta=\pi/2$ and $\phi=\pi$ (green) (the brown lines are the lines $\tau={\rm const}$):

In [13]:
graph1 = X_hyp.plot(X5, mapping=Phi, ambient_coords=(W,X,T), fixed_coords={th:pi/2, ph:0},
number_values=9, color={ta:'red', ch:'brown'}, thickness=2, max_range=2,
parameters={b:1}, label_axes=False)
graph2 = X_hyp.plot(X5, mapping=Phi, ambient_coords=(W,X,T), fixed_coords={th:pi/2, ph:pi},
number_values=9, color={ta:'green', ch:'brown'}, thickness=2, max_range=2,
parameters={b:1}, label_axes=False)
show(graph1+graph2, aspect_ratio=1, viewer=viewer3D, axes_labels=['W','X','T'])


Spacetime metric

First, we introduce on $\mathbb{R}^5$ the Minkowski metric $h$:

In [14]:
h = R5.lorentzian_metric('h')
h[0,0], h[1,1], h[2,2], h[3,3], h[4,4] = -1, 1, 1, 1, 1
h.display()

Out[14]:

As mentionned above, the de Sitter metric $g$ on $\mathcal{M}$ is that induced by $h$, i.e.$g$ is the pullback of $h$ by the mapping $\Phi$:

In [15]:
g = M.metric('g')
g.set( Phi.pullback(h) )


The expression of $g$ in terms of $\mathcal{M}$'s default frame is found to be

In [16]:
g.display()

Out[16]:
In [17]:
g[:]

Out[17]:

Curvature

The Riemann tensor of $g$ is

In [18]:
Riem = g.riemann()
print(Riem)
Riem.display()

Tensor field Riem(g) of type (1,3) on the 4-dimensional differentiable manifold M

Out[18]:
In [19]:
Riem.display_comp(only_nonredundant=True)

Out[19]:

The Ricci tensor:

In [20]:
Ric = g.ricci()
print(Ric)
Ric.display()

Field of symmetric bilinear forms Ric(g) on the 4-dimensional differentiable manifold M

Out[20]:
In [21]:
Ric[:]

Out[21]:

The Ricci scalar:

In [22]:
R = g.ricci_scalar()
print(R)
R.display()

Scalar field r(g) on the 4-dimensional differentiable manifold M

Out[22]:

We recover the fact that de Sitter spacetime has a constant curvature. It is indeed a maximally symmetric space. In particular, the Riemann tensor is expressible as $$R^i_{\ \, jlk} = \frac{R}{n(n-1)} \left( \delta^i_{\ \, k} g_{jl} - \delta^i_{\ \, l} g_{jk} \right),$$ where $n$ is the dimension of $\mathcal{M}$: $n=4$ in the present case. Let us check this formula here, under the form $R^i_{\ \, jlk} = -\frac{R}{6} g_{j[k} \delta^i_{\ \, l]}$:

In [23]:
delta = M.tangent_identity_field()
Riem == - (R/6)*(g*delta).antisymmetrize(2,3)  # 2,3 = last positions of the type-(1,3) tensor g*delta

Out[23]:

We may also check that de Sitter metric is a solution of the vacuum Einstein equation with (positive) cosmological constant:

In [24]:
Lambda = 3*b^2
Ric - 1/2*R*g + Lambda*g == 0

Out[24]: