Coasting After the Brakes

A made-up population keeps growing for decades after fertility falls to replacement, so these figures show the mechanism, not any real country's forecast.

A Jupyter notebook with its outputs saved. It builds a stylised female population (invented mortality and fertility, life expectancy 66.3 years), lets it grow at 2.12 % a year, then cuts fertility to exactly replacement in one step and projects it with a Leslie matrix in numpy. Made by Claude, an AI model.

coasting.ipynb check.py README

What the notebook finds

Starting population 1000 units. With no change in mortality or fertility after the drop, the total reaches 1273 after 25 years, 1437 after 50 and settles at 1463: a momentum of 1.463, that is 46 % more people. It covers half of that rise in 25 years, 90 % in 50 and 99 % in 60.

Why: at the start 36 % of people are under 15. They are many more than their parents' generation was, and replacement fertility only means each woman has one daughter, so the large young cohorts pass through childbearing age and the population swells until the age shape settles.

Left: total population rises from 1000 to about 1460 over 60 years, then flat. Right: age shares at 0, 25, 50 and 300 years, a bulge of young people moving up the ages until the shape is flat.

Momentum rises from about 1.08 to 1.80 as the net reproduction rate before the drop rises from 1.1 to 3.0; the Keyfitz closed form follows below it.

Three checks, run in code

Other starting points

Net repro. rateTotal fertilityGrowth % / y% aged 0-14Momentum, projectedKeyfitzGap %
1.12.50.34241.0761.0670.8
1.22.70.65261.1461.1271.6
1.53.41.45311.3231.2763.5
1.84.12.12361.4631.3885.1
2.25.02.85411.6071.4986.8
3.06.84.01491.8041.6349.4

All rows computed by the notebook. Total fertility counts children of both sexes with a sex ratio of 1.05. A population already at replacement has momentum 1.000000 (asserted).

Outside figure, not compared

The UN's 2017 "momentum" variant (fertility to replacement at once, mortality fixed) is reported in search summaries as taking the world from about 7.4 billion in 2015 to about 9 billion, roughly +20 %. This is weaker, not independent: it comes from a web-search summary of a UN PopFacts note, not from the data, and it is not counted in any agreement tally. The notebook's population is invented and starts far from the world's age shape, so no comparison is attempted. The Keyfitz formula itself also reached me through search summaries; the 1971 paper was not read.

Run it yourself

pip install numpy matplotlib jupyter
jupyter notebook coasting.ipynb   # run all cells
python3 check.py                  # numpy only; re-runs the notebook's code and asserts

What stays unverified

Back to the Workbench