Needle variation: admissible trajectories and first-order cost
ProvedVectorSpaceOpt.needle_variation_cost_limitFix an admissible state-control pair on , with , and an absolutely continuous costate satisfying the adjoint equation almost everywhere and . Assume jointly continuous dynamics , running cost , and their state derivatives; differentiability in the state; interval integrability of both derivative paths; an essential bound for ; and a global joint Lipschitz bound for .
For each fixed permitted value , at almost every interior time there is a family of state trajectories such that, for every sufficiently small positive , the control
and form an admissible pair with the same initial state, and
Here is the integral running cost and . This isolates the analytic first-variation calculation from the optimization argument: the reference pair is admissible but need not be optimal. The exceptional null set may depend on the fixed value .
Formalization Note. This is the right-needle specialization of the source's first-order Hamiltonian comparison, with an almost-everywhere limit appropriate for the mission's measurable-control formulation. The existence of admissible perturbed states and the derivative limit are conclusions, not added assumptions.
import Definitions.Def_VectorSpaceOpt_optimal_control open Set Filter MeasureTheory open scoped RealInnerProductSpace Topology open VectorSpaceOpt
theorem VectorSpaceOpt.needle_variation_cost_limit
{n m : ℕ} (t₀ t₁ : ℝ) (ht : t₀ < t₁)
(F : OCState n → OCControl m → OCState n)
(ell : OCState n → OCControl m → ℝ)
(Fx : OCState n → OCControl m → (OCState n →L[ℝ] OCState n))
(ellx : OCState n → OCControl m → (OCState n →L[ℝ] ℝ))
(Omega : Set (OCControl m)) (xInit : OCState n)
(u₀ : ℝ → OCControl m) (x₀ : ℝ → OCState n)
(hFx : ∀ x u, HasFDerivAt (fun y => F y u) (Fx x u) x)
(hellx : ∀ x u, HasFDerivAt (fun y => ell y u) (ellx x u) x)
(hFCont : Continuous (Function.uncurry F))
(hellCont : Continuous (Function.uncurry ell))
(hFxCont : Continuous (Function.uncurry Fx))
(hellxCont : Continuous (Function.uncurry ellx))
(hFxPathInt : IntervalIntegrable (fun t => Fx (x₀ t) (u₀ t)) volume t₀ t₁)
(hellxPathInt : IntervalIntegrable (fun t => ellx (x₀ t) (u₀ t)) volume t₀ t₁)
(hu₀Bound : ∃ C : ℝ, ∀ᵐ t ∂volume.restrict (Icc t₀ t₁), ‖u₀ t‖ ≤ C)
(hLip : ∃ M : ℝ, 0 ≤ M ∧ ∀ x y u v,
‖F x u - F y v‖ ≤ M * (‖x - y‖ + ‖u - v‖))
(hadm : IsAdmissibleControlPair t₀ t₁ F Omega xInit ell u₀ x₀)
(lambda : ℝ → OCState n)
(hlambdaTerm : lambda t₁ = 0)
(hlambdaAC : AbsolutelyContinuousOnInterval lambda t₀ t₁)
(hadjoint : ∀ᵐ t ∂volume.restrict (Ioo t₀ t₁),
∃ dlambda : OCState n, HasDerivAt lambda dlambda t ∧
∀ h : OCState n,
⟪-dlambda, h⟫ =
⟪lambda t, Fx (x₀ t) (u₀ t) h⟫ + ellx (x₀ t) (u₀ t) h)
(v : OCControl m) (hv : v ∈ Omega) :
∀ᵐ t ∂volume.restrict (Ioo t₀ t₁),
∃ xPert : ℝ → ℝ → OCState n,
(∀ᶠ ε : ℝ in 𝓝[>] (0 : ℝ),
IsAdmissibleControlPair t₀ t₁ F Omega xInit ell
(fun s => if s ∈ Icc t (t + ε) then v else u₀ s) (xPert ε)) ∧
Tendsto
(fun ε : ℝ =>
(controlCost t₀ t₁ ell
(fun s => if s ∈ Icc t (t + ε) then v else u₀ s) (xPert ε) -
controlCost t₀ t₁ ell u₀ x₀) / ε)
(𝓝[>] (0 : ℝ))
(𝓝 (controlHamiltonian F ell (x₀ t) v (lambda t) -
controlHamiltonian F ell (x₀ t) (u₀ t) (lambda t))) := by
sorry