Documentation

LeanPool.AiyagariEquilibrium.Models.IncomeFluctuationEuler

The Euler equation along the iteration, and the borrowing limit #

Carroll and Kimball's induction runs along the ITERATES Tⁿ 0, so everything it needs must hold one step of the iteration at a time, and at states where the borrowing limit BINDS.

The envelope condition #

hasDerivAt_bellman is Clausen and Strub's theorem for bellman v rather than for the fixed point. Nothing in the lazy-agent argument used the fixed point: freezing a feasible saving and varying current assets gives a differentiable lower bound touching bellman v at the optimum, and concavity of the slice supplies the upper half of the sandwich. euler_of_interior reads the first-order condition off it.

But the Euler equation does not need it #

The same freezing trick gives BOTH one-sided bounds on the marginal value of assets — carry the poorer household's plan forward (bellman_sub_ge), or the richer household's plan back (bellman_sub_le) — and those are enough. Comparing the optimum with a deviation of size ε and letting ε shrink gives

and euler_eq is the two together. No envelope theorem, no second derivative: only that u is differentiable at the consumptions concerned.

The borrowing limit #

That asymmetry is the whole point. At the limit euler_ge fails and the first-order condition degenerates to the inequality euler_le, which in endogenous-gridpoint form says consumption is at most egmMap (egmMap_ge). concaveOn_of_egm_corner shows that is enough: at a constrained state the saving is assetFloor, which lies below ANY average of savings, and that is the only thing the transfer of IncomeFluctuationCarrollKimball ever needed. So the kink costs nothing, and concaveOn_consumptionFnOf_bellman is Carroll and Kimball's induction step with the borrowing limit allowed to bind anywhere.

What it still assumes is that the asset CAP is slack — a different condition, discharged by calibration in crra_policy_lt_assetCap — and the induction hypotheses on the continuation's consumption function.

The envelope condition for an iterate #

theorem LeanEconomics.IncomeFluctuation.hasDerivAt_bellman {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a du : ℝ} (ha : assetFloor < a) (hacap : a < assetCap) (hconc : ConcaveOn ℝ (Set.Icc assetFloor assetCap) fun (x : ℝ) => (P.toExtended.bellman v) (x, z)) (hint : P.policyOf v (a, z) < P.maxSaving (a, z)) (hc : 0 < P.consumptionFnOf v z a) (hu : HasDerivAt P.u du (P.consumptionFnOf v z a)) :
HasDerivAt (fun (x : ℝ) => (P.toExtended.bellman v) (x, z)) ((1 + P.interest) * du) a

The envelope condition for bellman v. The marginal value of assets is the gross interest rate times the marginal utility of the consumption the household actually chooses. Clausen and Strub's sandwich, run one step of the iteration at a time rather than at the fixed point.

The two lazy bounds on the marginal value of assets #

Both directions come from the same trick: carry a plan that was optimal at one asset level over to another. Neither needs the envelope theorem, and neither needs the borrowing limit to be slack.

