Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Physlib.SpaceAndTime.SpaceTime.Derivatives public import Physlib.SpaceAndTime.TimeAndSpace.Basic

Time slice

Time slicing functions on spacetime, turning them into a function Time → Space d → M.

This is useful when going from relativistic physics (defined using SpaceTime) to non-relativistic physics (defined using Space and Time).

@[expose] public section

The timeslice of a function SpaceTime d → M forming a function Time → Space d → M.

def timeSlice {d : } {M : Type} (c : SpeedOfLight := 1) : (SpaceTime d M) (Time Space d M) where toFun f := Function.curry (f (toTimeAndSpace c).symm) invFun f := Function.uncurry f toTimeAndSpace c left_inv f := d:M:Typec:SpeedOfLightf:SpaceTime d M(fun f => Function.uncurry f (toTimeAndSpace c)) ((fun f => Function.curry (f (toTimeAndSpace c).symm)) f) = f d:M:Typec:SpeedOfLightf:SpaceTime d Mx:SpaceTime d(fun f => Function.uncurry f (toTimeAndSpace c)) ((fun f => Function.curry (f (toTimeAndSpace c).symm)) f) x = f x All goals completed! 🐙 right_inv f := d:M:Typec:SpeedOfLightf:Time Space d M(fun f => Function.curry (f (toTimeAndSpace c).symm)) ((fun f => Function.uncurry f (toTimeAndSpace c)) f) = f d:M:Typec:SpeedOfLightf:Time Space d Mx:Timet:Space d(fun f => Function.curry (f (toTimeAndSpace c).symm)) ((fun f => Function.uncurry f (toTimeAndSpace c)) f) x t = f x t All goals completed! 🐙
@[fun_prop] lemma timeSlice_contDiff {d : } {M : Type} [NormedAddCommGroup M] [NormedSpace M] {n} (c : SpeedOfLight) (f : SpaceTime d M) (h : ContDiff n f) : ContDiff n (timeSlice c f) := d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n ((timeSlice c) f) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n (f (toTimeAndSpace c).symm) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n fd:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n (toTimeAndSpace c).symm d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n f All goals completed! 🐙 d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:SpaceTime d Mh:ContDiff n fContDiff n (toTimeAndSpace c).symm All goals completed! 🐙@[fun_prop] lemma timeSlice_differentiable {d : } {M : Type} [NormedAddCommGroup M] [NormedSpace M] (c : SpeedOfLight) (f : SpaceTime d M) (h : Differentiable f) : Differentiable (timeSlice c f) := d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable ((timeSlice c) f) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable (f (toTimeAndSpace c).symm) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable fd:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable (toTimeAndSpace c).symm d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable f All goals completed! 🐙 d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:SpaceTime d Mh:Differentiable fDifferentiable (toTimeAndSpace c).symm All goals completed! 🐙@[fun_prop] lemma timeSlice_symm_contDiff {d : } {M : Type} [NormedAddCommGroup M] [NormedSpace M] {n} (c : SpeedOfLight) (f : Time Space d M) (h : ContDiff n f) : ContDiff n ((timeSlice c).symm f) := d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n ((timeSlice c).symm f) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n (Function.uncurry f (toTimeAndSpace c)) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n (Function.uncurry f)d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n (toTimeAndSpace c) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n (Function.uncurry f) All goals completed! 🐙 d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mn:WithTop ℕ∞c:SpeedOfLightf:Time Space d Mh:ContDiff n fContDiff n (toTimeAndSpace c) All goals completed! 🐙@[fun_prop] lemma timeSlice_symm_differentiable {d : } {M : Type} [NormedAddCommGroup M] [NormedSpace M] (c : SpeedOfLight) (f : Time Space d M) (h : Differentiable f) : Differentiable ((timeSlice c).symm f) := d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable ((timeSlice c).symm f) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable (Function.uncurry f (toTimeAndSpace c)) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable (Function.uncurry f)d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable (toTimeAndSpace c) d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable (Function.uncurry f) All goals completed! 🐙 d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:Time Space d Mh:Differentiable fDifferentiable (toTimeAndSpace c) All goals completed! 🐙

The timeslice of a function SpaceTime d → M forming a function Time → Space d → M, as a linear equivalence.

