This worksheet demonstrates a few capabilities of SageManifolds (version 0.9.1) 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
First we set up the notebook to display mathematical objects using LaTeX formatting:
%display latex
We also define a viewer for 3D plots (use 'jmol'
for interactive 3D graphics):
viewer3D = 'tachyon' # must be 'jmol', 'tachyon' or None (default)
We declare the anti-de Sitter spacetime as a 4-dimensional differentiable manifold:
M = Manifold(4, 'M', r'\mathcal{M}')
print(M) ; M
4-dimensional differentiable manifold M
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:
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))
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:
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))
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))$ ):
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
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$:
p = M.point((ta, rh, th, ph), name='p') ; print(p)
Point p on the 4-dimensional differentiable manifold M
p.coord()
q = Phi(p) ; print(q)
Point Phi(p) on the 5-dimensional differentiable manifold R5
q.coord()
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:
(Uq,Vq,Xq,Yq,Zq) = q.coord()
s = - Uq^2 - Vq^2 + Xq^2 + Yq^2 + Zq^2
s.simplify_full()
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}$):
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)}, nb_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)}, nb_values=9, color={ta:'green', rh:'brown'},
thickness=2, parameters={b:1}, label_axes=False)
from sage.manifolds.utilities import set_axes_labels
show(set_axes_labels(graph1+graph2,'V','X','U'), aspect_ratio=1, viewer=viewer3D)
First, we introduce on $\mathbb{R}^5$ the flat pseudo-Riemannian metric $h$ of signature $(-,-,+,+,+)$:
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()
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$:
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
g.display()
g[:]
The Riemann tensor of $g$ is
Riem = g.riemann()
print(Riem)
Riem.display()
Tensor field Riem(g) of type (1,3) on the 4-dimensional differentiable manifold M
Riem.display_comp(only_nonredundant=True)
The Ricci tensor:
Ric = g.ricci()
print(Ric)
Ric.display()
Field of symmetric bilinear forms Ric(g) on the 4-dimensional differentiable manifold M
Ric[:]
The Ricci scalar:
R = g.ricci_scalar()
print(R)
R.display()
Scalar field r(g) on the 4-dimensional differentiable manifold M
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]}$:
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
We may also check that AdS metric is a solution of the vacuum Einstein equation with (negative) cosmological constant:
Lambda = -3*b^2
Ric - 1/2*R*g + Lambda*g == 0
Let us introduce spherical coordinates $(\tau,r,\theta,\phi)$ on the AdS spacetime via the coordinate change $$ r = \frac{\sinh(\rho)}{b} $$
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))
hyp_to_spher = X_hyp.transition_map(X_spher, [ta, sinh(rh)/b, th, ph])
hyp_to_spher.display()
hyp_to_spher.set_inverse(ta, asinh(b*r), th, ph)
spher_to_hyp = hyp_to_spher.inverse()
spher_to_hyp.display()
The expression of the metric tensor in the new coordinates is
g.display(X_spher.frame(), X_spher)
Similarly, the expression of the Riemann tensor is
Riem.display_comp(X_spher.frame(), X_spher, only_nonredundant=True)