packages feed

egison-5.0.0: sample/math/geometry/riemann-curvature-tensor-of-FLRW-metric.egi

declare symbol w, r, θ, φ, K: MathExpr

-- Parameters
def x : Vector MathExpr := [| w, r, θ, φ |]

-- Scale factor function a(w)
def a := function (w)

-- Spatial curvature factor
def W (r: MathExpr) : MathExpr := 1 / '(1 - K * r^2)

-- Metric tensor
def g_i_j : Matrix MathExpr :=
  [| [| -1, 0, 0, 0 |]
   , [| 0, a^2 * W r, 0, 0 |]
   , [| 0, 0, a^2 * r^2, 0 |]
   , [| 0, 0, 0, a^2 * r^2 * (sin θ)^2 |]
   |]

def g~i~j := M.inverse g_#_#

-- Christoffel symbols
def Γ_i_j_k := (1 / 2) * (∂/∂ g_i_k x~j + ∂/∂ g_i_j x~k - ∂/∂ g_j_k x~i)

def Γ~i_j_k := withSymbols [m]
  g~i~m . Γ_m_j_k

-- Riemann curvature
def R~i_j_k_l := withSymbols [m]
  ∂/∂ Γ~i_j_l x~k - ∂/∂ Γ~i_j_k x~l + Γ~m_j_l . Γ~i_m_k - Γ~m_j_k . Γ~i_m_l

-- Ricci curvature
def Ric_i_j := withSymbols [m]
  sum (contract R~m_i_m_j)

-- Scalar curvature
def scalarCurvature := withSymbols [i, j]
  expandAll' (g~i~j . Ric_i_j)

-- Note: The expected scalar curvature is:
-- (6 * a|1|1 * a + 6 * (a|1)^2 + 6 * K) / a^2