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.Basic

First variation support lemmas

i. Overview

This module collects the reusable support lemmas used by the analytic part of the local first-variation proof: basic identities for varied fields, iterated derivative regularity for test functions, and continuity of the varied local-jet coordinate map.

ii. Key results

    ClassicalFieldTheory.Local.variedField_zero

    ClassicalFieldTheory.Local.variedField_variedField

iii. Table of contents

    A. Varied fields

    B. Iterated derivative support lemmas

    C. Varied local-jet coordinates

iv. References

    J. Cortés and A. Haupt, Lecture Notes on Mathematical Methods of Classical Physics, Chapter 5, Theorem 5.2.

@[expose] public section

A. Varied fields

@[simp] lemma variedField_zero (f : Space d EuclideanSpace (Fin m)) (η : AdmissibleVariation d (EuclideanSpace (Fin m))) : variedField f η 0 = f := d:m:f:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))variedField f η 0 = f d:m:f:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))x:Space dvariedField f η 0 x = f x All goals completed! 🐙@[simp] lemma variedField_variedField (f : Space d EuclideanSpace (Fin m)) (η : AdmissibleVariation d (EuclideanSpace (Fin m))) (s t : ) : variedField (variedField f η s) η t = variedField f η (s + t) := d:m:f:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))s:t:variedField (variedField f η s) η t = variedField f η (s + t) d:m:f:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))s:t:x:Space dvariedField (variedField f η s) η t x = variedField f η (s + t) x All goals completed! 🐙

B. Iterated derivative support lemmas

