This worksheet illustrates some features of SageManifolds (v0.8) on computations regarding Lifshitz spacetimes.
It is based on the following articles:
First we set up the notebook to display mathematical objects using LaTeX formatting:
%display latex
Let us declare the spacetime $M$ as a 5-dimensional manifold:
M = Manifold(5, 'M')
print M
5-dimensional manifold 'M'
We introduce a first coordinate system on $M$:
X0.<t,x,y1,y2,R> = M.chart('t x y1:y_1 y2:y_2 R:(0,+oo)')
X0
Let us consider the following Lifshitz-symmetric metric, parametrized by some real number $\nu$:
g = M.lorentz_metric('g')
var('nu', latex_name=r'\nu', domain='real')
g[0,0] = -R^(2*nu)
g[1,1] = R^(2*nu)
g[2,2] = R^2
g[3,3] = R^2
g[4,4] = 1/R^2
g.display()
A matrix view of the metric components:
g[:]
This metric is invariant under the Lifshitz scaling $$ (t,x,y_1,y_2,R) \longmapsto \left(\lambda^\nu t, \lambda^\nu x, \lambda y_1, \lambda y_2, \frac{R}{\lambda} \right)$$
Let us introduce a second coordinate system on $M$:
X.<t,x,y1,y2,r> = M.chart('t x y1:y_1 y2:y_2 r:(0,+oo)')
X
and relate it to the previous one by the transformation $r=\ln R$:
X0_to_X = X0.transition_map(X, [t, x, y1, y2, ln(R)])
X0_to_X.display()
The inverse coordinate transition is computed by means of the method inverse()
:
X_to_X0 = X0_to_X.inverse()
X_to_X0.display()
At this stage, the manifold's atlas defined by the user is
M.atlas()
and the list of defined vector frames defined is
M.frames()
The expression of the metric in terms of the new coordinates is
g.display(X.frame(), X)
or, in matrix view:
g[X.frame(),:,X]
To access to a particular component, we have to specify (i) the frame w.r.t. which it is defined and (ii) the coordinates in which the component is expressed:
g[X.frame(),0,0,X]
g[X.frame(),0,0] # the default chart is used
From now on, let us consider the coordinates $X = (t,x,y_1,y_2,r)$ as the default ones on the manifold $M$:
M.set_default_chart(X)
M.set_default_frame(X.frame())
Then
g.display()
g[:]
g[0,0]
g.display_comp()
The Riemann tensor is
Riem = g.riemann()
print Riem
tensor field 'Riem(g)' of type (1,3) on the 5-dimensional 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 manifold 'M'
Ric.display()
Ric.display_comp()
The Ricci scalar:
Rscal = g.ricci_scalar()
print Rscal
scalar field 'r(g)' on the 5-dimensional manifold 'M'
Rscal.display()
We note that the Ricci scalar is constant.
Let us consider a model based on the following action, involving 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)}$$We consider the following ansatz for the dilaton scalar field $\phi$: $$ \phi = \frac{1}{\lambda} \left( 4 r + \ln\mu \right),$$ where $\lambda$ and $\mu$ are two constants.
var('mu', latex_name=r'\mu')
var('lamb', latex_name=r'\lambda')
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 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]
print dy1
print dy2
dy1, dy2
1-form 'dy1' on the 5-dimensional manifold 'M' 1-form 'dy2' on the 5-dimensional manifold 'M'
We can then form $F$ according to the above ansatz:
var('q')
F = q/2 * dy1.wedge(dy2)
F.set_name('F')
print F
F.display()
2-form 'F' on the 5-dimensional manifold 'M'
By construction, the 2-form $F$ is closed (since $q$ is constant):
print xder(F)
3-form 'dF' on the 5-dimensional manifold 'M'
xder(F).display()
Let us evaluate the square $F_{mn} F^{mn}$ of $F$:
Fu = F.up(g)
print Fu
Fu.display()
tensor field of type (2,0) on the 5-dimensional manifold 'M'
F2 = F['_{mn}']*Fu['^{mn}'] # using LaTeX notations to denote contraction
print F2
F2.display()
scalar field on the 5-dimensional 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 manifold 'M'
The tensor field $\mathcal{F}$ is symmetric:
FF == FF.symmetrize()
Therefore, from now on, we set
FF = FF.symmetrize()
var('Lamb', latex_name=r'\Lambda')
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 manifold 'M'
EE.display_comp(only_nonredundant=True)
We note that EE==0
leads to only 3 independent equations:
eq1 = (EE[0,0]/exp(2*nu*r)).expr()
eq1
eq2 = (EE[2,2]/exp(2*r)).expr()
eq2
eq3 = EE[4,4].expr().expand()
eq3
First we evaluate $\nabla_m \nabla^m \phi$:
nab = g.connection()
print nab
nab
Levi-Civita connection 'nabla_g' associated with the Lorentzian metric 'g' on the 5-dimensional manifold 'M'
box_phi = nab(nab(phi).up(g)).trace()
print box_phi
box_phi.display()
scalar field on the 5-dimensional 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
scalar field on the 5-dimensional manifold 'M'
DE.display()
Hence the dilaton field equation provides a fourth equation:
eq4 = DE.expr().expand()
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 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()
We have 4 equations involving the constants $\lambda$, $\mu$, $\nu$, $q$ and $\Lambda$:
eq1 == 0
eq2 == 0
eq3 == 0
eq4 == 0
eqs = [eq1, eq2, eq3, eq4]
neqs = [eq.subs(nu=1) for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q)
Hence there is no solution for $\mathrm{AdS}_5$ with the above ansatz.
neqs = [eq.subs(nu=2) for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q)
Hence there are two families of solutions, each famility being parametrized by e.g. $q$.
neqs = [eq.subs(nu=4) for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q)
Hence there are two families of solutions, each family being parametrized by e.g. $q$.