Documentation

LeanPool.AiyagariEquilibrium.Models.NaturalAssetBound

A natural asset bound for log utility #

exists_decline_of_consumption_lower_bound turns a LINEAR lower bound on consumption into the statement that assets above an explicit threshold decline — the natural asset bound, which is what assetCap has been standing in for, and what not_concaveOn_consumptionFn_of_cap_binds says has to hold before the Carroll–Kimball hypothesis is even true. Its input, the linear bound, has been missing. This file supplies it for log utility.

The argument is the crudest possible deviation #

Saving nothing is always feasible. Comparing the optimum with it,

u (resources) + β · cont 0 ≤ u (consumption) + β · cont (policy),

so u resources - u consumption ≤ β (cont (policy) - cont 0) ≤ 2 β ‖V‖. For LOG utility that reads log (resources / consumption) ≤ 2 β ‖V‖, which is a linear bound outright:

consumption ≥ exp (-2 β ‖V‖) · resources.

Log and the other CRRA regimes #

For log utility, u resources grows without limit and the deviation gives the proportional consumption bound above. In the unbounded-domain CRRA branch with γ > 1, utility is bounded above, so this comparison gives a constant consumption floor rather than that linear bound. The separate bounded-domain treatment also permits 0 < γ < 1; crra_pinch does not exclude that regime from the shared household structure.

What is honest about the constant #

exp (-2 β ‖V‖) is very lossy. The sharp constant is Ma and Toda's asymptotic MPC c_bar = 1 - (β R^(1-γ))^(1/γ), at which the decline condition becomes exactly β R < 1 (one_sub_mpc_mul_of_asymptotic). Getting it needs the Euler equation, hence the envelope condition, hence the machinery that IncomeFluctuationEnvelope supplies only under side conditions. So the bound proved here is qualitatively right and quantitatively weak: it establishes a natural asset bound, but only for interest rates small relative to exp (-2 β ‖V‖), where the sharp argument would ask only for impatience.

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

The slack in the "save nothing" comparison: twice the size of the value function, discounted.

