Documentation

LeanPool.AiyagariEquilibrium.Models.IncomeFluctuationHARA

Carroll and Kimball beyond CRRA: the HARA induction step #

IncomeFluctuationCarrollKimball proves the induction step for u = crraUtility γ, where the Euler equation makes consumption a multiple of the power mean of next period's consumptions and powerMean_concave — Kimball's risk-tolerance aggregation — does the rest. Carroll and Kimball's theorem is not about CRRA but about HARA, and this file covers the b ≠ 0 branch, u c = crraUtility γ (η + c): CRRA with a subsistence level, which includes CRRA itself at η = 0.

Nothing new is needed #

Marginal utility is (η + c) ^ (-γ), so the Euler equation reads

(η + C(A)) ^ (-γ) = β R · Σ_{z'} π_{z z'} (η + c_{z'}(A)) ^ (-γ),

which is the CRRA equation in the variable η + c. So the endogenous-gridpoint map is the CRRA one applied to SHIFTED consumptions, with the shift removed at the end (haraEgmMap), and it is concave for exactly the same reason: η + c_{z'} is concave when c_{z'} is, the power mean of concave positive functions is concave, and a constant shift changes nothing.

That the shift is harmless is the content of "linear risk tolerance". Risk tolerance -u' / u'' is (η + c) / γ, affine in consumption, and Kimball's aggregation theorem needs precisely affineness — the level η rides through untouched.

What is and is not covered #

The induction STEP is here, for the whole b ≠ 0 HARA branch. What is not is the assembled statement: the iteration also needs positive consumption and the asset cap slack. Those are no longer CRRA-specific — consumptionFnOf_pos_of_marginal gets positivity from a FINITE marginal bound, which is what a shifted CRRA has at zero ((η + c) ^ (-γ) at c = 0 is η ^ (-γ)), and policyOf_le_of_marginal_bound was always general. Both branches now carry the assembly through to a witness: IncomeFluctuationCARA.caraCal for CARA, and StoneGearyWitness.stoneGeary for this one. The CARA branch b = 0, where marginal utility is exp (-α c), needs a different aggregator — the soft minimum -(1/α) log Σ π exp (-α c) — and is in IncomeFluctuationCARA, on top of Analysis.SoftMin.

noncomputable def LeanEconomics.IncomeFluctuation.haraEgmMap {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 endogenous-gridpoint map for shifted CRRA. The CRRA map in the variable η + c.

Equations
Instances For
    @[simp]
    theorem LeanEconomics.IncomeFluctuation.haraEgmMap_zero_shift {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 : ℝ) :
    P.haraEgmMap v γ 0 z A = P.egmMap v γ z A
    theorem LeanEconomics.IncomeFluctuation.concaveOn_haraEgmMap {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.haraEgmMap v γ η z)
    theorem LeanEconomics.IncomeFluctuation.monotoneOn_haraEgmMap {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hmono : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) :
    MonotoneOn (P.haraEgmMap v γ η z) (Set.Icc assetFloor assetCap)
    theorem LeanEconomics.IncomeFluctuation.hara_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.haraEgmMap v γ η z A

    The Euler equation puts consumption on the endogenous grid, for shifted CRRA.

    theorem LeanEconomics.IncomeFluctuation.hara_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 = haraUtility γ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {a A : ℝ} (hη : 0 ≤ η) (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.haraEgmMap v γ η z A

    The Euler hypothesis discharged, for shifted CRRA: interiority is all that is left.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman_of_hara_euler {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmono : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) (z : Z) (hEuler : ∀ a ∈ Set.Icc assetFloor assetCap, P.consumptionFnOf (P.toExtended.bellman v) z a = P.haraEgmMap v γ η z (P.policyOf (P.toExtended.bellman v) (a, z))) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman v) z)

    Carroll and Kimball (1996), the induction step for shifted CRRA. Given the Euler equation, the Bellman operator carries a concave consumption function to a concave one.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman_of_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) (hβ : 0 < ↑P.discount) (hu : P.u = haraUtility γ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmono : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) (hcpos : ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hint : ∀ a ∈ Set.Icc assetFloor assetCap, P.EulerInterior v z a) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman v) z)

    The induction step for shifted CRRA, with the Euler equation proved, exactly as concaveOn_consumptionFnOf_bellman_of_interior does it for CRRA: what is assumed is interiority, a property of the state, not of the model.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman_of_crra_via_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hγ : 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) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmono : ∀ (z' : Z), MonotoneOn (P.consumptionFnOf v z') (Set.Icc assetFloor assetCap)) (hcpos : ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (hint : ∀ a ∈ Set.Icc assetFloor assetCap, P.EulerInterior v z a) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman v) z)

    CRRA is the η = 0 member, so the HARA step really does generalise the CRRA one rather than sitting beside it.

    Marginal bounds #

    A shifted CRRA has FINITE marginal utility at zero, η ^ (-γ), so like CARA it satisfies no Inada condition and its consumption floor is an inequality rather than a limit. Both bounds are the CRRA ones read at η + c.

    theorem LeanEconomics.IncomeFluctuation.haraUtility_marginal_bound {γ η R : ℝ} (hγ0 : 0 < γ) (hγ1 : γ < 1) (hη : 0 ≤ η) {c d : ℝ} (hd : 0 ≤ d) (hdc : d ≤ c) (hcR : c ≤ R) :
    (η + R) ^ (-γ) * (c - d) ≤ haraUtility γ η c - haraUtility γ η d
    theorem LeanEconomics.IncomeFluctuation.haraUtility_marginal_bound_pos {γ η R : ℝ} (hγ0 : 0 < γ) {c d : ℝ} (hd : 0 < η + d) (hdc : d ≤ c) (hcR : c ≤ R) :
    (η + R) ^ (-γ) * (c - d) ≤ haraUtility γ η c - haraUtility γ η d

    The same with the restriction moved from γ to the ARGUMENT: a strictly positive subsistence level keeps η + c away from zero, so γ ≥ 1 — log Stone–Geary included — is admissible.

    theorem LeanEconomics.IncomeFluctuation.marginalBoundOn_haraUtility_pos {γ η δ : ℝ} (hγ0 : 0 < γ) (hη : 0 < η) (hδ : 0 < δ) :
    MarginalBoundOn (Set.Ici 0) (haraUtility γ η) ((η + δ) ^ (-γ))

    A marginal bound near zero for a strictly positive subsistence level.

    theorem LeanEconomics.IncomeFluctuation.marginalBoundOn_haraUtility {γ η δ : ℝ} (hγ0 : 0 < γ) (hγ1 : γ < 1) (hη : 0 ≤ η) (hδ : 0 < δ) :
    MarginalBoundOn (Set.Ici 0) (haraUtility γ η) ((η + δ) ^ (-γ))

    The Euler inequality, and the corner #

    theorem LeanEconomics.IncomeFluctuation.haraEgmMap_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) (hη : 0 ≤ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {z : Z} {A : ℝ} (hc' : ∀ (z' : Z), 0 < P.consumptionFnOf v z' A) :
    P.haraEgmMap v γ η z A = (↑P.discount * (1 + P.interest) * ∑ z' : Z, P.transitionMatrix z z' * (η + P.consumptionFnOf v z' A) ^ (-γ)) ^ (-(1 / γ)) - η
    theorem LeanEconomics.IncomeFluctuation.hara_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) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) {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) :
    P.consumptionFnOf (P.toExtended.bellman v) z a ≤ P.haraEgmMap v γ η z A

    The Euler INEQUALITY in endogenous-gridpoint form, for shifted CRRA: it holds AT the borrowing limit, where the equality fails.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_bellman_of_hara_corner {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) (hβ : 0 < ↑P.discount) (hu : P.u = haraUtility γ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (z : Z) (hpos : ∀ (z' : Z), ∀ A ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z' A) (hconc : ∀ (z' : Z), ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf v z')) (hmono : ∀ (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 for shifted CRRA, across the borrowing-limit kink.

    The proportional bound on saving #

    policyOf_le_of_marginal_bound prices a deviation against the LEVEL of the continuation, which for a bounded utility is far too crude to keep the cap slack at any interesting discount factor. The CRRA development fixes that with crra_policyOf_le_mul: deviate to a FRACTION θ of the saving rather than a fixed amount, and price the extra consumption at the margin where it lands. The bound then involves the continuation's OSCILLATION and is proportional to consumption.

    The shifted-CRRA version is that argument with the marginal step read at η + c. Everything else — the deviation, the concavity of the continuation, the oscillation — knows nothing about preferences.

    theorem LeanEconomics.IncomeFluctuation.hara_policyOf_le_mul {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η θ G : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hθ0 : 0 < θ) (hθ1 : θ < 1) (hu : P.u = haraUtility γ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ConcaveSlices assetFloor assetCap v) (hG : 0 ≤ G) (hosc : P.OscOn v G) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (z : Z) (hcpos : 0 < P.consumptionFnOf v z a) :
    P.policyOf v (a, z) - assetFloor ≤ ↑P.discount * G / θ * (η + P.consumptionFnOf v z a + (1 - θ) * (P.policyOf v (a, z) - assetFloor)) ^ γ
    theorem LeanEconomics.IncomeFluctuation.hara_policyOf_lt_assetCap {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η θ G : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hθ0 : 0 < θ) (hθ1 : θ < 1) (hu : P.u = haraUtility γ η) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ConcaveSlices assetFloor assetCap v) (hG : 0 ≤ G) (hosc : P.OscOn v G) (hcpos : ∀ (z : Z), ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf v z a) (hlt : ↑P.discount * G / θ * (η + P.maxIncome + (1 + P.interest - θ) * assetCap - (1 - θ) * assetFloor) ^ γ < assetCap - assetFloor) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (z : Z) :
    P.policyOf v (a, z) < assetCap

    Saving never reaches the asset cap, for shifted CRRA.

    The assembly #

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_iterates_of_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) (hβ : 0 < ↑P.discount) (hu : P.u = haraUtility γ η) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hslack : ∀ (n : ℕ), ∀ a ∈ Set.Icc assetFloor assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < P.maxSaving (a, z)) (n : ℕ) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman^[n] 0) z)
    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFn_of_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η δ : ℝ} (hγ0 : 0 < γ) (hγ1 : γ < 1) (hη : 0 ≤ η) (hδ : 0 < δ) (hβ : 0 < ↑P.discount) (hb : P.Bounded) (hu : P.u = haraUtility γ η) (hfloor : ↑P.discount * P.oscSlopeConst P.oscSpread < (η + δ) ^ (-γ)) (hcap : assetFloor + 4 * ↑P.discount * (max |P.toExtended.rewardMin| |P.toExtended.rewardMax| / (1 - ↑P.discount)) / (η + P.maxConsumption) ^ (-γ) < assetCap) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFn z)

    Carroll and Kimball for shifted CRRA, from two inequalities. The same two the CARA assembly needs, and for the same reasons: marginal utility at zero is finite, so the consumption floor has to be earned, and the cap has to sit above the saving the marginal bound allows.

    The two comparative-statics corollaries, for shifted CRRA #

    Light's Theorem 1 and the impatience-driven decline both take the marginal-utility hypotheses abstractly, so shifted CRRA discharges them the same way CRRA does — with (η + c) ^ (-γ) in place of c ^ (-γ). Relative risk aversion of the shifted family is γc/(η + c) ≤ γ, so a NON-NEGATIVE subsistence level only helps Light's condition.

    theorem LeanEconomics.IncomeFluctuation.hara_marginal_antitone {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) :
    AntitoneOn (fun (c : ℝ) => (η + c) ^ (-γ)) (Set.Ioi 0)
    theorem LeanEconomics.IncomeFluctuation.hara_marginal_pos {γ η : ℝ} (hη : 0 ≤ η) {c : ℝ} (hc : 0 < c) :
    0 < (η + c) ^ (-γ)
    theorem LeanEconomics.IncomeFluctuation.policy_mono_withRate_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetCap : ℝ} (P : IncomeFluctuation Z 0 assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hγ1 : γ ≤ 1) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) {r₁ r₂ : ℝ} (h₁ : P.RateOK r₁) (h₂ : P.RateOK r₂) (hr : r₁ ≤ r₂) (hposv : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), 0 < (P.withRate r₂ h₂).consumptionFnOf ((P.withRate r₁ h₁).toExtended.bellman^[n] 0) z a) (hposw : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), 0 < (P.withRate r₂ h₂).consumptionFnOf ((P.withRate r₂ h₂).toExtended.bellman^[n] 0) z a) (hslackv : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), (P.withRate r₂ h₂).policyOf ((P.withRate r₁ h₁).toExtended.bellman^[n] 0) (a, z) < assetCap) (hslackw : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), (P.withRate r₂ h₂).policyOf ((P.withRate r₂ h₂).toExtended.bellman^[n] 0) (a, z) < assetCap) (hcons : ∀ (n : ℕ) (z : Z), ConcaveOn ℝ (Set.Icc 0 assetCap) ((P.withRate r₂ h₂).consumptionFnOf ((P.withRate r₂ h₂).toExtended.bellman^[n] 0) z)) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) (z : Z) :
    (P.withRate r₁ h₁).policy (a, z) ≤ (P.withRate r₂ h₂).policy (a, z)

    Light (2018) Theorem 1 for shifted CRRA.

    theorem LeanEconomics.IncomeFluctuation.hara_exists_exhaust_of_impatient {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hβR : ↑P.discount * (1 + P.interest) < 1) (hiid : P.IidIncome) (hpos : ∀ (z : Z), ∀ x ∈ Set.Icc assetFloor assetCap, 0 < P.consumptionFn z x) (hslack : ∀ (z : Z), ∀ x ∈ Set.Icc assetFloor assetCap, P.policy (x, z) < P.maxSaving (x, z)) {z₀ : Z} (hz₀ : ∀ (z : Z), P.income z₀ ≤ P.income z) {a₀ : ℝ} (ha₀ : assetFloor < a₀) (hle : a₀ ≤ assetCap) (hzero : ∀ a ∈ Set.Icc assetFloor a₀, P.policy (a, z₀) = assetFloor) :
    ∃ (N : ℕ), (P.gBad z₀)^[N] P.topState = P.botState

    Worst-state decline for shifted CRRA: the decline condition is impatience.

    The supply floor #

    The household saves something, so aggregate capital is positive. The shape is the CRRA one: the cost of saving a little is priced at the margin where consumption is lowest, the gain at the margin in the bad successor state, and the comparison is between two marginal utilities. With a subsistence level both are read at η + c.

    theorem LeanEconomics.IncomeFluctuation.hara_cost_of_saving {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) {m h R b : ℝ} (hh0 : 0 < h) (hhm : h < m) (hmR : m ≤ R) (hb0 : 0 ≤ b) (hbh : b ≤ h) :
    haraUtility γ η (R - b) - haraUtility γ η (R - h) ≤ (η + m - h) ^ (-γ) * h
    theorem LeanEconomics.IncomeFluctuation.hara_cont_sub_ge_gen {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hpc : P.PositiveConsumption) (z z₀ : Z) {x y : ℝ} (hx : x ∈ Set.Icc assetFloor assetCap) (hy : y ∈ Set.Icc assetFloor assetCap) (hxy : x ≤ y) :
    P.transitionMatrix z z₀ * ((η + P.income z₀ + (1 + P.interest) * y) ^ (-γ) * ((1 + P.interest) * (y - x))) ≤ P.cont z y - P.cont z x

    The continuation's gain, for shifted CRRA.

    theorem LeanEconomics.IncomeFluctuation.hara_policy_ge_of_gain {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hpc : P.PositiveConsumption) (z₁ : Z) {h : ℝ} (hh0 : 0 < h) (hhcap : h ≤ assetCap) (hhinc : h < P.income z₁) (hgain : (η + P.income z₁ - h) ^ (-γ) * h < ↑P.discount * (P.cont z₁ h - P.cont z₁ (h / 2))) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) :
    h / 2 ≤ P.policy (a, z₁)

    Saving is bounded below, for shifted CRRA, when the gain beats the cost.

    The corner condition, in primitives #

    The corner test of policy_eq_zero_of_corner_at is β L < m: the discounted slope of the value function against the marginal value of consumption. Both sides have closed forms for shifted CRRA, so the test becomes one inequality among the primitives.

    A sufficient condition for the corner to hold below a₀ is

    β · (η + minConsumption/2) ^ (-γ) · R / (1 - β R) < (η + income z₀ + R a₀) ^ (-γ),

    which is checkable by norm_num at any calibration.

    theorem LeanEconomics.IncomeFluctuation.haraUtility_marginal_bound_above {γ η : ℝ} (hγ0 : 0 < γ) {c d : ℝ} (hd : 0 < η + d) (hdc : d ≤ c) :
    haraUtility γ η c - haraUtility γ η d ≤ (η + d) ^ (-γ) * (c - d)

    The secant slope is at most the marginal utility at the left end.

    theorem LeanEconomics.IncomeFluctuation.slopeBoundU_le_hara {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) :

    The slope constant in closed form.

    noncomputable def LeanEconomics.IncomeFluctuation.haraLipschitz {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (γ η : ℝ) :

    The Lipschitz constant of the value function, in primitives.

    Equations
    Instances For
      theorem LeanEconomics.IncomeFluctuation.haraLipschitz_nonneg {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hη : 0 ≤ η) (hβR : ↑P.discount * (1 + P.interest) < 1) :
      0 ≤ P.haraLipschitz γ η
      theorem LeanEconomics.IncomeFluctuation.hara_valueFunction_lipschitz {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hβR : ↑P.discount * (1 + P.interest) < 1) (z : Z) (x : ℝ) :
      x ∈ Set.Icc assetFloor assetCap → ∀ y ∈ Set.Icc assetFloor assetCap, |P.toExtended.valueFunction (x, z) - P.toExtended.valueFunction (y, z)| ≤ P.haraLipschitz γ η * |x - y|

      The value function is Lipschitz, with the constant read off the primitives.

      theorem LeanEconomics.IncomeFluctuation.hara_policy_eq_zero_of_primitives {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 < η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hβR : ↑P.discount * (1 + P.interest) < 1) (z₀ : Z) {a₀ : ℝ} (ha₀cap : a₀ ≤ assetCap) (hcond : ↑P.discount * P.haraLipschitz γ η < (η + P.income z₀ + (1 + P.interest) * a₀) ^ (-γ)) {a : ℝ} (ha : a ∈ Set.Icc assetFloor a₀) :
      P.policy (a, z₀) = assetFloor

      The corner condition from primitives. One inequality, norm_num-checkable.

      theorem LeanEconomics.IncomeFluctuation.hara_le_aggregateCapital_of_gain {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) [MeasurableSpace Z] [BorelSpace Z] {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hpc : P.PositiveConsumption) {μ : MeasureTheory.ProbabilityMeasure P.State} (hμ : P.IsStationary μ) {z₁ z₀ : Z} {p₀ h : ℝ} (hh0 : 0 < h) (hhcap : h ≤ assetCap) (hhinc : h < P.income z₁) (hp : ∀ (z : Z), p₀ ≤ P.transitionMatrix z z₁) (hgain : (η + P.income z₁ - h) ^ (-γ) * h < ↑P.discount * (P.transitionMatrix z₁ z₀ * ((η + P.income z₀ + (1 + P.interest) * h) ^ (-γ) * ((1 + P.interest) * (h / 2))))) :
      h / 2 * p₀ ≤ P.aggregateCapital μ

      Positive aggregate capital for shifted CRRA, from primitives.

      theorem LeanEconomics.IncomeFluctuation.hara_le_aggregateCapital_of_bounds {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) [MeasurableSpace Z] [BorelSpace Z] {γ η : ℝ} (hγ0 : 0 < γ) (hη : 0 ≤ η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hpc : P.PositiveConsumption) {μ : MeasureTheory.ProbabilityMeasure P.State} (hμ : P.IsStationary μ) {z₁ z₀ : Z} {p₀ t U L : ℝ} (ht0 : 0 < t) (htcap : t ≤ assetCap) (htinc : t < P.income z₁) (hp : ∀ (z : Z), p₀ ≤ P.transitionMatrix z z₁) (hU : (η + P.income z₁ - t) ^ (-γ) ≤ U) (hL : L ≤ (η + P.income z₀ + (1 + P.interest) * t) ^ (-γ)) (hcond : U * t < ↑P.discount * (P.transitionMatrix z₁ z₀ * (L * ((1 + P.interest) * (t / 2))))) :
      t / 2 * p₀ ≤ P.aggregateCapital μ

      The supply floor with the two powers bounded separately. The gain condition compares (η + y₁ - t)^(-γ), the marginal cost of saving t in the high state, against (η + y₀ + Rt)^(-γ), the marginal value of having it in the low state. Bounding the first from above and the second from below leaves ONE inequality among the bounds — and when a base sits on the right side of one, its bound needs no root at all (rpow_neg_le_one_of_one_le, rpow_neg_le_inv_of_le_one).

      This is what makes a supply floor a calibration check rather than a proof.