Documentation

LeanPool.AiyagariEquilibrium.Models.IncomeFluctuationIterate

Positivity and monotonicity along the iteration #

Carroll and Kimball's induction step needs the continuation's consumption function to be positive, concave and nondecreasing. Concavity is the induction hypothesis. This file proves positivity and consumption monotonicity against arbitrary continuations, together with saving bounds uniform over the iteration. Saving-policy monotonicity is shared with the fixed-point case in IncomeFluctuationMonotone.

The exchange arguments use objROf, the real objective against an arbitrary continuation. Continuation value depends on chosen saving and the income state, never on current assets, so shifting household plans between asset levels cancels the continuation terms.

Positivity #

theorem LeanEconomics.IncomeFluctuation.consumptionFnOf_pos {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hd : P.Unbounded) (v : BoundedContinuousFunction (ℝ × Z) ℝ) {z : Z} {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) :
0 < P.consumptionFnOf v z a

Consumption never vanishes at the optimum, whatever the continuation. With utility unbounded below the reward at zero consumption is ⊥, and the optimum is a real number.

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

Consumption is positive at the optimum against every continuation with concave slices. The induction sees the iterates, not the value function, so this is what it needs. With utility unbounded below it is automatic; for the bounded CES family it is earned from a marginal Inada condition, exactly as PositiveConsumption is.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem LeanEconomics.IncomeFluctuation.positiveConsumptionAll_of_rich {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hrich : assetCap - assetFloor < P.minConsumption) :

    Positive consumption for free, when the cap is narrow relative to income. If the whole asset range is worth less than one period's minimum consumption, no feasible saving can exhaust resources, so consumption is positive whatever the continuation. Utilities with FINITE marginal value at zero — CARA, shifted CRRA — have no Inada condition to appeal to, and this is the alternative: keep the household away from zero consumption by the budget rather than by the preferences.

    Monotonicity of the consumption function #

    Saving stays strictly inside the feasible set #

    Positive consumption already keeps the saving below resources; what is left is the asset CAP, and that is the single quantitative input the induction still needs.

    theorem LeanEconomics.IncomeFluctuation.policyOf_lt_maxSaving {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (hpc : P.PositiveConsumptionAll) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ConcaveSlices assetFloor assetCap v) {a : ℝ} {z : Z} (ha : a ∈ Set.Icc assetFloor assetCap) (hcap : P.policyOf v (a, z) < assetCap) :
    P.policyOf v (a, z) < P.maxSaving (a, z)
    theorem LeanEconomics.IncomeFluctuation.policyOf_lt_maxSaving_of_pos {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {a : ℝ} {z : Z} (hc : 0 < P.consumptionFnOf v z a) (hcap : P.policyOf v (a, z) < assetCap) :
    P.policyOf v (a, z) < P.maxSaving (a, z)

    The same, with positivity supplied only at the continuation in hand. Utilities with finite marginal value at zero have no PositiveConsumptionAll, but they do have positivity against the continuations the iteration produces.

    The oscillation of a continuation #

    2 ‖v‖ is the wrong bound on the continuation's spread: it is not translation-invariant, and for CES — where utility is bounded and the level of v is large compared with its variation — it is far too crude. oscGap is the right one, and what it bounds is the OSCILLATION. This section carries that along the iteration.

    At a zero borrowing limit the spread is CRRAConstants.oscGap.

    theorem LeanEconomics.IncomeFluctuation.oscOn_zero {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) :
    P.OscOn 0 0
    theorem LeanEconomics.IncomeFluctuation.oscOn_bellman {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v : BoundedContinuousFunction (ℝ × Z) ℝ} {G : ℝ} (h : P.OscOn v G) :

    The Bellman operator adds the reward's spread and contracts the continuation's.

    theorem LeanEconomics.IncomeFluctuation.oscOn_iterate {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) (n : ℕ) :

    Every iterate from zero oscillates by at most oscGap.

    A uniform bound on saving, and hence on the cap #

    The last input is quantitative: the household must not want to save all the way to the imposed ceiling. policy_le_of_marginal_bound does this at the fixed point; the same deviation — save half as far above the borrowing limit — works against any continuation, with ‖v‖ in place of ‖V‖. The iterates are uniformly bounded because the Bellman operator adds at most the reward and contracts what it inherits, so one calibration inequality covers the whole iteration.

    The Bellman operator adds at most the reward and contracts what it inherits.

    The iterates are uniformly bounded, so one calibration covers them all.

    Carroll and Kimball, assembled along the iteration #

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFnOf_iterates_of_crra {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hpc : P.PositiveConsumptionAll) (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) (hslack : ∀ (n : ℕ), ∀ a ∈ Set.Icc assetFloor assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (n : ℕ) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFnOf (P.toExtended.bellman^[n] 0) z)

    Carroll and Kimball (1996) for CRRA. The consumption function is concave.

    Everything is now proved except the asset cap: hslack says the household never wants to save all the way to the imposed ceiling, at any stage of the iteration. That is the artefact the cap always was — crra_policy_lt_assetCap discharges it at the fixed point by calibration, and policy_assetCap_of_patient shows it is exactly β (1 + r) < 1 that makes it true.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFn_of_crra {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ : ℝ} (hpc : P.PositiveConsumptionAll) (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) (hslack : ∀ (n : ℕ), ∀ a ∈ Set.Icc assetFloor assetCap, ∀ (z : Z), P.policyOf (P.toExtended.bellman^[n] 0) (a, z) < assetCap) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFn z)

    Carroll and Kimball for CRRA, at the fixed point.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFn_of_marginal {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ m : ℝ} (hpc : P.PositiveConsumptionAll) (hγ0 : 0 < γ) (hβ : 0 < ↑P.discount) (hu : P.u = crraUtility γ) (hm : 0 < m) (hmarg : ∀ (c d : ℝ), d ∈ P.dom → d ≤ c → c ≤ P.maxConsumption → m * (c - d) ≤ P.u c - P.u d) (hcap : assetFloor + 4 * ↑P.discount * (max |P.toExtended.rewardMin| |P.toExtended.rewardMax| / (1 - ↑P.discount)) / m < assetCap) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFn z)

    Carroll and Kimball (1996) for CRRA, from a calibration. Beyond CRRA utility and marginal utility unbounded at zero, the only hypothesis left is one inequality: the asset cap must sit above the uniform bound on saving that the marginal bound m produces. Nothing about the borrowing limit, and nothing about interiority.

    That inequality is the cap being an artefact, which is what it was always meant to be: by policy_assetCap_of_patient it is exactly impatience that makes it true.

    Positive consumption for the bounded family #

    With utility unbounded below, consumption is positive because zero consumption is worth ⊥. With CES and γ < 1 it is not: zero consumption is admissible and the floor has to be earned from the MARGIN, which is what ConsumptionFloor does at the fixed point. The induction sees the iterates, so the same argument is run against an arbitrary continuation — and it goes through unchanged, because it only ever used concavity and boundedness of the continuation.

    Positive consumption against every continuation, for the bounded family.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFn_of_bounded_crra {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {γ m : ℝ} (hγ0 : 0 < γ) (hγ1 : γ < 1) (hβ : 0 < ↑P.discount) (hb : P.Bounded) (hu : P.u = crraUtility γ) (hm : 0 < m) (hmarg : ∀ (c d : ℝ), d ∈ P.dom → d ≤ c → c ≤ P.maxConsumption → m * (c - d) ≤ P.u c - P.u d) (hcap : assetFloor + 4 * ↑P.discount * (max |P.toExtended.rewardMin| |P.toExtended.rewardMax| / (1 - ↑P.discount)) / m < assetCap) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFn z)

    Carroll and Kimball for the BOUNDED CES family, 0 < γ < 1, where utility does not fall to -∞ and positivity of consumption has to be earned.

    The multiplicative CES bound on saving #

    policyOf_le_of_marginal_bound prices the deviation against the LEVEL of the continuation, and for CES that is hopeless: at the cesWitness parameters it gives a bound about six times the asset cap. The fix is the one crra_policy_le_mul makes at the fixed point — deviate to a FRACTION θ of the saving rather than half of it, and price the extra consumption at the margin where it lands. The bound then involves the continuation's OSCILLATION, not its level, and it is proportional to consumption rather than constant.

    theorem LeanEconomics.IncomeFluctuation.crra_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 : 0 < θ) (hθ1 : θ < 1) (hu : P.u = crraUtility γ) (hpc : P.PositiveConsumptionAll) {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) :
    P.policyOf v (a, z) - assetFloor ≤ ↑P.discount * G / θ * (P.consumptionFnOf v z a + (1 - θ) * (P.policyOf v (a, z) - assetFloor)) ^ γ

    The proportional CES bound on saving, against an arbitrary continuation.

    theorem LeanEconomics.IncomeFluctuation.crra_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 : 0 < θ) (hθ1 : θ < 1) (hu : P.u = crraUtility γ) (hpc : P.PositiveConsumptionAll) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ConcaveSlices assetFloor assetCap v) (hG : 0 ≤ G) (hosc : P.OscOn v G) (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, against an arbitrary continuation. The hypothesis is the one crra_policy_lt_assetCap carries at the fixed point, so the calibrations already proved for the CES witnesses discharge it.

    theorem LeanEconomics.IncomeFluctuation.concaveOn_consumptionFn_of_oscSpread {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 : 0 < θ) (hθ1 : θ < 1) (hβ : 0 < ↑P.discount) (hb : P.Bounded) (hu : P.u = crraUtility γ) (hlt : ↑P.discount * P.oscSpread / θ * (P.maxIncome + (1 + P.interest - θ) * assetCap - (1 - θ) * assetFloor) ^ γ < assetCap - assetFloor) (z : Z) :
    ConcaveOn ℝ (Set.Icc assetFloor assetCap) (P.consumptionFn z)

    Carroll and Kimball for the bounded CES family, at the witnesses' own calibration. The cap hypothesis is exactly crra_policy_lt_assetCap's, with oscSpread for oscGap — the same number at a zero borrowing limit.

    A slope bound from the OSCILLATION rather than the level #

    contSlopeConstOf prices the continuation's slope by ‖v‖, which is what the CRRA arguments had to hand. For utilities whose marginal value at zero is FINITE — CARA, and shifted CRRA with a subsistence level — the consumption floor has to beat that slope, and the level is far too crude a bound to beat. The oscillation is the right measure and it is the one the iterates control (oscOn_iterate). The shared slope and consumption-floor arguments in ConsumptionFloor use this oscillation directly; norm bounds are specializations.

    A consumption floor from a FINITE marginal bound #

    exists_consumptionFnOf_floor_of_marginalInada needs marginal utility to explode at zero, which excludes every HARA member except pure CRRA. What the argument actually uses is that the marginal value of consumption near zero beats the discounted slope of the continuation, and for a finite marginal bound M that is an inequality to check rather than a triviality.

    theorem LeanEconomics.IncomeFluctuation.consumptionFnOf_pos_of_marginal {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {M G : ℝ} (hM : MarginalBoundOn P.dom P.u M) (hG : 0 ≤ G) {v : BoundedContinuousFunction (ℝ × Z) ℝ} (hv : ConcaveSlices assetFloor assetCap v) (hosc : P.OscOn v G) (hlt : ↑P.discount * P.oscSlopeConst G < M) (z : Z) {a : ℝ} (ha : a ∈ Set.Icc assetFloor assetCap) :
    0 < P.consumptionFnOf v z a

    Positive consumption from a finite marginal bound, against every continuation with concave slices and oscillation at most G.

    Single crossing in the continuation #

    Two continuations at the SAME state, ordered by increasing differences. This is policy_le_of_cont_increasingDifferences of IncomeFluctuationRateMonotone read against arbitrary continuations rather than at the fixed point, and it is what carries Light's step 5 along the iteration: the induction hypothesis is exactly increasing differences of the two iterates.

    Increasing differences between two continuations, in the same economy.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Increasing differences slice by slice, between two bounded continuous functions on the state space. This is the property the induction of Light's step 5 carries along the iteration: it mentions no economy, so it makes sense between the iterates of two DIFFERENT economies, and it is closed under pointwise limits.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem LeanEconomics.IncomeFluctuation.incDiffSlices_zero {Z : Type u_1} [TopologicalSpace Z] (assetFloor assetCap : ℝ) :
        IncDiffSlices assetFloor assetCap 0 0
        theorem LeanEconomics.IncomeFluctuation.contOfIncreasingDifferences_of_slices {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v w : BoundedContinuousFunction (ℝ × Z) ℝ} (h : IncDiffSlices assetFloor assetCap v w) :

        It suffices to have increasing differences slice by slice in the continuations themselves.

        theorem LeanEconomics.IncomeFluctuation.policyOf_le_of_contOf_increasingDifferences {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v w : BoundedContinuousFunction (ℝ × Z) ℝ} (hw : ConcaveSlices assetFloor assetCap w) (hid : P.ContOfIncreasingDifferences v w) {a : ℝ} {z : Z} (ha : a ∈ Set.Icc assetFloor assetCap) :
        P.policyOf v (a, z) ≤ P.policyOf w (a, z)

        Single crossing in the continuation. A household whose continuation has increasing differences over another's saves at least as much, at every state. No derivative: the exchange argument turns the two optimality comparisons into a sandwich that increasing differences closes.

        theorem LeanEconomics.IncomeFluctuation.consumptionFnOf_le_of_contOf_increasingDifferences {Z : Type u_1} [Fintype Z] [Nonempty Z] [TopologicalSpace Z] [DiscreteTopology Z] {assetFloor assetCap : ℝ} (P : IncomeFluctuation Z assetFloor assetCap) {v w : BoundedContinuousFunction (ℝ × Z) ℝ} (hw : ConcaveSlices assetFloor assetCap w) (hid : P.ContOfIncreasingDifferences v w) {a : ℝ} {z : Z} (ha : a ∈ Set.Icc assetFloor assetCap) :

        Consumption is correspondingly ordered the other way.