Bianchi Identities
Load the environment:
(require [sicmutils.env :refer :all])Preliminaries
A couple of utilities:
(defn cyclic-sum [f] (fn [x y z] (+ (f x y z) (f y z x) (f z x y))))And a checking function that will supply us with the four literals we need, customized for a particular coordinate system:
(defn with-literals [coordsys f] (let [omega (literal-oneform-field omega-rect coordsys) X (literal-vector-field X-rect coordsys) Y (literal-vector-field Y-rect coordsys) Z (literal-vector-field Z-rect coordsys) V (literal-vector-field V-rect coordsys)] (f omega X Y Z V)))Symmetry Check
FDG, section 8.4, page 129: A system with a symmetric connection is torsion-free. The returned expression should simplify to zero.
(defn torsion-symmetric [coordsys] (let [C (symmetrize-Cartan (literal-Cartan C coordsys)) del (covariant-derivative C) R (Riemann del)] (with-literals coordsys (fn [omega X Y Z _] (((torsion del) omega X Y) (typical-point coordsys))))))Check for R3-rect:
(torsion-symmetric R3-rect)R4-rect:
(torsion-symmetric R4-rect)Symmetric (torsion-free) Bianchi Identities
FDG, equation 8.32, page 130 — first Bianchi identity with a symmetric (torsion-free) connection.
(defn Bianchi1-symmetric [coordsys] (let [C (symmetrize-Cartan (literal-Cartan C coordsys)) del (covariant-derivative C) R (Riemann del)] (with-literals coordsys (fn [omega X Y Z _] (((cyclic-sum (fn [x y z] (R omega x y z))) X Y Z) (typical-point coordsys))))))Check for R2-rect:
(Bianchi1-symmetric R2-rect)The identity holds for R3-rect and R4-rect, of course, but it's too painful to wait for these to run in the browser. The current simplifier takes too long.
Second Identity
(defn Bianchi2-symmetric [coordsys] (let [C (symmetrize-Cartan (literal-Cartan C coordsys)) del (covariant-derivative C) R (Riemann del)] (with-literals coordsys (fn [omega X Y Z V] (let [R (Riemann del)] (((cyclic-sum (fn [x y z] (((del x) R) omega V y z))) X Y Z) (typical-point coordsys)))))))FDG, equation 8.33, page 130 — second Bianchi identity with a symmetric (torsion-free) connection.
Check it for R2-rect:
(Bianchi2-symmetric R2-rect)General Bianchi Identities
Bianchi's First Identity with a general (not necessarily torsion-free) connection:
(defn Bianchi1-general [coordsys] (let [C (literal-Cartan C coordsys) del (covariant-derivative C) R (Riemann-curvature del) T (torsion-vector del) TT (torsion del)] (with-literals coordsys (fn [omega X Y Z _] (((cyclic-sum (fn [x y z] (- (omega ((R x y) z)) (+ (omega (T (T x y) z)) (((del x) TT) omega y z))))) X Y Z) (typical-point coordsys))))))Check it for R2-rect:
(Bianchi1-general R2-rect)Bianchi's second identity with a general (not necessarily torsion-free) connection.
(defn Bianchi2-general [coordsys] (let [C (literal-Cartan C coordsys) del (covariant-derivative C) R (Riemann del) T (torsion-vector del) TT (fn [omega x y] (omega (T x y)))] (with-literals coordsys (fn [omega X Y Z V] (((cyclic-sum (fn [x y z] (+ (R omega V (T x y) z) (((del x) R) omega V y z)))) X Y Z) (typical-point coordsys))))))Check it for R2-rect:
(Bianchi2-general R2-rect)Voilá!