packages feed

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