Equations
Instances For
    theorem LeanEconomics.IncomeFluctuation.deviationGap_nonneg {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) :
    theorem LeanEconomics.IncomeFluctuation.utility_resources_sub_le {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (z : Z) :
    P.u (P.resources (a, z) - assetFloor) - P.u (P.consumptionFn z a) ≤ P.deviationGap

    The optimum beats saving nothing, so utility cannot fall far short of the utility of eating everything. This holds for any utility function; it is the log case that turns it into a linear bound.

    theorem LeanEconomics.IncomeFluctuation.log_consumption_linear_lower_bound {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hpc : P.PositiveConsumption) (hu : P.u = Real.log) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (z : Z) :
    Real.exp (-P.deviationGap) * (P.resources (a, z) - assetFloor) ≤ P.consumptionFn z a

    A linear lower bound on consumption, for log utility. The one place the development gets a bound that scales with resources rather than being a constant.

    theorem LeanEconomics.IncomeFluctuation.exists_natural_asset_bound_log {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hpc : P.PositiveConsumption) (hu : P.u = Real.log) (z : Z) (hr : (1 - Real.exp (-P.deviationGap)) * (1 + P.interest) < 1) :
    ∃ (ā : ℝ), ∀ a ∈ Set.Icc assetFloor assetCap, ā < a → P.policy (a, z) < a

    The natural asset bound for log utility. Assets above an explicit threshold decline, so the household never accumulates without limit and the asset cap can be justified rather than imposed.

    The hypothesis on the interest rate is the price of the crude constant: the sharp argument would ask only for β (1 + r) < 1.

    A better constant, from a smaller deviation #

    log_consumption_linear_lower_bound compares the optimum with saving NOTHING, which is a huge deviation and costs an exponential: ε = exp (-2 β ‖V‖). Comparing instead with saving a FRACTION θ of the optimum costs only a ratio, and letting θ approach one turns the bound polynomial:

    consumption ≥ resources / (1 + 2 · 2 β ‖V‖).

    No derivative is taken. The reason a near-zero deviation is affordable is that BOTH sides shrink with 1 - θ: the utility gain is log (1 + (1-θ) b / c), and the continuation loss is bounded by 2‖V‖ (1-θ) / θ because concavity makes the slope of cont on [θb, b] no larger than its slope on [0, θb]. The factor (1-θ) cancels, and what survives is the comparison of the two constants.

    θ = (G + 1/2) / (1 + G) is chosen so that θ (1 + G) - G = 1/2 exactly, which is what makes the final inequality b ≤ 2 G c.

    The gain is small when ‖V‖ is small and large when it is not: at G = 1.3 the two constants are 0.27 and 0.28, at G = 5 they are 0.007 and 0.09. Since ‖V‖ grows like |log minIncome|, it is the dispersed calibrations — the ones the precautionary motive needs — where this matters.

    theorem LeanEconomics.IncomeFluctuation.log_sub_log_ge {c d : ℝ} (hc : 0 < c) (hd : 0 ≤ d) :
    d / (c + d) ≤ Real.log (c + d) - Real.log c

    log (c + d) - log c ≥ d / (c + d), the elementary inequality behind the bound.

    theorem LeanEconomics.IncomeFluctuation.log_consumption_linear_lower_bound' {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hpc : P.PositiveConsumption) (hu : P.u = Real.log) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) (z : Z) :
    (P.resources (a, z) - assetFloor) / (1 + 2 * P.deviationGap) ≤ P.consumptionFn z a

    A polynomial linear lower bound on consumption. Sharper than log_consumption_linear_lower_bound whenever the value function is large, and proved from a deviation to θ times the optimal saving rather than to zero.

    The other half of exhaustion: the corner, for log #

    exists_decline_of_consumption_lower_bound gives assets falling above a threshold. The ergodic argument also needs the constraint to BIND below one — policy = 0 on [0, a₀] at the bad income state — and policy_eq_zero_of_corner_at supplies that from two explicit constants: a Lipschitz bound L on the value function and a lower bound m on the secant slope of u, with β L < m.

    Both are computable for log. The secant slope of log on (0, R] is at least 1/R, from log x ≤ x - 1. The Lipschitz constant is the fixed point of the operator's own estimate, L = K (1+r) / (1 - β(1+r)) with K = slopeBound log minIncome = 2 log 2 / minIncome, so β L < m reads

    resources · β · 2 log 2 (1+r) / (minIncome (1 - β(1+r))) < 1,

    a condition on the state's resources alone. Since resources at the bad state are minIncome + (1+r) a, it cuts out an interval of low assets — exactly what the ergodic argument wants, and exactly why the condition has to be state-dependent rather than global.

    theorem LeanEconomics.IncomeFluctuation.log_marginal_bound {R : ℝ} (hR : 0 < R) {c d : ℝ} (hd : 0 < d) (hdc : d ≤ c) (hcR : c ≤ R) :
    1 / R * (c - d) ≤ Real.log c - Real.log d

    The secant slope of log on (0, R] is at least 1 / R.

    theorem LeanEconomics.IncomeFluctuation.log_slopeBoundU {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hu : P.u = Real.log) :

    The slope bound of log at the income floor, in closed form.

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

    The Lipschitz constant the operator's own estimate is a fixed point of.

    Equations
    Instances For
      theorem LeanEconomics.IncomeFluctuation.logLipschitz_nonneg {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hβR : ↑P.discount * (1 + P.interest) < 1) :
      theorem LeanEconomics.IncomeFluctuation.log_valueFunction_lipschitz {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hu : P.u = Real.log) (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.logLipschitz * |x - y|

      The value function is Lipschitz with the explicit log constant.

      theorem LeanEconomics.IncomeFluctuation.log_policy_eq_zero_of_resources {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hdom : P.Unbounded) (hu : P.u = Real.log) (hβR : ↑P.discount * (1 + P.interest) < 1) {s : ℝ × Z} (hs : s.1 ∈ Set.Icc assetFloor assetCap) (hlt : ↑P.discount * P.logLipschitz < 1 / (P.resources s - assetFloor)) :
      P.policy s = assetFloor

      The borrowing constraint binds where resources are small, with an explicit threshold in the primitives.

      theorem LeanEconomics.logImpatient_natural_asset_bound (z : Fin 2) :
      ∃ (ā : ℝ), ∀ a ∈ Set.Icc 0 1, ā < a → logImpatient.policy (a, z) < a

      The bound is not vacuous. At r = 0 the interest-rate hypothesis holds automatically, since exp is positive, so the log witness has a natural asset bound outright.