# 42. Ramsey Plans, Time Inconsistency, Sustainable Plans#

In addition to what’s in Anaconda, this lecture will need the following libraries:

```
!pip install --upgrade quantecon
```

## Show code cell output

```
Requirement already satisfied: quantecon in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (0.7.2)
```

```
Requirement already satisfied: numba>=0.49.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (0.60.0)
Requirement already satisfied: numpy>=1.17.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.26.4)
Requirement already satisfied: requests in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (2.31.0)
Requirement already satisfied: scipy>=1.5.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.11.4)
Requirement already satisfied: sympy in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.12)
Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from numba>=0.49.0->quantecon) (0.43.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2024.2.2)
Requirement already satisfied: mpmath>=0.19 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from sympy->quantecon) (1.3.0)
```

## 42.1. Overview#

This lecture describes several linear-quadratic versions of a model that Guillermo Calvo [Calvo, 1978] used to illustrate the **time inconsistency** of optimal government
plans.

Like Chang [Chang, 1998], we use these models as laboratories in which to explore consequences of timing protocols for government decision making.

The models focus attention on intertemporal tradeoffs between

welfare benefits that anticipations of future deflation generate by decreasing costs of holding real money balances and thereby increasing a representative agent’s

*liquidity*, as measured by his or her holdings of real money balances, andcosts associated with the distorting taxes that the government must levy in order to acquire the paper money that it will destroy in order to generate anticipated deflation

The models feature

rational expectations

several explicit timing protocols

costly government actions at all dates \(t \geq 1\) that increase household utilities at dates before \(t\)

sets of Bellman equations, one set for each timing protocol

for example, in a timing protocol used to pose a

**Ramsey plan**, a government chooses an infinite sequence of money supply growth rates once and for all at time \(0\).in this timing protocol, there are two value functions and associated Bellman equations, one that expresses a representative private expectation of future inflation as a function of current and future government actions, another that describes the value function of a Ramsey planner

in other timing protocols, other Bellman equations and associated value functions will appear

A theme of this lecture is that timing protocols affect outcomes.

We’ll use ideas from papers by Cagan [Cagan, 1956], Calvo [Calvo, 1978], Stokey [Stokey, 1989], [Stokey, 1991], Chari and Kehoe [Chari and Kehoe, 1990], Chang [Chang, 1998], and Abreu [Abreu, 1988] as well as from chapter 19 of [Ljungqvist and Sargent, 2018].

In addition, we’ll use ideas from linear-quadratic dynamic programming described in Linear Quadratic Control as applied to Ramsey problems in Stackelberg problems.

We specify model fundamentals in ways that allow us to use linear-quadratic discounted dynamic programming to compute an optimal government plan under each of our timing protocols.

A sister lecture Machine Learning a Ramsey Plan studies some of the same models but does not use dynamic programming.

Instead it uses a **machine learning** approach that does not explicitly recognize the recursive structure structure of the Ramsey problem that Chang [Chang, 1998] saw and that we exploit in this lecture.

In addition to what’s in Anaconda, this lecture will use the following libraries:

```
!pip install --upgrade quantecon
```

## Show code cell output

```
Requirement already satisfied: quantecon in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (0.7.2)
```

```
Requirement already satisfied: numba>=0.49.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (0.60.0)
Requirement already satisfied: numpy>=1.17.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.26.4)
Requirement already satisfied: requests in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (2.31.0)
Requirement already satisfied: scipy>=1.5.0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.11.4)
```

```
Requirement already satisfied: sympy in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from quantecon) (1.12)
Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from numba>=0.49.0->quantecon) (0.43.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from requests->quantecon) (2024.2.2)
Requirement already satisfied: mpmath>=0.19 in /home/runner/miniconda3/envs/quantecon/lib/python3.11/site-packages (from sympy->quantecon) (1.3.0)
```

We’ll start with some imports:

```
import numpy as np
from quantecon import LQ
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import pandas as pd
from IPython.display import display, Math
```

## 42.2. Model Components#

There is no uncertainty.

Let:

\(p_t\) be the log of the price level

\(m_t\) be the log of nominal money balances

\(\theta_t = p_{t+1} - p_t\) be the net rate of inflation between \(t\) and \(t+1\)

\(\mu_t = m_{t+1} - m_t\) be the net rate of growth of nominal balances

The demand for real balances is governed by a perfect foresight version of a Cagan [Cagan, 1956] demand function for real balances:

for \(t \geq 0\).

Equation (42.1) asserts that the demand for real balances is inversely related to the public’s expected rate of inflation, which equals the actual rate of inflation because there is no uncertainty here.

(When there is no uncertainty, an assumption of **rational expectations** that becomes equivalent to **perfect foresight**).

(See [Sargent, 1977] for a rational expectations version of the model when there is uncertainty.)

Subtracting the demand function (42.1) at time \(t\) from the demand function at \(t+1\) gives:

or

Because \(\alpha > 0\), \(0 < \frac{\alpha}{1+\alpha} < 1\).

**Definition:** For scalar \(b_t\), let \(L^2\) be the space of sequences
\(\{b_t\}_{t=0}^\infty\) satisfying

We say that a sequence that belongs to \(L^2\) is **square summable**.

When we assume that the sequence \(\vec \mu = \{\mu_t\}_{t=0}^\infty\) is square summable and we require that the sequence \(\vec \theta = \{\theta_t\}_{t=0}^\infty\) is square summable, the linear difference equation (42.2) can be solved forward to get:

**Insight:** In the spirit of Chang [Chang, 1998], equations (42.1) and (42.3) show that \(\theta_t\) intermediates
how choices of \(\mu_{t+j}, \ j=0, 1, \ldots\) impinge on time \(t\)
real balances \(m_t - p_t = -\alpha \theta_t\).

An equivalence class of continuation money growth sequences \(\{\mu_{t+j}\}_{j=0}^\infty\) deliver the same \(\theta_t\).

We shall use this insight to help us simplify our analsis of alternative government policy problems.

That future rates of money creation influence earlier rates of inflation makes timing protocols matter for modeling optimal government policies.

When \(\vec \theta = \{\theta_t\}_{t=0}^\infty\) is square summable, we can represent restriction (42.3) as

or

Even though \(\theta_0\) is to be determined by our model and so is not an initial condition, as it ordinarily would be in the state-space model described in our lecture on Linear Quadratic Control, we nevertheless write the model in the state-space form (42.5).

We use form (42.5) because we want to apply an approach described in our lecture on Stackelberg problems.

Notice that \(\frac{1+\alpha}{\alpha} > 1\) is an eigenvalue of transition matrix \(A\) that threatens to destabilize the state-space system.

The Ramsey planner will design a decision rule for \(\mu_t\) that stabilizes the system.

The government values a representative household’s utility of real balances at time \(t\) according to the utility function

The money demand function (42.1) and the utility function (42.6) imply that

The “bliss level” of real balances is \(\frac{u_1}{u_2}\) and the inflation rate that attains it is \(-\frac{u_1}{u_2 \alpha}\).

## 42.3. Friedman’s Optimal Rate of Deflation#

According to (42.7), the “bliss level” of real balances is \(\frac{u_1}{u_2}\) and the inflation rate that attains it is

Milton Friedman recommended that the government withdraw and destroy money at a rate that implies an inflation rate given by (42.8).

In our setting, that could be accomplished by setting

where \(\theta^*\) is given by equation (42.8).

To deduce this recommendation, Milton Friedman assumed that the taxes that government must impose in order to acquire money at rate \(\mu_t\) do not distort economic decisions.

for example, perhaps the government can impose lump sum taxes that distort no decisions by private agents

## 42.4. Calvo’s Distortion of Friedman’s optimal Deflation Rate#

The starting point of Calvo [Calvo, 1978] and Chang [Chang, 1998] is that such lump sum taxes are not available.

Instead, the government acquires money by levying taxes that distort decisions and thereby impose costs on the representative consumer.

In the models of Calvo [Calvo, 1978] and Chang [Chang, 1998], the government takes those costs tax-distortion costs into account.

It balances the costs of imposing the distorting taxes needed to acquire the money that it destroys in order to generate deflation against the benefits that expected deflation generates by raising the representative households’ holdings of real balances.

Let’s see how the government does that in our version of the models of Calvo [Calvo, 1978] and Chang [Chang, 1998].

Via equation (42.3), a government plan \(\vec \mu = \{\mu_t \}_{t=0}^\infty\) leads to a sequence of inflation outcomes \(\vec \theta = \{ \theta_t \}_{t=0}^\infty\).

We assume that the government incurs social costs \(\frac{c}{2} \mu_t^2\) at \(t\) when it changes the stock of nominal money balances at rate \(\mu_t\).

Therefore, the one-period welfare function of a benevolent government is:

The government’s time \(0\) value is

where \(\beta \in (0,1)\) is a discount factor.

The government’s time \(t\) continuation value \(v_t\) is

We can represent the dependence of \(v_0\) on \((\vec \theta, \vec \mu)\) recursively via the difference equation

It is useful to evaluate (42.12) under a time-invariant money growth rate \(\mu_t = \bar \mu\) that according to equation (42.3) would bring forth a constant inflation rate equal to \(\bar \mu\).

Under that policy,

for all \(t \geq 0\).

Values of \(V(\bar \mu)\) computed according to formula (42.13) for three different values of \(\bar \mu\) will play important roles below.

\(V(\mu^{MP})\) is the value of attained by the government in a

**Markov perfect equilibrium**\(V(\mu^{CR})\) is the value of attained by the government in a

**constrained to constant \(\mu\) equilibrium**\(V(\mu^R_\infty)\) is the limiting value attained by a continuation Ramsey planner under a Ramsey plan.

We shall see that \(V(\mu^R_\infty)\) is a worst continuation value attained along a Ramsey plan

## 42.5. Structure#

The following structure is induced by a representative agent’s behavior as summarized by the demand function for money (42.1) that leads to equation (42.3), which tells how future settings of \(\mu\) affect the current value of \(\theta\).

Equation (42.3) maps a **policy** sequence of money growth rates
\(\vec \mu =\{\mu_t\}_{t=0}^\infty \in L^2\) into an inflation sequence
\(\vec \theta = \{\theta_t\}_{t=0}^\infty \in L^2\).

These, in turn, induce a discounted value to a government sequence \(\vec v = \{v_t\}_{t=0}^\infty \in L^2\) that satisfies the recursion

where we have called \(s(\theta_t, \mu_t) = r(x_t, \mu_t)\), as in (42.11).

Thus, a triple of sequences \((\vec \mu, \vec \theta, \vec v)\) depends on a sequence \(\vec \mu \in L^2\).

At this point \(\vec \mu \in L^2\) is an arbitrary exogenous policy.

A theory of government
decisions will make \(\vec \mu\) endogenous, i.e., a theoretical *output* instead of an *input*.

## 42.6. Intertemporal Structure#

Criterion function (42.11) and the constraint system (42.5) exhibit the following structure:

Setting the money growth rate \(\mu_t \neq 0\) imposes costs \(\frac{c}{2} \mu_t^2\) at time \(t\) and at no other times; but

The money growth rate \(\mu_t\) affects the government’s one-period utilities at all dates \(s = 0, 1, \ldots, t\).

This structure sets the stage for the emergence of a time-inconsistent
optimal government plan under a **Ramsey** timing protocol

it is also called a

**Stackelberg**timing protocol.

We’ll study outcomes under a Ramsey timing protocol.

We’ll also study outcomes under other timing protocols.

## 42.7. Four Timing Protocols#

We consider four models of government policy making that differ in

*what*a policymaker chooses, either a sequence \(\vec \mu\) or just \(\mu_t\) in a single period \(t\).*when*a policymaker chooses, either once and for all at time \(0\), or at some time or times \(t \geq 0\).what a policymaker

*assumes*about how its choice of \(\mu_t\) affects the representative agent’s expectations about earlier and later inflation rates.

In two of our models, a single policymaker chooses a sequence \(\{\mu_t\}_{t=0}^\infty\) once and for all, knowing how \(\mu_t\) affects household one-period utilities at dates \(s = 0, 1, \ldots, t-1\)

these two models thus employ a

**Ramsey**or**Stackelberg**timing protocol.

In two other models, there is a sequence of policymakers, each of whom sets \(\mu_t\) at one \(t\) only.

a time \(t\) policymaker cares only about \(v_t\) and ignores effects that its choice of \(\mu_t\) has on \(v_s\) at dates \(s = 0, 1, \ldots, t-1\).

The four models differ with respect to timing protocols, constraints on government choices, and government policymakers’ beliefs about how their decisions affect the representative agent’s beliefs about future government decisions.

The models are distinguished by their having either

A single Ramsey planner that chooses a sequence \(\{\mu_t\}_{t=0}^\infty\) once and for all at time \(0\); or

A single Ramsey planner that chooses a sequence \(\{\mu_t\}_{t=0}^\infty\) once and for all at time \(0\) subject to the constraint that \(\mu_t = \mu\) for all \(t \geq 0\); or

A sequence indexed by \(t =0, 1, 2, \ldots\) of separate policymakers

a time \(t\) policymaker chooses \(\mu_t\) only and forecasts that future government decisions are unaffected by its choice; or

A sequence of separate policymakers in which

a time \(t\) policymaker chooses only \(\mu_t\) but believes that its choice of \(\mu_t\) shapes the representative agent’s beliefs about future rates of money creation and inflation, and through them, future government actions.

The first model describes a **Ramsey plan** chosen by a **Ramsey planner**

The second model describes a **Ramsey plan** chosen by a *Ramsey planner constrained to choose a time-invariant \(\mu_t\)*

The third model describes a **Markov perfect equilibrium**

The fourth model describes a **credible government policy** also known as a **sustainable plan**

The relationship between outcomes in the first (Ramsey) timing protocol and the fourth timing protocol and belief structure is the subject of a literature on **sustainable** or **credible** public policies (Chari and Kehoe [Chari and Kehoe, 1990]
[Stokey, 1989], and Stokey [Stokey, 1991]).

We’ll discuss that topic later in this lecture.

We’ll begin with the timing protocol associated with a Ramsey plan.

## 42.8. A Ramsey Planner#

Here we consider a Ramsey planner that chooses \(\{\mu_t, \theta_t\}_{t=0}^\infty\) to maximize (42.11) subject to the law of motion (42.5).

We can split this problem into two stages, as in Stackelberg problems and [Ljungqvist and Sargent, 2018] Chapter 19.

In the first stage, we take the initial inflation rate \(\theta_0\) as given and solve what looks like an ordinary LQ discounted dynamic programming problem.

In the second stage, we choose an optimal initial inflation rate \(\theta_0\).

Define a feasible set of \((\overrightarrow x_1, \overrightarrow \mu_0)\) sequences, both of which must belong to \(L^2\):

### 42.8.1. Subproblem 1#

The value function

satisfies the Bellman equation

subject to:

As in Stackelberg problems, we can map this problem into a linear-quadratic control problem and deduce an optimal value function \(J(x)\).

