Imports
/-
Copyright (c) 2026 Juan Jose Fernandez Morales. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Juan Jose Fernandez Morales
-/
module
public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.SupportFirst variation integration by parts
i. Overview
This module contains the repeated integration-by-parts step needed for the local first-variation formula, together with the termwise and summed packaged versions used later in the Euler-Lagrange criterion.
ii. Key results
ClassicalFieldTheory.Local.integral_mul_iteratedDeriv_eq_sign
ClassicalFieldTheory.Local.hasTermwiseIntegratedByPartsFormula_of_regular
ClassicalFieldTheory.Local.hasIntegratedByPartsFormula_of_termwise
iii. Table of contents
A. Repeated integration by parts
B. Termwise formulas
iv. References
J. Cortés and A. Haupt, Lecture Notes on Mathematical Methods of Classical Physics, Chapter 5, Theorem 5.2.
@[expose] public sectionA. Repeated integration by parts
The integration-by-parts step sending the linearized density to the Euler-Lagrange pairing.
def HasIntegratedByPartsFormula (L : Lagrangian d m k)
(f : Space d → EuclideanSpace ℝ (Fin m)) : Prop :=
∀ η : AdmissibleVariation d (EuclideanSpace ℝ (Fin m)),
∫ x, firstVariationDensity L f η x = firstVariationValue L f ηTermwise integration-by-parts data for the linearized first-variation density.
def HasTermwiseIntegratedByPartsFormula (L : Lagrangian d m k)
(f : Space d → EuclideanSpace ℝ (Fin m)) : Prop :=
∀ η : AdmissibleVariation d (EuclideanSpace ℝ (Fin m)),
∀ I : DerivativeIndex d k, ∀ a : Fin m,
Integrable (firstVariationDensityTerm L f η I a) ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η x) a) ∧
(∫ x, firstVariationDensityTerm L f η I a x)
= ∫ x, eulerLagrangeTerm L I a f x * (η x) ad:ℕi:Fin dg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (a : Space d), -((fderiv ℝ g a) (Space.basis i) * h a) = ∫ (x : Space d), -(fderiv ℝ g x) (Space.basis i) * h x
congr with x e_f d:ℕi:Fin dg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hx:Space d⊢ -((fderiv ℝ g x) (Space.basis i) * h x) = -(fderiv ℝ g x) (Space.basis i) * h x
ring All goals completed! 🐙
private lemma integral_mul_iteratedDerivList_eq_sign (L : List (Fin d)) {g h : Space d → ℝ}
(hg : ContDiff ℝ ∞ g) (hh : IsTestFunction h) :
∫ x, g x * L.foldr (fun i f => ∂[i] f) h x =
∫ x, (((-1 : ℝ) ^ L.length) * L.foldr (fun i f => ∂[i] f) g x) * h x := by d:ℕL:List (Fin d)g:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h x
induction L generalizing g h with
| nil => nil d:ℕg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h [] x =
∫ (x : Space d), (-1) ^ [].length * List.foldr (fun i f => Space.deriv i f) g [] x * h x
simp All goals completed! 🐙
| cons i L ih => cons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h x
have hdg : ContDiff ℝ ∞ (∂[i] g) := by d:ℕL:List (Fin d)g:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h x cons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h x
exact contDiff_space_deriv hg i cons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h xcons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h x
have hhL : IsTestFunction (L.foldr (fun j f => ∂[j] f) h) := by d:ℕL:List (Fin d)g:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h x cons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h x
exact iteratedDerivList_isTestFunction L hhcons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h xcons d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h (i :: L) x =
∫ (x : Space d), (-1) ^ (i :: L).length * List.foldr (fun i f => Space.deriv i f) g (i :: L) x * h x
calc
∫ x, g x * ∂[i] (L.foldr (fun j f => ∂[j] f) h) x
= ∫ x, (-∂[i] g x) * L.foldr (fun j f => ∂[j] f) h x := by d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), g x * Space.deriv i (List.foldr (fun j f => Space.deriv j f) h L) x =
∫ (x : Space d), -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x
exact integral_mul_space_deriv_eq_neg_deriv_mul i hg hhL All goals completed! 🐙
_ = -∫ x, ∂[i] g x * L.foldr (fun j f => ∂[j] f) h x := by d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
-∫ (x : Space d), Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x
rw [← integral_neg d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
∫ (a : Space d), -(Space.deriv i g a * List.foldr (fun j f => Space.deriv j f) h L a) d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
∫ (a : Space d), -(Space.deriv i g a * List.foldr (fun j f => Space.deriv j f) h L a)] d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (x : Space d), -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
∫ (a : Space d), -(Space.deriv i g a * List.foldr (fun j f => Space.deriv j f) h L a)
congr with x e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
-(Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x)
ring All goals completed! 🐙
_ = -∫ x, (((-1 : ℝ) ^ L.length) *
L.foldr (fun j f => ∂[j] f) (∂[i] g) x) * h x := by d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ -∫ (x : Space d), Space.deriv i g x * List.foldr (fun j f => Space.deriv j f) h L x =
-∫ (x : Space d), (-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L x * h x
rw [ih hdg hh d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ -∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) (Space.deriv i g) L x * h x =
-∫ (x : Space d), (-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L x * h x All goals completed! 🐙] All goals completed! 🐙
_ = ∫ x, (((-1 : ℝ) ^ (L.length + 1)) *
∂[i] (L.foldr (fun j f => ∂[j] f) g) x) * h x := by d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ -∫ (x : Space d), (-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L x * h x =
∫ (x : Space d), (-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x
rw [← integral_neg d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (a : Space d), -((-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L a * h a) =
∫ (x : Space d), (-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (a : Space d), -((-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L a * h a) =
∫ (x : Space d), (-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x] d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)⊢ ∫ (a : Space d), -((-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L a * h a) =
∫ (x : Space d), (-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x
congr with x e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * List.foldr (fun j f => Space.deriv j f) (Space.deriv i g) L x * h x) =
(-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x
rw [iteratedDerivList_commute_deriv L i hg, e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x) =
(-1) ^ (L.length + 1) * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * (Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x)) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x pow_succ, e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h xe_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * (Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x)) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x mul_assoc e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * (Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x)) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h xe_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * (Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x)) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x]e_f d:ℕi:Fin dL:List (Fin d)ih:∀ {g h : Space d → ℝ},
ContDiff ℝ ∞ g →
IsTestFunction h →
∫ (x : Space d), g x * List.foldr (fun i f => Space.deriv i f) h L x =
∫ (x : Space d), (-1) ^ L.length * List.foldr (fun i f => Space.deriv i f) g L x * h xg:Space d → ℝh:Space d → ℝhg:ContDiff ℝ ∞ ghh:IsTestFunction hhdg:ContDiff ℝ ∞ (Space.deriv i g)hhL:IsTestFunction (List.foldr (fun j f => Space.deriv j f) h L)x:Space d⊢ -((-1) ^ L.length * (Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L) x * h x)) =
(-1) ^ L.length * -1 * Space.deriv i (List.foldr (fun j f => Space.deriv j f) g L) x * h x
ring All goals completed! 🐙Repeated integration by parts for iterated coordinate derivatives against a test function.
lemma integral_mul_iteratedDeriv_eq_sign {g h : Space d → ℝ} (I : MultiIndex d)
(hg : ContDiff ℝ ∞ g) (hh : IsTestFunction h) :
∫ x, g x * ∂^[I] h x =
∫ x, (((-1 : ℝ) ^ I.order) * ∂^[I] g x) * h x := by d:ℕg:Space d → ℝh:Space d → ℝI:MultiIndex dhg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), g x * Space.iteratedDeriv I h x = ∫ (x : Space d), (-1) ^ I.order * Space.iteratedDeriv I g x * h x
simpa [Space.iteratedDeriv, Physlib.MultiIndex.length_toList] using
integral_mul_iteratedDerivList_eq_sign I.toList hg hh All goals completed! 🐙B. Termwise formulas
Concrete termwise integration by parts for the first-variation density, assuming the jet coordinate coefficient functions are smooth along the field.
lemma hasTermwiseIntegratedByPartsFormula_of_contDiff_coordDeriv
(L : Lagrangian d m k) (f : Space d → EuclideanSpace ℝ (Fin m))
(hcoeff : ∀ I : DerivativeIndex d k, ∀ a : Fin m,
ContDiff ℝ ∞ (fun x => L.coordDeriv I a (jetAt k f x))) :
HasTermwiseIntegratedByPartsFormula L f := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)⊢ HasTermwiseIntegratedByPartsFormula L f
intro η I a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin m⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
let g : Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x) d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
let h : Space d → ℝ := fun x => (η.toFun x) a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp a⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
have hg : ContDiff ℝ ∞ g := hcoeff I a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ g⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
have hh : IsTestFunction h := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)⊢ HasTermwiseIntegratedByPartsFormula L f d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
simpa [h] using η.coord_euclidean a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (firstVariationDensityTerm L f η I a) volume ∧
Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
constructor left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (firstVariationDensityTerm L f η I a) volumeright d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume ∧
∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
· left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (firstVariationDensityTerm L f η I a) volume simpa [g, h, firstVariationDensityTerm, Space.iteratedDeriv] using
firstVariationDensityTerm_integrable_of_continuous_coordDeriv L f η I a hg.continuous All goals completed! 🐙
constructor right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volumeright.right d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
· right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume have htd : ContDiff ℝ ∞ (∂^[I.1] g) :=
Space.iteratedDeriv_contDiff I.1 hg right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume
have htdSign : ContDiff ℝ ∞
(fun x => ((-1 : ℝ) ^ I.1.order) * ∂^[I.1] g x) := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)⊢ HasTermwiseIntegratedByPartsFormula L f right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume
apply ContDiff.mul hf d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)⊢ ContDiff ℝ ∞ fun x => (-1) ^ (↑I).orderhg d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)⊢ ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume
· hf d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)⊢ ContDiff ℝ ∞ fun x => (-1) ^ (↑I).orderright.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume fun_prop All goals completed! 🐙right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume
· hg d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)⊢ ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)right.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume exact htdright.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volumeright.left d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction hhtd:ContDiff ℝ ∞ (Space.iteratedDeriv (↑I) g)htdSign:ContDiff ℝ ∞ fun x => (-1) ^ (↑I).order * Space.iteratedDeriv (↑I) g x⊢ Integrable (fun x => eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a) volume
exact
(IsTestFunction.integrable (μ := volume) <|
IsTestFunction.mul_left htdSign hh) All goals completed! 🐙
· right.right d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:∀ (I : DerivativeIndex d k) (a : Fin m), ContDiff ℝ ∞ fun x => L.coordDeriv I a (jetAt k f x)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka:Fin mg:Space d → ℝ := fun x => L.coordDeriv I a (jetAt k f x)h:Space d → ℝ := fun x => (η.toFun x).ofLp ahg:ContDiff ℝ ∞ ghh:IsTestFunction h⊢ ∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a exact
integral_mul_iteratedDeriv_eq_sign I.1 hg hh All goals completed! 🐙lemma hasTermwiseIntegratedByPartsFormula_of_regular
(L : Lagrangian d m k) (f : Space d → EuclideanSpace ℝ (Fin m))
(hcoeff : Lagrangian.ContDiffCoordDerivAlongField L f) :
HasTermwiseIntegratedByPartsFormula L f := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hcoeff:L.ContDiffCoordDerivAlongField f⊢ HasTermwiseIntegratedByPartsFormula L f
exact hasTermwiseIntegratedByPartsFormula_of_contDiff_coordDeriv L f hcoeff All goals completed! 🐙
private lemma integral_firstVariationDensity_eq_termwise_sum
(L : Lagrangian d m k) (f : Space d → EuclideanSpace ℝ (Fin m))
(η : AdmissibleVariation d (EuclideanSpace ℝ (Fin m)))
(hterm : HasTermwiseIntegratedByPartsFormula L f) :
∫ x, firstVariationDensity L f η x =
∑ I : DerivativeIndex d k, ∑ a : Fin m,
∫ x, firstVariationDensityTerm L f η I a x := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), firstVariationDensity L f η x = ∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x
calc
∫ x, firstVariationDensity L f η x
= ∫ x, ∑ I : DerivativeIndex d k, ∑ a : Fin m,
firstVariationDensityTerm L f η I a x := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), firstVariationDensity L f η x = ∫ (x : Space d), ∑ I, ∑ a, firstVariationDensityTerm L f η I a x
rfl All goals completed! 🐙
_ = ∑ I : DerivativeIndex d k, ∑ a : Fin m,
∫ x, firstVariationDensityTerm L f η I a x := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), ∑ I, ∑ a, firstVariationDensityTerm L f η I a x =
∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x
rw [MeasureTheory.integral_finsetSum Finset.univ
(fun I _ => integrable_finsetSum Finset.univ (fun a _ => (hterm η I a).1)) d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ i, ∫ (a : Space d), ∑ i_1, firstVariationDensityTerm L f η i i_1 a ∂volume =
∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ i, ∫ (a : Space d), ∑ i_1, firstVariationDensityTerm L f η i i_1 a ∂volume =
∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x] d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ i, ∫ (a : Space d), ∑ i_1, firstVariationDensityTerm L f η i i_1 a ∂volume =
∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x
apply Finset.sum_congr rfl d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∀ x ∈ Finset.univ,
∫ (a : Space d), ∑ i, firstVariationDensityTerm L f η x i a ∂volume =
∑ a, ∫ (x_1 : Space d), firstVariationDensityTerm L f η x a x_1
intro I _ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fI:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∫ (a : Space d), ∑ i, firstVariationDensityTerm L f η I i a ∂volume =
∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x
rw [MeasureTheory.integral_finsetSum Finset.univ (fun a _ => (hterm η I a).1) d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fI:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∑ i, ∫ (a : Space d), firstVariationDensityTerm L f η I i a ∂volume =
∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x All goals completed! 🐙] All goals completed! 🐙
private lemma integral_eulerLagrange_termwise_sum_eq_pairing
(L : Lagrangian d m k) (f : Space d → EuclideanSpace ℝ (Fin m))
(η : AdmissibleVariation d (EuclideanSpace ℝ (Fin m)))
(hterm : HasTermwiseIntegratedByPartsFormula L f) :
∑ I : DerivativeIndex d k, ∑ a : Fin m, ∫ x, eulerLagrangeTerm L I a f x * (η x) a
= firstVariationValue L f η := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ I, ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = firstVariationValue L f η
calc
∑ I : DerivativeIndex d k, ∑ a : Fin m, ∫ x, eulerLagrangeTerm L I a f x * (η x) a
= ∫ x, ∑ I : DerivativeIndex d k, ∑ a : Fin m,
eulerLagrangeTerm L I a f x * (η x) a := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ I, ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∫ (x : Space d), ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
calc
∑ I : DerivativeIndex d k, ∑ a : Fin m,
∫ x, eulerLagrangeTerm L I a f x * (η x) a
=
∑ I : DerivativeIndex d k,
∫ x, ∑ a : Fin m, eulerLagrangeTerm L I a f x * (η x) a := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ I, ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∑ I, ∫ (x : Space d), ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
apply Finset.sum_congr rfl d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∀ x ∈ Finset.univ,
∑ a, ∫ (x_1 : Space d), eulerLagrangeTerm L x a f x_1 * (η.toFun x_1).ofLp a =
∫ (x_1 : Space d), ∑ a, eulerLagrangeTerm L x a f x_1 * (η.toFun x_1).ofLp a
intro I _ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fI:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∫ (x : Space d), ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
rw [← MeasureTheory.integral_finsetSum Finset.univ
(fun a _ => (hterm η I a).2.1) d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fI:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∫ (a : Space d), ∑ i, eulerLagrangeTerm L I i f a * (η.toFun a).ofLp i ∂volume =
∫ (x : Space d), ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a All goals completed! 🐙] All goals completed! 🐙
_ =
∫ x, ∑ I : DerivativeIndex d k,
∑ a : Fin m, eulerLagrangeTerm L I a f x * (η x) a := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∑ I, ∫ (x : Space d), ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∫ (x : Space d), ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
rw [← MeasureTheory.integral_finsetSum Finset.univ
(fun I _ => integrable_finsetSum Finset.univ (fun a _ => (hterm η I a).2.1)) d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (a : Space d), ∑ i, ∑ i_1, eulerLagrangeTerm L i i_1 f a * (η.toFun a).ofLp i_1 ∂volume =
∫ (x : Space d), ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a All goals completed! 🐙] All goals completed! 🐙
_ = ∫ x, ⟪eulerLagrangeOp L f x, η x⟫_ℝ := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∫ (x : Space d), ⟪eulerLagrangeOp L f x, η.toFun x⟫_ℝ
apply integral_congr_ae d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ (fun a => ∑ I, ∑ a_1, eulerLagrangeTerm L I a_1 f a * (η.toFun a).ofLp a_1) =ᵐ[volume] fun a =>
⟪eulerLagrangeOp L f a, η.toFun a⟫_ℝ
filter_upwards with x d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = ⟪eulerLagrangeOp L f x, η.toFun x⟫_ℝ
rw [PiLp.inner_apply d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = ∑ i, ⟪(eulerLagrangeOp L f x).ofLp i, (η.toFun x).ofLp i⟫_ℝ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = ∑ i, ⟪(eulerLagrangeOp L f x).ofLp i, (η.toFun x).ofLp i⟫_ℝ] d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = ∑ i, ⟪(eulerLagrangeOp L f x).ofLp i, (η.toFun x).ofLp i⟫_ℝ
simp_rw [ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = ∑ i, ⟪(eulerLagrangeOp L f x).ofLp i, (η.toFun x).ofLp i⟫_ℝeulerLagrangeOp_apply, d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∑ x_1, ⟪eulerLagrangeComponent L x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ eulerLagrangeComponent_apply d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∑ x_1, ⟪∑ I, eulerLagrangeTerm L I x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ]
rw [Finset.sum_comm d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ y, ∑ x_1, eulerLagrangeTerm L x_1 y f x * (η.toFun x).ofLp y =
∑ x_1, ⟪∑ I, eulerLagrangeTerm L I x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ y, ∑ x_1, eulerLagrangeTerm L x_1 y f x * (η.toFun x).ofLp y =
∑ x_1, ⟪∑ I, eulerLagrangeTerm L I x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ] d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∑ y, ∑ x_1, eulerLagrangeTerm L x_1 y f x * (η.toFun x).ofLp y =
∑ x_1, ⟪∑ I, eulerLagrangeTerm L I x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ
apply Finset.sum_congr rfl d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space d⊢ ∀ x_1 ∈ Finset.univ,
∑ x_2, eulerLagrangeTerm L x_2 x_1 f x * (η.toFun x).ofLp x_1 =
⟪∑ I, eulerLagrangeTerm L I x_1 f x, (η.toFun x).ofLp x_1⟫_ℝ
intro a _ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ ∑ x_1, eulerLagrangeTerm L x_1 a f x * (η.toFun x).ofLp a = ⟪∑ I, eulerLagrangeTerm L I a f x, (η.toFun x).ofLp a⟫_ℝ
rw [show ⟪∑ I : DerivativeIndex d k, eulerLagrangeTerm L I a f x,
(η.toFun x).ofLp a⟫_ℝ =
(∑ I : DerivativeIndex d k, eulerLagrangeTerm L I a f x) *
(η.toFun x).ofLp a by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), ∑ I, ∑ a, eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a =
∫ (x : Space d), ⟪eulerLagrangeOp L f x, η.toFun x⟫_ℝ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ ∑ x_1, eulerLagrangeTerm L x_1 a f x * (η.toFun x).ofLp a = (∑ I, eulerLagrangeTerm L I a f x) * (η.toFun x).ofLp a
norm_num [inner, Inner.inner] d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ (η.toFun x).ofLp a *
∑ x_1, (-1) ^ (↑x_1).order * Space.iteratedDeriv (↑x_1) (fun x => L.coordDeriv x_1 a (jetAt k f x)) x =
(∑ x_1, (-1) ^ (↑x_1).order * Space.iteratedDeriv (↑x_1) (fun x => L.coordDeriv x_1 a (jetAt k f x)) x) *
(η.toFun x).ofLp a d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ ∑ x_1, eulerLagrangeTerm L x_1 a f x * (η.toFun x).ofLp a = (∑ I, eulerLagrangeTerm L I a f x) * (η.toFun x).ofLp a
ring All goals completed! 🐙 d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ ∑ x_1, eulerLagrangeTerm L x_1 a f x * (η.toFun x).ofLp a = (∑ I, eulerLagrangeTerm L I a f x) * (η.toFun x).ofLp a] d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ ∑ x_1, eulerLagrangeTerm L x_1 a f x * (η.toFun x).ofLp a = (∑ I, eulerLagrangeTerm L I a f x) * (η.toFun x).ofLp a
rw [← Finset.sum_mul d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L fx:Space da:Fin ma✝:a ∈ Finset.univ⊢ (∑ i, eulerLagrangeTerm L i a f x) * (η.toFun x).ofLp a = (∑ I, eulerLagrangeTerm L I a f x) * (η.toFun x).ofLp a All goals completed! 🐙] All goals completed! 🐙
_ = firstVariationValue L f η := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)η:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))hterm:HasTermwiseIntegratedByPartsFormula L f⊢ ∫ (x : Space d), ⟪eulerLagrangeOp L f x, η.toFun x⟫_ℝ = firstVariationValue L f η
rfl All goals completed! 🐙lemma hasIntegratedByPartsFormula_of_termwise (L : Lagrangian d m k)
(f : Space d → EuclideanSpace ℝ (Fin m))
(hterm : HasTermwiseIntegratedByPartsFormula L f) :
HasIntegratedByPartsFormula L f := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L f⊢ HasIntegratedByPartsFormula L f
intro η d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))⊢ ∫ (x : Space d), firstVariationDensity L f η x = firstVariationValue L f η
calc
∫ x, firstVariationDensity L f η x
= ∑ I : DerivativeIndex d k, ∑ a : Fin m,
∫ x, firstVariationDensityTerm L f η I a x := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))⊢ ∫ (x : Space d), firstVariationDensity L f η x = ∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x
exact integral_firstVariationDensity_eq_termwise_sum L f η hterm All goals completed! 🐙
_ = ∑ I : DerivativeIndex d k, ∑ a : Fin m,
∫ x, eulerLagrangeTerm L I a f x * (η x) a := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))⊢ ∑ I, ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∑ I, ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
apply Finset.sum_congr rfl d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))⊢ ∀ x ∈ Finset.univ,
∑ a, ∫ (x_1 : Space d), firstVariationDensityTerm L f η x a x_1 =
∑ a, ∫ (x_1 : Space d), eulerLagrangeTerm L x a f x_1 * (η.toFun x_1).ofLp a
intro I _ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∑ a, ∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
apply Finset.sum_congr rfl d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka✝:I ∈ Finset.univ⊢ ∀ x ∈ Finset.univ,
∫ (x_1 : Space d), firstVariationDensityTerm L f η I x x_1 =
∫ (x_1 : Space d), eulerLagrangeTerm L I x f x_1 * (η.toFun x_1).ofLp x
intro a _ d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))I:DerivativeIndex d ka✝¹:I ∈ Finset.univa:Fin ma✝:a ∈ Finset.univ⊢ ∫ (x : Space d), firstVariationDensityTerm L f η I a x =
∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a
exact (hterm η I a).2.2 All goals completed! 🐙
_ = firstVariationValue L f η := by d:ℕm:ℕk:ℕL:Lagrangian d m kf:Space d → EuclideanSpace ℝ (Fin m)hterm:HasTermwiseIntegratedByPartsFormula L fη:AdmissibleVariation d (EuclideanSpace ℝ (Fin m))⊢ ∑ I, ∑ a, ∫ (x : Space d), eulerLagrangeTerm L I a f x * (η.toFun x).ofLp a = firstVariationValue L f η
exact integral_eulerLagrange_termwise_sum_eq_pairing L f η hterm All goals completed! 🐙