All proofs
Project-declaredLean 4.32.0 · mathlib@81a5d257c8e4

Is Total Time Derivative explicit

ClassicalMechanics.Lagrangian.isTotalTimeDerivative_explicit

Plain-language statement

Explicit 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)

Exact Lean statement

lemma isTotalTimeDerivative_explicit {δL : Time → X → X → ℝ} :
    IsTotalTimeDerivative δL ↔  (∃ (F : Time → X → ℝ) (_ : ContDiff ℝ ∞ ↿F),
    ∀ t q v, δL t q v = fderiv ℝ ↿F (t, q) ((1 : Time), v))

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
lemma isTotalTimeDerivative_explicit {δL : Time  X  X  } :    IsTotalTimeDerivative δL   ( (F : Time  X  ) (_ : ContDiff  ∞ ↿F),     t q v, δL t q v = fderiv  ↿F (t, q) ((1 : Time), v)) := by  -- Preliminary construction: properties of the function t => (t, q t)  let tq := fun (q : Time  X) t => (t, q t)  have h_tq_contDiff :  (q : Time  X), ContDiff  ∞ q -> ContDiff  ∞ (tq q) := by    fun_prop  have h_tq_der :   (q : Time  X) t, ContDiff  ∞ q -> ∂ₜ (tq q) t = (1, ∂ₜ q t) := by    intro q t h_ContDiff_q    ext    change (∂ₜ (tq q) t).1.val = (1 : Time).val    congr    apply Eq.symm    calc      (1 : Time) = fderiv  (fun (t' : Time) => t') t 1 := by simp only [fderiv_fun_id,        ContinuousLinearMap.coe_id', id_eq]      _ = fderiv  (fun (t' : Time) => (tq q t').1) t 1 := by rfl      _ = (∂ₜ (tq q) t).1 := by        rw [fderiv.fst]        · simp          rfl        · apply ContDiffAt.differentiableAt          · apply ContDiff.contDiffAt            exact h_tq_contDiff q h_ContDiff_q          · by_contra            rcases this    apply Eq.symm    calc       (1, ∂ₜ q t).2 = fderiv  (fun t' => (tq q t').2) t 1 := by rfl       _ = (∂ₜ (tq q) t).2 := by        rw [fderiv.snd]        · simp only [ContinuousLinearMap.comp_apply, ContinuousLinearMap.coe_snd']          rfl        · apply ContDiffAt.differentiableAt          · apply ContDiff.contDiffAt            exact h_tq_contDiff q h_ContDiff_q          · by_contra            rcases this  have h_F_tq_der :  (q : Time  X) (F : Time  X  ) t, (ContDiff  ∞ ↿F)  (ContDiff  ∞ q)        ∂ₜ (fun t' => ↿F (t', q t')) t = fderiv  ↿F (t, q t) ((1 : Time), ∂ₜ q t) := by    intro q F t hF hq    change  fderiv  ((↿F) ∘ (tq q)) t 1 = fderiv  ↿F (t, q t) ((1 : Time), ∂ₜ q t)    rw [fderiv_comp]    · simp only [ContinuousLinearMap.comp_apply]      rw [ Time.deriv_eq,h_tq_der]      exact hq    · apply ContDiffAt.differentiableAt      · apply ContDiff.contDiffAt        exact hF      · by_contra        rcases this    · apply ContDiffAt.differentiableAt      · apply ContDiff.contDiffAt        exact h_tq_contDiff q hq      · by_contra        rcases this  -- beginning of the proof  constructor  -- From total the total derivative to the explicit form  · intro h    rcases h with F, hF    rcases hF with hFdif, hFder    use F    use hFdif    intro t q₀ v    let qv := fun (t' : Time) => (q₀ - t.val • v) + t'.val • v    have h_qv_contDiff : ContDiff  ∞ qv := by      change ContDiff  ∞ (((fun (tR : ) => (q₀ - t.val • v) + tR • v)) ∘ Time.toRealCLE)      fun_prop    have h_qv_t : qv t = q₀ := by      calc        qv t = (q₀ - t.val • v) + t.val • v := by rfl        _ = q₀ := by module    have h_qv_der : ∂ₜ qv t = v := by      calc        ∂ₜ qv t = fderiv  (fun t' => (q₀ - t.val • v) + t'.val • v) t 1 := by rfl        _ = v := by          rw [fderiv_const_add,fderiv_smul_const]          · simp only [ContinuousLinearMap.smulRight_apply, fderiv_val, one_smul]          · fun_prop    rw [ h_qv_t,  h_qv_der, hFder,  h_F_tq_der]    · rfl    · exact hFdif    · exact h_qv_contDiff    · exact h_qv_contDiff  -- From the explicit form to the total derivative  · intro h    rcases h with F, hF    rcases hF with hFdif, hFder    use F    use hFdif    intro t q hq_ContDiff    rw [hFder,  h_F_tq_der]    · rfl    · exact hFdif    · exact hq_ContDiff
Project
Physlib
License
Apache-2.0
Commit
dd43e9e65791
Source
Physlib/ClassicalMechanics/Lagrangian/TotalDerivativeEquivalence.lean:97-192

Reuse this declaration

Bring the exact result into your workflow

The import identifies the source module. Your project still needs the pinned package dependency shown on this page.

What this badge means

This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.

Continue in this project

Related declarations

Project-declaredLean 4.32.0

Adiabatic relation log

adiabatic_relation_log

Plain-language statement

Adiabatic relation in logarithmic form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then c * log (Ua/Ub) + log (Va/Vb) = 0.

physicsquantum field theoryrelativity

Source project: Physlib

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0

Adiabatic relation Ua Ub Va Vb

adiabatic_relation_UaUbVaVb

Plain-language statement

Adiabatic relation in product form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then (Ua/Ub)^c * (Va/Vb) = 1.

physicsquantum field theoryrelativity

Source project: Physlib

Person-level attribution pending.

View proof record