-- -- 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 |] |]