Anti-de Sitter spacetime

This worksheet demonstrates a few capabilities of SageManifolds (version 1.0, as included in SageMath 7.5) in computations regarding anti-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 anti-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 hyperbolic coordinates $(\tau,\rho,\theta,\phi)$ on $\mathcal{M}$. Allowing for the standard coordinate singularities at $\rho=0$, $\theta=0$ or $\theta=\pi$, these coordinates cover the entire spacetime manifold (which is topologically $\mathbb{R}^4$). If we restrict ourselves to regular coordinates (i.e. to considering only mathematically well defined charts), the hyperbolic coordinates cover only an open part of $\mathcal{M}$, which we call $\mathcal{M}_0$, on which $\rho$ spans the open interval $(0,+\infty)$, $\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,rh,th,ph> = M0.chart(r'ta:\tau rh:(0,+oo):\rho th:(0,pi):\theta ph:(0,2*pi):\phi')
print(X_hyp) ; X_hyp
Chart (M_0, (ta, rh, th, ph))
Out[5]:

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

The AdS metric can be defined as that induced by the immersion of $\mathcal{M}$ in $\mathbb{R}^5$ equipped with a flat pseudo-Riemannian metric of signature $(-,-,+,+,+)$. 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.<U,V,X,Y,Z> = R5.chart()
print(X5) ; X5
Chart (R5, (U, V, X, Y, Z))
Out[6]:

The AdS immersion into $\mathbb{R}^5$ is defined as a differential map $\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,\rho,\theta,\phi))$ ) and $\mathbb{R}^5$'s default chart (which is X5 = $(\mathbb{R}^5,(U,V,X,Y,Z))$ ):

In [7]:
var('b', domain='real')
assume(b>0)
Phi = M.diff_map(R5, [sin(b*ta)/b * cosh(rh),
                      cos(b*ta)/b * cosh(rh),
                      sinh(rh)/b *sin(th)*cos(ph),
                      sinh(rh)/b *sin(th)*sin(ph),
                      sinh(rh)/b *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 AdS metric as a solution of vacuum Einstein equation with negative cosmological constant $\Lambda$, one has $b = \sqrt{-\Lambda/3}$.

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

In [8]:
p = M.point((ta, rh, 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 the immersion $\Phi$ is a hyperboloid of one sheet, of equation $-U^2-V^2+X^2+Y^2+Z^2=-b^{-2}$. Indeed:

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

We may use the immersion $\Phi$ to draw the coordinate grid $(\tau,\rho)$ in terms of the coordinates $(U,V,X)$ 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=(V,X,U), fixed_coords={th:pi/2, ph:0}, 
                    ranges={ta:(0,2*pi), rh:(0,2)}, number_values=9, 
                    color={ta:'red', rh:'brown'}, thickness=2, parameters={b:1}, 
                    label_axes=False)
graph2 = X_hyp.plot(X5, mapping=Phi, ambient_coords=(V,X,U), fixed_coords={th:pi/2, ph:pi},
                    ranges={ta:(0,2*pi), rh:(0,2)}, number_values=9, 
                    color={ta:'green', rh:'brown'}, thickness=2, parameters={b:1}, 
                    label_axes=False)
show(graph1+graph2, aspect_ratio=1, viewer=viewer3D, axes_labels=['V','X','U'])

Spacetime metric

First, we introduce on $\mathbb{R}^5$ the flat pseudo-Riemannian metric $h$ of signature $(-,-,+,+,+)$:

In [14]:
h = R5.metric('h', signature=1)
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 AdS metric $g$ on $\mathcal{M}$ is that induced by $h$, i.e.$g$ is the pullback of $h$ by the map $\Phi$:

In [15]:
g = M.lorentzian_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 AdS 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 AdS metric is a solution of the vacuum Einstein equation with (negative) cosmological constant:

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

Spherical coordinates

Let us introduce spherical coordinates $(\tau,r,\theta,\phi)$ on the AdS spacetime via the coordinate change $$ r = \frac{\sinh(\rho)}{b} $$

In [25]:
X_spher.<ta,r,th,ph> = M0.chart(r'ta:\tau r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\phi')
print(X_spher) ; X_spher
Chart (M_0, (ta, r, th, ph))
Out[25]:
In [26]:
hyp_to_spher = X_hyp.transition_map(X_spher, [ta, sinh(rh)/b, th, ph])
hyp_to_spher.display()
Out[26]:
In [27]:
hyp_to_spher.set_inverse(ta, asinh(b*r), th, ph)
spher_to_hyp = hyp_to_spher.inverse()
spher_to_hyp.display()
Out[27]:

The expression of the metric tensor in the new coordinates is

In [28]:
g.display(X_spher.frame(), X_spher)
Out[28]:

Similarly, the expression of the Riemann tensor is

In [29]:
Riem.display_comp(X_spher.frame(), X_spher, only_nonredundant=True)
Out[29]: