Imports
import Mathlib.Analysis.Calculus.FDeriv.Basic import Mathlib.Analysis.Calculus.FDeriv.Comp import Mathlib.Analysis.Calculus.FDeriv.Prod import Mathlib.Analysis.Calculus.FDeriv.Add

Envelope 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 α) = 0fderiv (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 α) = 0fderiv (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:AV 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:Af (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:Af (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:Af (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:Af (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 α) = 0fderiv (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 α) = 0fderiv (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 α) = 0fderiv (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)) α: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 α)) α) 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)) α:Adx:X((fderiv L_fixed (x_star α, α)).comp (fderiv (fun a (x_star a, a)) α)) = (fderiv (fun a Lagrangian f g (x_star α) a (lambda_star α)) α) -- 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)) α) = fderiv (fun x L_fixed (x, α)) (x_star α) dx + fderiv (fun a L_fixed (x_star α, 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 α) = 0fderiv (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 α) = 0fderiv (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 α)) = (fderiv 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 α) = 0fderiv (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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )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)) α)) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) -- Split the tuple derivative into an axis-directional pair have h_split : ((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (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 α) = 0fderiv (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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0((fderiv x_star α) , ).1 = (((fderiv x_star α) , 0) + (0, )).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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0((fderiv x_star α) , ).2 = (((fderiv x_star α) , 0) + (0, )).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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0((fderiv x_star α) , ).1 = (((fderiv x_star α) , 0) + (0, )).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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0((fderiv x_star α) , ).2 = (((fderiv x_star α) , 0) + (0, )).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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )((fderiv L_fixed (x_star α, α)).comp ((fderiv x_star α).prod (fderiv id α))) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, 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)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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )(fderiv L_fixed (x_star α, α)) (((fderiv x_star α).prod (fderiv id α)) ) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, 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)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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , ) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, 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)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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) + (fderiv L_fixed (x_star α, α)) (0, ) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) -- 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 α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv 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 α) = 0fderiv (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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_inner_diff:DifferentiableAt (fun x (x, α)) (x_star α)(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) ) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_inner_diff:DifferentiableAt (fun x (x, α)) (x_star α)(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (L_fixed fun x (x, α)) (x_star α)) ((fderiv x_star α) ) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_inner_diff:DifferentiableAt (fun x (x, α)) (x_star α)(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = ((fderiv L_fixed (x_star α, α)).comp (fderiv (fun x (x, α)) (x_star α))) ((fderiv x_star α) ) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_inner_diff:DifferentiableAt (fun x (x, α)) (x_star α)((fderiv L_fixed (x_star α, α)).comp (fderiv (fun x (x, α)) (x_star α))) ((fderiv x_star α) ) = (fderiv L_fixed (x_star α, α)) ((fderiv 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 α) = 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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 α) ) = (fderiv L_fixed (x_star α, α)) ((fderiv 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 α) = 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )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, ) = (fderiv (fun a L_fixed (x_star α, 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 α) = 0fderiv (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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )h_inner_diff:DifferentiableAt (fun a (x_star α, a)) α(fderiv L_fixed (x_star α, α)) (0, ) = (fderiv (fun a L_fixed (x_star α, a)) α) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )h_inner_diff:DifferentiableAt (fun a (x_star α, a)) α(fderiv L_fixed (x_star α, α)) (0, ) = (fderiv (L_fixed fun a (x_star α, a)) α) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )h_inner_diff:DifferentiableAt (fun a (x_star α, a)) α(fderiv L_fixed (x_star α, α)) (0, ) = ((fderiv L_fixed (x_star α, α)).comp (fderiv (Prod.mk (x_star α)) α)) -- 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )h_inner_diff:DifferentiableAt (fun a (x_star α, a)) α((fderiv L_fixed (x_star α, α)).comp (fderiv (Prod.mk (x_star α)) α)) = (fderiv L_fixed (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 α) = 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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) α))) = (fderiv L_fixed (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 α) = 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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )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)) α:Adx:Xdf_tuple:fderiv (fun a (x_star a, a)) α = (fderiv x_star α).prod (fderiv id α)prod_app:((fderiv x_star α).prod (fderiv id α)) = ((fderiv x_star α) , )h_partial_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0h_split:((fderiv x_star α) , ) = ((fderiv x_star α) , 0) + (0, )h_eval_x:(fderiv L_fixed (x_star α, α)) ((fderiv x_star α) , 0) = (fderiv (fun x L_fixed (x, α)) (x_star α)) ((fderiv x_star α) )h_eval_a:(fderiv L_fixed (x_star α, α)) (0, ) = (fderiv (fun a L_fixed (x_star α, a)) α) 0 ((fderiv x_star α) ) + (fderiv (fun a L_fixed (x_star α, a)) α) = 0 dx + (fderiv (fun a L_fixed (x_star α, 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)) α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)) α:Adx:Xh_L_deriv:((fderiv L_fixed (x_star α, α)).comp (fderiv (fun a (x_star a, a)) α)) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) = (fderiv (fun a Lagrangian f g (x_star α) a (lambda_star α)) α) -- 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 α) = 0fderiv (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)) α:Adx:Xh_L_deriv:((fderiv L_fixed (x_star α, α)).comp (fderiv (fun a (x_star a, a)) α)) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) h_L_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 00 dx + (fderiv (fun a L_fixed (x_star α, a)) α) = (fderiv (fun a Lagrangian f g (x_star α) a (lambda_star α)) α) -- 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)) α:Adx:Xh_L_deriv:((fderiv L_fixed (x_star α, α)).comp (fderiv (fun a (x_star a, a)) α)) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) h_L_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 00 + (fderiv (fun a L_fixed (x_star α, 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)hL_diff:DifferentiableAt L_fixed (x_star α, α)h_tuple_diff:DifferentiableAt (fun a (x_star a, a)) α:Adx:Xh_L_deriv:((fderiv L_fixed (x_star α, α)).comp (fderiv (fun a (x_star a, a)) α)) = (fderiv (fun x L_fixed (x, α)) (x_star α)) dx + (fderiv (fun a L_fixed (x_star α, a)) α) h_L_x:fderiv (fun x L_fixed (x, α)) (x_star α) = 0(fderiv (fun a L_fixed (x_star α, a)) α) = (fderiv (fun a Lagrangian f g (x_star α) a (lambda_star α)) α) -- 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)) α = 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 α) = 0fderiv (V f x_star) α = fderiv (fun a Lagrangian f g (x_star α) a (lambda_star α)) α All goals completed! 🐙 All goals completed! 🐙