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 PhyslibAlpha.ClassicalFieldTheory.Local.JetPoint

Fiber directions on jet points

i. Overview

This module adds the affine fiber-direction structure on coordinate-level jet points.

At this stage, it introduces:

    fiber-coordinate data on jet points,

    affine translation and line maps in the jet fiber,

    and the jet-fiber direction determined by a field.

ii. Key results

    ClassicalFieldTheory.Local.JetFiberData

    ClassicalFieldTheory.Local.JetPoint.addFiber

    ClassicalFieldTheory.Local.JetPoint.lineMap

    ClassicalFieldTheory.Local.jetDirectionAt

iii. Table of contents

    A. Fiber-coordinate data

    B. Affine fiber structure on jet points

    C. Fiber directions determined by fields

iv. References

@[expose] public section

A. Fiber-coordinate data

Fiber-coordinate data for jet points of order k. This records only the coordinates u^a_I, not the base point in Space d.

The fiber coordinates indexed by all derivative indices of order at most k.

structure JetFiberData (d m k : ) where coord : JetCoordinates d m k
instance : CoeFun (JetFiberData d m k) (fun _ => DerivativeIndex d k Fin m ) where coe V := V.coordd:m:k:coordV:JetCoordinates d m kcoordW:JetCoordinates d m khcoord: (I : DerivativeIndex d k) (a : Fin m), { coord := coordV }.coord I a = { coord := coordW }.coord I ah:coordV = coordW{ coord := coordV } = { coord := coordW } d:m:k:coordV:JetCoordinates d m khcoord: (I : DerivativeIndex d k) (a : Fin m), { coord := coordV }.coord I a = { coord := coordV }.coord I a{ coord := coordV } = { coord := coordV } All goals completed! 🐙

The zero-th order component of a jet-fiber direction, corresponding to the field value.

def value (V : JetFiberData d m k) : EuclideanSpace (Fin m) := WithLp.toLp 2 fun a => V.coord 0 a
@[simp] lemma value_apply (V : JetFiberData d m k) (a : Fin m) : V.value a = V.coord 0 a := d:m:k:V:JetFiberData d m ka:Fin mV.value.ofLp a = V.coord 0 a All goals completed! 🐙instance : Zero (JetFiberData d m k) where zero := { coord := fun _ _ => 0 }instance : Add (JetFiberData d m k) where add V W := { coord := fun I a => V.coord I a + W.coord I a }instance : SMul (JetFiberData d m k) where smul c V := { coord := fun I a => c * V.coord I a }@[simp] lemma zero_coord (I : DerivativeIndex d k) (a : Fin m) : (0 : JetFiberData d m k).coord I a = 0 := rfl@[simp] lemma add_coord (V W : JetFiberData d m k) (I : DerivativeIndex d k) (a : Fin m) : (V + W).coord I a = V.coord I a + W.coord I a := rfl@[simp] lemma smul_coord (c : ) (V : JetFiberData d m k) (I : DerivativeIndex d k) (a : Fin m) : (c V).coord I a = c * V.coord I a := rfl

B. Affine fiber structure on jet points

Translate a jet point by a fiber-direction increment.

def addFiber (J : JetPoint d m k) (V : JetFiberData d m k) : JetPoint d m k where base := J.base fiber := fun I a => J.fiber I a + V.coord I a

The affine line in jet space through J in the fiber direction V.

def lineMap (J : JetPoint d m k) (V : JetFiberData d m k) (s : ) : JetPoint d m k := J.addFiber (s V)
@[simp] lemma addFiber_base (J : JetPoint d m k) (V : JetFiberData d m k) : (J.addFiber V).base = J.base := rfl@[simp] lemma addFiber_value (J : JetPoint d m k) (V : JetFiberData d m k) : (J.addFiber V).value = J.value + V.value := d:m:k:J:JetPoint d m kV:JetFiberData d m k(J.addFiber V).value = J.value + V.value d:m:k:J:JetPoint d m kV:JetFiberData d m ka:Fin m(J.addFiber V).value.ofLp a = (J.value + V.value).ofLp a All goals completed! 🐙@[simp] lemma addFiber_coord (J : JetPoint d m k) (V : JetFiberData d m k) (I : DerivativeIndex d k) (a : Fin m) : (J.addFiber V).coord I a = J.coord I a + V.coord I a := rfl@[simp] lemma lineMap_base (J : JetPoint d m k) (V : JetFiberData d m k) (s : ) : (J.lineMap V s).base = J.base := rfl@[simp] lemma lineMap_coord (J : JetPoint d m k) (V : JetFiberData d m k) (s : ) (I : DerivativeIndex d k) (a : Fin m) : (J.lineMap V s).coord I a = J.coord I a + s * V.coord I a := rfl

