Emmy, the Algebra System: Differential Geometry Chapter Six

Functional Differential Geometry: Chapter 6
Published

February 9, 2026

6 Over a Map

To deal with motion on manifolds we need to think about paths on manifolds and vectors along these paths.

See Ch3: procedure->vector-field not accessible in Scittle, but vector-field->vector-field-over-map is standard

(comment
  (define ((vector-field->vector-field-over-map mu:N->M) v-on-M)
          (procedure->vector-field
            (lambda (f-on-M)
                    (compose (v-on-M f-on-M) mu:N->M)))))

Differential of a Map

here I use lambda, because my define does not support three nestings

(define ((differential mu) v)
  (lambda (f)
    (v (compose f mu))))

6.2 One-Form Fields Over a Map

(comment
(define ((form-field->form-field-over-map mu:N->M) w-on-M)
  (define (make-fake-vector-field V-over-mu n)
    (define ((u f) m)
      ((V-over-mu f) n))
    (procedure->vector-field u))
  (procedure->nform-field
    (lambda vectors-over-map
       (lambda (n)
          ((apply w-on-M
             (map (lambda (V-over-mu)
                     (make-fake-vector-field V-over-mu n))
                  vectors-over-map))
          (mu:N->M n))))
    (get-rank w-on-M)))
:end-comment)

6.3 Basis Fields Over a Map

(define S2 (make-manifold S2-type 2 3))
(define S2-spherical
  (coordinate-system-at S2 :spherical :north-pole))
(define-coordinates (up theta phi) S2-spherical)
NoteERR
WARNING: phi already refers to: #'emmy.env/phi in namespace: mentat-collective.emmy.fdg-ch06, being replaced by: #'mentat-collective.emmy.fdg-ch06/phi
(define S2-basis (coordinate-system->basis S2-spherical))
(define mu
  (compose (point S2-spherical)
           (up (literal-function 'theta) (literal-function 'phi))
           (chart R1-rect)))
(define S2-basis-over-mu (basis->basis-over-map mu S2-basis))
(define h
  (literal-manifold-function 'h-spherical S2-spherical))
(print-expression
  (((basis->vector-basis S2-basis-over-mu) h)
   ((point R1-rect) 't0)))
(down (((partial 0) h-spherical) (up (theta t0) (phi t0))) (((partial 1) h-spherical) (up (theta t0) (phi t0))))
(print-expression
  (((basis->oneform-basis S2-basis-over-mu)
    (basis->vector-basis S2-basis-over-mu))
   ((point R1-rect) 't0)))
(up (down 1 0) (down 0 1))

Components of the Velocity

(define-coordinates t e/R1-rect)
NoteERR
WARNING: R1-rect already refers to: #'emmy.env/R1-rect in namespace: mentat-collective.emmy.fdg-ch06, being replaced by: #'mentat-collective.emmy.fdg-ch06/R1-rect
(print-expression
  (((basis->oneform-basis S2-basis-over-mu)
    ((differential mu) d:dt))
   ((point R1-rect) 't0)))
(up ((D theta) t0) ((D phi) t0))

Pullback and Pushforward of a Function

(define ((pullback-function mu:N->M) f-on-M)
  (compose f-on-M mu:N->M))

Pushforward of a Vector Field

(comment
(define ((pushforward-vector mu:N->M mu-inverse:M->N) v-on-N)
  (procedure->vector-field
    (lambda (f)
            (compose (v-on-N (compose f mu:N->M)) mu-inverse:M->N))))
)

Pullback of a Vector Field

(define (pullback-vector-field mu:N->M mu-inverse:M->N)
  (pushforward-vector mu-inverse:M->N mu:N->M))

Pullback of a Form Field

(comment
  (define ((pullback-form mu:N->M) omega-on-M)
    (let ((k (get-rank omega-on-M)))
      (if (= k 0)
        ((pullback function mu:N->M) omega-on-M)
        (procedure->nform-field
          (lambda vectors-on-N
                  (apply ((form-field->form-field-over-map mu:N->M)
                          omega-on-M)
                         (map (differential mu:N->M) vectors-on-N)))
          k))))
  )

Properties of Pullback

(define mu (literal-manifold-map 'MU R2-rect R3-rect))
(define f (literal-manifold-function 'f-rect R3-rect))
(define X (literal-vector-field 'X-rect R2-rect))
(print-expression
  (((- ((pullback mu) (d f)) (d ((pullback mu) f))) X)
   ((point R2-rect) (up 'x0 'y0))))
0
(define theta (literal-oneform-field 'THETA R3-rect))
(define Y (literal-vector-field 'Y-rect R2-rect))
(print-expression
  (((- ((pullback mu) (d theta)) (d ((pullback mu) theta))) X Y)
   ((point R2-rect) (up 'x0 'y0))))
0
(repl/scittle-sidebar)
source: src/mentat_collective/emmy/fdg_ch06.clj