egison-3.7.11: sample/math/geometry/lie.egi
(define $N 3)
(define $params [| x y z |])
(define $g [| [| 1 0 0 |] [| 0 1 0 |] [| 0 0 1 |] |])
(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 . (. A_[j_1]..._[j_k]
(ε' N k)_[i_1]..._[i_N])
(map 1#g~[i_%1]~[j_%1] (between 1 k))))))))
(define $dx [| 1 0 0 |])
(define $dy [| 0 1 0 |])
(define $dz [| 0 0 1 |])
(define $ι
(lambda [%X %Y]
(with-symbols {i}
(* (df-order Y) (. X...~i (df-normalize Y..._i))))))
(define $Lie
(lambda [%X %Y]
(match (df-order Y) integer
{[,0 (ι X (d Y))]
[,N (d (ι X Y))]
[_ (+ (ι X (d Y)) (d (ι X Y)))]})))
(define $ρ (function [t x y z]))
(define $*ρ (df-normalize (hodge ρ)))
(define $u_ (generate-tensor 1#(function [t x y z]) {3}))
(define $u [| u_1 u_2 u_3 |])
(df-normalize (+ (∂/∂ *ρ t) (Lie u *ρ)))
;(tensor {3 3 3} {0 0 0 0 0 (/ (+ ρ|t (* u_1|x ρ) (* u_1 ρ|x) (* u_2|y ρ) (* u_2 ρ|y) (* u_3|z ρ) (* u_3 ρ|z)) 6) 0 (/ (+ (* -1 ρ|t) (* -1 u_1|x ρ) (* -1 u_1 ρ|x) (* -1 u_3|z ρ) (* -1 u_3 ρ|z) (* -1 u_2|y ρ) (* -1 u_2 ρ|y)) 6) 0 0 0 (/ (+ (* -1 ρ|t) (* -1 u_2|y ρ) (* -1 u_2 ρ|y) (* -1 u_1|x ρ) (* -1 u_1 ρ|x) (* -1 u_3|z ρ) (* -1 u_3 ρ|z)) 6) 0 0 0 (/ (+ ρ|t (* u_2|y ρ) (* u_2 ρ|y) (* u_3|z ρ) (* u_3 ρ|z) (* u_1|x ρ) (* u_1 ρ|x)) 6) 0 0 0 (/ (+ ρ|t (* u_3|z ρ) (* u_3 ρ|z) (* u_1|x ρ) (* u_1 ρ|x) (* u_2|y ρ) (* u_2 ρ|y)) 6) 0 (/ (+ (* -1 ρ|t) (* -1 u_3|z ρ) (* -1 u_3 ρ|z) (* -1 u_2|y ρ) (* -1 u_2 ρ|y) (* -1 u_1|x ρ) (* -1 u_1 ρ|x)) 6) 0 0 0 0 0} )
(df-normalize (+ (∂/∂ *ρ t) (Lie u *ρ)))_1_2_3
;(/ (+ ρ|t
; (* u_1|x ρ) (* u_1 ρ|x)
; (* u_2|y ρ) (* u_2 ρ|y)
; (* u_3|z ρ) (* u_3 ρ|z))
; 6)