One way of describing the metric of a flat, homogenous, expanding universe is: \begin{align} \begin{pmatrix} -1 & 0 & 0 & 0 \\ 0 & a(t)^2 & 0 & 0 \\ 0 & 0 & a(t)^2 & 0 \\ 0 & 0 & 0 & a(t)^2 \\ \end{pmatrix} \end{align} where $a(t)$ is a function of time only, and the coordinates are \begin{align*} x^{\mu} = \begin{pmatrix}t\\x\\y\\z\end{pmatrix} \end{align*}
{t,x,y,z}::Coordinate;
{\alpha,\beta, \mu,\nu,\rho,\sigma,\lambda,\kappa,\chi,\gamma}::Indices(values={t,x,y,z},position=fixed);
\partial{#}::PartialDerivative.
g_{\mu \nu}::Metric.
g^{\mu \nu}::InverseMetric.
R_{\mu \nu \rho \sigma}::RiemannTensor.
H_{\mu \nu}::Symmetric.
# Declaring a as a function of t
a::Depends(t);
metric:= {
g_{t t} = -1,
g_{x x} = a**2,
g_{y y} = a**2,
g_{z z} = a**2
};
complete(metric,$g^{\mu\nu}$);
ex:= k_{\mu \nu \alpha \rho} = \partial_{\mu \rho}{g_{\nu \alpha}};
evaluate(ex,metric,rhsonly=True);
# Define Christoffel symbols
cffl_symb := \Gamma^{\mu}_{\nu\rho} = 1/2 g^{\mu\sigma} (
\partial_{\rho}{g_{\nu\sigma}} +
\partial_{\nu}{g_{\rho\sigma}} -
\partial_{\sigma}{g_{\nu\rho}});
# Evaluate the christoeffl symbols for this metric
evaluate(cffl_symb,metric, rhsonly=True);
# Define the Riemann tensor
rieman_tensor := R^{\alpha}_{\beta \mu \nu} =
\Gamma^{\alpha}_{\sigma \mu}*\Gamma^{\sigma}_{\beta \nu}
-\Gamma^{\alpha}_{\sigma \nu}*\Gamma^{\sigma}_{\beta \mu}
-\partial_{\nu}{\Gamma^{\alpha}_{\beta \mu}}
+\partial_{\mu}{\Gamma^{\alpha}_{\beta \nu}};
_ = substitute(rieman_tensor,cffl_symb)
rieman_tensor_up = evaluate(_,metric,rhsonly=True);
rieman_low_def := R_{\alpha \beta \mu \nu} = g_{\alpha \sigma}*R^{\sigma}_{\beta \mu \nu};
_ = substitute(rieman_low_def,rieman_tensor_up)
rieman_tensor_low = evaluate(_,metric,rhsonly=True);
ricci_def := R_{\mu \lambda} = g^{\alpha \rho}*R_{\rho \mu \alpha \lambda};
_ = substitute(ricci_def,rieman_tensor_low)
ricci = evaluate(_,metric,rhsonly=True);
ricci_scalar_def := R = g^{\mu \nu}*R_{\mu \nu};
_ =substitute(ricci_scalar_def,ricci)
ricci_scalar = evaluate(_,metric,rhsonly=True);
eins_tensor_def := G_{\mu \nu} = R_{\mu \nu} - 1/2* g_{\mu \nu}*R;
_ = substitute(eins_tensor_def,ricci_def)
_ = substitute(_,ricci_scalar)
eins_tensor_def = evaluate(_,metric,rhsonly=True);
eins_raised := G^{\mu \nu} = g^{\mu \alpha}*g^{\nu \beta}*G_{\alpha \beta};
_ = substitute(eins_raised,eins_tensor_def)
eins_raised = evaluate(_,metric,rhsonly=True);
This is the required Einstein tensor.