egison-3.7.8: sample/math/geometry/vector-analysis.egi
(define $N 3)
(define $g [| [| 1 0 0 |] [| 0 1 0 |] [| 0 0 1 |] |])
(define $d
(lambda [%X]
!((flip ∂/∂) [| x y z |] X)))
(define $hodge
(lambda [%A]
(let {[$k (df-order A)]}
(with-symbols {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 1#g~[i_%1]~[j_%1] (between 1 k))))))))
(define $δ
(lambda [%A]
(let {[$r (df-order A)]}
(* (** -1 (+ (* N r) 1))
(hodge (d (hodge A)))))))
(define $grad d)
(define $rot d)
(define $div δ)
(define $Δ
(lambda [%A]
(match (tensor-order A) integer
{[,0 (δ (d A))]
[,N (d (δ A))]
[_ (+ (d (δ A)) (δ (d A)))]})))
(grad (+ (** x 2) (** y 2) (** z 2)))
;[| (* 2 x) (* 2 y) (* 2 z) |]
(rot [| (** y 2) (** x 2) 0 |])
;[| [| 0 (* 2 x) 0 |] [| (* 2 y) 0 0 |] [| 0 0 0 |] |]
(div [| (** y 2) (** x 2) 0 |])
;0
(rot [| (** x 2) (** y 2) (** z 2) |])
;[| [| (* 2 x) 0 0 |] [| 0 (* 2 y) 0 |] [| 0 0 (* 2 z) |] |]
(div [| (** x 2) (** y 2) (** z 2) |])
;(+ (* 2 z) (* 2 y) (* 2 x))
(rot [| (* x 2) (* y 2) (* z 2) |])
;[| [| 2 0 0 |] [| 0 2 0 |] [| 0 0 2 |] |]
(div [| (* x 2) (* y 2) (* z 2) |])
;6
(Δ (+ (** x 2) (** y 2) (** z 2)))
;6