Imports
/-
Copyright (c) 2025 Rein Zustand. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Rein Zustand
-/
module
public import Physlib.Mathematics.InnerProductSpace.Basic
public import Mathlib.Analysis.InnerProductSpace.Dual
public import Physlib.SpaceAndTime.Time.Derivatives
public import Mathlib.Analysis.Calculus.ContDiff.CPolynomial
public import Physlib.Mathematics.VariationalCalculus.HasVarGradient
public import Physlib.ClassicalMechanics.EulerLagrangeEquivalent Lagrangians under Total Derivatives
i. Overview
Two Lagrangians are physically equivalent if they differ by a total time derivative d/dt F(q, t). This is because the Euler-Lagrange equations depend only on extremizing the action integral, and total derivatives don't affect which paths are extremal.
This module defines the key concept of a function being a total time derivative, which is essential for analyzing symmetries like Galilean invariance.
Note: Some authors call this "gauge equivalence" by analogy with gauge transformations in field theory, but we avoid that terminology here since no gauge fields are involved.
ii. Key insight
A general function δL(t, q, dₜ q) is a total time derivative if there exists a function F(t, q) (independent of velocity) such that: δL(t, q, dₜ q) = d/dt F(t, q) = fderiv ℝ F (t q) (v, 1)
By the chain rule, this expands to: δL(t, q, dₜ q) = ∂F/∂t + ⟨∇ᵣF, dₜ q⟩
For the special case where δL depends only on velocity dₜ q (not position or time), this implies a strong constraint: δL(dₜ q) = ⟨g, dₜ q⟩ for some constant vector g
This is because:
d/dt F(t, q) = ∂F/∂t + ⟨∇F, dₜ q⟩
For δL to be q-independent, ∇F must be q-independent
For δL to be t-independent, the time-dependent part must vanish
The result is δL = ⟨g, dₜ q⟩ for constant g
iii. Key definitions
IsTotalTimeDerivative: General case for δL(t, q, dₜ q)
IsTotalTimeDerivativeVelocity: Velocity-only case, equivalent to δL(dₜ q) = ⟨g, dₜ q⟩
iv. References
Landau & Lifshitz, "Mechanics", §2 (The principle of least action)
Landau & Lifshitz, "Mechanics", §4 (The Lagrangian for a free particle)
@[expose] public sectionA. General Total Time Derivative
A function δL(t, q, dₜ q) is a total time derivative if it can be written as d/dt F(r, t) for some function F that depends on position and time but not velocity,
δL(t, q, dₜ q) = (d/dt) F(t, q)
This is the most general form of Lagrangian equivalence under total derivatives. The key point is that F must be independent of velocity.
def IsTotalTimeDerivative
(δL : Time → X → X → ℝ) : Prop :=
∃ (F : Time → X → ℝ) (_ : ContDiff ℝ ∞ ↿F),
∀ t (q : Time → X), (ContDiff ℝ ∞ q) → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tExplicit reformulation (by the chain rule): δL(t, q, dₜ q) = ∂F/∂t(t, q) + ⟨∇ᵣF(t, q), dₜ q⟩
or
δL(t, q, dₜ q) = fderiv ℝ F (t, q) (1, dₜ q)
h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ∂ₜ (fun t' => ↿F (t', q t')) t = ∂ₜ (fun t' => F t' (q t')) th.a X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ContDiff ℝ ∞ ↿Fh.a X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ContDiff ℝ ∞ q
· h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ∂ₜ (fun t' => ↿F (t', q t')) t = ∂ₜ (fun t' => F t' (q t')) t rfl All goals completed! 🐙
· h.a X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ContDiff ℝ ∞ ↿F exact hFdif All goals completed! 🐙
· h.a X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝtq:(Time → X) → Time → Time × X := fun q t => (t, q t)h_tq_contDiff:∀ (q : Time → X), ContDiff ℝ ∞ q → ContDiff ℝ ∞ (tq q)h_tq_der:∀ (q : Time → X) (t : Time), ContDiff ℝ ∞ q → ∂ₜ (tq q) t = (1, ∂ₜ q t)h_F_tq_der:∀ (q : Time → X) (F : Time → X → ℝ) (t : Time),
ContDiff ℝ ∞ ↿F → ContDiff ℝ ∞ q → ∂ₜ (fun t' => ↿F (t', q t')) t = (fderiv ℝ ↿F (t, q t)) (1, ∂ₜ q t)F:Time → X → ℝhFdif:ContDiff ℝ ∞ ↿FhFder:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)t:Timeq:Time → Xhq_ContDiff:ContDiff ℝ ∞ q⊢ ContDiff ℝ ∞ q exact hq_ContDiff All goals completed! 🐙Elementary fact: if δL is a time derivative, then so is -δL.
lemma isTotalTimeDerivative_neg {δL : Time → X → X → ℝ} (h : IsTotalTimeDerivative δL) :
IsTotalTimeDerivative (- δL) := by X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δL⊢ IsTotalTimeDerivative (-δL)
rcases h with ⟨F, h_ContDiff, hF⟩ X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) t⊢ IsTotalTimeDerivative (-δL)
set F_neg := (fun t q => - F t q) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t q⊢ IsTotalTimeDerivative (-δL)
use F_neg h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t q⊢ ∃ (_ : ContDiff ℝ ∞ ↿F_neg),
∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
have h_neg_F_ContDiff : ContDiff ℝ ∞ ↿F_neg := by X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δL⊢ IsTotalTimeDerivative (-δL) h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_neg⊢ ∃ (_ : ContDiff ℝ ∞ ↿F_neg),
∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
fun_prop h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_neg⊢ ∃ (_ : ContDiff ℝ ∞ ↿F_neg),
∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) th X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_neg⊢ ∃ (_ : ContDiff ℝ ∞ ↿F_neg),
∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
use h_neg_F_ContDiff h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_neg⊢ ∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
intro t q hq h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ (-δL) t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
simp only [Pi.neg_apply] h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F_neg t' (q t')) t
rw [hF t q hq h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -∂ₜ (fun t' => F t' (q t')) t = ∂ₜ (fun t' => F_neg t' (q t')) t h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -∂ₜ (fun t' => F t' (q t')) t = ∂ₜ (fun t' => F_neg t' (q t')) t]h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -∂ₜ (fun t' => F t' (q t')) t = ∂ₜ (fun t' => F_neg t' (q t')) t
unfold F_neg h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -∂ₜ (fun t' => F t' (q t')) t = ∂ₜ (fun t' => -F t' (q t')) t
unfold Time.deriv h X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝF:Time → X → ℝh_ContDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) tF_neg:Time → X → ℝ := fun t q => -F t qh_neg_F_ContDiff:ContDiff ℝ ∞ ↿F_negt:Timeq:Time → Xhq:ContDiff ℝ ∞ q⊢ -(fderiv ℝ (fun t' => F t' (q t')) t) 1 = (fderiv ℝ (fun t' => -F t' (q t')) t) 1
simp only [fderiv_fun_neg, _root_.neg_apply] All goals completed! 🐙If δL is a total time derivative (of a smooth function), then it is smooth
lemma totalTimeDerivative_contDiff {δL : Time → X → X → ℝ} (h : IsTotalTimeDerivative δL):
ContDiff ℝ ∞ ↿δL := by X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δL⊢ ContDiff ℝ ∞ ↿δL
rcases isTotalTimeDerivative_explicit.mp h with ⟨F, hContDiff, heq⟩ X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)⊢ ContDiff ℝ ∞ ↿δL
let Fder_v := Prod.map (fderiv ℝ ↿(fun t q => F t q)) (fun (v : X) => v ) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => v⊢ ContDiff ℝ ∞ ↿δL
let regroup := ↿(fun (t : Time) (q : X) (v : X) => ((t, q), v)) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)⊢ ContDiff ℝ ∞ ↿δL
let appv := fun (FV : ((Time × X →L[ℝ] ℝ) × X )) => FV.fst (1, FV.snd) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)⊢ ContDiff ℝ ∞ ↿δL
have hδL : ↿δL = appv ∘ Fder_v ∘ regroup := by
funext tqv X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)tqv:Time × X × X⊢ ↿δL tqv = (appv ∘ Fder_v ∘ regroup) tqv X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
rcases tqv with ⟨t, q, v⟩ X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ ↿δL (t, q, v) = (appv ∘ Fder_v ∘ regroup) (t, q, v) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
simp only [Function.comp_apply] X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ ↿δL (t, q, v) = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
change δL t q v = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ δL t q v = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
rw [heq t q v X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ (fderiv ℝ ↿F (t, q)) (1, v) = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ (fderiv ℝ ↿F (t, q)) (1, v) = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL] X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)t:Timeq:Xv:X⊢ (fderiv ℝ ↿F (t, q)) (1, v) = appv (Fder_v (regroup (t, q, v))) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
rfl X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ↿δL
rw [hδL X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ (appv ∘ Fder_v ∘ regroup) X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ (appv ∘ Fder_v ∘ regroup)] X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ (appv ∘ Fder_v ∘ regroup)
unfold appv X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ((fun FV => FV.1 (1, FV.2)) ∘ Fder_v ∘ regroup)
unfold Fder_v X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞ ((fun FV => FV.1 (1, FV.2)) ∘ (Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => v) ∘ regroup)
unfold regroup X:Typeinst✝¹:NormedAddCommGroup Xinst✝:InnerProductSpace ℝ XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLF:Time → X → ℝhContDiff:ContDiff ℝ ∞ ↿Fheq:∀ (t : Time) (q v : X), δL t q v = (fderiv ℝ ↿F (t, q)) (1, v)Fder_v:(Time × X) × X → (Time × X →L[ℝ] ℝ) × X := Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => vregroup:Time × X × X → (Time × X) × X := ↿fun t q v => ((t, q), v)appv:(Time × X →L[ℝ] ℝ) × X → ℝ := fun FV => FV.1 (1, FV.2)hδL:↿δL = appv ∘ Fder_v ∘ regroup⊢ ContDiff ℝ ∞
((fun FV => FV.1 (1, FV.2)) ∘ (Prod.map (fderiv ℝ ↿fun t q => F t q) fun v => v) ∘ ↿fun t q v => ((t, q), v))
fun_prop All goals completed! 🐙B. Total time derivative do not affect the physical content
The total time derivative does not affect the Euler-Lagrange equations, because its variational derivative is zero: ∫d/dt F(t, q)= F(t₁,q₁) - F(t₀,q₀) is fixed by the boundary conditions.
Total time derivative has a variational derivative, which is zero
lemma totalTimeDerivative_hasZeroVarGradient [CompleteSpace X] {δL : Time → X → X → ℝ}
(h : IsTotalTimeDerivative δL) (q : Time → X) (hq : ContDiff ℝ ∞ q):
HasVarGradientAt (fun q' t => δL t (q' t) (∂ₜ q' t)) (fun _ => 0) q := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝh:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ q⊢ HasVarGradientAt (fun q' t => δL t (q' t) (∂ₜ q' t)) (fun x => 0) q
rcases h with ⟨F,hF_contDiff, hF⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) t⊢ HasVarGradientAt (fun q' t => δL t (q' t) (∂ₜ q' t)) (fun x => 0) q
let traj_deriv := fun (G : Time → ℝ) t => fderiv ℝ G t 1 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1⊢ HasVarGradientAt (fun q' t => δL t (q' t) (∂ₜ q' t)) (fun x => 0) q
let F_traj := fun (q : Time → X) t => F t (q t) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarGradientAt (fun q' t => δL t (q' t) (∂ₜ q' t)) (fun x => 0) q
apply HasVarGradientAt.intro _ hF' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt (fun q' t => δL t (q' t) (∂ₜ q' t)) ?m.84 qhgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ (fun x => 0) = ?m.84 fun x => 1X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ (Time → ℝ) → Time → X
· hF' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt (fun q' t => δL t (q' t) (∂ₜ q' t)) ?m.84 q apply HasVarAdjDerivAt.congr (F := fun q' => traj_deriv (F_traj q')) hF'.hF X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt (fun q' => traj_deriv (F_traj q')) ?m.84 qhF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ∀ (φ : Time → X), ContDiff ℝ ∞ φ → traj_deriv (F_traj φ) = fun t => δL t (φ t) (∂ₜ φ t)X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ (Time → ℝ) → Time → X
· hF'.hF X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt (fun q' => traj_deriv (F_traj q')) ?m.84 q apply HasVarAdjDerivAt.comp (F := traj_deriv) (G := F_traj) hF'.hF.hF X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt traj_deriv ?m.134 (F_traj q)hF'.hF.hG X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt F_traj ?m.135 qX:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ (Time → ℝ) → Time → ℝX:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ (Time → ℝ) → Time → X
· hF'.hF.hF X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt traj_deriv ?m.134 (F_traj q) apply HasVarAdjDerivAt.fderiv hF'.hF.hF X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ContDiff ℝ ∞ (F_traj q)
fun_prop All goals completed! 🐙
· hF'.hF.hG X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ HasVarAdjDerivAt F_traj ?m.135 q apply HasVarAdjDerivAt.fmap (f := fun t => F t) hF'.hF.hG.hu X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ContDiff ℝ ∞ qhF'.hF.hG.hf' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ContDiff ℝ ∞ ↿fun t => F thF'.hF.hG.hf X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ∀ (x : Time) (u : X), HasAdjFDerivAt ℝ (F x) (?m.206 x u) uX:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ Time → X → ℝ → X
· hF'.hF.hG.hu X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ContDiff ℝ ∞ q exact hq All goals completed! 🐙
· hF'.hF.hG.hf' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ContDiff ℝ ∞ ↿fun t => F t fun_prop All goals completed! 🐙
· hF'.hF.hG.hf X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ∀ (x : Time) (u : X), HasAdjFDerivAt ℝ (F x) (?m.206 x u) u intro t x hF'.hF.hG.hf X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ HasAdjFDerivAt ℝ (F t) (?m.206 t x) x
apply DifferentiableAt.hasAdjFDerivAt hF'.hF.hG.hf X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ DifferentiableAt ℝ (F t) x
apply Differentiable.differentiableAt hF'.hF.hG.hf X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ Differentiable ℝ (F t)
apply ContDiff.differentiable h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ ContDiff ℝ ?hF'.hF.hG.hf.n (F t)hF'.hF.hG.hf.hn X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ ?hF'.hF.hG.hf.n ≠ 0hF'.hF.hG.hf.n X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ ℕ∞ω
fun_prop hF'.hF.hG.hf.hn X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Timex:X⊢ ∞ ≠ 0
decide All goals completed! 🐙
· hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)⊢ ∀ (φ : Time → X), ContDiff ℝ ∞ φ → traj_deriv (F_traj φ) = fun t => δL t (φ t) (∂ₜ φ t) intro q' hq' hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)q':Time → Xhq':ContDiff ℝ ∞ q'⊢ traj_deriv (F_traj q') = fun t => δL t (q' t) (∂ₜ q' t)
funext t' hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)q':Time → Xhq':ContDiff ℝ ∞ q't':Time⊢ traj_deriv (F_traj q') t' = δL t' (q' t') (∂ₜ q' t')
rw [hF t' q' hq' hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)q':Time → Xhq':ContDiff ℝ ∞ q't':Time⊢ traj_deriv (F_traj q') t' = ∂ₜ (fun t' => F t' (q' t')) t' hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)q':Time → Xhq':ContDiff ℝ ∞ q't':Time⊢ traj_deriv (F_traj q') t' = ∂ₜ (fun t' => F t' (q' t')) t'] hF'.h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)q':Time → Xhq':ContDiff ℝ ∞ q't':Time⊢ traj_deriv (F_traj q') t' = ∂ₜ (fun t' => F t' (q' t')) t'
rfl All goals completed! 🐙
funext t hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Time⊢ 0 = adjFDeriv ℝ (F t) (q t) ((fun x => -(fderiv ℝ (fun x => 1) x) 1) t)
unfold adjFDeriv hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:Time → X → X → ℝq:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhF_contDiff:ContDiff ℝ ∞ ↿FhF:∀ (t : Time) (q : Time → X), ContDiff ℝ ∞ q → δL t (q t) (∂ₜ q t) = ∂ₜ (fun t' => F t' (q t')) ttraj_deriv:(Time → ℝ) → Time → ℝ := fun G t => (fderiv ℝ G t) 1F_traj:(Time → X) → Time → ℝ := fun q t => F t (q t)t:Time⊢ 0 = adjoint ℝ (⇑(fderiv ℝ (F t) (q t))) ((fun x => -(fderiv ℝ (fun x => 1) x) 1) t)
simp [adjoint_eq_clm_adjoint] All goals completed! 🐙If two lagrangians, L and L', differ by a total time derivative, and L has a variational derivative grad, then so does L'.
lemma totalTimeDerivative_hasVarGradientAt_equivalence [CompleteSpace X] (L δL : Time → X → X → ℝ)
(hδL : IsTotalTimeDerivative δL)
(q : Time → X) (hq : ContDiff ℝ ∞ q) (grad : Time → X)
(hgrad : HasVarGradientAt (fun q' t => L t (q' t) (fderiv ℝ q' t 1)) grad q) :
HasVarGradientAt (fun q' t => (L + δL) t (q' t) (fderiv ℝ q' t 1)) grad q := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) grad q
have h_add_zero : grad = grad + (fun _ => 0) := by
funext t X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qt:Time⊢ grad t = (grad + fun x => 0) t X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) grad q
simp X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) grad q X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) grad q
rw [h_add_zero X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) (grad + fun x => 0) q X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) (grad + fun x => 0) q] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => (L + δL) t (q' t) ((fderiv ℝ q' t) 1)) (grad + fun x => 0) q
apply HasVarGradientAt.add h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => δL t (q' t) ((fderiv ℝ q' t) 1)) (fun x => 0) q
· h X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q exact hgrad All goals completed! 🐙
· h' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝδL:Time → X → X → ℝhδL:IsTotalTimeDerivative δLq:Time → Xhq:ContDiff ℝ ∞ qgrad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_add_zero:grad = grad + fun x => 0⊢ HasVarGradientAt (fun q' t => δL t (q' t) ((fderiv ℝ q' t) 1)) (fun x => 0) q exact totalTimeDerivative_hasZeroVarGradient hδL q hq All goals completed! 🐙
/-
Reformulation of the previous result:
If two lagrangians, L and L', differ by a total time derivative, their variational time derivatives
coincide (or neither of them has a variational derivative).
-/
lemma totalTimeDerivative_varGradient_equivalenvce [CompleteSpace X] (L L' : Time → X → X → ℝ)
(htot : IsTotalTimeDerivative (L' - L))
(q : Time → X) (hq : ContDiff ℝ ∞ q):
(δ (q':=q), ∫ t, L' t (q' t) (fderiv ℝ q' t 1)) =
(δ (q':=q), ∫ t, L t (q' t) (fderiv ℝ q' t 1)) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q
let δL := (fun t q v => L' t q v - L t q v) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q v⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q
by_cases hL : ∃ grad, HasVarGradientAt (fun q' t => L t (q' t) (fderiv ℝ q' t 1)) grad q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) qneg X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q
· pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q apply HasVarGradientAt.varGradient pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q
have h_triv : L' = L + (L' - L) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q module pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) qpos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q
rw [h_triv pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => (L + (L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => (L + (L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q]pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => (L + (L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q
apply totalTimeDerivative_hasVarGradientAt_equivalence pos.hδL X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ IsTotalTimeDerivative (L' - L)hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ ContDiff ℝ ∞ qhgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q
· pos.hδL X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ IsTotalTimeDerivative (L' - L) exact htot All goals completed! 🐙
· hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ ContDiff ℝ ∞ q exact hq All goals completed! 🐙
· hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L' = L + (L' - L)⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q rcases hL with ⟨grad, hgrad⟩ hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vh_triv:L' = L + (L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q) q
rw [ HasVarGradientAt.varGradient (fun q' t => L t (q' t) (fderiv ℝ q' t 1)) grad q hgrad hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vh_triv:L' = L + (L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vh_triv:L' = L + (L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q]hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vh_triv:L' = L + (L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q
exact hgrad All goals completed! 🐙
· neg X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q by_cases hL' : ∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) (fderiv ℝ q' t 1)) grad q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) qneg X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':¬∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q
· pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q apply Eq.symm pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q
apply HasVarGradientAt.varGradient pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q
have h_triv : L = L' +(-(L' - L)) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q modulepos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) qpos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q
rw [h_triv pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => (L' + -(L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => (L' + -(L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q]pos X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => (L' + -(L' - L)) t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q
apply totalTimeDerivative_hasVarGradientAt_equivalence pos.hδL X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ IsTotalTimeDerivative (-(L' - L))hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ ContDiff ℝ ∞ qhgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q
· pos.hδL X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ IsTotalTimeDerivative (-(L' - L)) apply isTotalTimeDerivative_neg pos.hδL X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ IsTotalTimeDerivative (L' - L)
exact htot All goals completed! 🐙
· hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ ContDiff ℝ ∞ q exact hq All goals completed! 🐙
· hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q rcases hL' with ⟨grad, hgrad⟩ hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1))
(varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q) q
rw [HasVarGradientAt.varGradient (fun q' t => L' t (q' t) (fderiv ℝ q' t 1)) grad q hgrad hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q]hgrad X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qh_triv:L = L' + -(L' - L)grad:Time → Xhgrad:HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q
exact hgrad All goals completed! 🐙
· neg X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':¬∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q unfold varGradient neg X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qδL:Time → X → X → ℝ := fun t q v => L' t q v - L t q vhL:¬∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad qhL':¬∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q⊢ (if h : ∃ grad, HasVarGradientAt (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) grad q then Classical.choose h else 0) =
if h : ∃ grad, HasVarGradientAt (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) grad q then Classical.choose h else 0
simp only [hL, hL', ↓reduceDIte] All goals completed! 🐙Corollary: If L and L' differ by a total time derivative, then the corresponding Euler-Lagrange operators coincide
lemma totalTimeDerivative_eulerLagrange_equivalenvce [CompleteSpace X] (L L' : Time → X → X → ℝ)
(htot : IsTotalTimeDerivative (L' - L)) (hContDiff : (ContDiff ℝ ∞ ↿L) ∨ (ContDiff ℝ ∞ ↿L'))
(q : Time → X) (hq : ContDiff ℝ ∞ q) : eulerLagrangeOp L q = eulerLagrangeOp L' q := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ q⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rcases (isTotalTimeDerivative_explicit.mp htot) with ⟨F, hFContDiff, hEq⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
have hContDiff_both : (ContDiff ℝ ∞ ↿L) ∧ (ContDiff ℝ ∞ ↿L') := by
cases hContDiff with
| inl hL => inl X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿L⊢ ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
constructor inl.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿L⊢ ContDiff ℝ ∞ ↿Linl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿L⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
· inl.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿L⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q exact hL All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
· inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿L⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q have h_triv : ↿L' = ↿L + ↿(L' - L) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ q⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
funext tqv X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Ltqv:Time × X × X⊢ ↿L' tqv = (↿L + ↿(L' - L)) tqvinl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rcases tqv with ⟨t, q', v⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lt:Timeq':Xv:X⊢ ↿L' (t, q', v) = (↿L + ↿(L' - L)) (t, q', v)inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rw [Pi.add_apply X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lt:Timeq':Xv:X⊢ ↿L' (t, q', v) = ↿L (t, q', v) + ↿(L' - L) (t, q', v) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lt:Timeq':Xv:X⊢ ↿L' (t, q', v) = ↿L (t, q', v) + ↿(L' - L) (t, q', v)inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lt:Timeq':Xv:X⊢ ↿L' (t, q', v) = ↿L (t, q', v) + ↿(L' - L) (t, q', v)inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
change L' t q' v = L t q' v + (L' - L) t q' v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lt:Timeq':Xv:X⊢ L' t q' v = L t q' v + (L' - L) t q' vinl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
simpinl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' qinl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
have h_δL_contDiff := totalTimeDerivative_contDiff htot inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)h_δL_contDiff:ContDiff ℝ ∞ ↿(L' - L)⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rw [h_triv inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)h_δL_contDiff:ContDiff ℝ ∞ ↿(L' - L)⊢ ContDiff ℝ ∞ (↿L + ↿(L' - L)) inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)h_δL_contDiff:ContDiff ℝ ∞ ↿(L' - L)⊢ ContDiff ℝ ∞ (↿L + ↿(L' - L)) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q]inl.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL:ContDiff ℝ ∞ ↿Lh_triv:↿L' = ↿L + ↿(L' - L)h_δL_contDiff:ContDiff ℝ ∞ ↿(L' - L)⊢ ContDiff ℝ ∞ (↿L + ↿(L' - L)) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
exact hL.add h_δL_contDiff All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
| inr hL' => inr X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
constructor inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ ↿Linr.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
· inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q have h_triv : ↿L = ↿L' + ↿(-(L' - L)) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ q⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
funext tqv X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'tqv:Time × X × X⊢ ↿L tqv = (↿L' + ↿(-(L' - L))) tqvinr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rcases tqv with ⟨t, q', v⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L't:Timeq':Xv:X⊢ ↿L (t, q', v) = (↿L' + ↿(-(L' - L))) (t, q', v)inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rw [Pi.add_apply X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L't:Timeq':Xv:X⊢ ↿L (t, q', v) = ↿L' (t, q', v) + ↿(-(L' - L)) (t, q', v) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L't:Timeq':Xv:X⊢ ↿L (t, q', v) = ↿L' (t, q', v) + ↿(-(L' - L)) (t, q', v)inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L't:Timeq':Xv:X⊢ ↿L (t, q', v) = ↿L' (t, q', v) + ↿(-(L' - L)) (t, q', v)inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
change L t q' v = L' t q' v + (- (L' - L)) t q' v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L't:Timeq':Xv:X⊢ L t q' v = L' t q' v + (-(L' - L)) t q' vinr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
simpinr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' qinr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
have h_δL_contDiff := totalTimeDerivative_contDiff (isTotalTimeDerivative_neg htot) inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))h_δL_contDiff:ContDiff ℝ ∞ ↿(-(L' - L))⊢ ContDiff ℝ ∞ ↿L X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rw [h_triv inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))h_δL_contDiff:ContDiff ℝ ∞ ↿(-(L' - L))⊢ ContDiff ℝ ∞ (↿L' + ↿(-(L' - L))) inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))h_δL_contDiff:ContDiff ℝ ∞ ↿(-(L' - L))⊢ ContDiff ℝ ∞ (↿L' + ↿(-(L' - L))) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q]inr.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'h_triv:↿L = ↿L' + ↿(-(L' - L))h_δL_contDiff:ContDiff ℝ ∞ ↿(-(L' - L))⊢ ContDiff ℝ ∞ (↿L' + ↿(-(L' - L))) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
exact hL'.add h_δL_contDiff All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
· inr.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hL':ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ ↿L' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q exact hL' X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ eulerLagrangeOp L q = eulerLagrangeOp L' q
rw [← euler_lagrange_varGradient L q hq hContDiff_both.left X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = eulerLagrangeOp L' q X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = eulerLagrangeOp L' q] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = eulerLagrangeOp L' q
rw [← euler_lagrange_varGradient L' q hq hContDiff_both.right X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q
apply Eq.symm X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ varGradient (fun q' t => L' t (q' t) ((fderiv ℝ q' t) 1)) q = varGradient (fun q' t => L t (q' t) ((fderiv ℝ q' t) 1)) q
apply totalTimeDerivative_varGradient_equivalenvce htot X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ IsTotalTimeDerivative (L' - L)hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ q
· htot X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ IsTotalTimeDerivative (L' - L) exact htot All goals completed! 🐙
· hq X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XL:Time → X → X → ℝL':Time → X → X → ℝhtot:IsTotalTimeDerivative (L' - L)hContDiff:ContDiff ℝ ∞ ↿L ∨ ContDiff ℝ ∞ ↿L'q:Time → Xhq:ContDiff ℝ ∞ qF:Time → X → ℝhFContDiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), (L' - L) t q v = (fderiv ℝ ↿F (t, q)) (1, v)hContDiff_both:ContDiff ℝ ∞ ↿L ∧ ContDiff ℝ ∞ ↿L'⊢ ContDiff ℝ ∞ q exact hq All goals completed! 🐙C. Velocity-Only Total Time Derivative
When δL depends only on velocity (the free particle case), the condition simplifies.
A velocity-only function that is a total time derivative must be linear in velocity.
If δL depends only on velocity and equals d/dt F(t, q) for some F, then δL(dₜ q) = ⟨g, dₜ q⟩ for some constant vector g.
This characterization comes from the requirement that:
d/dt F(t, q) = ∂F/∂t + ⟨∇F, dₜ q⟩ = ∂F/∂t + ⟨∇F, dₜ q⟩
For the result to be independent of q and t, we need ∇F = g (constant) and ∂F/∂t = 0
Thus δL(dₜ q) = ⟨g, dₜ q⟩
WLOG, we assume δL 0 = 0 since constants are total derivatives (c = d/dt(c·t))
and can be absorbed without affecting the equations of motion.
lemma isTotalTimeDerivativeVelocity [CompleteSpace X]
(δL : X → ℝ)
(hδL0 : δL 0 = 0)
(h : IsTotalTimeDerivative (fun _ _ v => δL v)) :
∃ g : X, ∀ v, δL v = ⟪g, v⟫_ℝ := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
classical
rcases (isTotalTimeDerivative_explicit.mp h) with ⟨F, hFdiff, hEq⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
-- Derivative of F at (0,0)
let dF : (Time × X) →L[ℝ] ℝ :=
fderiv ℝ ↿F ((0 : Time), (0 : X)) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
-- The "time-direction" derivative must vanish because δL 0 = 0.
have h_time : dF ((1 : Time), (0 : X)) = 0 := by
have h0 :
δL (0 : X) =
fderiv ℝ ↿F ((0 : Time), (0 : X))
((1 : Time), (0 : X)) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa using (hEq (0 : Time) (0 : X)
(0 : X)) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
have : dF ((1 : Time), (0 : X)) =
δL (0 : X) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)this:dF (1, 0) = δL 0⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa [dF] using h0.symm X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)this:dF (1, 0) = δL 0⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h0:δL 0 = (fderiv ℝ ↿F (0, 0)) (1, 0)this:dF (1, 0) = δL 0⊢ dF (1, 0) = 0 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa [hδL0] using this X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
-- Induced continuous linear functional on velocity: v ↦ dF (0,v).
let φ : X →L[ℝ] ℝ :=
dF.comp (ContinuousLinearMap.inr ℝ Time X) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time X⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
-- Show δL v = φ v for all v.
have hφ : ∀ v : X, δL v = φ v := by
intro v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:X⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
have hv :
δL v =
fderiv ℝ ↿F ((0 : Time), (0 : X))
((1 : Time), v) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa using (hEq (0 : Time) (0 : X) v) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
have hv' : δL v = dF ((1 : Time), v) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa [dF] using hv X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ δL v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
calc
δL v = dF ((1 : Time), v) := hv'
_ = dF (((0 : Time), v) + ((1 : Time), (0 : X))) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ dF (1, v) = dF ((0, v) + (1, 0)) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ simp only [Prod.mk_add_mk, zero_add,
add_zero] All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
_ = dF ((0 : Time), v) + dF ((1 : Time), (0 : X)) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ dF ((0, v) + (1, 0)) = dF (0, v) + dF (1, 0) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simpa using
(dF.map_add ((0 : Time), v) ((1 : Time), (0 : X))) All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
_ = dF ((0 : Time), v) := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ dF (0, v) + dF (1, 0) = dF (0, v) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simp [h_time] All goals completed! 🐙 X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
_ = φ v := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xv:Xhv:δL v = (fderiv ℝ ↿F (0, 0)) (1, v)hv':δL v = dF (1, v)⊢ dF (0, v) = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
simp [φ] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ
-- Frechet–Riesz: represent φ as inner product with some g.
refine ⟨(InnerProductSpace.toDual ℝ (X)).symm φ, ?_⟩ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ v⊢ ∀ (v : X), δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ
intro v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:X⊢ δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ
have hinner :
⟪(InnerProductSpace.toDual ℝ (X)).symm φ, v⟫_ℝ = φ v := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL v⊢ ∃ g, ∀ (v : X), δL v = ⟪g, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ
rw [InnerProductSpace.toDual_symm_apply (𝕜 := ℝ)
(E := X) (x := v) (y := φ) X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:X⊢ φ v = φ v X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ] X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ δL v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ
calc
δL v = φ v := hφ v
_ = ⟪(InnerProductSpace.toDual ℝ (X)).symm φ, v⟫_ℝ := by X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ φ v = ⟪(toDual ℝ X).symm φ, v⟫_ℝ
rw [hinner.symm X:Typeinst✝²:NormedAddCommGroup Xinst✝¹:InnerProductSpace ℝ Xinst✝:CompleteSpace XδL:X → ℝhδL0:δL 0 = 0h:IsTotalTimeDerivative fun x x_1 v => δL vF:Time → X → ℝhFdiff:ContDiff ℝ ∞ ↿FhEq:∀ (t : Time) (q v : X), δL v = (fderiv ℝ ↿F (t, q)) (1, v)dF:Time × X →L[ℝ] ℝ := fderiv ℝ ↿F (0, 0)h_time:dF (1, 0) = 0φ:X →L[ℝ] ℝ := dF ∘SL ContinuousLinearMap.inr ℝ Time Xhφ:∀ (v : X), δL v = φ vv:Xhinner:⟪(toDual ℝ X).symm φ, v⟫_ℝ = φ v⊢ ⟪(toDual ℝ X).symm φ, v⟫_ℝ = ⟪(toDual ℝ X).symm φ, v⟫_ℝ All goals completed! 🐙] All goals completed! 🐙