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á!