d:g:Space d hg:ContDiff gi:Fin dhfamily:ContDiff fun x j => Space.deriv j g xContDiff (Space.deriv i g) All goals completed! 🐙lemma isTestFunction_space_deriv {g : Space d } (hg : IsTestFunction g) (i : Fin d) : IsTestFunction (∂[i] g) := d:g:Space d hg:IsTestFunction gi:Fin dIsTestFunction (Space.deriv i g) All goals completed! 🐙lemma iteratedDerivList_contDiff (L : List (Fin d)) {g : Space d } (hg : ContDiff g) : ContDiff (L.foldr (fun i h => ∂[i] h) g) := d:L:List (Fin d)g:Space d hg:ContDiff gContDiff (List.foldr (fun i h => Space.deriv i h) g L) induction L generalizing g with d:g:Space d hg:ContDiff gContDiff (List.foldr (fun i h => Space.deriv i h) g []) All goals completed! 🐙 d:i:Fin dL:List (Fin d)ih: {g : Space d }, ContDiff g ContDiff (List.foldr (fun i h => Space.deriv i h) g L)g:Space d hg:ContDiff gContDiff (List.foldr (fun i h => Space.deriv i h) g (i :: L)) d:i:Fin dL:List (Fin d)ih: {g : Space d }, ContDiff g ContDiff (List.foldr (fun i h => Space.deriv i h) g L)g:Space d hg:ContDiff ghtail:ContDiff (List.foldr (fun j h => Space.deriv j h) g L)ContDiff (List.foldr (fun i h => Space.deriv i h) g (i :: L)) All goals completed! 🐙lemma iteratedDerivList_isTestFunction (L : List (Fin d)) {g : Space d } (hg : IsTestFunction g) : IsTestFunction (L.foldr (fun i h => ∂[i] h) g) := d:L:List (Fin d)g:Space d hg:IsTestFunction gIsTestFunction (List.foldr (fun i h => Space.deriv i h) g L) induction L generalizing g with d:g:Space d hg:IsTestFunction gIsTestFunction (List.foldr (fun i h => Space.deriv i h) g []) All goals completed! 🐙 d:i:Fin dL:List (Fin d)ih: {g : Space d }, IsTestFunction g IsTestFunction (List.foldr (fun i h => Space.deriv i h) g L)g:Space d hg:IsTestFunction gIsTestFunction (List.foldr (fun i h => Space.deriv i h) g (i :: L)) d:i:Fin dL:List (Fin d)ih: {g : Space d }, IsTestFunction g IsTestFunction (List.foldr (fun i h => Space.deriv i h) g L)g:Space d hg:IsTestFunction gIsTestFunction (Space.deriv i (List.foldr (fun i h => Space.deriv i h) g L)) All goals completed! 🐙d:i:Fin dj:Fin dL:List (Fin d)ih: {g : Space d }, ContDiff g List.foldr (fun j h => Space.deriv j h) (Space.deriv i g) L = Space.deriv i (List.foldr (fun j h => Space.deriv j h) g L)g:Space d hg:ContDiff gh2:ContDiff (↑2) (List.foldr (fun j h => Space.deriv j h) g L)ContDiff 2 (List.foldr (fun j h => Space.deriv j h) g L) All goals completed! 🐙lemma iteratedDeriv_coord_isTestFunction (η : AdmissibleVariation d (EuclideanSpace (Fin m))) (I : DerivativeIndex d k) (a : Fin m) : IsTestFunction (fun x => ∂^[I.1] (fun y => (η y) a) x) := d:m:k:η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mIsTestFunction fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) x All goals completed! 🐙lemma firstVariationDensityTerm_integrable_of_continuous_coordDeriv (L : Lagrangian d m k) (f : Space d EuclideanSpace (Fin m)) (η : AdmissibleVariation d (EuclideanSpace (Fin m))) (I : DerivativeIndex d k) (a : Fin m) (hcont : Continuous (fun x : Space d => L.coordDeriv I a (jetAt k f x))) : Integrable (firstVariationDensityTerm L f η I a) := d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)Integrable (firstVariationDensityTerm L f η I a) volume d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)ψ:Space d := fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) xIntegrable (firstVariationDensityTerm L f η I a) volume d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)ψ:Space d := fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) x:IsTestFunction ψIntegrable (firstVariationDensityTerm L f η I a) volume d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)ψ:Space d := fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) x:IsTestFunction ψhψcont:Continuous ψIntegrable (firstVariationDensityTerm L f η I a) volume d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)ψ:Space d := fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) x:IsTestFunction ψhψcont:Continuous ψhtermCont:Continuous fun x => L.coordDeriv I a (jetAt k f x) * ψ xIntegrable (firstVariationDensityTerm L f η I a) volume d:m:k:L:Lagrangian d m kf:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))I:DerivativeIndex d ka:Fin mhcont:Continuous fun x => L.coordDeriv I a (jetAt k f x)ψ:Space d := fun x => Space.iteratedDeriv (↑I) (fun y => (η.toFun y).ofLp a) x:IsTestFunction ψhψcont:Continuous ψhtermCont:Continuous fun x => L.coordDeriv I a (jetAt k f x) * ψ xhsupp:HasCompactSupport fun x => L.coordDeriv I a (jetAt k f x) * ψ xIntegrable (firstVariationDensityTerm L f η I a) volume All goals completed! 🐙

C. Varied local-jet coordinates

d:m:k:f:Space d EuclideanSpace (Fin m)η:AdmissibleVariation d (EuclideanSpace (Fin m))hf:ContDiff fhfjet:Continuous (jetCoordinatesAt k f)hηjet:Continuous (jetCoordinatesAt k η.toFun)hcoord:Continuous fun p => jetCoordinatesAt k f p.2 + p.1 jetCoordinatesAt k η.toFun p.2hpair:Continuous fun p => (p.2, jetCoordinatesAt k f p.2 + p.1 jetCoordinatesAt k η.toFun p.2)heq:(fun p => (p.2, jetCoordinatesAt k (variedField f η p.1) p.2)) = fun p => (p.2, jetCoordinatesAt k f p.2 + p.1 jetCoordinatesAt k η.toFun p.2)Continuous fun p => (p.2, jetCoordinatesAt k f p.2 + p.1 jetCoordinatesAt k η.toFun p.2) All goals completed! 🐙