Documentation

LeanPool.AiyagariEquilibrium.Models.MinimalMPC

The minimal marginal propensity to consume #

Carroll and Shanker's Theoretical Foundations of Buffer Stock Saving, draft dated 2025-12-05, Lemma 1 (Limiting MPCs), gives consumption-share bounds in their buffer-stock model: https://econ-ark.github.io/BufferStockTheory/BufferStockTheory.pdf

Here the minimal bound is proved for the finite capped-household model, under explicit positivity and cap-slack hypotheses,

κ · m ≤ c(m), κ = 1 - Þ/R, Þ = (βR)^(1/γ),

for CRRA utility at a zero borrowing limit. Þ is Carroll's absolute patience factor, and κ is the MPC of a perfect-foresight consumer with no human wealth.

Why this one and not the other #

The MAXIMAL MPC is 1 - ℘^(1/γ)Þ/R, where ℘ is the probability of a zero-income event. This model has minIncome_pos, so ℘ = 0, the maximal MPC is 1, and the bound it gives — c(m) ≤ m — is the budget constraint and nothing more. That is not a defect of the estimate: a liquidity-constrained household at the borrowing limit really does consume everything, and our own corner condition says so. So only the minimal MPC has content here.

The proof is one Euler step, and the bound is self-reproducing #