theorem LeanEconomics.IncomeFluctuation.bellman_sub_ge {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {x y : ℝ} (hx : x ∈ Set.Icc assetFloor assetCap) (hy : y ∈ Set.Icc assetFloor assetCap) (hxy : x ≤ y) (hc : 0 < P.consumptionFnOf v z x) :
P.u (P.consumptionFnOf v z x + (1 + P.interest) * (y - x)) - P.u (P.consumptionFnOf v z x) ≤ (P.toExtended.bellman v) (y, z) - (P.toExtended.bellman v) (x, z)

The poorer household's plan, carried forward. The generalisation of valueFunction_sub_ge to one step of the iteration.

theorem LeanEconomics.IncomeFluctuation.bellman_sub_le {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {x y : ℝ} (hx : x ∈ Set.Icc assetFloor assetCap) (hy : y ∈ Set.Icc assetFloor assetCap) (hfe : P.policyOf v (y, z) ≤ P.maxSaving (x, z)) (hcx : 0 < P.consumptionFnOf v z y - (1 + P.interest) * (y - x)) (hc : 0 < P.consumptionFnOf v z y) :
(P.toExtended.bellman v) (y, z) - (P.toExtended.bellman v) (x, z) ≤ P.u (P.consumptionFnOf v z y) - P.u (P.consumptionFnOf v z y - (1 + P.interest) * (y - x))

The richer household's plan, carried back. Feasible only if the richer plan is still affordable at the poorer state, which is what hfe says.

The Euler inequality, which survives the borrowing limit #

Saving MORE is feasible whenever the household is not already saving the maximum, and that has nothing to do with the borrowing limit. So this half of the first-order condition holds at the corner too, and it is the half the concavity argument needs there.

theorem LeanEconomics.IncomeFluctuation.euler_le {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A du : ℝ} {du' : Z → ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hAmax : A < P.maxSaving (a, z)) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hu : HasDerivAt P.u du (P.consumptionFnOf (P.toExtended.bellman v) z a)) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) (hu' : ∀ (z' : Z), HasDerivAt P.u (du' z') (P.consumptionFnOf v z' A)) :
↑P.discount * ((1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * du' z') ≤ du

The Euler inequality. Marginal utility today is at least the discounted, interest- augmented expected marginal utility tomorrow. The only interiority is hAmax: the household could save a little more.

The first-order condition #

With the envelope available at the saving actually chosen, the objective is differentiable in the saving, the choice is a local maximum, and the derivative vanishes. That is the Euler equation: the marginal utility of consuming now equals the discounted, interest-augmented expected marginal utility of consuming next period.

theorem LeanEconomics.IncomeFluctuation.euler_of_interior {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A du : ℝ} {du' : Z → ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hA0 : assetFloor < A) (hAcap : A < assetCap) (hAmax : A < P.maxSaving (a, z)) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hu : HasDerivAt P.u du (P.consumptionFnOf (P.toExtended.bellman v) z a)) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) fun (x : ℝ) => (P.toExtended.bellman v) (x, z')) (hint' : ∀ (z' : Z), P.policyOf v (A, z') < P.maxSaving (A, z')) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) (hu' : ∀ (z' : Z), HasDerivAt P.u (du' z') (P.consumptionFnOf v z' A)) :
du = ↑P.discount * ((1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * du' z')

The Euler equation along the iteration. Every hypothesis is an interiority or differentiability condition at the single state (a, z) and at the saving it chooses; nothing is assumed globally.

theorem LeanEconomics.IncomeFluctuation.euler_ge {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A du : ℝ} {du' : Z → ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hA0 : assetFloor < A) (hslack : ∀ (z' : Z), P.policyOf v (A, z') < P.maxSaving (A, z')) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hu : HasDerivAt P.u du (P.consumptionFnOf (P.toExtended.bellman v) z a)) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) (hu' : ∀ (z' : Z), HasDerivAt P.u (du' z') (P.consumptionFnOf v z' A)) :
du ≤ ↑P.discount * ((1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * du' z')

The reverse Euler inequality. Saving LESS is feasible only away from the borrowing limit, which is why this half fails at the corner. Like euler_le it uses only the two lazy bounds: the envelope theorem is not needed for the Euler equation.

theorem LeanEconomics.IncomeFluctuation.euler_eq {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A du : ℝ} {du' : Z → ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hA0 : assetFloor < A) (hAmax : A < P.maxSaving (a, z)) (hslack : ∀ (z' : Z), P.policyOf v (A, z') < P.maxSaving (A, z')) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hu : HasDerivAt P.u du (P.consumptionFnOf (P.toExtended.bellman v) z a)) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) (hu' : ∀ (z' : Z), HasDerivAt P.u (du' z') (P.consumptionFnOf v z' A)) :
du = ↑P.discount * ((1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * du' z')

The Euler equation, from the two deviations. No envelope theorem, no second derivatives: only that u is differentiable at the consumptions concerned.

CRRA: the Euler equation in endogenous-gridpoint form #

With u' c = c ^ (-γ) the Euler equation says that consumption is a positive multiple of the weighted power mean, exponent -γ, of next period's consumptions — which is exactly egmMap, and exactly what concaveOn_consumptionFnOf_bellman_of_euler asks for.

theorem LeanEconomics.IncomeFluctuation.egm_of_euler {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A : ℝ} (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) (heuler : P.consumptionFnOf (P.toExtended.bellman v) z a ^ (-γ) = ↑P.discount * ((1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * P.consumptionFnOf v z' A ^ (-γ))) :
P.consumptionFnOf (P.toExtended.bellman v) z a = P.egmMap v γ z A
theorem LeanEconomics.IncomeFluctuation.egmMap_consumptionFnOf {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hA0 : assetFloor < A) (hAmax : A < P.maxSaving (a, z)) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hint' : ∀ (z' : Z), P.policyOf v (A, z') < P.maxSaving (A, z')) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) :
P.consumptionFnOf (P.toExtended.bellman v) z a = P.egmMap v γ z A

The hypothesis hEuler of concaveOn_consumptionFnOf_bellman_of_euler, discharged. Everything that remains is interiority: the saving chosen must be strictly inside the asset region and strictly below the feasible maximum, this period and next.

theorem LeanEconomics.IncomeFluctuation.egmMap_eq_rpow {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {A : ℝ} (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) :
P.egmMap v γ z A = (↑P.discount * (1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * P.consumptionFnOf v z' A ^ (-γ)) ^ (-(1 / γ))

The endogenous-gridpoint map, written as a single power of the Euler right-hand side.

theorem LeanEconomics.IncomeFluctuation.egmMap_ge {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (hA : P.policyOf (P.toExtended.bellman v) (a, z) = A) (hAmax : A < P.maxSaving (a, z)) (hc : 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) :

The Euler inequality in endogenous-gridpoint form. Consumption never exceeds the value the endogenous grid assigns to the saving actually chosen — and this holds AT the borrowing limit, where the equality fails.

The borrowing limit, and the kink it makes #

Where the constraint binds the Euler equation is only an inequality, and the endogenous-gridpoint transfer has to absorb that. It does, and the reason is short: at a constrained state the saving is assetFloor, which is below ANY average of savings, so the step the transfer needs is free there.

theorem LeanEconomics.IncomeFluctuation.concaveOn_of_egm_corner {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {z : Z} {g C h : ℝ → ℝ} (hC : ConcaveOn ℝ (Set.Icc assetFloor assetCap) C) (hM : StrictMonoOn (fun (A : ℝ) => A + C A) (Set.Icc assetFloor assetCap)) (hg : ∀ a ∈ Set.Icc assetFloor assetCap, g a ∈ Set.Icc assetFloor assetCap) (hbud : ∀ a ∈ Set.Icc assetFloor assetCap, P.income z + (1 + P.interest) * a = g a + h a) (hle : ∀ a ∈ Set.Icc assetFloor assetCap, h a ≤ C (g a)) (heq : ∀ a ∈ Set.Icc assetFloor assetCap, assetFloor < g a → h a = C (g a)) :
ConcaveOn ℝ (Set.Icc assetFloor assetCap) h

The endogenous-gridpoint transfer, with the corner. Concavity of the consumption function needs the Euler equation only where the borrowing limit is slack; at the limit the inequality hle suffices, because the saving is then at its minimum.

Carroll and Kimball's induction step, with the Euler equation discharged #

def LeanEconomics.IncomeFluctuation.EulerInterior {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (v : BoundedContinuousFunction (ℝ × Z) ℝ) (z : Z) (a : ℝ) :

The interiority the first-order condition needs. At (a, z) the household saves strictly inside the asset region and strictly below its feasible maximum, and does so again next period in every income state. This is exactly what fails at the borrowing limit, where policy_eq_zero_of_corner_at shows the constraint binds.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman_of_interior {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconcv : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmonov : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) (hcW : ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hin : ∀ a ∈ Set.Icc assetFloor assetCap, P.EulerInterior v z a) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman v) z)

    Carroll and Kimball (1996), the induction step for CRRA, with no Euler hypothesis.

    concaveOn_consumptionFnOf_bellman_of_euler assumed the first-order condition; here it is proved, from the Clausen–Strub envelope run along the iteration. What is assumed instead is interiority, which is a property of the state rather than of the model, and the reason the statement is not yet unconditional.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconcv : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmonov : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) (hcW : ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hslackW : ∀ a ∈ Set.Icc assetFloor assetCap, P.policyOf (P.toExtended.bellman v) (a, z) < P.maxSaving (a, z)) (hslackv : ∀ A ∈ Set.Icc assetFloor assetCap, ∀ (z' : Z), P.policyOf v (A, z') < P.maxSaving (A, z')) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman v) z)

    Carroll and Kimball (1996), the induction step for CRRA, with the borrowing limit allowed to BIND. No interiority at the limit is assumed; the only slackness required is of the asset CAP, which crra_policy_lt_assetCap discharges by calibration and which is a different condition entirely.

    Where the limit binds the Euler equation degenerates to an inequality, and concaveOn_of_egm_corner absorbs that: the saving is then at its minimum, so it sits below any average of savings, which is the only thing the transfer needs.