packages feed

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