egison-5.0.0: sample/math/geometry/hodge-Minkowski.egi
--
-- Hodge star operator in Minkowski spacetime
--
def N : Integer := 4
def params : Vector MathExpr := [|t, x, y, z|]
def g : Matrix MathExpr := [|[|-1, 0, 0, 0|], [|0, 1, 0, 0|], [|0, 0, 1, 0|], [|0, 0, 0, 1|]|]
def hodge (A: DiffForm MathExpr) : DiffForm MathExpr :=
let k := dfOrder A
in withSymbols [i, j]
sqrt (abs (M.det g_#_#)) *
foldl
(.)
((subrefs A (map 1#j_$1 (between 1 k))) . (subrefs (ε' N k) (map 1#i_$1 (between 1 N))))
(map (\n -> g~(i_n)~(j_n)) (between 1 k))
def dt : DiffForm MathExpr := [|1, 0, 0, 0|]
def dx : DiffForm MathExpr := [|0, 1, 0, 0|]
def dy : DiffForm MathExpr := [|0, 0, 1, 0|]
def dz : DiffForm MathExpr := [|0, 0, 0, 1|]
assertEqual "Hodge star of dt ∧ dx"
(hodge (wedge dt dx))
[| [| 0, 0, 0, 0 |], [| 0, 0, 0, 0 |], [| 0, 0, 0, -1 |], [| 0, 0, 0, 0 |] |]
assertEqual "Hodge star of dy ∧ dz"
(hodge (wedge dy dz))
[| [| 0, 1, 0, 0 |], [| 0, 0, 0, 0 |], [| 0, 0, 0, 0 |], [| 0, 0, 0, 0 |] |]