Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nikolai Kashcheev, Joseph Tooby-Smith
-/
module
public import Physlib.Relativity.Tensors.RealTensor.Vector.Basic
public import Physlib.SpaceAndTime.Space.Module
public import Physlib.SpaceAndTime.Time.Basic
public import Mathlib.Analysis.Calculus.Deriv.Inv
public import Mathlib.Analysis.InnerProductSpace.CalculusTime Derivatives
i. Overview
In this module we define and prove basic lemmas about derivatives of functions on Time.
ii. Key results
deriv : The derivative of a function Time → M at a given time.
manifoldDeriv : The derivative of a function from Time to a manifold.
iii. Table of contents
A. The definition of the derivative
A.1. Derivatives of functions into vector spaces
A.2. Derivatives of functions into manifolds
B. Linearlity properties of the derivative
C. Derivative of constant functions
D. Smoothness properties
E. Derivatives of components
iv. References
@[expose] public sectionA. The definition of the derivative
A.1. Derivatives of functions into vector spaces
@[inherit_doc deriv]
scoped notation "∂ₜ" => derivlemma deriv_eq [AddCommGroup M] [Module ℝ M] [TopologicalSpace M]
(f : Time → M) (t : Time) : Time.deriv f t = fderiv ℝ f t 1 := rflA.2. Derivatives of functions into manifolds
B. Linearlity properties of the derivative
d:ℕt:Timef:Time → EuclideanSpace ℝ (Fin d)k:ℝhf:Differentiable ℝ f⊢ (k • fderiv ℝ f t) 1 = k • ∂ₜ (fun t => f t) th d:ℕt:Timef:Time → EuclideanSpace ℝ (Fin d)k:ℝhf:Differentiable ℝ f⊢ DifferentiableAt ℝ f t
rfl h d:ℕt:Timef:Time → EuclideanSpace ℝ (Fin d)k:ℝhf:Differentiable ℝ f⊢ DifferentiableAt ℝ f t
fun_prop All goals completed! 🐙
lemma deriv_neg [NormedAddCommGroup M] [NormedSpace ℝ M] (f : Time → M) :
∂ₜ (-f) t = -∂ₜ f t := by M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ ∂ₜ (-f) t = -∂ₜ f t
rw [deriv, M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ (fderiv ℝ (-f) t) 1 = -∂ₜ f t M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ (-fderiv ℝ f t) 1 = -∂ₜ f t fderiv_neg M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ (-fderiv ℝ f t) 1 = -∂ₜ f t M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ (-fderiv ℝ f t) 1 = -∂ₜ f t] M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → M⊢ (-fderiv ℝ f t) 1 = -∂ₜ f t
rfl All goals completed! 🐙
lemma deriv_add [NormedAddCommGroup M] [NormedSpace ℝ M] (f g : Time → M)
(hf : DifferentiableAt ℝ f t) (hg : DifferentiableAt ℝ g t) :
∂ₜ (fun s => f s + g s) t = ∂ₜ f t + ∂ₜ g t := by M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mg:Time → Mhf:DifferentiableAt ℝ f thg:DifferentiableAt ℝ g t⊢ ∂ₜ (fun s => f s + g s) t = ∂ₜ f t + ∂ₜ g t
simp only [Time.deriv_eq] M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mg:Time → Mhf:DifferentiableAt ℝ f thg:DifferentiableAt ℝ g t⊢ (fderiv ℝ (fun s => f s + g s) t) 1 = (fderiv ℝ f t) 1 + (fderiv ℝ g t) 1
rw [fderiv_fun_add hf hg, M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mg:Time → Mhf:DifferentiableAt ℝ f thg:DifferentiableAt ℝ g t⊢ (fderiv ℝ f t + fderiv ℝ g t) 1 = (fderiv ℝ f t) 1 + (fderiv ℝ g t) 1 All goals completed! 🐙 _root_.add_apply M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mg:Time → Mhf:DifferentiableAt ℝ f thg:DifferentiableAt ℝ g t⊢ (fderiv ℝ f t) 1 + (fderiv ℝ g t) 1 = (fderiv ℝ f t) 1 + (fderiv ℝ g t) 1 All goals completed! 🐙] All goals completed! 🐙
lemma deriv_fun_sum {ι : Type*} [NormedAddCommGroup M] [NormedSpace ℝ M]
(s : Finset ι) (a : ι → Time → M) (ha : ∀ i ∈ s, DifferentiableAt ℝ (a i) t) :
∂ₜ (fun x => ∑ i ∈ s, a i x) t = ∑ i ∈ s, ∂ₜ (a i) t := by M:Typet:Timeι:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Ms:Finset ιa:ι → Time → Mha:∀ i ∈ s, DifferentiableAt ℝ (a i) t⊢ ∂ₜ (fun x => ∑ i ∈ s, a i x) t = ∑ i ∈ s, ∂ₜ (a i) t
simp only [Time.deriv_eq] M:Typet:Timeι:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Ms:Finset ιa:ι → Time → Mha:∀ i ∈ s, DifferentiableAt ℝ (a i) t⊢ (fderiv ℝ (fun x => ∑ i ∈ s, a i x) t) 1 = ∑ x ∈ s, (fderiv ℝ (a x) t) 1
rw [fderiv_fun_sum ha, M:Typet:Timeι:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Ms:Finset ιa:ι → Time → Mha:∀ i ∈ s, DifferentiableAt ℝ (a i) t⊢ (∑ i ∈ s, fderiv ℝ (a i) t) 1 = ∑ x ∈ s, (fderiv ℝ (a x) t) 1 All goals completed! 🐙 _root_.sum_apply M:Typet:Timeι:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Ms:Finset ιa:ι → Time → Mha:∀ i ∈ s, DifferentiableAt ℝ (a i) t⊢ ∑ i ∈ s, (fderiv ℝ (a i) t) 1 = ∑ x ∈ s, (fderiv ℝ (a x) t) 1 All goals completed! 🐙] All goals completed! 🐙
lemma deriv_mul_const (f : Time → ℝ) (c : ℝ) (hf : DifferentiableAt ℝ f t) :
∂ₜ (fun s => f s * c) t = ∂ₜ f t * c := by t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ ∂ₜ (fun s => f s * c) t = ∂ₜ f t * c
simp only [Time.deriv_eq] t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ (fderiv ℝ (fun s => f s * c) t) 1 = (fderiv ℝ f t) 1 * c
rw [fderiv_mul_const hf c, t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ (c • fderiv ℝ f t) 1 = (fderiv ℝ f t) 1 * c All goals completed! 🐙 _root_.smul_apply, t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ c • (fderiv ℝ f t) 1 = (fderiv ℝ f t) 1 * c All goals completed! 🐙 smul_eq_mul, t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ c * (fderiv ℝ f t) 1 = (fderiv ℝ f t) 1 * c All goals completed! 🐙 mul_comm t:Timef:Time → ℝc:ℝhf:DifferentiableAt ℝ f t⊢ (fderiv ℝ f t) 1 * c = (fderiv ℝ f t) 1 * c All goals completed! 🐙] All goals completed! 🐙
Quotient rule for Time.deriv on real-valued functions: if c and g are
differentiable at t and g t ≠ 0, then
∂ₜ (c / g) t = (∂ₜ c t * g t - c t * ∂ₜ g t) / (g t)^2.
lemma deriv_div {c g : Time → ℝ}
(hc : DifferentiableAt ℝ c t) (hg : DifferentiableAt ℝ g t) (hgz : g t ≠ 0) :
∂ₜ (fun s => c s / g s) t =
(∂ₜ c t * g t - c t * ∂ₜ g t) / (g t) ^ 2 := by t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ ∂ₜ (fun s => c s / g s) t = (∂ₜ c t * g t - c t * ∂ₜ g t) / g t ^ 2
repeat rw [Time.deriv_eq t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s / g s) t) 1 = (∂ₜ c t * g t - c t * ∂ₜ g t) / g t ^ 2 t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s / g s) t) 1 = ((fderiv ℝ c t) 1 * g t - c t * (fderiv ℝ g t) 1) / g t ^ 2] t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s / g s) t) 1 = ((fderiv ℝ c t) 1 * g t - c t * ∂ₜ g t) / g t ^ 2 t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s / g s) t) 1 = ((fderiv ℝ c t) 1 * g t - c t * (fderiv ℝ g t) 1) / g t ^ 2 t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s / g s) t) 1 = ((fderiv ℝ c t) 1 * g t - c t * (fderiv ℝ g t) 1) / g t ^ 2
ring_nf t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ (fderiv ℝ (fun s => c s * (g s)⁻¹) t) 1 = (fderiv ℝ c t) 1 * g t * (g t)⁻¹ ^ 2 - c t * (fderiv ℝ g t) 1 * (g t)⁻¹ ^ 2
simp [fderiv_fun_mul hc (DifferentiableAt.fun_inv (by fun_prop) hgz),
fderiv_fun_comp t (differentiableAt_inv hgz) hg] t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ -(c t * ((fderiv ℝ g t) 1 * (g t ^ 2)⁻¹)) + (g t)⁻¹ * (fderiv ℝ c t) 1 =
(fderiv ℝ c t) 1 * g t * (g t ^ 2)⁻¹ - c t * (fderiv ℝ g t) 1 * (g t ^ 2)⁻¹
field_simp t:Timec:Time → ℝg:Time → ℝhc:DifferentiableAt ℝ c thg:DifferentiableAt ℝ g thgz:g t ≠ 0⊢ -(c t * (fderiv ℝ g t) 1) + g t * (fderiv ℝ c t) 1 = g t * (fderiv ℝ c t) 1 - c t * (fderiv ℝ g t) 1
ring All goals completed! 🐙C. Derivative of constant functions
@[simp]
lemma deriv_const [NormedAddCommGroup M] [NormedSpace ℝ M] (m : M) :
∂ₜ (fun _ => m) t = 0 := by M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mm:M⊢ ∂ₜ (fun x => m) t = 0
rw [deriv M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mm:M⊢ (fderiv ℝ (fun x => m) t) 1 = 0 M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mm:M⊢ (fderiv ℝ (fun x => m) t) 1 = 0] M:Typet:Timeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mm:M⊢ (fderiv ℝ (fun x => m) t) 1 = 0
simp All goals completed! 🐙D. Smoothness properties
@[fun_prop]
lemma val_contDiff {n : WithTop ℕ∞} : ContDiff ℝ n Time.val := by n:ℕ∞ω⊢ ContDiff ℝ n val
change ContDiff ℝ n toRealCLM n:ℕ∞ω⊢ ContDiff ℝ n ⇑toRealCLM
fun_prop All goals completed! 🐙
@[fun_prop]
lemma deriv_differentiable_of_contDiff {M : Type}
[NormedAddCommGroup M] [NormedSpace ℝ M] (f : Time → M) (hf : ContDiff ℝ ∞ f) :
Differentiable ℝ (∂ₜ f) := by M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ (∂ₜ f)
unfold deriv M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ fun t => (fderiv ℝ f t) 1
change Differentiable ℝ ((fun x => x 1) ∘ (fun t => fderiv ℝ f t)) M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ ((fun x => x 1) ∘ fun t => fderiv ℝ f t)
apply Differentiable.comp hg M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ fun x => x 1hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ fun t => fderiv ℝ f t
· hg M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ fun x => x 1 fun_prop All goals completed! 🐙
· hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ Differentiable ℝ fun t => fderiv ℝ f t rw [contDiff_infty_iff_fderiv, hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:Differentiable ℝ f ∧ ContDiff ℝ ∞ (fderiv ℝ f)⊢ Differentiable ℝ fun t => fderiv ℝ f t hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:Differentiable ℝ f ∧ Differentiable ℝ (fderiv ℝ f) ∧ ContDiff ℝ ∞ (fderiv ℝ (fderiv ℝ f))⊢ Differentiable ℝ fun t => fderiv ℝ f t contDiff_infty_iff_fderiv hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:Differentiable ℝ f ∧ Differentiable ℝ (fderiv ℝ f) ∧ ContDiff ℝ ∞ (fderiv ℝ (fderiv ℝ f))⊢ Differentiable ℝ fun t => fderiv ℝ f t hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:Differentiable ℝ f ∧ Differentiable ℝ (fderiv ℝ f) ∧ ContDiff ℝ ∞ (fderiv ℝ (fderiv ℝ f))⊢ Differentiable ℝ fun t => fderiv ℝ f t] at hfhf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:Differentiable ℝ f ∧ Differentiable ℝ (fderiv ℝ f) ∧ ContDiff ℝ ∞ (fderiv ℝ (fderiv ℝ f))⊢ Differentiable ℝ fun t => fderiv ℝ f t
exact hf.2.1 All goals completed! 🐙@[fun_prop]
lemma deriv_contDiff_of_contDiff {M : Type}
[NormedAddCommGroup M] [NormedSpace ℝ M] (f : Time → M) (hf : ContDiff ℝ ∞ f) :
ContDiff ℝ ∞ (∂ₜ f) := by M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ (∂ₜ f)
unfold deriv M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ fun t => (fderiv ℝ f t) 1
change ContDiff ℝ ∞ ((fun x => x 1) ∘ (fun t => fderiv ℝ f t)) M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ ((fun x => x 1) ∘ fun t => fderiv ℝ f t)
apply ContDiff.comp hg M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ fun x => x 1hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ fun t => fderiv ℝ f t <;> hg M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ fun x => x 1hf M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Mhf:ContDiff ℝ ∞ f⊢ ContDiff ℝ ∞ fun t => fderiv ℝ f t fun_prop All goals completed! 🐙@[fun_prop]
lemma deriv_contDiff_of_space {n} {M : Type} [NormedAddCommGroup M] [NormedSpace ℝ M]
(f : Time → Space d → M) (hf : ContDiff ℝ (n + 1) ↿f) :
ContDiff ℝ n fun (x : Space d) => (∂ₜ fun t => f t x) t := by d:ℕt:Timen:ℕ∞ωM:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Space d → Mhf:ContDiff ℝ (n + 1) ↿f⊢ ContDiff ℝ n fun x => ∂ₜ (fun t => f t x) t
unfold deriv d:ℕt:Timen:ℕ∞ωM:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace ℝ Mf:Time → Space d → Mhf:ContDiff ℝ (n + 1) ↿f⊢ ContDiff ℝ n fun x => (fderiv ℝ (fun t => f t x) t) 1
fun_prop All goals completed! 🐙E. Derivatives of components
lemma differentiable_euclid {f : Time → EuclideanSpace ℝ (Fin n)}
(hf : ∀ i, Differentiable ℝ (fun t => f t i)) :
Differentiable ℝ f := by n:ℕf:Time → EuclideanSpace ℝ (Fin n)hf:∀ (i : Fin n), Differentiable ℝ fun t => (f t).ofLp i⊢ Differentiable ℝ f
rw [differentiable_euclidean n:ℕf:Time → EuclideanSpace ℝ (Fin n)hf:∀ (i : Fin n), Differentiable ℝ fun t => (f t).ofLp i⊢ ∀ (i : Fin n), Differentiable ℝ fun x => (f x).ofLp i n:ℕf:Time → EuclideanSpace ℝ (Fin n)hf:∀ (i : Fin n), Differentiable ℝ fun t => (f t).ofLp i⊢ ∀ (i : Fin n), Differentiable ℝ fun x => (f x).ofLp i] n:ℕf:Time → EuclideanSpace ℝ (Fin n)hf:∀ (i : Fin n), Differentiable ℝ fun t => (f t).ofLp i⊢ ∀ (i : Fin n), Differentiable ℝ fun x => (f x).ofLp i
fun_prop All goals completed! 🐙
lemma deriv_euclid { μ} {f : Time→ EuclideanSpace ℝ (Fin n)}
(hf : Differentiable ℝ f) (t : Time) :
deriv (fun t => f t μ) t = deriv (fun t => f t) t μ := by n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ ∂ₜ (fun t => (f t).ofLp μ) t = (∂ₜ (fun t => f t) t).ofLp μ
rw [deriv_eq n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (fun t => (f t).ofLp μ) t) 1 = (∂ₜ (fun t => f t) t).ofLp μ n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (fun t => (f t).ofLp μ) t) 1 = (∂ₜ (fun t => f t) t).ofLp μ] n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (fun t => (f t).ofLp μ) t) 1 = (∂ₜ (fun t => f t) t).ofLp μ
change fderiv ℝ (EuclideanSpace.proj μ ∘ fun x => f x) t 1 = _ n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ) ∘ fun x => f x) t) 1 = (∂ₜ (fun t => f t) t).ofLp μ
rw [fderiv_comp n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = (∂ₜ (fun t => f t) t).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (fun x => f x) t n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = (∂ₜ (fun t => f t) t).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (fun x => f x) t] n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = (∂ₜ (fun t => f t) t).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (fun x => f x) t
· n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = (∂ₜ (fun t => f t) t).ofLp μ simp only [ContinuousLinearMap.fderiv, ContinuousLinearMap.coe_comp, Function.comp_apply,
PiLp.proj_apply] n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ ((fderiv ℝ (fun x => f x) t) 1).ofLp μ = (∂ₜ (fun x => f x) t).ofLp μ
rw [← deriv_eq n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ (∂ₜ (fun x => f x) t).ofLp μ = (∂ₜ (fun x => f x) t).ofLp μ All goals completed! 🐙] All goals completed! 🐙
· hg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t) fun_prop All goals completed! 🐙
· hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Time⊢ DifferentiableAt ℝ (fun x => f x) t fun_prop All goals completed! 🐙
lemma fderiv_euclid { μ} {f : Time→ EuclideanSpace ℝ (Fin n)}
(hf : Differentiable ℝ f) (t dt : Time) :
fderiv ℝ (fun t => f t μ) t dt = fderiv ℝ (fun t => f t) t dt μ := by n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (fun t => (f t).ofLp μ) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μ
change fderiv ℝ (EuclideanSpace.proj μ ∘ fun x => f x) t dt = _ n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ) ∘ fun x => f x) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μ
rw [fderiv_comp n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (fun x => f x) t n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (fun x => f x) t] n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μhg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t)hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (fun x => f x) t
· n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ (fderiv ℝ (⇑(EuclideanSpace.proj μ)) (f t) ∘SL fderiv ℝ (fun x => f x) t) dt = ((fderiv ℝ (fun t => f t) t) dt).ofLp μ simp [-EuclideanSpace.coe_proj] All goals completed! 🐙
· hg n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (⇑(EuclideanSpace.proj μ)) (f t) fun_prop All goals completed! 🐙
· hf n:ℕμ:Fin nf:Time → EuclideanSpace ℝ (Fin n)hf:Differentiable ℝ ft:Timedt:Time⊢ DifferentiableAt ℝ (fun x => f x) t fun_prop All goals completed! 🐙
lemma deriv_lorentzVector {d : ℕ} {f : Time → Lorentz.Vector d}
(hf : Differentiable ℝ f) (t : Time) (i : Fin 1 ⊕ Fin d) :
deriv (fun t => f t i) t = deriv (fun t => f t) t i := by d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ ∂ₜ (fun t => f t i) t = ∂ₜ (fun t => f t) t i
rw [deriv_eq d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (fun t => f t i) t) 1 = ∂ₜ (fun t => f t) t i d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (fun t => f t i) t) 1 = ∂ₜ (fun t => f t) t i] d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (fun t => f t i) t) 1 = ∂ₜ (fun t => f t) t i
change fderiv ℝ (Lorentz.Vector.coordCLM i ∘ fun x => f x) t 1 = _ d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (⇑(Lorentz.Vector.coordCLM i) ∘ fun x => f x) t) 1 = ∂ₜ (fun t => f t) t i
rw [fderiv_comp d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = ∂ₜ (fun t => f t) t ihg d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t)hf d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (fun x => f x) t d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = ∂ₜ (fun t => f t) t ihg d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t)hf d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (fun x => f x) t] d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = ∂ₜ (fun t => f t) t ihg d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t)hf d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (fun x => f x) t
· d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (fderiv ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t) ∘SL fderiv ℝ (fun x => f x) t) 1 = ∂ₜ (fun t => f t) t i simp d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (Lorentz.Vector.coordCLM i) ((fderiv ℝ (fun x => f x) t) 1) = ∂ₜ (fun x => f x) t i
rw [← deriv_eq d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (Lorentz.Vector.coordCLM i) (∂ₜ (fun x => f x) t) = ∂ₜ (fun x => f x) t i d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (Lorentz.Vector.coordCLM i) (∂ₜ (fun x => f x) t) = ∂ₜ (fun x => f x) t i] d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ (Lorentz.Vector.coordCLM i) (∂ₜ (fun x => f x) t) = ∂ₜ (fun x => f x) t i
rfl All goals completed! 🐙
· hg d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (⇑(Lorentz.Vector.coordCLM i)) (f t) fun_prop All goals completed! 🐙
· hf d:ℕf:Time → Lorentz.Vector dhf:Differentiable ℝ ft:Timei:Fin 1 ⊕ Fin d⊢ DifferentiableAt ℝ (fun x => f x) t fun_prop All goals completed! 🐙lemma deriv_space {d : ℕ} {f : Time → Space d}
(hf : Differentiable ℝ f) (t : Time) (i : Fin d) :
deriv (fun s => f s i) t = deriv f t i :=
(Space.fderiv_space_components i f hf t 1).symm