Imports
/-
Copyright (c) 2026 Juan Jose Fernandez Morales. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Juan Jose Fernandez Morales
-/
module
public import Physlib.SpaceAndTime.Space.Derivatives.DerivativeIndex
public import Physlib.SpaceAndTime.Space.Derivatives.IteratedCoordinate-level jet points
i. Overview
This module introduces the coordinate-level point of the locally trivialized k-jet bundle for
fields on Space d with values in EuclideanSpace ℝ (Fin m).
This module only formalizes the local coordinate model Jet^k(Ω, ℝ^m) ≃ Ω × V; it does not
attempt to define global jet bundles.
At this core stage, a jet point is represented by:
its base point in Space d,
and its jet coordinates indexed by derivative indices of order at most k.
In particular, the zero-th order field value is not stored separately: it is the zero derivative coordinate.
ii. Key results
ClassicalFieldTheory.Local.JetCoordinates
ClassicalFieldTheory.Local.JetPoint
ClassicalFieldTheory.Local.jetCoordinatesAt
ClassicalFieldTheory.Local.jetAt
iii. Table of contents
A. Jet coordinates
B. Jet points
C. Jet points of fields
iv. References
J. Cortés and A. Haupt, Lecture Notes on Mathematical Methods of Classical Physics, arXiv:1612.03100v2, Chapter 5, Section 5.1.
@[expose] public sectionA. Jet coordinates
Coordinate data u^a_I for k-th order jet points.
For each derivative index I, these are the scalar components of the corresponding
EuclideanSpace ℝ (Fin m) fiber coordinate. We keep this componentwise form because the
local Euler-Lagrange formulas are indexed by both I and a.
abbrev JetCoordinates (d m k : ℕ) := DerivativeIndex d k → Fin m → ℝB. Jet points
The coordinate-level points of the locally trivialized k-jet bundle for fields
Space d → EuclideanSpace ℝ (Fin m).
The base point of the jet point.
The jet coordinates indexed by all derivative indices of order at most k.
The coordinate u^a_I of a jet point.
def coord (J : JetPoint d m k) (I : DerivativeIndex d k) (a : Fin m) : ℝ := J.fiber I aThe zero-th order value encoded by a jet point.
@[simp]
lemma value_apply (J : JetPoint d m k) (a : Fin m) :
J.value a = J.coord 0 a := d:ℕm:ℕk:ℕJ:JetPoint d m ka:Fin m⊢ J.value.ofLp a = J.coord 0 a
All goals completed! 🐙@[ext]
lemma ext (J K : JetPoint d m k) (hbase : J.base = K.base)
(hcoord : ∀ I a, J.coord I a = K.coord I a) :
J = K := d:ℕm:ℕk:ℕJ:JetPoint d m kK:JetPoint d m khbase:J.base = K.basehcoord:∀ (I : DerivativeIndex d k) (a : Fin m), J.coord I a = K.coord I a⊢ J = K
cases J with
d:ℕm:ℕk:ℕK:JetPoint d m kx:Space du:JetCoordinates d m khbase:{ base := x, fiber := u }.base = K.basehcoord:∀ (I : DerivativeIndex d k) (a : Fin m), { base := x, fiber := u }.coord I a = K.coord I a⊢ { base := x, fiber := u } = K
cases K with
d:ℕm:ℕk:ℕx:Space du:JetCoordinates d m ky:Space dv:JetCoordinates d m khbase:{ base := x, fiber := u }.base = { base := y, fiber := v }.basehcoord:∀ (I : DerivativeIndex d k) (a : Fin m), { base := x, fiber := u }.coord I a = { base := y, fiber := v }.coord I a⊢ { base := x, fiber := u } = { base := y, fiber := v }
d:ℕm:ℕk:ℕx:Space du:JetCoordinates d m ky:Space dv:JetCoordinates d m khbase:x = yhcoord:∀ (I : DerivativeIndex d k) (a : Fin m), u I a = v I a⊢ { base := x, fiber := u } = { base := y, fiber := v }
d:ℕm:ℕk:ℕx:Space du:JetCoordinates d m kv:JetCoordinates d m khcoord:∀ (I : DerivativeIndex d k) (a : Fin m), u I a = v I a⊢ { base := x, fiber := u } = { base := x, fiber := v }
d:ℕm:ℕk:ℕx:Space du:JetCoordinates d m kv:JetCoordinates d m khcoord:∀ (I : DerivativeIndex d k) (a : Fin m), u I a = v I a⊢ u = v
d:ℕm:ℕk:ℕx:Space du:JetCoordinates d m kv:JetCoordinates d m khcoord:∀ (I : DerivativeIndex d k) (a : Fin m), u I a = v I aI:DerivativeIndex d ka:Fin m⊢ u I a = v I a
All goals completed! 🐙Build a jet point from a base point and its jet coordinates.
def ofBaseCoordinates (x : Space d) (u : JetCoordinates d m k) : JetPoint d m k where
base := x
fiber := uThe base point and jet coordinates of a jet point.
def toBaseCoordinates (J : JetPoint d m k) : Space d × JetCoordinates d m k := (J.base, J.fiber)@[simp]
lemma ofBaseCoordinates_base (x : Space d) (u : JetCoordinates d m k) :
(ofBaseCoordinates x u).base = x := rfl@[simp]
lemma ofBaseCoordinates_fiber (x : Space d) (u : JetCoordinates d m k) :
(ofBaseCoordinates x u).fiber = u := rfl@[simp]
lemma ofBaseCoordinates_coord (x : Space d) (u : JetCoordinates d m k)
(I : DerivativeIndex d k) (a : Fin m) :
(ofBaseCoordinates x u).coord I a = u I a := rfl@[simp]
lemma ofBaseCoordinates_base_fiber (J : JetPoint d m k) :
ofBaseCoordinates J.base J.fiber = J := d:ℕm:ℕk:ℕJ:JetPoint d m k⊢ ofBaseCoordinates J.base J.fiber = J
d:ℕm:ℕk:ℕJ:JetPoint d m k⊢ (ofBaseCoordinates J.base J.fiber).base = J.based:ℕm:ℕk:ℕJ:JetPoint d m k⊢ ∀ (I : DerivativeIndex d k) (a : Fin m), (ofBaseCoordinates J.base J.fiber).coord I a = J.coord I a
d:ℕm:ℕk:ℕJ:JetPoint d m k⊢ (ofBaseCoordinates J.base J.fiber).base = J.base All goals completed! 🐙
d:ℕm:ℕk:ℕJ:JetPoint d m k⊢ ∀ (I : DerivativeIndex d k) (a : Fin m), (ofBaseCoordinates J.base J.fiber).coord I a = J.coord I a d:ℕm:ℕk:ℕJ:JetPoint d m kI:DerivativeIndex d ka:Fin m⊢ (ofBaseCoordinates J.base J.fiber).coord I a = J.coord I a
All goals completed! 🐙@[simp]
lemma toBaseCoordinates_ofBaseCoordinates (x : Space d) (u : JetCoordinates d m k) :
(ofBaseCoordinates x u).toBaseCoordinates = (x, u) := rflC. Jet points of fields
@[simp]
lemma jetAt_base (k : ℕ) (f : Space d → EuclideanSpace ℝ (Fin m)) (x : Space d) :
(jetAt k f x).base = x := rfl@[simp]
lemma jetAt_value (k : ℕ) (f : Space d → EuclideanSpace ℝ (Fin m)) (x : Space d) :
(jetAt k f x).value = f x := d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ (jetAt k f x).value = f x
d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space da:Fin m⊢ (jetAt k f x).value.ofLp a = (f x).ofLp a
All goals completed! 🐙@[simp]
lemma jetAt_coord (k : ℕ) (f : Space d → EuclideanSpace ℝ (Fin m)) (x : Space d)
(I : DerivativeIndex d k) (a : Fin m) :
(jetAt k f x).coord I a = ∂^[I.1] (fun y => (f y) a) x := rfllemma jetAt_coord_zero (k : ℕ) (f : Space d → EuclideanSpace ℝ (Fin m)) (x : Space d)
(a : Fin m) :
(jetAt k f x).coord 0 a = (f x) a := d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space da:Fin m⊢ (jetAt k f x).coord 0 a = (f x).ofLp a
All goals completed! 🐙@[simp]
lemma jetCoordinatesAt_eq (k : ℕ) (g : Space d → EuclideanSpace ℝ (Fin m)) (x : Space d)
(I : DerivativeIndex d k) (a : Fin m) :
jetCoordinatesAt k g x I a = ∂^[I.1] (fun y => (g y) a) x := rfllemma jetCoordinatesAt_zero (k : ℕ) (g : Space d → EuclideanSpace ℝ (Fin m))
(x : Space d) (a : Fin m) :
jetCoordinatesAt k g x 0 a = (g x) a := d:ℕm:ℕk:ℕg:Space d → EuclideanSpace ℝ (Fin m)x:Space da:Fin m⊢ jetCoordinatesAt k g x 0 a = (g x).ofLp a
All goals completed! 🐙lemma jetAt_eq_ofBaseCoordinates (k : ℕ) (f : Space d → EuclideanSpace ℝ (Fin m))
(x : Space d) :
jetAt k f x = JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x) := d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ jetAt k f x = JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)
d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ (jetAt k f x).base = (JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)).based:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ ∀ (I : DerivativeIndex d k) (a : Fin m),
(jetAt k f x).coord I a = (JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)).coord I a
d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ (jetAt k f x).base = (JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)).base All goals completed! 🐙
d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space d⊢ ∀ (I : DerivativeIndex d k) (a : Fin m),
(jetAt k f x).coord I a = (JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)).coord I a d:ℕm:ℕk:ℕf:Space d → EuclideanSpace ℝ (Fin m)x:Space dI:DerivativeIndex d ka:Fin m⊢ (jetAt k f x).coord I a = (JetPoint.ofBaseCoordinates x (jetCoordinatesAt k f x)).coord I a
All goals completed! 🐙