Imports
import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Comp
import Mathlib.Analysis.Calculus.FDeriv.Prod
import Mathlib.Analysis.Calculus.FDeriv.AddEnvelope Theorem
Introduction
This page lays out the Lean formalization code of the Envelope Theorem. A graphical visualization of the relevant mathematical dependencies can be viewed here.
Setup
In the setup, I tell Lean we are not using any functions for computation,
but just for symbolic manipulation.
Furthermore, I tell Lean to interpret any use of X, A, and Y to be of NormedAddCommGroup, NormedSpace type
the curly braces denote the implicit argument and type inferred by Lean.
I also define variables present in the Lagrangian, and
I define the Lagrange multiplier as a continuous linear map from the space
of restrictions to the value function codomain.
noncomputable sectionvariable {X A Y : Type*}variable [NormedAddCommGroup X] [NormedSpace ℝ X]variable [NormedAddCommGroup A] [NormedSpace ℝ A]variable [NormedAddCommGroup Y] [NormedSpace ℝ Y]variable (f : X × A → ℝ)variable (g : X × A → Y)variable (x_star : A → X)variable (lambda_star : A → (Y →L[ℝ] ℝ))Definition: Value Function
The value function as a function of the parameters α is given by V(α) = f(x^*(α), α),
where x^*(α) is the unique maximizer of f given the parameters α,
and subject to the constraint g(x, α) = 0.
def V (f : X × A → ℝ) (x_star : A → X) (α : A) : ℝ :=
f (x_star α, α)Definition: Lagrangian
The Lagrangian is given by L(x, α) = f(x, α) + λ g(x, α).
def Lagrangian (f : X × A → ℝ) (g : X × A → Y) (x : X) (α : A) (Λ : Y →L[ℝ] ℝ) : ℝ :=
f (x, α) + Λ (g (x, α))Theorem: Envelope Theorem
\frac{dV}{dα} = \left.\frac{∂L}{∂α}\right|_{(x^*, λ^*)}
Proof.
Define L'(x, α) := f(x, α) + λ^* (g(x, α)).
As we always have g(x^*(α), α) = 0, α ∈ A, x \in X for the specified spaces A and X,
we obtain that V(α) = f(x^*(α), α) + 0 = f(x^*(α), α) + λ^*(0) =: L'(x^*(α), α),
because λ^* is a linear continuous map.
By then applying the chain rule under this formulation,
we get that \frac{dV}{dα} = \left.\frac{∂L'}{∂x}·\frac{∂x^*}{dα}\right|_{(x^*, λ^*)} + \left.\frac{∂L'}{∂α}\right|_{(x^*, λ^*)},
because at the optimum we have that \left.\frac{∂L}{∂x}\right|_{(x^*, λ^*)} = 0.
Therefore, we obtain that
\frac{dV}{dα} = 0 + \left.\frac{∂L}{∂α}\right|_{(x^*, λ^*)} = \left.\frac{∂L}{∂α}\right|_{(x^*, λ^*)}.
■
theorem EnvelopeTheorem
(α : A)
-- Define the differentiability assumptions
(hf : DifferentiableAt ℝ f (x_star α, α))
(hg : DifferentiableAt ℝ g (x_star α, α))
(hx : DifferentiableAt ℝ x_star α)
-- Define the assumption that the constraint is to be satisfied
-- at any `x_star` from parameters `a`
(h_constraint : ∀ a, g (x_star a, a) = 0)
-- Define the derivative of the Lagrangian at the optimum to be zero
(h_FOC : fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0) :
-- State the result of the Envelope Theorem
fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Define a Lagrangian with fixed Lagrange multiplier
-- to simpify the chain rule later on
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Prove V(a) = L_fixed(x_star a, a) for all a
have h_V_eq : ∀ a, V f x_star a = L_fixed (x_star a, a) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)a:A⊢ V f x_star a = L_fixed (x_star a, a)
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)a:A⊢ f (x_star a, a) = L_fixed (x_star a, a)
-- Expand L_fixed on the RHS
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)a:A⊢ f (x_star a, a) = f (x_star a, a) + (lambda_star α) (g (x_star a, a))
-- Invoke the constraint being zero
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)a:A⊢ f (x_star a, a) = f (x_star a, a) + (lambda_star α) 0
-- Since lambda_star α is a continuous linear map, applying it to 0 yields 0
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)a:A⊢ f (x_star a, a) = f (x_star a, a) + 0
All goals completed! 🐙
-- Rewrite the objective derivative using h_V_eq
have h_V_eq_deriv : fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) α := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_fun_eq:V f x_star = fun a ↦ L_fixed (x_star a, a)⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) α
All goals completed! 🐙
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) α⊢ fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Write the lambda function for the Lagrangian as a composite function
-- for easier reduction of the goal later on
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)⊢ fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)⊢ fderiv ℝ (L_fixed ∘ fun a ↦ (x_star a, a)) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Rewrite differentiability of the Lagrangian
have hL_diff : DifferentiableAt ℝ L_fixed (x_star α, α) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)⊢ DifferentiableAt ℝ (fun p ↦ (lambda_star α) (g p)) (x_star α, α)
All goals completed! 🐙
-- Add an auxiliary differentiation result
have h_tuple_diff : DifferentiableAt ℝ (fun a ↦ (x_star a, a)) α := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
All goals completed! 🐙
-- Apply the chain rule
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) α⊢ (fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α) =
fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- To prove equality of continuous linear maps,
-- evaluate both sides at an arbitrary perturbation dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:A⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:X⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
-- Derive the full derivative of the Lagrangian with respect to α
have h_L_deriv : (fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α) dα =
fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) dx +
fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α dα := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Identify the derivative of the tuple map
have df_tuple : fderiv ℝ (fun a ↦ (x_star a, a)) α =
(fderiv ℝ x_star α).prod (fderiv ℝ id α) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
All goals completed! 🐙
-- Obtain that the derivative of a product map applied to dα is (dx, dα)
have prod_app : ((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα =
(fderiv ℝ x_star α dα, dα) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
All goals completed! 🐙
-- Copy the FOC assumption in slightly modified notation
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
-- Split the tuple derivative into an axis-directional pair
have h_split : ((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ ((fderiv ℝ x_star α) dα, dα).1 = (((fderiv ℝ x_star α) dα, 0) + (0, dα)).1X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ ((fderiv ℝ x_star α) dα, dα).2 = (((fderiv ℝ x_star α) dα, 0) + (0, dα)).2 X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ ((fderiv ℝ x_star α) dα, dα).1 = (((fderiv ℝ x_star α) dα, 0) + (0, dα)).1X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ ((fderiv ℝ x_star α) dα, dα).2 = (((fderiv ℝ x_star α) dα, 0) + (0, dα)).2 All goals completed! 🐙
-- Substitute the results into the left hand side
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp ((fderiv ℝ x_star α).prod (fderiv ℝ id α))) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)⊢ (fderiv ℝ L_fixed (x_star α, α)) (((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)⊢ (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, dα) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)⊢ (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) + (fderiv ℝ L_fixed (x_star α, α)) (0, dα) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
-- Show that the full derivative with respect to partial null argument
-- can equate the partial derivative
have h_eval_x : (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα) := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Show differentiability of a key component
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)
-- Express the partial function as a composition
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (L_fixed ∘ fun x ↦ (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)
-- Apply the chain rule
erw [fderiv_comp (x_star α) hL_diff h_inner_diffX:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ (fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun x ↦ (x, α)) (x_star α))) ((fderiv ℝ x_star α) dα)
-- Rearrange
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun x ↦ (x, α)) (x_star α))) ((fderiv ℝ x_star α) dα) =
(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0)
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp ((fderiv ℝ (fun x ↦ x) (x_star α)).prod (fderiv ℝ (fun x ↦ α) (x_star α))))
((fderiv ℝ x_star α) dα) =
(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0)X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ DifferentiableAt ℝ (fun x ↦ x) (x_star α)X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ DifferentiableAt ℝ (fun x ↦ α) (x_star α)
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ DifferentiableAt ℝ (fun x ↦ x) (x_star α)X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ DifferentiableAt ℝ (fun x ↦ α) (x_star α)
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_inner_diff:DifferentiableAt ℝ (fun x ↦ (x, α)) (x_star α)⊢ DifferentiableAt ℝ (fun x ↦ α) (x_star α)
All goals completed! 🐙
-- Show that another full derivative with respect to partial null argument
-- can equate the partial derivative
have h_eval_a : (fderiv ℝ L_fixed (x_star α, α)) (0, dα) =
(fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
-- Show differentiability of a key component
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ (fderiv ℝ L_fixed (x_star α, α)) (0, dα) = (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
-- Express the partial function as a composition
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ (fderiv ℝ L_fixed (x_star α, α)) (0, dα) = (fderiv ℝ (L_fixed ∘ fun a ↦ (x_star α, a)) α) dα
-- Apply the chain rule
erw [fderiv_comp α hL_diff h_inner_diffX:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ (fderiv ℝ L_fixed (x_star α, α)) (0, dα) = ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (Prod.mk (x_star α)) α)) dα
-- Rearrange
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (Prod.mk (x_star α)) α)) dα = (fderiv ℝ L_fixed (x_star α, α)) (0, dα)
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ ((fderiv ℝ L_fixed (x_star α, α)).comp ((fderiv ℝ (fun x ↦ x_star α) α).prod (fderiv ℝ (fun x ↦ x) α))) dα =
(fderiv ℝ L_fixed (x_star α, α)) (0, dα)X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ DifferentiableAt ℝ (fun x ↦ x_star α) αX:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ DifferentiableAt ℝ (fun x ↦ x) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ DifferentiableAt ℝ (fun x ↦ x_star α) αX:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ DifferentiableAt ℝ (fun x ↦ x) α
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_inner_diff:DifferentiableAt ℝ (fun a ↦ (x_star α, a)) α⊢ DifferentiableAt ℝ (fun x ↦ x) α
All goals completed! 🐙
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xdf_tuple:fderiv ℝ (fun a ↦ (x_star a, a)) α = (fderiv ℝ x_star α).prod (fderiv ℝ id α)prod_app:((fderiv ℝ x_star α).prod (fderiv ℝ id α)) dα = ((fderiv ℝ x_star α) dα, dα)h_partial_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0h_split:((fderiv ℝ x_star α) dα, dα) = ((fderiv ℝ x_star α) dα, 0) + (0, dα)h_eval_x:(fderiv ℝ L_fixed (x_star α, α)) ((fderiv ℝ x_star α) dα, 0) =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) ((fderiv ℝ x_star α) dα)h_eval_a:(fderiv ℝ L_fixed (x_star α, α)) (0, dα) = (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα⊢ 0 ((fderiv ℝ x_star α) dα) + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα =
0 dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα
All goals completed! 🐙
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xh_L_deriv:((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα⊢ (fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα =
(fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
-- Use h_FOC to show the partial derivative in the Lagrangian with respect to x vanishes
have h_L_x : fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0 := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
All goals completed! 🐙
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xh_L_deriv:((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dαh_L_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ 0 dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα =
(fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
-- The zero linear map applied to dx is 0
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xh_L_deriv:((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dαh_L_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ 0 + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα =
(fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0L_fixed:X × A → ℝ := fun p ↦ f p + (lambda_star α) (g p)h_V_eq:∀ (a : A), V f x_star a = L_fixed (x_star a, a)h_V_eq_deriv:fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ L_fixed (x_star a, a)) αh_comp:(fun a ↦ L_fixed (x_star a, a)) = L_fixed ∘ fun a ↦ (x_star a, a)hL_diff:DifferentiableAt ℝ L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt ℝ (fun a ↦ (x_star a, a)) αdα:Adx:Xh_L_deriv:((fderiv ℝ L_fixed (x_star α, α)).comp (fderiv ℝ (fun a ↦ (x_star a, a)) α)) dα =
(fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α)) dx + (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dαh_L_x:fderiv ℝ (fun x ↦ L_fixed (x, α)) (x_star α) = 0⊢ (fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α) dα = (fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α) dα
-- Conclude the remainder is exactly the partial derivative of the Lagrangian with respect to α
have h_L_α : fderiv ℝ (fun a ↦ L_fixed (x_star α, a)) α dα =
fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α dα := X:Type u_1A:Type u_2Y:Type u_3inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:NormedAddCommGroup Ainst✝²:NormedSpace ℝ Ainst✝¹:NormedAddCommGroup Yinst✝:NormedSpace ℝ Yf:X × A → ℝg:X × A → Yx_star:A → Xlambda_star:A → Y →L[ℝ] ℝα:Ahf:DifferentiableAt ℝ f (x_star α, α)hg:DifferentiableAt ℝ g (x_star α, α)hx:DifferentiableAt ℝ x_star αh_constraint:∀ (a : A), g (x_star a, a) = 0h_FOC:fderiv ℝ (fun x ↦ Lagrangian f g x α (lambda_star α)) (x_star α) = 0⊢ fderiv ℝ (V f x_star) α = fderiv ℝ (fun a ↦ Lagrangian f g (x_star α) a (lambda_star α)) α
All goals completed! 🐙
All goals completed! 🐙