Suppose the continuation's consumption function already satisfies c ≥ κ m. At an interior choice A > 0 the Euler inequality u'(c) ≤ βR E[u'(c'(m'))] applies, and m' ≥ R A because income is positive, so

c^(-γ) ≤ βR (κ R A)^(-γ), hence c ≥ (κR/Þ) A = (κR/Þ)(m - c),

and (κR/Þ)/(1 + κR/Þ) = κ precisely because 1 - κ = Þ/R. At the corner A = 0 the household consumes everything, so c = m ≥ κ m outright. The bound therefore survives the Bellman operator, and holds at the zero continuation because the household with no future eats everything.

No limit of a sequence of MPCs is taken: κ is a fixed point of the recursion κ⁻¹ ↦ 1 + (Þ/R)κ⁻¹, so the single constant reproduces itself.

The sign of the rate #

Everything below is stated with 0 < κ as the hypothesis, not 0 ≤ r. Return impatience βR < 1 at a non-negative rate gives 0 < κ (minMPC_pos), but at γ = 1 one has κ = 1 - β (minMPC_one) at EVERY rate r > -1, so the log bounds — and with them the capital ceiling — run into negative rates, where Aiyagari's K(r) has to be excluded too.

What it is for #

Two consequences the development already had homes for. policy_lt_self_of_consumption_lower_bound turns it into the DECLINE condition, which was a raw assumption; and aggregateCapital_le_of_consumption_bound turns it into a quantitative ceiling on capital supply, in place of the asset cap. Both conditions ask for (1-κ)R < 1, and (1-κ)R = Þ, so both are exactly βR < 1.

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

The minimal marginal propensity to consume, κ = 1 - Þ/R with Þ = (βR)^(1/γ).

Equations
Instances For
    theorem LeanEconomics.IncomeFluctuation.patience_pos {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hβ : 0 < ↑P.discount) :
    0 < (↑P.discount * (1 + P.interest)) ^ (1 / γ)

    The absolute patience factor is positive when the household discounts at all.

    theorem LeanEconomics.IncomeFluctuation.patience_lt_one {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hβR : ↑P.discount * (1 + P.interest) < 1) :
    (↑P.discount * (1 + P.interest)) ^ (1 / γ) < 1

    Impatience is exactly Þ < 1.

    theorem LeanEconomics.IncomeFluctuation.one_sub_minMPC_mul {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} :
    (1 - P.minMPC γ) * (1 + P.interest) = (↑P.discount * (1 + P.interest)) ^ (1 / γ)

    (1 - κ)R = Þ: the factor by which assets grow under the bound is the patience factor.

    theorem LeanEconomics.IncomeFluctuation.minMPC_le_one {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} :
    P.minMPC γ ≤ 1
    theorem LeanEconomics.IncomeFluctuation.minMPC_one {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} :
    P.minMPC 1 = 1 - ↑P.discount

    At γ = 1 the patience factor is βR itself, so κ = 1 - β: log and log Stone--Geary need no root at all.

    theorem LeanEconomics.IncomeFluctuation.minMPC_pos {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hint : 0 ≤ P.interest) (hβR : ↑P.discount * (1 + P.interest) < 1) :
    0 < P.minMPC γ

    Sufficient conditions for a positive minimal MPC: impatience and a nonnegative rate. Here βR < 1 and R ≥ 1 imply the required return-impatience bound; these conditions are not necessary, as minMPC_one also applies at negative admissible rates.

    theorem LeanEconomics.IncomeFluctuation.le_of_rpow_neg_le {x y γ : ℝ} (hx : 0 < x) (hy : 0 < y) (hγ : 0 < γ) (h : x ^ (-γ) ≤ y ^ (-γ)) :
    y ≤ x

    Negative powers reverse the order: a smaller x ^ (-γ) means a larger x.

    The bound along the iteration #

    theorem LeanEconomics.IncomeFluctuation.hara_minMPC_step {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κ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hposv : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf v z a) (hcapv : ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf v (a, z) < assetCap) (hposW : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (ih : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, P.minMPC γ * (η + P.resources (a, z)) ≤ η + P.consumptionFnOf v z a) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :
    P.minMPC γ * (η + P.resources (a, z)) ≤ η + P.consumptionFnOf (P.toExtended.bellman v) z a

    One shifted-CRRA Euler step propagates the minimal consumption bound.

    theorem LeanEconomics.IncomeFluctuation.crra_minMPC_step {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hposv : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf v z a) (hcapv : ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf v (a, z) < assetCap) (hposW : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman v) z a) (ih : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, P.minMPC γ * P.resources (a, z) ≤ P.consumptionFnOf v z a) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :

    One Euler step of the minimal-MPC bound. If a continuation v satisfies κ m ≤ c_v(m) everywhere, with consumption positive and the cap slack against it, then so does bellman v. Extracted from the induction so that it can also drive a SIMULTANEOUS induction on cap slack (crra_minMPC_of_cap), which is what large β needs.

    The shifted-CRRA version #

    With u'(c) = (η + c)^(-γ) the same argument runs on η + c against η + m:

    κ (η + m) ≤ η + c(m),

    with the SAME κ. The step produces c ≥ κ m + η(κ - Þ)/R, and what has to be checked is that this is at least κ m - η(1-κ), which holds because κ ≥ 0. So the subsistence level costs nothing in the constant; it only shifts what the constant multiplies.

    Read as a bound on saving this is policy ≤ (1-κ)(η + m), so the household behaves like a CRRA household with income raised by η — which is what a subsistence level is.

    theorem LeanEconomics.IncomeFluctuation.hara_minMPC_mul_le_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 ≤ η) (hu : P.u = haraUtility γ η) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (n : ℕ) (z : Z) (a : ℝ) :
    a ∈ Set.Icc 0 assetCap → P.minMPC γ * (η + P.resources (a, z)) ≤ η + P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a

    The minimal-MPC bound for shifted CRRA, at every iterate.

    theorem LeanEconomics.IncomeFluctuation.hara_minMPC_mul_le_consumptionFn {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κ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :
    P.minMPC γ * (η + P.resources (a, z)) ≤ η + P.consumptionFn z a

    The shifted-CRRA bound at the value function.

    theorem LeanEconomics.IncomeFluctuation.crra_minMPC_mul_le_consumptionFnOf {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (n : ℕ) (z : Z) (a : ℝ) :
    a ∈ Set.Icc 0 assetCap → P.minMPC γ * P.resources (a, z) ≤ P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a

    The minimal-MPC bound, at every iterate. Consumption is at least κ times cash on hand, uniformly in the horizon — so it passes to the value function.

    The hypotheses beyond CRRA are the two the Euler inequality needs and nothing else: consumption positive at each iterate, and the saving cap slack there. Both are fields (or immediate consequences of fields) of Calibrated.

    At the fixed point, and what it buys #

    The bound is uniform in the horizon, so it survives the limit: tendsto_policyOf says argmaxes follow uniform limits when the limit has concave slices, which the value function does.

    theorem LeanEconomics.IncomeFluctuation.crra_minMPC_mul_le_consumptionFn {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :

    The minimal-MPC bound at the value function.

    theorem LeanEconomics.IncomeFluctuation.crra_policy_lt_self_of_minMPC {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) (hgt : (1 - P.minMPC γ) * P.income z < (1 - (1 - P.minMPC γ) * (1 + P.interest)) * a) :
    P.policy (a, z) < a

    The decline condition, from primitives. Above an explicit asset level the household runs its assets down, because it consumes at least the share κ of cash on hand and (1-κ)R = Þ < 1. This is the hypothesis hdecl of exists_exhaust_of_decline, which the development has carried as an assumption.

    Cap slack from the bound itself #

    The induction above ASSUMES the cap is slack at every iterate. At small β that is supplied by an oscillation bound; at Aiyagari's β = 0.96 no such bound is available. But the minimal-MPC bound itself implies cap slack — saving is at most (1-κ) m, and (1-κ)(maxIncome + R·cap) < cap once the cap is large enough — so the two can be proved TOGETHER, one induction carrying both. The cap is then bookkeeping again: any cap > (1-κ)maxIncome / (1 - (1-κ)R) will do, and 1 - (1-κ)R = 1 - Þ > 0.

    theorem LeanEconomics.IncomeFluctuation.crra_policyOf_lt_cap_of_minMPC_bound {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hfl : assetFloor = 0) (hthr : (1 - P.minMPC γ) * (P.maxIncome + (1 + P.interest) * assetCap) < assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, P.minMPC γ * P.resources (a, z) ≤ P.consumptionFnOf v z a) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) (z : Z) :
    P.policyOf v (a, z) < assetCap

    Saving under the minimal-MPC bound is at most (1-κ) m, hence below the cap once the cap clears (1-κ)(maxIncome + R·cap).

    theorem LeanEconomics.IncomeFluctuation.crra_minMPC_of_cap {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hthr : (1 - P.minMPC γ) * (P.maxIncome + (1 + P.interest) * assetCap) < assetCap) (n : ℕ) :
    (∀ (z : Z), ∀ a ∈ Set.Icc 0 assetCap, P.minMPC γ * P.resources (a, z) ≤ P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) ∧ ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap

    The minimal-MPC bound and cap slack, by one induction. Nothing is assumed about the cap beyond one inequality among the primitives.

    theorem LeanEconomics.IncomeFluctuation.crra_minMPC_mul_le_consumptionFn_of_cap {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hthr : (1 - P.minMPC γ) * (P.maxIncome + (1 + P.interest) * assetCap) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :

    The minimal-MPC bound at the value function, with the cap from primitives.

    theorem LeanEconomics.IncomeFluctuation.crra_policy_lt_cap_of_minMPC {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hthr : (1 - P.minMPC γ) * (P.maxIncome + (1 + P.interest) * assetCap) < assetCap) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) (z : Z) :
    P.policy (a, z) < assetCap

    The cap is slack at the fixed point, from primitives.

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

    The share form. κ(η + m) ≤ η + c is not a bound on the SHARE c/m, because of the constant. Charging the constant against the smallest cash on hand there can be gives one: 1 - (1-κ)(1 + η/minIncome) is a share the household always consumes. It is what the capital ceiling needs, and it degrades gracefully — at η = 0 it is κ itself.

    Equations
    Instances For
      theorem LeanEconomics.IncomeFluctuation.hara_minMPCShare_mul_le_consumptionFn {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κ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) :
      theorem LeanEconomics.IncomeFluctuation.hara_policy_lt_self_of_minMPC {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κ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc 0 assetCap) (hgt : (1 - P.minMPC γ) * (η + P.income z) < (1 - (1 - P.minMPC γ) * (1 + P.interest)) * a) :
      P.policy (a, z) < a

      The decline condition for shifted CRRA. Saving is at most (1-κ)(η + m), so the household behaves like a CRRA household whose income is raised by the subsistence level.

      theorem LeanEconomics.IncomeFluctuation.hara_exists_exhaust_of_minMPC {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κ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hβR : ↑P.discount * (1 + P.interest) < 1) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) {z₀ : Z} {a₀ : ℝ} (ha₀ : 0 < a₀) (hle : a₀ ≤ assetCap) (hzero : ∀ a ∈ Set.Icc 0 a₀, P.policy (a, z₀) = 0) (hthr : (1 - P.minMPC γ) * (η + P.income z₀) < (1 - (1 - P.minMPC γ) * (1 + P.interest)) * a₀) :
      ∃ (N : ℕ), (P.gBad z₀)^[N] P.topState = P.botState

      The Doeblin exhaustion data for shifted CRRA, with no assumption on the income process.

      The exhaustion data, without IidIncome #

      exists_exhaust_of_impatient (the capped worst-state decline argument) also supplies the decline half from impatience, but it gets there by comparing income states: consumption is lowest where income is lowest, which needs IidIncome so that the continuation does not depend on today's state. The minimal-MPC route compares nothing. It is a statement about the budget and the Euler inequality at ONE state, so it holds whatever the income process does.

      What it costs instead is the two iterate-level hypotheses, which the Açıkgöz route asks for only at the fixed point.

      theorem LeanEconomics.IncomeFluctuation.crra_exists_exhaust_of_minMPC {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} {P : IncomeFluctuation Z assetFloor assetCap} {γ : ℝ} (hγ0 : 0 < γ) (hu : P.u = crraUtility γ) (hfl : assetFloor = 0) (hκ : 0 < P.minMPC γ) (hβ : 0 < ↑P.discount) (hβR : ↑P.discount * (1 + P.interest) < 1) (hpos : ∀ (n : ℕ) (z : Z), ∀ a ∈ Set.Icc 0 assetCap, 0 < P.consumptionFnOf (P.toExtended.bellman^[n] 0) z a) (hcap : ∀ (n : ℕ), ∀ a ∈ Set.Icc 0 assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) {z₀ : Z} {a₀ : ℝ} (ha₀ : 0 < a₀) (hle : a₀ ≤ assetCap) (hzero : ∀ a ∈ Set.Icc 0 a₀, P.policy (a, z₀) = 0) (hthr : (1 - P.minMPC γ) * P.income z₀ < (1 - (1 - P.minMPC γ) * (1 + P.interest)) * a₀) :
      ∃ (N : ℕ), (P.gBad z₀)^[N] P.topState = P.botState

      The Doeblin exhaustion data from the minimal MPC. Only the corner condition and one threshold inequality are left to the calibration — and no assumption is made about the income process.