Emmy, the Algebra System: Differential Geometry Chapter Seven
7 Directional Derivatives
The vector field was a generalization of the directional derivative to functions on a manifold.
(define ((F->directional-derivative F) v)
(lambda (u)
(lambda (f)
(lambda (m)
(define (g delta)
(- ((u f) m) (((((F v) delta) u) f) m)))
((D g) 0)))))7.1 Lie Derivative
Vector Fields
the implementation of scheme/define does not support (((define x) y) z)
(define ((F-Lie phi) v)
(lambda (delta)
(pushforward-vector ((phi v) delta) ((phi v) (- delta)))))(define ((phi coordsys order) v)
(lambda (delta)
(lambda (m)
((point coordsys)
(series:sum (((exp (* delta v)) (chart coordsys)) m) order)))))(define (Lie-directional coordsys order)
(let ((Phi (phi coordsys order)))
(F->directional-derivative (F-Lie Phi))))(print-expression
(let-scheme ((v (literal-vector-field 'v-rect R3-rect))
(w (literal-vector-field 'w-rect R3-rect))
(f (literal-manifold-function 'f-rect R3-rect)))
((- ((((Lie-directional R3-rect 2) v) w) f)
((commutator v w) f))
((point R3-rect) (up 'x0 'y0 'z0)))))0(define ((Lie-derivative-vector V) Y) (commutator V Y))Properties of the Lie Derivative
(define a (literal-manifold-function 'alpha R3-rect))(define b (literal-manifold-function 'beta R3-rect))(define c (literal-manifold-function 'gamma R3-rect))(define-coordinates (up x y z) R3-rect)WARNING: R3-rect already refers to: #'emmy.env/R3-rect in namespace: mentat-collective.emmy.fdg-ch07, being replaced by: #'mentat-collective.emmy.fdg-ch07/R3-rect
(define theta (+ (* a dx) (* b dy) (* c dz)))(define omega
(+ (* a (wedge dy dz))
(* b (wedge dz dx))
(* c (wedge dx dy))))(define X (literal-vector-field 'X-rect R3-rect))(define Y (literal-vector-field 'Y-rect R3-rect))(define Z (literal-vector-field 'Z-rect R3-rect))(define V (literal-vector-field 'V-rect R3-rect))(define R3-rect-point
((point R3-rect) (up 'x0 'y0 'z0)))(print-expression
(((- ((Lie-derivative V) (d theta)) (d ((Lie-derivative V) theta)))
X Y)
R3-rect-point))0(print-expression
(((- ((Lie-derivative V) (d omega)) (d ((Lie-derivative V) omega)))
X Y Z)
R3-rect-point))0(print-expression
((((- (commutator (Lie-derivative X) (Lie-derivative Y)) (Lie-derivative (commutator X Y)))
theta) Z)
R3-rect-point))0(print-expression
((((- (commutator (Lie-derivative X) (Lie-derivative Y)) (Lie-derivative (commutator X Y)))
omega) Z V)
R3-rect-point))0(define Jz (- (* x d:dy) (* y d:dx)))(print-expression
(vec (take 5
((((exp (* 'a (Lie-derivative Jz))) d:dy)
(literal-manifold-function 'f-rect R3-rect))
((point R3-rect) (up 1 0 0))))))[(((partial 1) f-rect) (up 1 0 0))
(* a (((partial 0) f-rect) (up 1 0 0)))
(* -1/2 (expt a 2) (((partial 1) f-rect) (up 1 0 0)))
(* -1/6 (expt a 3) (((partial 0) f-rect) (up 1 0 0)))
(* 1/24 (expt a 4) (((partial 1) f-rect) (up 1 0 0)))](define ((L1 X) omega)
(+ ((interior-product X) (d omega))
(d ((interior-product X) omega))))(print-expression
((- (((Lie-derivative X) omega) Y Z) (((L1 X) omega) Y Z))
((point R3-rect) (up 'x0 'y0 'z0))))0(define ((F-parallel omega phi coordsys) v)
(lambda (delta)
(lambda (u)
(lambda ( f)
(lambda (m)
(let ((basis (coordinate-system->basis coordsys)))
(let ((etilde (basis->oneform-basis basis))
(e (basis->vector-basis basis)))
(let ((m0 (((phi v) (- delta)) m)))
(let ((Aij (+ (identity-like ((omega v) m0))
(* delta (- ((omega v) m0)))))
(ui ((etilde u) m0)))
(* ((e f) m) (* Aij ui)))))))))))(define (covariant-derivative-vector omega coordsys order)
(let ((Phi (phi coordsys order)))
(F->directional-derivative
(F-parallel omega Phi coordsys))))(define ((covariant-derivative-vector Cartan) V)
(lambda (U)
(lambda (f)
(let ((basis (Cartan->basis Cartan))
(Cartan-forms (Cartan->forms Cartan)))
(let ((vector-basis (basis->vector-basis basis))
(oneform-basis (basis->oneform-basis basis)))
(let ((u-components (oneform-basis U)))
(* (vector-basis f)
(+ (V u-components)
(* (Cartan-forms V) u-components)))))))))(define ((covariant-derivative-oneform Cartan) V)
(lambda (tau)
(lambda (U)
(let ((nabla-V ((covariant-derivative-vector Cartan) V)))
(- (V (tau U)) (tau (nabla-V U)))))))the definition of get-rank, sigma and list-with-substituted-coord does work differtly in clj
(comment
(define ((((covariant-derivative-form Cartan) V) tau) vs)
(let ((k (get-rank tau))
(nabla V ((covariant-derivative-vector Cartan) V)))
(- (V (apply tau vs))
(sigma (lambda (i) (apply tau
(list-with-substituted-coord vs i (nabla V (list-ref vs i)))))
0 (- k 1)))))
:end-comment)doesn not work in cljs ff/procedure->oneform-field
(comment
(define (Cartan-transform Cartan basis-prime)
(let ((basis (Cartan->basis Cartan))
(forms (Cartan->forms Cartan))
(prime-dual-basis (basis->oneform-basis basis-prime))
(prime-vector-basis (basis->vector-basis basis-prime)))
(let ((vector-basis (basis->vector-basis basis))
(oneform-basis (basis->oneform-basis basis)))
(let ((J-inv (s/mapr oneform-basis prime-vector-basis))
(J (s/mapr prime-dual-basis vector-basis)))
(let ((omega-prime-forms
(ff/procedure->oneform-field
(lambda (v)
(+ (* J (v J-inv))
(* J (* (forms v) J-inv))))
'omega-prime-forms)))
(make-Cartan omega-prime-forms basis-prime))))))
:end-comment)(define R2-rect-basis (coordinate-system->basis R2-rect))(define R2-polar-basis (coordinate-system->basis R2-polar))(define-coordinates (up x y) R2-rect)WARNING: R2-rect already refers to: #'emmy.env/R2-rect in namespace: mentat-collective.emmy.fdg-ch07, being replaced by: #'mentat-collective.emmy.fdg-ch07/R2-rect
(define-coordinates (up r theta) R2-polar)WARNING: R2-polar already refers to: #'emmy.env/R2-polar in namespace: mentat-collective.emmy.fdg-ch07, being replaced by: #'mentat-collective.emmy.fdg-ch07/R2-polar
(define R2-rect-Christoffel
(make-Christoffel
(let ((zero (lambda (m) 0)))
(down (down (up zero zero)
(up zero zero))
(down (up zero zero)
(up zero zero))))
R2-rect-basis))(define R2-rect-Cartan
(Christoffel->Cartan R2-rect-Christoffel))(define R2-polar-Cartan
(Cartan-transform R2-rect-Cartan R2-polar-basis))(define circular (- (* x d:dy) (* y d:dx)))(define f (literal-manifold-function 'f-rect R2-rect))(define R2-rect-point ((point R2-rect) (up 'x0 'y0)))(print-expression
(((((covariant-derivative R2-rect-Cartan) d:dx)
circular)
f)
R2-rect-point))(((partial 1) f-rect) (up x0 y0))(print-expression
((d:dy f) R2-rect-point))(((partial 1) f-rect) (up x0 y0))(print-expression
(((((covariant-derivative R2-polar-Cartan) d:dx) circular) f)
R2-rect-point))(((partial 1) f-rect) (up x0 y0))(define V (literal-vector-field 'V-rect R2-rect))(define W (literal-vector-field 'W-rect R2-rect))(print-expression
(((((- (covariant-derivative R2-rect-Cartan)
(covariant-derivative R2-polar-Cartan))
V)
W)
f)
R2-rect-point))07.3 Parallel Transport
S2-spherical is in the environment
(comment
(define sphere (make-manifold S2-type 2 3))
(define S2-spherical
(coordinate-system-at sphere :spherical :north-pole))
:end-comment)(define-coordinates t R1-rect)WARNING: R1-rect already refers to: #'emmy.env/R1-rect in namespace: mentat-collective.emmy.fdg-ch07, being replaced by: #'mentat-collective.emmy.fdg-ch07/R1-rect
(define-coordinates (up theta phi) S2-spherical)WARNING: S2-spherical already refers to: #'emmy.env/S2-spherical in namespace: mentat-collective.emmy.fdg-ch07, being replaced by: #'mentat-collective.emmy.fdg-ch07/S2-spherical
(define S2-basis
(coordinate-system->basis S2-spherical))(define gamma
(compose (point S2-spherical)
(up (literal-function 'alpha)
(literal-function 'beta))
(chart R1-rect)))(define basis-over-gamma
(basis->basis-over-map gamma S2-basis))(define u_gamma
(* (up (compose (literal-function 'u↑0)
(chart R1-rect))
(compose (literal-function 'u↑1 )
(chart R1-rect)))
(basis->vector-basis basis-over-gamma)))(define (S2-Christoffel basis theta)
(let ((zero zero-manifold-function))
(make-Christoffel
(down (down
(up zero zero)
(up zero (/ 1 (tan theta))))
(down
(up zero (/ 1 (tan theta)))
(up (- (* (sin theta)
(cos theta)))
zero)))
basis)))(define sphere-Cartan (Christoffel->Cartan (S2-Christoffel S2-basis theta)))(print-expression
(mapr
(lambda (omega)
((omega
(((covariant-derivative sphere-Cartan gamma)
d:dt)
u_gamma))
((point R1-rect) 'tau)))
(basis->oneform-basis basis-over-gamma)))(up (+ (* -1 (sin (alpha tau)) (cos (alpha tau)) ((D beta) tau) (u↑1 tau)) ((D u↑0) tau)) (/ (+ (* (cos (alpha tau)) ((D beta) tau) (u↑0 tau)) (* (cos (alpha tau)) (u↑1 tau) ((D alpha) tau)) (* (sin (alpha tau)) ((D u↑1) tau))) (sin (alpha tau))))On a great circle
(define (g gamma Cartan)
(let ((omega
((Cartan->forms
(Cartan->Cartan-over-map Cartan gamma))
((differential gamma) d:dt))))
(define (the-state-derivative)
(lambda (state)
(let ((t ((point R1-rect) (ref state 0)))
(u (ref state 1)))
(up 1 (* -1 (omega t) u)))))
the-state-derivative))the implementation of scheme/define does not support ((define x) y) within let
(define ((transform tilt) coords)
(let ((colat (ref coords 0))
(long (ref coords 1)))
(let ((x (* (sin colat) (cos long)))
(y (* (sin colat) (sin long)))
(z (cos colat)))
(let ((vp ((rotate-x tilt) (up x y z))))
(let ((colatp (acos (ref vp 2)))
(longp (atan (ref vp 1) (ref vp 0))))
(up colatp longp))))))(define (tilted-path tilt)
(define (coords t)
((transform tilt) (up (/ pi 2) t)))
(compose (point S2-spherical)
coords
(chart R1-rect)))(define pi-half (/ pi 2))(print-expression
((state-advancer (g (tilted-path 1) sphere-Cartan))
(up 0 (* ((D (transform 1)) (up pi-half 0)) (up 1 0)))
pi-half))2026-03-04T00:27:43.159Z runnervmnay03 INFO [emmy.expression.compile:661] - compiled function in 104.256125 ms
(up 1.5707963267948972 (up 1.000000002621498 -5.095750372011154E-8))(print-expression
((state-advancer (g (tilted-path 1) sphere-Cartan))
(up 0 (* ((D (transform 1)) (up pi-half 0)) (up 1 0)))
1))2026-03-04T00:27:43.195Z runnervmnay03 INFO [emmy.expression.compile:661] - compiled function in 13.00629 ms
(up 1.0000000000000002 (up 0.7651502645088568 0.9117920271835236))(print-expression
(* ((D (transform 1)) (up pi-half 1)) (up 1 0)))(up 0.7651502649370375 0.9117920272004736)7.4 Geodesic Motion
(show-expression
(simplify
(((((covariant-derivative sphere-Cartan gamma)
d:dt)
((differential gamma) d:dt))
(chart S2-spherical)) ((point R1-rect) 't0))))\[\boxed{\begin{pmatrix}\displaystyle{- \sin\left(\alpha\left(\mathsf{t0}\right)\right)\,\cos\left(\alpha\left(\mathsf{t0}\right)\right)\,{\left(D\beta\left(\mathsf{t0}\right)\right)}^{2} + {D}^{2}\alpha\left(\mathsf{t0}\right)} \cr \cr \displaystyle{\frac{2\,\cos\left(\alpha\left(\mathsf{t0}\right)\right)\,D\beta\left(\mathsf{t0}\right)\,D\alpha\left(\mathsf{t0}\right) + \sin\left(\alpha\left(\mathsf{t0}\right)\right)\,{D}^{2}\beta\left(\mathsf{t0}\right)}{\sin\left(\alpha\left(\mathsf{t0}\right)\right)}}\end{pmatrix}}\]
(define (Lfree s)
(* 1/2 (square (velocity s))))(define (sphere->R3 s)
(let ((q (coordinate s)))
(let ((theta (ref q 0))
(phi (ref q 1)))
(up (* (sin theta) (cos phi))
(* (sin theta) (sin phi))
(cos theta)))))(define Lsphere
(compose Lfree (F->C sphere->R3)))(show-expression
(simplify
(((Lagrange-equations Lsphere)
(up (literal-function 'alpha)
(literal-function 'beta)))
't)))\[\boxed{\begin{bmatrix}\displaystyle{- \cos\left(\alpha\left(t\right)\right)\,\sin\left(\alpha\left(t\right)\right)\,{\left(D\beta\left(t\right)\right)}^{2} + {D}^{2}\alpha\left(t\right)}&\displaystyle{2\,\cos\left(\alpha\left(t\right)\right)\,D\alpha\left(t\right)\,\sin\left(\alpha\left(t\right)\right)\,D\beta\left(t\right) + {\sin}^{2}\left(\alpha\left(t\right)\right)\,{D}^{2}\beta\left(t\right)}\end{bmatrix}}\]
Exercise 7.1: Hamiltonian Evolution
(define Hsphere (Lagrangian->Hamiltonian Lsphere))(print-expression
((phase-space-derivative Hsphere)
(up 't (up 'theta 'phi) (down 'p_theta 'p_phi))))(up 1 (up p_theta (/ p_phi (expt (sin theta) 2))) (down (/ (* (expt p_phi 2) (cos theta)) (expt (sin theta) 3)) 0))(define state-space (make-manifold Rn 5))(define states
(coordinate-system-at state-space :rectangular :origin))(define-coordinates
(up t (up theta phi) (down p_theta p_phi)) states)(repl/scittle-sidebar)