-- -- Hodge star operator in E³ (Euclidean 3-space) -- def N := 3 def params := [|x, y, z|] def g := [|[|1, 0, 0|], [|0, 1, 0|], [|0, 0, 1|]|] def hodge A := 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 dx := [|1, 0, 0|] def dy := [|0, 1, 0|] def dz := [|0, 0, 1|] assertEqual "Hodge star of dx" (hodge dx) [| [| 0, 0, 0 |], [| 0, 0, 1 |], [| 0, 0, 0 |] |] assertEqual "Hodge star of dx ∧ dy" (hodge (wedge dx dy)) [| 0, 0, 1 |]