egison-3.7.11: sample/math/geometry/hodge-laplacian-E3.egi
;;; Parameters and metrics
(define $N 2)
(define $params [|x y|])
(define $g__ [| [| 1 0 |] [| 0 1 |] |])
(define $g~~ (M.inverse g_#_#))
;;; Hodge Laplacian
(define $d
(lambda [%X]
!((flip ∂/∂) params X)))
(define $hodge
(lambda [%A]
(let {[$k (df-order A)]}
(with-symbols {i j}
(* (sqrt (abs (M.det g_#_#)))
(foldl . (. (ε' N k)_[i_1]..._[i_N]
A..._[j_1]..._[j_k])
(map 1#g~[i_%1]~[j_%1] (between 1 k))))))))
(define $δ
(lambda [%A]
(let {[$k (df-order A)]}
(* (** -1 (+ (* N (+ k 1)) 1))
(hodge (d (hodge A)))))))
(define $Δ
(lambda [%A]
(match (df-order A) integer
{[,0 (δ (d A))]
[,2 (d (δ A))]
[_ (+ (d (δ A)) (δ (d A)))]})))
(define $f (function [x y]))
(d f)
;[| f|x f|y |]
(hodge (d f))
;[| (* -1 f|y) f|x |]
(d (hodge (d f)))
;[| [| (* -1 f|y|x) f|x|x |] [| (* -1 f|y|y) f|x|y |] |]
(hodge (d (hodge (d f))))
;(+ f|y|y f|x|x)
(Δ f)
;(+ (* -1 f|y|y) (* -1 f|x|x))