def timeSliceLinearEquiv {d : } {M : Type} [AddCommGroup M] [Module M] (c : SpeedOfLight := 1) : (SpaceTime d M) ≃ₗ[] (Time Space d M) where toFun := timeSlice c invFun := (timeSlice c).symm map_add' f g := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:SpaceTime d Mg:SpaceTime d M(timeSlice c) (f + g) = (timeSlice c) f + (timeSlice c) g d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:SpaceTime d Mg:SpaceTime d Mt:Timex:Space d(timeSlice c) (f + g) t x = ((timeSlice c) f + (timeSlice c) g) t x All goals completed! 🐙 map_smul' := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLight (m : ) (x : SpaceTime d M), (timeSlice c) (m x) = (RingHom.id ) m (timeSlice c) x d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc✝:SpeedOfLightc:f:SpaceTime d M(timeSlice c✝) (c f) = (RingHom.id ) c (timeSlice c✝) f d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc✝:SpeedOfLightc:f:SpaceTime d Mt:Timex:Space d(timeSlice c✝) (c f) t x = ((RingHom.id ) c (timeSlice c✝) f) t x All goals completed! 🐙 left_inv f := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:SpaceTime d M(timeSlice c).symm ((timeSlice c) f) = f All goals completed! 🐙 right_inv f := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:Time Space d M(timeSlice c) ((timeSlice c).symm f) = f All goals completed! 🐙
lemma timeSliceLinearEquiv_apply {d : } {M : Type} [AddCommGroup M] [Module M] (c : SpeedOfLight) (f : SpaceTime d M) : timeSliceLinearEquiv c f = timeSlice c f := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:SpaceTime d M(timeSliceLinearEquiv c) f = (timeSlice c) f All goals completed! 🐙lemma timeSliceLinearEquiv_symm_apply {d : } {M : Type} [AddCommGroup M] [Module M] (c : SpeedOfLight) (f : Time Space d M) : (timeSliceLinearEquiv c).symm f = (timeSlice c).symm f := d:M:Typeinst✝¹:AddCommGroup Minst✝:Module Mc:SpeedOfLightf:Time Space d M(timeSliceLinearEquiv c).symm f = (timeSlice c).symm f All goals completed! 🐙

B. Time slices of distributions

lemma distTimeSlice_apply {M d} [NormedAddCommGroup M] [NormedSpace M] (c : SpeedOfLight) (f : (SpaceTime d) →d[] M) (κ : 𝓢(Time × Space d, )) : distTimeSlice c f κ = f (compCLMOfContinuousLinearEquiv (toTimeAndSpace c) κ) := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )((distTimeSlice c) f) κ = f ((compCLMOfContinuousLinearEquiv (toTimeAndSpace c)) κ) All goals completed! 🐙lemma distTimeSlice_symm_apply {M d} [NormedAddCommGroup M] [NormedSpace M] (c : SpeedOfLight) (f : (Time × (Space d)) →d[] M) (κ : 𝓢(SpaceTime d, )) : (distTimeSlice c).symm f κ = f (compCLMOfContinuousLinearEquiv (toTimeAndSpace c).symm κ) := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(Time × Space d)→d[] Mκ:𝓢(SpaceTime d, )((distTimeSlice c).symm f) κ = f ((compCLMOfContinuousLinearEquiv (toTimeAndSpace c).symm) κ) All goals completed! 🐙

B.1. Time slices and derivatives

M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime d(1 / c.val) (fderiv (⇑κ) ((toTimeAndSpace c) x)) (1, 0) = c.val⁻¹ * (fderiv (⇑κ) ((toTimeAndSpace c) x)) (1, 0)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑κ) ((toTimeAndSpace c) x)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑(toTimeAndSpace c)) x M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑κ) ((toTimeAndSpace c) x)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑(toTimeAndSpace c)) x M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑κ) ((toTimeAndSpace c) x) M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiable κ All goals completed! 🐙 M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑(toTimeAndSpace c)) x All goals completed! 🐙M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(SpaceTime d)→d[] M(1 / c.val) distTimeDeriv ((distTimeSlice c) f) = c.val⁻¹ distTimeDeriv ((distTimeSlice c) f) All goals completed! 🐙M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLightf:(Time × Space d)→d[] M(distTimeSlice c).symm (distTimeDeriv f) = c.val (1 / c.val) (distTimeSlice c).symm (distTimeDeriv f) All goals completed! 🐙M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLighti:Fin df:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑κ) ((toTimeAndSpace c) x)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLighti:Fin df:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑(toTimeAndSpace c)) x M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLighti:Fin df:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑κ) ((toTimeAndSpace c) x) M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLighti:Fin df:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiable κ All goals completed! 🐙 M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mc:SpeedOfLighti:Fin df:(SpaceTime d)→d[] Mκ:𝓢(Time × Space d, )x:SpaceTime dDifferentiableAt (⇑(toTimeAndSpace c)) x All goals completed! 🐙All goals completed! 🐙