;;;
;;; Parameters
;;;

(define $x [|α β γ|])

;;
;; Metric tensor
;;

(define $g__ (generate-tensor 2#(* (a α β γ) (G_%1_%2 α β γ)) {3 3}))
(define $g~~ (generate-tensor 2#(* (/ 1 (a α β γ)) (G~%1~%2 α β γ)) {3 3}))
g_#_#
g~#~#

;;
;; Christoffel symbols of the first kind
;;

(define $Γ___
  (with-symbols {j k l}
    (* (/ 1 2)
       (+ (∂/∂ g_j_l x_k)
          (∂/∂ g_j_k x_l)
          (* -1 (∂/∂ g_k_l x_j))))))

Γ_#_#_#

;;
;; Christoffel symbols of the second kind
;;

(define $Γ~__
  (with-symbols {i j k l}
    (. g~i~j Γ_j_k_l)))

Γ~#_#_#

;;
;; Riemann curvature tensor
;;

(define $R~i_j_k_l
  (with-symbols {m}
    (+ (- (∂/∂ Γ~i_j_l x_k) (∂/∂ Γ~i_j_k x_l))
       (- (. Γ~m_j_l Γ~i_m_k) (. Γ~m_j_k Γ~i_m_l)))))

R~#_#_#_#

;;
;; Ricci curvature
;;

(define $Ric__ (with-symbols {i j k} (contract + R~i_j_k_i)))

Ric_#_#

;;
;; Scalar curvature
;;

(define $scalar-curvature (with-symbols {j k} (. g~j~k Ric_j_k)))

scalar-curvature

;;
;; Wodzicki-Chern-Simons class
;;

(let {[[$es $os] (even-and-odd-permutations 3)]}
  (- (sum (map (lambda [$σ] (. R~u_1_s_(σ 1) R~s_u_(σ 3)_(σ 2))) es))
     (sum (map (lambda [$σ] (. R~u_1_s_(σ 1) R~s_t_(σ 3)_(σ 2))) os))))