egison-5.1.0: sample/math/geometry/hodge-Minkowski.egi
--
-- Hodge star operator in Minkowski spacetime
--
def N : Integer := 4
def params : Vector MathValue := [|t, x, y, z|]
def g : Matrix MathValue := [|[|-1, 0, 0, 0|], [|0, 1, 0, 0|], [|0, 0, 1, 0|], [|0, 0, 0, 1|]|]
def hodge (A: DiffForm MathValue) : DiffForm MathValue :=
let k := dfOrder A
in withSymbols [i, j]
sqrt (abs (M.det g_#_#)) *
foldl
(.)
((ε' N k)_(i_1)..._(i_N) . A..._(j_1)..._(j_k))
(map (\n -> g~(i_n)~(j_n)) [1..k])
def dt : DiffForm MathValue := [|1, 0, 0, 0|]
def dx : DiffForm MathValue := [|0, 1, 0, 0|]
def dy : DiffForm MathValue := [|0, 0, 1, 0|]
def dz : DiffForm MathValue := [|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 |] |]