C. Fiber directions determined by fields

@[simp] lemma jetDirectionAt_coord (k : ) (g : Space d EuclideanSpace (Fin m)) (x : Space d) (I : DerivativeIndex d k) (a : Fin m) : (jetDirectionAt k g x).coord I a = ∂^[I.1] (fun y => (g y) a) x := rfllemma jetDirectionAt_coord_zero (k : ) (g : Space d EuclideanSpace (Fin m)) (x : Space d) (a : Fin m) : (jetDirectionAt k g x).coord 0 a = (g x) a := d:m:k:g:Space d EuclideanSpace (Fin m)x:Space da:Fin m(jetDirectionAt k g x).coord 0 a = (g x).ofLp a All goals completed! 🐙d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)jetCoordinatesAt k (fun y => f y + s g y) x I a = (jetCoordinatesAt k f x + s jetCoordinatesAt k g x) I a d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a + s * (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xSpace.iteratedDeriv (↑I) (fun y => (f y).ofLp a + s * (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xhsmul:Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a) x = (s Space.iteratedDeriv I fun y => (g y).ofLp a) xSpace.iteratedDeriv (↑I) (fun y => (f y).ofLp a + s * (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x calc ∂^[I.1] ((fun y => (f y) a) + s fun y => (g y) a) x = (∂^[I.1] (fun y => (f y) a) + ∂^[I.1] (s fun y => (g y) a)) x := d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xhsmul:Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a) x = (s Space.iteratedDeriv I fun y => (g y).ofLp a) xSpace.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) x All goals completed! 🐙 _ = ∂^[I.1] (fun y => (f y) a) x + s * ∂^[I.1] (fun y => (g y) a) x := d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xhsmul:Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a) x = (s Space.iteratedDeriv I fun y => (g y).ofLp a) x((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x All goals completed! 🐙d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xSpace.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xhsmul:Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a) x = (s Space.iteratedDeriv I fun y => (g y).ofLp a) xSpace.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x calc ∂^[I.1] ((fun y => (f y) a) + s fun y => (g y) a) x = (∂^[I.1] (fun y => (f y) a) + ∂^[I.1] (s fun y => (g y) a)) x := hsum _ = ∂^[I.1] (fun y => (f y) a) x + s * ∂^[I.1] (fun y => (g y) a) x := d:m:k:f:Space d EuclideanSpace (Fin m)g:Space d EuclideanSpace (Fin m)x:Space ds:hf:ContDiff fhg:ContDiff gI:DerivativeIndex d ka:Fin mhfa:ContDiff fun y => (f y).ofLp ahga:ContDiff fun y => (g y).ofLp ahadd:(fun y => (f y + s g y).ofLp a) = (fun y => (f y).ofLp a) + s fun y => (g y).ofLp ahsg:ContDiff (s fun y => (g y).ofLp a)hsum:Space.iteratedDeriv (↑I) ((fun y => (f y).ofLp a) + s fun y => (g y).ofLp a) x = ((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) xhsmul:Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a) x = (s Space.iteratedDeriv I fun y => (g y).ofLp a) x((Space.iteratedDeriv I fun y => (f y).ofLp a) + Space.iteratedDeriv (↑I) (s fun y => (g y).ofLp a)) x = Space.iteratedDeriv (↑I) (fun y => (f y).ofLp a) x + s * Space.iteratedDeriv (↑I) (fun y => (g y).ofLp a) x All goals completed! 🐙