This Jupyter/SageMath worksheet implements some computations of the article
These computations are based on SageManifolds (v0.9)
The worksheet file (ipynb format) can be downloaded from here.
First we set up the notebook to display mathematical objects using LaTeX formatting:
%display latex
Let us declare $M$ as a 5-dimensional manifold:
M = Manifold(5, 'M')
print(M)
5-dimensional differentiable manifold M
We introduce a coordinate system on $M$:
X.<t,x,y1,y2,r> = M.chart('t x y1:y_1 y2:y_2 r')
X
Next, we define the metric tensor, which depends on some real number $\nu$ and some arbitary function $f$:
g = M.lorentzian_metric('g')
var('nu', latex_name=r'\nu', domain='real')
ff = function('f')(r)
g[0,0] = -ff*exp(2*nu*r)
g[1,1] = exp(2*nu*r)
g[2,2] = exp(2*r)
g[3,3] = exp(2*r)
g[4,4] = 1/ff
g.display()
If $f(r)=1$, this is the metric of a Lifshitz spacetime; if, in addition $\nu=1$, $(M,g)$ is a Poincaré patch of $\mathrm{AdS}_5$.
The Riemann tensor is
Riem = g.riemann()
print(Riem)
Tensor field Riem(g) of type (1,3) on the 5-dimensional differentiable manifold M
Riem.display_comp(only_nonredundant=True)
The Ricci tensor:
Ric = g.ricci()
print(Ric)
Field of symmetric bilinear forms Ric(g) on the 5-dimensional differentiable manifold M
Ric.display()
Ric.display_comp()
The Ricci scalar:
Rscal = g.ricci_scalar()
print(Rscal)
Scalar field r(g) on the 5-dimensional differentiable manifold M
Rscal.display()
Let us consider a model based on the following action, involving a cosmological constant $\bar{\Lambda} = -\Lambda/2$ with $\Lambda>0$, a dilaton scalar field $\phi$ and a Maxwell 2-form $F$:
$$ S = \int \left( R(g) + \Lambda - \frac{1}{2} \nabla_m \phi \nabla^m \phi - \frac{1}{4} e^{\lambda\phi} F_{mn} F^{mn} \right) \sqrt{-g} \, \mathrm{d}^5 x \qquad\qquad \mbox{(1)}$$where $R(g)$ is the Ricci scalar of metric $g$ and $\lambda$ is the dilatonic coupling constant.
We consider the following ansatz for the dilaton scalar field $\phi$: $$ \phi = \frac{1}{\lambda} \left( 4 r + \ln\mu \right) \iff e^{\lambda\phi} = \mu e^{4r},$$ where $\mu$ is a constant.
var('mu', latex_name=r'\mu', domain='real')
var('lamb', latex_name=r'\lambda', domain='real')
phi = M.scalar_field({X: (4*r + ln(mu))/lamb},
name='phi', latex_name=r'\phi')
phi.display()
The 1-form $\mathrm{d}\phi$ is
dphi = phi.differential()
print(dphi)
1-form dphi on the 5-dimensional differentiable manifold M
dphi.display()
dphi[:] # all the components in the default frame
We consider the following ansatz for $F$: $$ F = \frac{1}{2} q \, \mathrm{d}y_1\wedge \mathrm{d}y_2, $$ where $q$ is a constant. Let us first get the 1-forms $\mathrm{d}y_1$ and $\mathrm{d}y_2$:
X.coframe()
dy1 = X.coframe()[2]
dy2 = X.coframe()[3]
Then we can form $F$ according to the above ansatz:
var('q', domain='real')
F = q/2 * dy1.wedge(dy2)
F.set_name('F')
print(F)
F.display()
2-form F on the 5-dimensional differentiable manifold M
By construction, the 2-form $F$ is closed (since $q$ is constant):
print(F.exterior_der())
3-form dF on the 5-dimensional differentiable manifold M
F.exterior_der().display()
Let us evaluate the square $F_{mn} F^{mn}$ of $F$:
Fu = F.up(g)
print(Fu)
Tensor field of type (2,0) on the 5-dimensional differentiable manifold M
F2 = F['_{mn}']*Fu['^{mn}'] # using LaTeX notations for contraction
print(F2)
F2.display()
Scalar field on the 5-dimensional differentiable manifold M
We shall also need the tensor $\mathcal{F}_{mn} := F_{mp} F_n^{\ \, p}$:
FF = F['_mp'] * F.up(g,1)['^p_n']
print(FF)
FF.display()
Tensor field of type (0,2) on the 5-dimensional differentiable manifold M
The tensor field $\mathcal{F}$ is symmetric:
FF == FF.symmetrize()
Therefore, from now on, we set
FF = FF.symmetrize()
Let us first introduce the cosmological constant:
var('Lamb', latex_name=r'\Lambda', domain='real')
From the action (1), the field equation for the metric $g$ is $$ R_{mn} + \frac{\Lambda}{3} \, g - \frac{1}{2}\partial_m\phi \partial_n\phi -\frac{1}{2} e^{\lambda\phi} F_{mp} F^{\ \, p}_n + \frac{1}{12} e^{\lambda\phi} F_{rs} F^{rs} \, g_{mn} = 0 $$ We write it as
EE == 0
with EE
defined by
EE = Ric + Lamb/3*g - 1/2* (dphi*dphi) - 1/2*exp(lamb*phi)*FF \
+ 1/12*exp(lamb*phi)*F2*g
EE.set_name('E')
print(EE)
Field of symmetric bilinear forms E on the 5-dimensional differentiable manifold M
EE.display_comp(only_nonredundant=True)
We note that EE==0
leads to only 4 independent equations:
eq0 = EE[0,0]/exp(2*nu*r)
eq0
eq1 = EE[1,1]/exp(2*nu*r)
eq1
eq2 = EE[2,2]/exp(2*r)
eq2
eq3 = EE[4,4]*lamb^2*f(r)
eq3
First we evaluate $\nabla_m \nabla^m \phi$:
nab = g.connection()
print(nab)
Levi-Civita connection nabla_g associated with the Lorentzian metric g on the 5-dimensional differentiable manifold M
box_phi = nab(nab(phi).up(g)).trace()
print(box_phi)
box_phi.display()
Scalar field on the 5-dimensional differentiable manifold M
From the action (1), the field equation for $\phi$ is $$ \nabla_m \nabla^m \phi = \frac{\lambda}{4} e^{\lambda\phi} F_{mn} F^{mn}$$ We write it as
DE == 0
with DE
defined by
DE = box_phi - lamb/4*exp(lamb*phi) * F2
print(DE)
DE.display()
Scalar field on the 5-dimensional differentiable manifold M
Hence the dilaton field equation provides a fourth equation:
eq4 = DE.coord_function()*lamb
eq4
From the action (1), the field equation for $F$ is $$ \nabla_m \left( e^{\lambda\phi} F^{mn} \right)= 0 $$ We write it as
ME == 0
with ME
defined by
ME = nab(exp(lamb*phi)*Fu).trace(0,2)
print(ME)
ME.display()
Vector field on the 5-dimensional differentiable manifold M
We get identically zero; indeed the tensor $\nabla_p (e^{\lambda\phi} F^{mn})$ has a vanishing trace, as we can check:
nab(exp(lamb*phi)*Fu).display()
The system to solve is
eqs = [eq0, eq1, eq2, eq3, eq4]
for eq in eqs:
pretty_print(eq, ' = 0')
Let us solve eq1
for $f(r)$:
sol_f = desolve(eq1.expr() == 0, f(r), ivar=r)
sol_f.expand()
Hence, up to some rescaling the solution is of the type
$$ f(r) = 1 - m e^{-(2\nu +2)r}, $$where $m$ is a constant. Hence we declare
var('m', domain='real')
fm(r) = 1 - m*exp(-(2*nu+2)*r)
fm
and substitute this function for $f(r)$ in all the equations:
eq0m = eq0.expr().substitute_function(f, fm).simplify_full()
eq0m
eq0m = (eq0m * exp(2*nu*r+2*r)).simplify_full()
eq0m
eq1m = eq1.expr().substitute_function(f, fm).simplify_full()
eq1m
eq2m = eq2.expr().substitute_function(f, fm).simplify_full()
eq2m
eq3m = eq3.expr().substitute_function(f, fm).simplify_full()
eq3m
eq3m = (eq3m * exp(2*nu*r+2*r)).simplify_full()
eq3m
eq4m = eq4.expr().substitute_function(f, fm).simplify_full()
eq4m
eqs = [eq0m, eq1m, eq2m, eq3m, eq4m]
neqs = [eq.subs(nu=2).simplify_full() for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q, m, r)
In the above solutions, $r_i$, with $i$ an integer, stands for an arbitrary parameter. In particular, we notice that $\mu$ and $q$ are related by $\mu q^2 = 48$ and that the value of $m$ can be chosen arbitrarily.
neqs = [eq.subs(nu=4).simplify_full() for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q, m, r)
As above, $r_i$, with $i$ an integer, stands for an arbitrary parameter. The constants $\mu$ and $q$ are now related by $\mu q^2 = 240$ and the value of $m$ is still arbitrary.