Guessing that \(J(x) = - x'Px\) and substituting into the Bellman equation gives rise to the algebraic matrix Riccati equation:

and an optimal decision rule

where

The QuantEcon LQ class solves for \(F\) and \(P\) given inputs \(Q, R, A, B\), and \(\beta\).

The value function for a (continuation) Ramsey planner is

or

or

where

The Ramsey plan for setting \(\mu_t\) is

or

where \(b_0 = -F_1, b_1 = - F_2\) and \(F\) satisfies equation (42.16),

The Ramsey planner’s decision rule for updating \(\theta_{t+1}\) is

where \(\begin{bmatrix} d_0 & d_1 \end{bmatrix}\) is the second row of the closed-loop matrix \(A - BF\) for computed in subproblem 1 above.

The linear quadratic control problem (42.15) satisfies regularity conditions that guarantee that \(A - BF \) is a stable matrix (i.e., its maximum eigenvalue is strictly less than \(1\) in absolute value).

Consequently, we are assured that

a stability condition that will play an important role.

It remains for us to describe how the Ramsey planner sets \(\theta_0\).

Subproblem 2 does that.

### 42.8.2. Subproblem 2#

The value of the Ramsey problem is

where \(V^R\) is the maximum value of \(v_0\) defined in equation (42.11).

We have taken the liberty of abusing notation slightly by writing \(J(x)\) as \(J(\theta)\)

notice that \(x = \begin{bmatrix} 1 \cr \theta \end{bmatrix}\), so \(\theta\) is the only component of \(x\) that can possibly vary

Value function \(J(\theta_0)\) satisfies

Maximizing \(J(\theta_0)\) with respect to \(\theta_0\) yields the FOC:

which implies

## 42.9. Representation of Ramsey Plan#

The preceding calculations indicate that we can represent a Ramsey plan \(\vec \mu\) recursively with the following system created in the spirit of Chang [Chang, 1998]:

where \(b_0, b_1, g_0, g_1, g_2\) are positive parameters that we shall compute with Python code below.

From condition (42.20), we know that \(|d_1| < 1\).

To interpret system (42.21), think of the sequence
\(\{\theta_t\}_{t=0}^\infty\) as a sequence of
synthetic **promised inflation rates**.

For some purposes, we can think of these promised inflation rates just as computational devices for
generating a sequence \(\vec\mu\) of money growth rates that when substituted into equation (42.3) generate *actual* rates of inflation.

It can be verified that if we substitute a plan \(\vec \mu = \{\mu_t\}_{t=0}^\infty\) that satisfies these equations into equation (42.3), we obtain the same sequence \(\vec \theta\) generated by the system (42.21).

(Here an application of the Big \(K\), little \(k\) trick is again at work.)

Thus, within the Ramsey plan, **promised
inflation** equals **actual inflation**.

System (42.21) implies that under the Ramsey plan

Because \(d_1 \in (0,1)\), it follows from (42.22) that as \(t \to \infty\) \(\theta_t^R \) converges to

Furthermore, we shall see that \(\theta_t^R\) converges to \(\theta_\infty^R\) from above.

Meanwhile, \(\mu_t\) varies over time according to

Variation of \( \vec \mu^R, \vec \theta^R, \vec v^R \) over time are symptoms of time inconsistency.

The Ramsey planner reaps immediate benefits from promising lower inflation later to be achieved by costly distorting taxes.

These benefits are intermediated by reductions in expected inflation that precede the reductions in money creation rates that rationalize them, as indicated by equation (42.3).

## 42.10. Digression on Timeless Perspective#

As our subsequent calculations will verify, \( \vec \mu^R, \vec \theta^R, \vec v^R \) are each monotone sequences that are bounded below and converge from above to limiting values.

Some authors are fond of focusing only on these limiting values.

They justify that by saying that they are taking a **timeless perspective** that ignores the transient movements in \( \vec \mu^R, \vec \theta^R, \vec v^R \) that are destined eventually to fade away as \(\theta_t\) described by Ramsey plan system (42.21) converges from above.

the timeless perspective pretends that Ramsey plan was actually solved long ago, and that we are stuck with it.

### 42.10.1. Multiple roles of \(\theta_t\)#

The inflation rate \(\theta_t\) plays three roles simultaneously:

In equation (42.3), \(\theta_t\) is the actual rate of inflation between \(t\) and \(t+1\).

In equation (42.2) and (42.3), \(\theta_t\) is also the public’s expected rate of inflation between \(t\) and \(t+1\).

In system (42.21), \(\theta_t\) is a promised rate of inflation chosen by the Ramsey planner at time \(0\).

That the same variable \(\theta_t\) takes on these multiple roles brings insights about commitment and forward guidance, about whether the government follows or leads the market, and about dynamic or time inconsistency.

### 42.10.2. Time inconsistency#

As discussed in Stackelberg problems and Optimal taxation with state-contingent debt, a continuation Ramsey plan is not a Ramsey plan.

This is a concise way of characterizing the time inconsistency of a Ramsey plan.

The time inconsistency of a Ramsey plan has motivated other models of government decision making that, relative to a Ramsey plan, alter either

the timing protocol and/or

assumptions about how government decision makers think their decisions affect the representative agent’s beliefs about future government decisions

## 42.11. Constrained-to-Constant-Growth-Rate Ramsey Plan#

We now describe a model in which we restrict the Ramsey planner’s choice set.

Instead of choosing a sequence of money growth rates \(\vec \mu \in {\bf R}^2\), we restrict the government to choose a time-invariant money growth rate \(\bar \mu\).

We created this version of the model to highlight an aspect of a Ramsey plan associated with its time inconsistency, namely, the feature that optimal settings of the policy instrument vary over time.

Thus, instead of allowing the government at time \(0\) to choose a different \(\mu_t\) for each \(t \geq 0\), we now assume that a government at time \(0\) once and for all chooses a *constant* sequence \(\mu_t = \bar \mu\) for all \(t \geq 0\).

We assume that the government knows the perfect foresight outcome implied by equation (42.2) that \(\theta_t = \bar \mu\) when \(\mu_t = \bar \mu\) for all \(t \geq 0\).

The government chooses \(\bar \mu\) to maximize

where \(V(\bar \mu)\) is defined in equation (42.13).

We can express \(V^{CR}(\bar \mu)\) as

With the quadratic form (42.6) for the utility function \(U\), the maximizing \(\bar \mu\) is

The optimal value attained by a *constrained to constant \(\mu\)* Ramsey planner is

**Remark:** We have introduced the constrained-to-constant \(\mu\)
government in order eventually to highlight the time-variation of
\(\mu_t\) that is a telltale sign of a Ramsey plan’s **time inconsistency**.

## 42.12. Markov Perfect Governments#

We now describe yet another timing protocol.

In this one, there is a sequence of government policymakers.

A time \(t\) government chooses \(\mu_t\) and expects all future governments to set \(\mu_{t+j} = \bar \mu\).

This assumption mirrors an assumption made in this QuantEcon lecture: Markov Perfect Equilibrium.

When it sets \(\mu_t\), the government at \(t\) believes that \(\bar \mu\) is unaffected by its choice of \(\mu_t\).

According to equation (42.3), the time \(t\) rate of inflation is then

which expresses inflation \(\theta_t\) as a geometric weighted average of the money growth today \(\mu_t\) and money growth from tomorrow onward \(\bar \mu\).

Given \(\bar \mu\), the time \(t\) government chooses \(\mu_t\) to maximize:

where \(V(\bar \mu)\) is given by formula (42.13) for the time \(0\) value \(v_0\) of recursion (42.12) under a money supply growth rate that is forever constant at \(\bar \mu\).

Substituting (42.28) into (42.29) and expanding gives:

The first-order necessary condition for maximing \(Q(\mu_t, \bar \mu)\) with respect to \(\mu_t\) is:

Rearranging we get the time \(t\) government’s best response map

where

A **Markov Perfect Equilibrium** (MPE) outcome \( \mu^{MPE}\) is a fixed point of the best response map:

Calculating \(\mu^{MPE}\), we find

This can be simplified to

The value of a Markov perfect equilibrium is

or

where \(V(\cdot)\) is given by formula (42.13).

Under the Markov perfect timing protocol

a government takes \(\bar \mu\) as given when it chooses \(\mu_t\)

we equate \(\mu_t = \mu\) only

*after*we have computed a time \(t\) government’s first-order condition for \(\mu_t\).

## 42.13. Outcomes under Three Timing Protocols#

We want to compare outcome sequences \(\{ \theta_t,\mu_t \}\) under three timing protocols associated with

a standard Ramsey plan with its time varying \(\{ \theta_t,\mu_t \}\) sequences

a Markov perfect equilibrium

our nonstandard Ramsey plan in which the planner is restricted to choose a time-invariant \(\mu_t = \mu\) for all \(t \geq 0\).

We have computed closed form formulas for several of these outcomes, which we find it convenient to repeat here.

In particular, the constrained to constant inflation Ramsey inflation outcome is \(\mu^{CR}\), which according to equation (42.26) is

Equation (42.31) implies that the Markov perfect constant inflation rate is

According to equation (42.8), the bliss level of inflation that we associated with a Friedman rule is

**Proposition 1:** When \(c=0\), \(\theta^{MPE} = \theta^{CR} = \theta^*\) and
\(\theta_0^R = \theta_\infty^R\).

The first two equalities follow from the preceding three equations.

We’ll illustrate the third equality that equates \(\theta_0^R\) to \( \theta_\infty^R\) with some quantitative examples below.

Proposition 1 draws attention to how a positive tax distortion parameter \(c\) alters the optimal rate of deflation that Milton Friedman financed by imposing a lump sum tax.

We’ll compute

\((\vec \theta^R, \vec \mu^R)\): ordinary time-varying Ramsey sequences

\((\theta^{MPE} = \mu^{MPE})\): Markov perfect equilibrium (MPE) fixed values

\((\theta^{CR} = \mu^{CR})\): fixed values associated with a constrained to time-invariant \(\mu\) Ramsey plan

\(\theta^*\): bliss level of inflation prescribed by a Friedman rule

We will create a class ChangLQ that solves the models and stores their values

```
class ChangLQ:
"""
Class to solve LQ Chang model
"""
def __init__(self, β, c, α=1, u0=1, u1=0.5, u2=3, T=1000, θ_n=200):
# Record parameters
self.α, self.u0, self.u1, self.u2 = α, u0, u1, u2
self.β, self.c, self.T, self.θ_n = β, c, T, θ_n
self.setup_LQ_matrices()
self.solve_LQ_problem()
self.compute_policy_functions()
self.simulate_ramsey_plan()
self.compute_θ_range()
self.compute_value_and_policy()
def setup_LQ_matrices(self):
# LQ Matrices
self.R = -np.array([[self.u0, -self.u1 * self.α / 2],
[-self.u1 * self.α / 2,
-self.u2 * self.α**2 / 2]])
self.Q = -np.array([[-self.c / 2]])
self.A = np.array([[1, 0], [0, (1 + self.α) / self.α]])
self.B = np.array([[0], [-1 / self.α]])
def solve_LQ_problem(self):
# Solve LQ Problem (Subproblem 1)
lq = LQ(self.Q, self.R, self.A, self.B, beta=self.β)
self.P, self.F, self.d = lq.stationary_values()
# Compute g0, g1, and g2 (41.16)
self.g0, self.g1, self.g2 = [-self.P[0, 0],
-2 * self.P[1, 0], -self.P[1, 1]]
# Compute b0 and b1 (41.17)
[[self.b0, self.b1]] = self.F
# Compute d0 and d1 (41.18)
self.cl_mat = (self.A - self.B @ self.F) # Closed loop matrix
[[self.d0, self.d1]] = self.cl_mat[1:]
# Solve Subproblem 2
self.θ_R = -self.P[0, 1] / self.P[1, 1]
# Find the bliss level of θ
self.θ_B = -self.u1 / (self.u2 * self.α)
def compute_policy_functions(self):
# Solve the Markov Perfect Equilibrium
self.μ_MPE = -self.u1 / ((1 + self.α) / self.α * self.c
+ self.α / (1 + self.α)
* self.u2 + self.α**2
/ (1 + self.α) * self.u2)
self.θ_MPE = self.μ_MPE
self.μ_CR = -self.α * self.u1 / (self.u2 * self.α**2 + self.c)
self.θ_CR = self.μ_CR
# Calculate value under MPE and CR economy
self.J_θ = lambda θ_array: - np.array([1, θ_array]) \
@ self.P @ np.array([1, θ_array]).T
self.V_θ = lambda θ: (self.u0 + self.u1 * (-self.α * θ)
- self.u2 / 2 * (-self.α * θ)**2
- self.c / 2 * θ**2) / (1 - self.β)
self.J_MPE = self.V_θ(self.μ_MPE)
self.J_CR = self.V_θ(self.μ_CR)
def simulate_ramsey_plan(self):
# Simulate Ramsey plan for large number of periods
θ_series = np.vstack((np.ones((1, self.T)), np.zeros((1, self.T))))
μ_series = np.zeros(self.T)
J_series = np.zeros(self.T)
θ_series[1, 0] = self.θ_R
[μ_series[0]] = -self.F.dot(θ_series[:, 0])
J_series[0] = self.J_θ(θ_series[1, 0])
for i in range(1, self.T):
θ_series[:, i] = self.cl_mat @ θ_series[:, i-1]
[μ_series[i]] = -self.F @ θ_series[:, i]
J_series[i] = self.J_θ(θ_series[1, i])
self.J_series = J_series
self.μ_series = μ_series
self.θ_series = θ_series
def compute_θ_range(self):
# Find the range of θ in Ramsey plan
θ_LB = min(min(self.θ_series[1, :]), self.θ_B)
θ_UB = max(max(self.θ_series[1, :]), self.θ_MPE)
θ_range = θ_UB - θ_LB
self.θ_LB = θ_LB - 0.05 * θ_range
self.θ_UB = θ_UB + 0.05 * θ_range
self.θ_range = θ_range
def compute_value_and_policy(self):
# Create the θ_space
self.θ_space = np.linspace(self.θ_LB, self.θ_UB, 200)
# Find value function and policy functions over range of θ
self.J_space = np.array([self.J_θ(θ) for θ in self.θ_space])
self.μ_space = -self.F @ np.vstack((np.ones(200), self.θ_space))
x_prime = self.cl_mat @ np.vstack((np.ones(200), self.θ_space))
self.θ_prime = x_prime[1, :]
self.CR_space = np.array([self.V_θ(θ) for θ in self.θ_space])
self.μ_space = self.μ_space[0, :]
# Calculate J_range, J_LB, and J_UB
self.J_range = np.ptp(self.J_space)
self.J_LB = np.min(self.J_space) - 0.05 * self.J_range
self.J_UB = np.max(self.J_space) + 0.05 * self.J_range
```

Let’s create an instance of ChangLQ with the following parameters:

```
clq = ChangLQ(β=0.85, c=2)
```

The following code plots value functions for a continuation Ramsey planner.

## Show code cell source

```
def compute_θs(clq):
"""
Method to compute θ and assign corresponding labels and colors
Here clq is an instance of ChangLQ
"""
θ_points = [clq.θ_B, clq.θ_series[1, -1],
clq.θ_CR, clq.θ_space[np.argmax(clq.J_space)],
clq.θ_MPE]
labels = [r"$\theta^*$", r"$\theta_\infty^R$",
r"$\theta^{CR}$", r"$\theta_0^R$",
r"$\theta^{MPE}$"]
θ_colors = ['r', 'C5', 'g', 'C0', 'orange']
return θ_points, labels, θ_colors
def plot_policy_functions(clq):
"""
Method to plot the policy functions over the relevant range of θ
Here clq is an instance of ChangLQ
"""
fig, ax = plt.subplots(figsize=(8, 6))
θ_points, labels, θ_colors = compute_θs(clq)
# Plot θ' function
ax.plot(clq.θ_space, clq.θ_prime,
label=r"$\theta'(\theta)$",
lw=2, alpha=0.5, color='blue')
ax.plot(clq.θ_space, clq.θ_space, 'k--', lw=2, alpha=0.7) # Identity line
# Plot μ function
ax.plot(clq.θ_space, clq.μ_space, lw=2,
label=r"$\mu(\theta)$",
color='green', alpha=0.5)
# Plot labels and points for μ function
μ_min, μ_max = min(clq.μ_space), max(clq.μ_space)
μ_range = μ_max - μ_min
offset = 0.02 * μ_range
for θ, label in zip(θ_points, labels):
ax.scatter(θ, μ_min - offset, 60, color='black', marker='v')
ax.annotate(label, xy=(θ, μ_min - offset),
xytext=(θ - 0.012 * clq.θ_range, μ_min + 0.01 * μ_range),
fontsize=14)
# Set labels and limits
ax.set_xlabel(r"$\theta$", fontsize=18)
ax.set_xlim([clq.θ_LB, clq.θ_UB])
ax.set_ylim([min(clq.θ_LB, μ_min) - 0.05 * clq.θ_range,
max(clq.θ_UB, μ_max) + 0.05 * clq.θ_range])
# Add legend
ax.legend(fontsize=14)
plt.tight_layout()
plt.show()
plot_policy_functions(clq)
```

The dotted line in the above graph is the 45-degree line.

The blue line shows the choice of \(\theta_{t+1} = \theta'\) chosen by a continuation Ramsey planner who inherits \(\theta_t = \theta\).

The green line shows a continuation Ramsey planner’s choice of \(\mu_t = \mu\) as a function of an inherited \(\theta_t = \theta\).

Dynamics under the Ramsey plan are confined to \(\theta \in \left[ \theta_\infty^R, \theta_0^R \right]\).

The blue and green lines intersect each other and the 45-degree line at \(\theta =\theta_{\infty}^R\).

Notice that for \(\theta \in \left(\theta_\infty^R, \theta_0^R \right]\)

\(\theta' < \theta\) because the blue line is below the 45-degree line

\(\mu > \theta \) because the green line is above the 45-degree line

It follows that under the Ramsey plan \(\{\theta_t\}\) and \(\{\mu_t\}\) both converge monotonically from above to \(\theta_\infty^R\).

The next code plots the Ramsey planner’s value function \(J(\theta)\), which we know is maximized at \(\theta^R_0\), the promised inflation that the Ramsey planner sets at time \(t=0\).

The figure also plots the limiting value \(\theta_\infty^R\) to which the promised inflation rate \(\theta_t\) converges under the Ramsey plan.

In addition, the figure indicates an MPE inflation rate \(\theta^{CR}\) and a bliss inflation \(\theta^*\).

## Show code cell source

```
def plot_value_function(clq):
"""
Method to plot the value function over the relevant range of θ
Here clq is an instance of ChangLQ
"""
fig, ax = plt.subplots()
ax.set_xlim([clq.θ_LB, clq.θ_UB])
ax.set_ylim([clq.J_LB, clq.J_UB])
# Plot value function
ax.plot(clq.θ_space, clq.J_space, lw=2)
plt.xlabel(r"$\theta$", fontsize=18)
plt.ylabel(r"$J(\theta)$", fontsize=18)
θ_points, labels, _ = compute_θs(clq)
# Add points for θs
for θ, label in zip(θ_points, labels):
ax.scatter(θ, clq.J_LB + 0.02 * clq.J_range,
60, color='black', marker='v')
ax.annotate(label,
xy=(θ, clq.J_LB + 0.01 * clq.J_range),
xytext=(θ - 0.01 * clq.θ_range,
clq.J_LB + 0.08 * clq.J_range),
fontsize=14)
plt.tight_layout()
plt.show()
plot_value_function(clq)
```

In the above graph, notice that \(\theta^* < \theta_\infty^R < \theta^{CR} < \theta_0^R < \theta^{MPE} .\)

In some subsequent calculations, we’ll use our Python code to study how gaps between these outcome vary depending on parameters such as the cost parameter \(c\) and the discount factor \(\beta\).

### 42.13.1. Ramsey Planner’s Value Function#

The next code plots the Ramsey Planner’s value function \(J(\theta)\) as well as the value function of a constrained Ramsey planner who must choose a constant \(\mu\).

A time-invariant \(\mu\) implies a time-invariant \(\theta\), we take the liberty of labeling this value function \(V^{CR}(\theta)\).

We’ll use the code to plot \(J(\theta)\) and \(V^{CR}(\theta)\) for several values of the discount factor \(\beta\) and the cost of \(\mu_t^2\) parameter \(c\).

In all of the graphs below, we disarm the Proposition 1 equivalence results by setting \(c >0\).

The graphs reveal interesting relationships among \(\theta\)’s associated with various timing protocols:

\(\theta_0^R < \theta^{MPE} \): the initial Ramsey inflation rate exceeds the MPE inflation rate

\(\theta_\infty^R < \theta^{CR} <\theta_0^R\): the initial Ramsey deflation rate, and the associated tax distortion cost \(c \mu_0^2\) is less than the limiting Ramsey inflation rate \(\theta_\infty^R\) and the associated tax distortion cost \(\mu_\infty^2\)

\(\theta^* < \theta^R_\infty\): the limiting Ramsey inflation rate exceeds the bliss level of inflation

\(J(\theta) \geq V^{CR}(\theta)\)

\(J(\theta_\infty^R) = V^{CR}(\theta_\infty^R)\)

Before doing anything else, let’s write code to verify our claim that \(J(\theta_\infty^R) = V^{CR}(\theta_\infty^R)\).

Here is the code.

```
θ_inf = clq.θ_series[1, -1]
np.allclose(clq.J_θ(θ_inf),
clq.V_θ(θ_inf))
```

```
True
```

So our claim that \(J(\theta_\infty^R) = V^{CR}(\theta_\infty^R)\)is verified numerically.

Since \(J(\theta_\infty^R) = V^{CR}(\theta_\infty^R)\) occurs at a tangency point at which \(J(\theta)\) is increasing in \(\theta\), it follows that

with strict inequality when \(c > 0\).

Thus, the limiting continuation value of continuation Ramsey planners is worse that the constant value attained by a constrained-to-constant \(\mu_t\) Ramsey planner.

Now let’s write some code to plot outcomes under our three timing protocols.

Then we’ll use the code to explore how key parameters affect outcomes.

## Show code cell source

```
def compare_ramsey_CR(clq, ax):
"""
Method to compare values of Ramsey and Constrained Ramsey (CR)
Here clq is an instance of ChangLQ
"""
# Calculate CR space range and bounds
min_CR, max_CR = min(clq.CR_space), max(clq.CR_space)
range_CR = max_CR - min_CR
l_CR, u_CR = min_CR - 0.05 * range_CR, max_CR + 0.05 * range_CR
# Set axis limits
ax.set_xlim([clq.θ_LB, clq.θ_UB])
ax.set_ylim([l_CR, u_CR])
# Plot J(θ) and v^CR(θ)
J_line, = ax.plot(clq.θ_space, clq.J_space, lw=2, label=r"$J(\theta)$")
CR_line, = ax.plot(clq.θ_space, clq.CR_space, lw=2, label=r"$V^{CR}(\theta)$")
# Mark key points
θ_points, labels, θ_colors = compute_θs(clq)
markers = [ax.scatter(θ, l_CR + 0.02 * range_CR, 60,
marker='v', label=label, color=color)
for θ, label, color in zip(θ_points, labels, θ_colors)]
# Plot lines at \theta_\infty^R, \theta^{CR}, and \theta^{MPE}
for i in [1, 2, -1]:
ax.axvline(θ_points[i], ymin=0.05, lw=2,
linestyle='--', color=θ_colors[i])
ax.axhline(y=clq.V_θ(θ_points[i]), linestyle='dotted',
lw=1.5, color=θ_colors[i], alpha=0.7)
v_CR = clq.V_θ(θ_points[2])
vcr_line = ax.axhline(y=v_CR, linestyle='--', lw=1.5,
color='black', alpha=0.7, label=r"$v^{CR}$")
return [J_line, CR_line, vcr_line], markers
def plt_clqs(clqs, axes):
"""
A helper function to plot two separate legends on top and bottom
Here clqs is a list of ChangLQ instances
axes is a list of Matplotlib axes
"""
line_handles, scatter_handles = {}, {}
for ax, clq in zip(axes, clqs):
lines, markers = compare_ramsey_CR(clq, ax)
ax.set_title(fr'$\beta$={clq.β}, $c$={clq.c}')
ax.tick_params(axis='x', rotation=45)
line_handles.update({line.get_label(): line for line in lines})
scatter_handles.update({marker.get_label(): marker for marker in markers})
# Collect handles and labels
line_handles = list(line_handles.values())
scatter_handles = list(scatter_handles.values())
# Create legends
fig = plt.gcf()
fig.legend(handles=line_handles,
labels=[line.get_label() for line in line_handles],
loc='upper center', ncol=4,
bbox_to_anchor=(0.5, 1.1), prop={'size': 12})
fig.legend(handles=scatter_handles,
labels=[marker.get_label() for marker in scatter_handles],
loc='lower center', ncol=5,
bbox_to_anchor=(0.5, -0.1), prop={'size': 12})
plt.tight_layout()
plt.show()
def generate_table(clqs, dig=3):
"""
A function to generate a table of θ values and display it using LaTeX
Here clqs is a list of ChangLQ instances and
dig is the number of digits to round to
"""
# Collect data
label_maps = {rf'$\beta={clq.β}, c={clq.c}$':
[f'{round(val, dig):.3f}' for val in compute_θs(clq)[0]] for clq in clqs}
labels = compute_θs(clqs[0])[1]
data_frame = pd.DataFrame(label_maps, index=labels)
# Generate table
columns = ' & '.join([f'\\text{{{col}}}' for col in data_frame.columns])
rows = ' \\\\\n'.join(
[' & '.join([f'\\text{{{label}}}'] + [f'{val}' for val in row])
for label, row in zip(data_frame.index, data_frame.values)])
latex_code = rf"""
\begin{{array}}{{{'c' * (len(data_frame.columns) + 1)}}}
& {columns} \\
\hline
{rows}
\end{{array}}
"""
display(Math(latex_code))
```

```
# Compare different β values
fig, axes = plt.subplots(1, 3, figsize=(12, 5))
β_values = [0.7, 0.8, 0.99]
clqs = [ChangLQ(β=β, c=2) for β in β_values]
plt_clqs(clqs, axes)
```

```
generate_table(clqs, dig=3)
```

The above graphs and table convey many useful things.

The horizontal dotted lines indicate values \(V(\mu_\infty^R), V(\mu^{CR}), V(\mu^{MPE}) \) of time-invariant money growth rates \(\mu_\infty^R, \mu^{CR}\) and \(\mu_{MPE}\), respectfully.

Notice how \(J(\theta)\) and \(V^{CR}(\theta)\) are tangent and increasing at \(\theta = \theta_\infty^R\), which implies that \(\theta^{CR} > \theta_\infty^R\) and \(J(\theta^{CR}) > J(\theta_\infty^R)\).

Notice how changes in \(\beta\) alter \(\theta_\infty^R\) and \(\theta_0^R\) but neither \(\theta^*, \theta^{CR}\), nor \(\theta^{MPE}\), in accord with formulas (42.8), (42.26), and (42.31), which imply that

But let’s see what happens when we change \(c\).

```
# Increase c to 100
fig, axes = plt.subplots(1, 3, figsize=(12, 5))
c_values = [1, 10, 100]
clqs = [ChangLQ(β=0.85, c=c) for c in c_values]
plt_clqs(clqs, axes)
```

```
generate_table(clqs, dig=4)
```

The above table and figures show how changes in \(c\) alter \(\theta_\infty^R\) and \(\theta_0^R\) as well as \(\theta^{CR}\) and \(\theta^{MPE}\), but not \(\theta^*\), again in accord with formulas (42.8), (42.26), and (42.31).

Notice that as \(c \) gets larger and larger, \(\theta_\infty^R, \theta_0^R\) and \(\theta^{CR}\) all converge to \(\theta^{MPE}\).

Now let’s watch what happens when we drive \(c\) toward zero.

```
# Decrease c towards 0
fig, axes = plt.subplots(1, 3, figsize=(12, 5))
c_limits = [1, 0.1, 0.01]
clqs = [ChangLQ(β=0.85, c=c) for c in c_limits]
plt_clqs(clqs, axes)
```

The above graphs indicate that as \(c\) approaches zero, \(\theta_\infty^R, \theta_0^R, \theta^{CR}\), and \(\theta^{MPE}\) all approach \(\theta^*\).

This makes sense, because it was by adding costs of distorting taxes that Calvo [Calvo, 1978] drove a wedge between Friedman’s optimal deflation rate and the inflation rates chosen by a Ramsey planner.

The following code plots sequences \(\vec \mu\) and \(\vec \theta\) prescribed by a Ramsey plan as well as the constant levels \(\mu^{CR}\) and \(\mu^{MPE}\).

The following graphs report values for the value function parameters \(g_0, g_1, g_2\), and the Ramsey policy function parameters \(b_0, b_1, d_0, d_1\) associated with the indicated parameter pair \(\beta, c\).

We’ll vary \(\beta\) while keeping a small \(c\).

After that we’ll study consequences of raising \(c\).

We’ll watch how the decay rate \(d_1\) governing the dynamics of \(\theta_t^R\) is affected by alterations in the parameters \(\beta, c\).

## Show code cell source

```
def plot_ramsey_MPE(clq, T=15):
"""
Method to plot Ramsey plan against Markov Perfect Equilibrium
Here clq is an instance of ChangLQ
"""
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
plots = [clq.θ_series[1, 0:T], clq.μ_series[0:T]]
MPEs = [clq.θ_MPE, clq.μ_MPE]
labels = [r"\theta", r"\mu"]
for ax, plot, MPE, label in zip(axes, plots, MPEs, labels):
ax.plot(plot, label=fr"${label}^R$")
ax.hlines(MPE, 0, T-1, colors='orange', label=fr"${label}^{{MPE}}$")
if label == r"\theta":
ax.hlines(clq.θ_B, 0, T-1, colors='r', label=r"$\theta^*$")
ax.hlines(clq.μ_CR, 0, T-1, colors='g', label=fr"${label}^{{CR}}$")
ax.set_xlabel(r"$t$", fontsize=14)
ax.set_ylabel(fr"${label}_t$", fontsize=16)
ax.legend(loc='upper right')
fig.suptitle(fr'$\beta$={clq.β}, $c$={clq.c}', fontsize=16)
plt.tight_layout(rect=[0, 0.1, 1, 1])
plt.show()
def generate_param_table(clq):
"""
Method to generate a table of parameters
Here clq is an instance of ChangLQ
"""
# Collect data
param_names = [r'$g_0$', r'$g_1$', r'$g_2$',
r'$b_0$', r'$b_1$', r'$d_0$', r'$d_1$']
params = [clq.g0, clq.g1, clq.g2,
clq.b0, clq.b1, clq.d0, clq.d1]
# Generate table
label = rf'$\beta={clq.β}, c={clq.c}$'
data_frame = pd.DataFrame({label: params}, index=param_names).round(2).T
columns = ' & '.join([f'\\text{{{col}}}' for col in data_frame.columns])
rows = ' \\\\\n'.join([' & '.join([f'\\text{{{index}}}'] + [
f'{val}' for val in row]) for index, row in data_frame.iterrows()])
latex_code = rf"""
\begin{{array}}{{{'c' * (len(data_frame.columns) + 1)}}}
& {columns} \\
\hline
{rows}
\end{{array}}
"""
display(Math(latex_code))
```

```
for β in β_values:
clq = ChangLQ(β=β, c=2)
generate_param_table(clq)
plot_ramsey_MPE(clq)
```

Notice how \(d_1\) changes as we raise the discount factor parameter \(\beta\).

Now let’s study how increasing \(c\) affects \(\vec \theta, \vec \mu\) outcomes.

```
# Increase c to 100
for c in c_values:
clq = ChangLQ(β=0.85, c=c)
generate_param_table(clq)
plot_ramsey_MPE(clq)
```

Evidently, increasing \(c\) causes the decay factor \(d_1\) to increase.

Next, let’s look at consequences of increasing the demand for real balances parameter \(\alpha\) from its default value \(\alpha=1\) to \(\alpha=4\).

```
# Increase c to 100
for c in [10, 100]:
clq = ChangLQ(α=4, β=0.85, c=c)
generate_param_table(clq)
plot_ramsey_MPE(clq)
```

The above panels for an \(\alpha = 4\) setting indicate that \(\alpha\) and \(c\) affect outcomes in interesting ways.

We leave it to the reader to explore consequences of other constellations of parameter values.

### 42.13.2. Time Inconsistency of Ramsey Plan#

The variation over time in \(\vec \mu\) chosen by the Ramsey planner is a symptom of time inconsistency.

The Ramsey planner reaps immediate benefits from promising lower inflation later to be achieved by costly distorting taxes.

These benefits are intermediated by reductions in expected inflation that precede the reductions in money creation rates that rationalize them, as indicated by equation (42.3).

A government authority offered the opportunity to ignore effects on past utilities and to reoptimize at date \(t \geq 1\) would, if allowed, want to deviate from a Ramsey plan.

Note

A constrained-to-constant-\(\mu\) Ramsey plan is time consistent by construction. So is a Markov perfect plan.

### 42.13.3. Implausibility of Ramsey Plan#

In settings in which governments actually choose sequentially, many economists regard a time inconsistent plan as implausible because of the incentives to deviate that are presented along the plan.

A way to state this reaction is to say that a Ramsey plan is not credible because there are persistent incentives for policymakers to deviate from it.

For that reason, the Markov perfect equilibrium concept attracts many economists.

A Markov perfect equilibrium plan is constructed to insure that government policymakers who choose sequentially do not want to deviate from it.

The *no incentive to deviate from the plan* property is what makes the Markov perfect equilibrium concept attractive.

### 42.13.4. Ramsey Plan Strikes Back#

Research by Abreu [Abreu, 1988], Chari and Kehoe [Chari and Kehoe, 1990] [Stokey, 1989], and Stokey [Stokey, 1991] discovered conditions under which a Ramsey plan can be rescued from the complaint that it is not credible.

They accomplished this by expanding the
description of a plan to include expectations about *adverse consequences* of deviating from
it that can serve to deter deviations.

We turn to such theories of *sustainable plans* next.

## 42.14. A Fourth Model of Government Decision Making#

In this model

the government does not set \(\{\mu_t\}_{t=0}^\infty\) once and for all at \(t=0\)

instead it sets \(\mu_t\) at time \(t\)

the representative agent’s forecasts of \(\{\mu_{t+j+1}, \theta_{t+j+1}\}_{j=0}^\infty\) respond to whether the government at \(t\)

*confirms*or*disappoints*its forecasts of \(\mu_t\) brought into period \(t\) from period \(t-1\).the government at each time \(t\) understands how the representative agent’s forecasts will respond to its choice of \(\mu_t\).

at each \(t\), the government chooses \(\mu_t\) to maximize a continuation discounted utility.

### 42.14.1. Government Decisions#

\(\vec \mu\) is chosen by a sequence of government decision makers, one for each \(t \geq 0\).

We assume the following within-period and between-period timing protocol for each \(t \geq 0\):

at time \(t-1\), private agents expect that the government will set \(\mu_t = \tilde \mu_t\), and more generally that it will set \(\mu_{t+j} = \tilde \mu_{t+j}\) for all \(j \geq 0\).

The forecasts \(\{\tilde \mu_{t+j}\}_{j \geq 0}\) determine a \(\theta_t = \tilde \theta_t\) and an associated log of real balances \(m_t - p_t = -\alpha\tilde \theta_t\) at \(t\).

Given those expectations and an associated \(\theta_t = \tilde \theta_t\), at \(t\) a government is free to set \(\mu_t \in {\bf R}\).

If the government at \(t\)

*confirms*the representative agent’s expectations by setting \(\mu_t = \tilde \mu_t\) at time \(t\), private agents expect the continuation government policy \(\{\tilde \mu_{t+j+1}\}_{j=0}^\infty\) and therefore bring expectation \(\tilde \theta_{t+1}\) into period \(t+1\).If the government at \(t\)

*disappoints*private agents by setting \(\mu_t \neq \tilde \mu_t\), private agents expect \(\{\mu^A_j\}_{j=0}^\infty\) as the continuation policy for \(t+1\), i.e., \(\{\mu_{t+j+1}\} = \{\mu_j^A \}_{j=0}^\infty\) and therefore expect an associated \(\theta_0^A\) for \(t+1\). Here \(\vec \mu^A = \{\mu_j^A \}_{j=0}^\infty\) is an alternative government plan to be described below.

### 42.14.2. Temptation to Deviate from Plan#

The government’s one-period return function \(s(\theta,\mu)\) described in equation (42.10) above has the property that for all \(\theta\)

This inequality implies that whenever the policy calls for the government to set \(\mu \neq 0\), the government could raise its one-period payoff by setting \(\mu =0\).

Disappointing private sector expectations in that way would increase the
government’s *current* payoff but would have adverse consequences for
*subsequent* government payoffs because the private sector would alter
its expectations about future settings of \(\mu\).

The *temporary* gain constitutes the government’s temptation to
deviate from a plan.

If the government at \(t\) is to resist the temptation to raise its current payoff, it is only because it forecasts adverse consequences that its setting of \(\mu_t\) would bring for continuation government payoffs via alterations in the private sector’s expectations.

## 42.15. Sustainable or Credible Plan#

We call a plan \(\vec \mu\) **sustainable** or **credible** if at
each \(t \geq 0\) the government chooses to confirm private
agents’ prior expectation of its setting for \(\mu_t\).

The government will choose to confirm prior expectations only if the
long-term *loss* from disappointing private sector expectations –
coming from the government’s understanding of the way the private sector
adjusts its expectations in response to having its prior
expectations at \(t\) disappointed – outweigh the short-term
*gain* from disappointing those expectations.

The theory of sustainable or credible plans assumes throughout that private sector expectations about what future governments will do are based on the assumption that governments at times \(t \geq 0\) always act to maximize the continuation discounted utilities that describe those governments’ purposes.

This aspect of the theory means that credible plans always come in *pairs*:

a credible (continuation) plan to be followed if the government at \(t\)

*confirms*private sector expectationsa credible plan to be followed if the government at \(t\)

*disappoints*private sector expectations

That credible plans come in pairs threaten to bring an explosion of plans to keep track of

each credible plan itself consists of two credible plans

therefore, the number of plans underlying one plan is unbounded

But Dilip Abreu showed how to render manageable the number of plans that must be kept track of.

The key is an object called a **self-enforcing** plan.

### 42.15.1. Abreu’s Self-Enforcing Plan#

A plan \(\vec \mu^A\) (here the superscipt \(A\) is for Abreu) is said to be **self-enforcing** if

the consequence of disappointing the representative agent’s expectations at time \(j\) is to

*restart*plan \(\vec \mu^A\) at time \(j+1\)the consequence of restarting the plan is sufficiently adverse that it forever deters all deviations from the plan

More precisely, a government plan \(\vec \mu^A\) with equilibrium inflation sequence \(\vec \theta^A\) is
**self-enforcing** if

(Here it is useful to recall that setting \(\mu=0\) is the maximizing choice for the government’s one-period return function)

The first line tells the consequences of confirming the representative agent’s expectations by following the plan, while the second line tells the consequences of disappointing the representative agent’s expectations by deviating from the plan.

A consequence of the inequality stated in the definition is that a self-enforcing plan is credible.

Self-enforcing plans can be used to construct other credible plans, including ones with better values.

Thus, where \(\vec v^A\) is the value associated with a self-enforcing plan \(\vec \mu^A\),
a sufficient condition for another plan \(\vec \mu\) associated with inflation \(\vec \theta\) and value \(\vec v\) to be **credible** is that

For this condition to be satisfied it is necessary and sufficient that

The left side of the above inequality is the government’s *gain* from deviating from the plan, while the right side is the government’s *loss* from deviating
from the plan.

A government never wants to deviate from a credible plan.

Abreu taught us that key step in constructing a credible plan is first constructing a self-enforcing plan that has a low time \(0\) value.

The idea is to use the self-enforcing plan as a continuation plan whenever the government’s choice at time \(t\) fails to confirm private agents’ expectation.

We shall use a construction featured in Abreu ([Abreu, 1988]) to construct a self-enforcing plan with low time \(0\) value.

### 42.15.2. Abreu’s Carrot-Stick Plan#

Abreu ([Abreu, 1988]) invented a way to create a self-enforcing plan with a low initial value.

Imitating his idea, we can construct a self-enforcing plan \(\vec \mu\) with a low time \(0\) value to the government by insisting that future government decision makers set \(\mu_t\) to a value yielding low one-period utilities to the household for a long time, after which government decisions thereafter yield high one-period utilities.

Low one-period utilities early are a

*stick*High one-period utilities later are a

*carrot*

Consider a candidate plan \(\vec \mu^A\) that sets \(\mu_t^A = \bar \mu\) (a high positive number) for \(T_A\) periods, and then reverts to the Ramsey plan.

Denote this sequence by \(\{\mu_t^A\}_{t=0}^\infty\).

The sequence of inflation rates implied by this plan, \(\{\theta_t^A\}_{t=0}^\infty\), can be calculated using:

The value of \(\{\theta_t^A,\mu_t^A \}_{t=0}^\infty\) at time \(0\) is

For an appropriate \(T_A\), this plan can be verified to be self-enforcing and therefore credible.

### 42.15.3. Example of Self-Enforcing Plan#

The following example implements an Abreu stick-and-carrot plan.

The government sets \(\mu_t^A = 0.1\) for \(t=0, 1, \ldots, 9\)
and then starts the **Ramsey plan**.

We have computed outcomes for this plan.

For this plan, we plot the \(\theta^A\), \(\mu^A\) sequences as well as the implied \(v^A\) sequence.

Notice that because the government sets money supply growth high for 10 periods, inflation starts high.

Inflation gradually slowly declines because people expect the government to lower the money growth rate after period \(10\).

From the 10th period onwards, the inflation rate \(\theta^A_t\)
associated with this **Abreu plan** starts the Ramsey plan from its
beginning, i.e., \(\theta^A_{t+10} =\theta^R_t \ \ \forall t \geq 0\).

## Show code cell source

```
def abreu_plan(clq, T=1000, T_A=10, μ_bar=0.1, T_Plot=20):
"""
Compute and plot the Abreu plan for the given ChangLQ instance.
Here clq is an instance of ChangLQ.
"""
# Append Ramsey μ series to stick μ series
clq.μ_A = np.append(np.full(T_A, μ_bar), clq.μ_series[:-T_A])
# Calculate implied stick θ series
discount = (clq.α / (1 + clq.α)) ** np.arange(T)
clq.θ_A = np.array([
1 / (clq.α + 1) * np.sum(clq.μ_A[t:] * discount[:T - t])
for t in range(T)
])
# Calculate utility of stick plan
U_A = clq.β ** np.arange(T) * (
clq.u0 + clq.u1 * (-clq.θ_A) - clq.u2 / 2
* (-clq.θ_A) ** 2 - clq.c * clq.μ_A ** 2
)
clq.V_A = np.array([np.sum(U_A[t:] / clq.β ** t) for t in range(T)])
# Make sure Abreu plan is self-enforcing
clq.V_dev = np.array([
(clq.u0 + clq.u1 * (-clq.θ_A[t]) - clq.u2 / 2
* (-clq.θ_A[t]) ** 2) + clq.β * clq.V_A[0]
for t in range(T_Plot)
])
# Plot the results
fig, axes = plt.subplots(3, 1, figsize=(8, 12))
axes[2].plot(clq.V_dev[:T_Plot], label="$V^{A, D}_t$", c="orange")
plots = [clq.θ_A, clq.μ_A, clq.V_A]
labels = [r"$\theta_t^A$", r"$\mu_t^A$", r"$V^A_t$"]
for plot, ax, label in zip(plots, axes, labels):
ax.plot(plot[:T_Plot], label=label)
ax.set(xlabel="$t$", ylabel=label)
ax.legend()
plt.tight_layout()
plt.show()
abreu_plan(clq)
```

To confirm that the plan \(\vec \mu^A\) is **self-enforcing**, we
plot an object that we call \(V_t^{A,D}\), defined in the key inequality in the second line of equation (42.34) above.

\(V_t^{A,D}\) is the value at \(t\) of deviating from the self-enforcing plan \(\vec \mu^A\) by setting \(\mu_t = 0\) and then restarting the plan at \(v^A_0\) at \(t+1\):

In the above graph \(v_t^A > v_t^{A,D}\), which confirms that \(\vec \mu^A\) is a self-enforcing plan.

We can also verify the inequalities required for \(\vec \mu^A\) to be self-confirming numerically as follows

```
np.all(clq.V_A[0:20] > clq.V_dev[0:20])
```

```
False
```

Given that plan \(\vec \mu^A\) is self-enforcing, we can check that the Ramsey plan \(\vec \mu^R\) is credible by verifying that:

```
def check_ramsey(clq, T=1000):
# Make sure Ramsey plan is sustainable
R_dev = np.zeros(T)
for t in range(T):
R_dev[t] = (clq.u0 + clq.u1 * (-clq.θ_series[1, t])
- clq.u2 / 2 * (-clq.θ_series[1, t])**2) \
+ clq.β * clq.V_A[0]
return np.all(clq.J_series > R_dev)
check_ramsey(clq)
```

```
True
```

### 42.15.4. Recursive Representation of a Sustainable Plan#

We can represent a sustainable plan recursively by taking the continuation value \(v_t\) as a state variable.

We form the following 3-tuple of functions:

In addition to these equations, we need an initial value \(v_0\) to characterize a sustainable plan.

The first equation of (42.36) tells the recommended value of \(\hat \mu_t\) as a function of the promised value \(v_t\).

The second equation of (42.36) tells the inflation rate as a function of \(v_t\).

The third equation of (42.36) updates the continuation value in a way that depends on whether the government at \(t\) confirms the representative agent’s expectations by setting \(\mu_t\) equal to the recommended value \(\hat \mu_t\), or whether it disappoints those expectations.

## 42.16. Whose Plan is It?#

A credible government plan \(\vec \mu\) plays multiple roles.

It is a sequence of actions chosen by the government.

It is a sequence of the representative agent’s forecasts of government actions.

Thus, \(\vec \mu\) is both a government policy and a collection of the representative agent’s forecasts of government policy.

Does the government *choose* policy actions or does it simply *confirm* prior private sector forecasts of those actions?

An argument in favor of the *government chooses* interpretation comes from noting that the theory of credible plans builds in a theory that the government each period chooses
the action that it wants.

An argument in favor of the *simply confirm* interpretation is gathered from staring at the key inequality (42.35) that defines a credible policy.

## 42.17. Comparison of Equilibrium Values#

We have computed plans for

an ordinary (unrestricted) Ramsey planner who chooses a sequence \(\{\mu_t\}_{t=0}^\infty\) at time \(0\)

a Ramsey planner restricted to choose a constant \(\mu\) for all \(t \geq 0\)

a Markov perfect sequence of governments

Below we compare equilibrium time zero values for these three.

We confirm that the value delivered by the unrestricted Ramsey planner exceeds the value delivered by the restricted Ramsey planner which in turn exceeds the value delivered by the Markov perfect sequence of governments.

```
clq.J_series[0]
```

```
6.776447396127581
```

```
clq.J_CR
```

```
6.756756756756755
```

```
clq.J_MPE
```

```
6.70875734810947
```

We have also computed **credible plans** for a government or sequence
of governments that choose sequentially.

These include

a

**self-enforcing**plan that gives a low initial value \(v_0\).a better plan – possibly one that attains values associated with Ramsey plan – that is not self-enforcing.

## 42.18. Note on Dynamic Programming Squared#

The theory deployed in this lecture is an application of what we nickname **dynamic programming squared**.

The nickname refers to the feature that a value satisfying one Bellman equation appears as an argument in a second Bellman equation.

Thus, our models have involved two Bellman equations:

equation (42.1) expresses how \(\theta_t\) depends on \(\mu_t\) and \(\theta_{t+1}\)

equation (42.5) expresses how value \(v_t\) depends on \((\mu_t, \theta_t)\) and \(v_{t+1}\)

A value \(\theta\) from one Bellman equation appears as an argument of a second Bellman equation for another value \(v\).