Emmy, the Algebra System: Differential Geometry Chapter Three

Functional Differential Geometry: Chapter 3
Published

January 29, 2026

3 Vector Fields and One-Form Fields

We want a way to think about how a function varies on a manifold.

3.1 Vector Fields

(define v
  (components->vector-field
    (up (literal-function 'b0 R2->R)
        (literal-function 'b1 R2->R))
    R2-rect))
(print-expression
  ((v (literal-manifold-function 'f-rect R2-rect)) R2-rect-point))
(+ (* (((partial 0) f-rect) (up x0 y0)) (b0 (up x0 y0))) (* (((partial 1) f-rect) (up x0 y0)) (b1 (up x0 y0))))
(print-expression
  ((v (chart R2-rect)) R2-rect-point))
(up (b0 (up x0 y0)) (b1 (up x0 y0)))

[Comment MAK concerning components->vector-field]

The function procedure->vector-field seems to be missing in Scittle

Clojure interns has procedure->vector-field

(comment
  (ns-interns 'emmy.calculus.vector-field))

ClojureScript interns lack procedure->vector-field

(comment
  (kind/reagent
    ['(fn []
        [:tt (str (ns-interns 'emmy.calculus.vector-field))])]))

The function components->vector-field exists as a standard, so we can leave it here as merely a comment

(comment
  (define (components->vector-field components coordsys)
    (define (v f)
      (compose (* (D (compose f (point coordsys)))
                  components)
               (chart coordsys)))
    (vf/procedure->vector-field v)))

Coordinate Representation

need to check the form below, fortunately coordinatize is also standard

(comment
  (define (coordinatize v coordsys)
    (define ((coordinatized-v f) x)
      (let ((b (compose (v (chart coordsys)) (point coordsys))))
        (* ((D f) x) (b x))))
    (make-operator coordinatized-v)))
(print-expression
  (((e/coordinatize v R2-rect) (literal-function 'f-rect R2->R))
   (up 'x0 'y0)))
(+ (* (((partial 0) f-rect) (up x0 y0)) (b0 (up x0 y0))) (* (((partial 1) f-rect) (up x0 y0)) (b1 (up x0 y0))))

3.2 Coordinate-Basis Vector Fields

(define-coordinates (up x y) R2-rect)
NoteERR
WARNING: R2-rect already refers to: #'emmy.env/R2-rect in namespace: mentat-collective.emmy.fdg-ch03, being replaced by: #'mentat-collective.emmy.fdg-ch03/R2-rect
(define-coordinates (up r theta) R2-polar)
NoteERR
WARNING: R2-polar already refers to: #'emmy.env/R2-polar in namespace: mentat-collective.emmy.fdg-ch03, being replaced by: #'mentat-collective.emmy.fdg-ch03/R2-polar
(print-expression
  ((d:dx (square r)) R2-rect-point))
(* 2 (sqrt (+ (expt x0 2) (expt y0 2))) (/ 1 (* (sqrt (+ (expt x0 2) (expt y0 2))) 2)) 2 x0)
(print-expression
  (((+ d:dx (* 2 d:dy)) (+ (square r) (* 3 x))) R2-rect-point))
(+ (* 2 (sqrt (+ (expt x0 2) (expt y0 2))) (/ 1 (* (sqrt (+ (expt x0 2) (expt y0 2))) 2)) 2 x0) 3 (* 2 2 (sqrt (+ (expt x0 2) (expt y0 2))) (/ 1 (* (sqrt (+ (expt x0 2) (expt y0 2))) 2)) 2 y0))

3.3 Integral Curves

(define circular (- (* x d:dy) (* y d:dx)))
(print-expression
  (take 6
        (seq
          (((exp (* 't circular)) (chart R2-rect))
           ((point R2-rect) (up 1 0))))))
((up 1 0)
 (up 0 t)
 (up (* 1/2 t t -1) 0)
 (up 0 (* 1/6 t t -1 t))
 (up (* 1/24 t t -1 t t -1) 0)
 (up 0 (* 1/120 t t -1 t t -1 t)))
(print-expression
  ((((e/evolution 6) 'delta-t circular) (chart R2-rect))
   ((point R2-rect) (up 1 0))))
(up (+ 1 (* 1/2 delta-t delta-t -1) (* 1/24 delta-t delta-t -1 delta-t delta-t -1) (* 1/720 delta-t delta-t -1 delta-t delta-t -1 delta-t delta-t -1)) (+ delta-t (* 1/6 delta-t delta-t -1 delta-t) (* 1/120 delta-t delta-t -1 delta-t delta-t -1 delta-t)))

3.5 Coordinate-Basis One-Form Fields

(define omega
  (e/components->oneform-field
    (down (literal-function 'a_0 R2->R)
          (literal-function 'a_1 R2->R))
    R2-rect))
(print-expression
  ((omega (down d:dx d:dy)) R2-rect-point))
(down (a_0 (up x0 y0)) (a_1 (up x0 y0)))
(define omega-alt (e/literal-oneform-field 'a R2-rect))
(print-expression
  (((d (literal-manifold-function 'f-rect R2-rect))
    (coordinate-system->vector-basis R2-rect))
   R2-rect-point))
(down (((partial 0) f-rect) (up x0 y0)) (((partial 1) f-rect) (up x0 y0)))
(print-expression
  (((d (literal-manifold-function 'f-polar R2-polar))
    (coordinate-system->vector-basis R2-rect))
   ((point R2-polar) (up 'r 'theta))))
(down (+ (* (((partial 0) f-polar) (up (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) (atan (* r (sin theta)) (* r (cos theta))))) (/ 1 (* (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) 2)) 2 r (cos theta)) (* (((partial 1) f-polar) (up (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) (atan (* r (sin theta)) (* r (cos theta))))) (/ (- (* r (sin theta))) (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))))) (+ (* (((partial 0) f-polar) (up (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) (atan (* r (sin theta)) (* r (cos theta))))) (/ 1 (* (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) 2)) 2 r (sin theta)) (* (((partial 1) f-polar) (up (sqrt (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))) (atan (* r (sin theta)) (* r (cos theta))))) (/ (* r (cos theta)) (+ (expt (* r (cos theta)) 2) (expt (* r (sin theta)) 2))))))
(define-coordinates (up x y) R2-rect)
(print-expression
  ((dx d:dy) R2-rect-point))
0
(print-expression
  ((dx d:dx) R2-rect-point))
1
(print-expression
  ((dx circular) R2-rect-point))
(- y0)
(print-expression
  ((dy circular) R2-rect-point))
x0
(print-expression
  ((dr circular) R2-rect-point))
(- (* x0 (/ 1 (* (sqrt (+ (expt x0 2) (expt y0 2))) 2)) 2 y0) (* y0 (/ 1 (* (sqrt (+ (expt x0 2) (expt y0 2))) 2)) 2 x0))
(print-expression
  ((dtheta circular) R2-rect-point))
(- (* x0 (/ x0 (+ (expt x0 2) (expt y0 2)))) (* y0 (/ (- y0) (+ (expt x0 2) (expt y0 2)))))
(define f (literal-manifold-function 'f-rect R2-rect))
(print-expression
  (((- circular d:dtheta) f) R2-rect-point))
(- (- (* x0 (((partial 1) f-rect) (up x0 y0))) (* y0 (((partial 0) f-rect) (up x0 y0)))) (+ (* (((partial 0) f-rect) (up (* (sqrt (+ (expt x0 2) (expt y0 2))) (cos (atan y0 x0))) (* (sqrt (+ (expt x0 2) (expt y0 2))) (sin (atan y0 x0))))) (sqrt (+ (expt x0 2) (expt y0 2))) (- (sin (atan y0 x0)))) (* (((partial 1) f-rect) (up (* (sqrt (+ (expt x0 2) (expt y0 2))) (cos (atan y0 x0))) (* (sqrt (+ (expt x0 2) (expt y0 2))) (sin (atan y0 x0))))) (sqrt (+ (expt x0 2) (expt y0 2))) (cos (atan y0 x0)))))

Coordinate Transformations

(define omega (literal-oneform-field 'a R2-rect))
(define v (literal-vector-field 'b R2-rect))
(print-expression
  ((omega v) R2-rect-point))
(+ (* (a_0 (up x0 y0)) (b↑0 (up x0 y0))) (* (a_1 (up x0 y0)) (b↑1 (up x0 y0))))
(repl/scittle-sidebar)
source: src/mentat_collective/emmy/fdg_ch03.clj