Case Study 2 — Tax Brackets, Welfare Cliffs, and the Real Cost of a Discontinuity
Field: Public economics and policy design Calculus used: Continuity at a seam (Section 4.2), jump discontinuities (Section 4.3), one-sided continuity (Section 4.8), the Intermediate Value Theorem (Section 4.6)
The Setup
In most countries, income tax is computed through a system of marginal tax brackets. The 2024 U.S. federal schedule for a single filer is approximately:
| Income bracket | Marginal rate |
|---|---|
| \$0 – \$11,600 | 10% |
| \$11,600 – \$47,150 | 12% |
| \$47,150 – \$100,525 | 22% |
| \$100,525 – \$191,950 | 24% |
| \$191,950 – \$243,725 | 32% |
| \$243,725 – \$609,350 | 35% |
| \$609,350+ | 37% |
The marginal rate is the rate paid on each additional dollar earned while in that bracket. The total tax owed, $T(I)$, is a piecewise-linear function of income $I$: linear on each bracket, with slope equal to that bracket's marginal rate. This case study is about a single question with large stakes: is $T(I)$ continuous, and does it matter? The answer to both is yes — and the place where continuity quietly fails, in welfare programs, is where families get hurt.
import numpy as np
import matplotlib.pyplot as plt
# 2024 U.S. federal income tax (single filer), approximate
brackets = [(0, 0.10), (11600, 0.12), (47150, 0.22), (100525, 0.24),
(191950, 0.32), (243725, 0.35), (609350, 0.37)]
def tax(income):
"""Total federal income tax for a given income (single filer, 2024)."""
total = 0.0
for i in range(len(brackets)):
lower, rate = brackets[i]
upper = brackets[i + 1][0] if i + 1 < len(brackets) else float('inf')
if income <= lower:
break
taxed_in_bracket = min(income, upper) - lower
total += taxed_in_bracket * rate
return total
incomes = np.linspace(0, 700000, 2000)
taxes = np.array([tax(I) for I in incomes])
marginal = np.diff(taxes) / np.diff(incomes) # numerical slope of T
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
ax1.plot(incomes, taxes); ax1.set_title("Total tax $T(I)$ — continuous")
ax1.set_xlabel("Income $I$"); ax1.set_ylabel("Tax owed"); ax1.grid(True, alpha=0.3)
ax2.step(incomes[:-1], marginal, where='post')
ax2.set_title("Marginal rate $T'(I)$ — jumps at every bracket")
ax2.set_xlabel("Income $I$"); ax2.set_ylabel("Marginal rate"); ax2.grid(True, alpha=0.3)
plt.tight_layout(); plt.show()
# Figure: T(I) is an unbroken polyline; its slope is a staircase with jump discontinuities.
The Total-Tax Function Is Continuous — Proven at a Seam
A famous misconception: "If one extra dollar pushes me from the 22% bracket into the 24% bracket, my whole income gets taxed at 24%." This is false, and the reason is exactly the continuity check of Section 4.2 applied at a bracket boundary — a piecewise seam, the prime suspect for discontinuity.
Take the seam at $I = 100{,}525$. We check that the two one-sided limits agree with the value there. First, the tax owed at the boundary, summing the lower brackets:
$$T(100{,}525) = \underbrace{11{,}600(0.10)}_{1{,}160} + \underbrace{(47{,}150-11{,}600)(0.12)}_{4{,}266} + \underbrace{(100{,}525-47{,}150)(0.22)}_{11{,}742.50} = 17{,}168.50.$$
Now approach from the right: one extra dollar of income is taxed at the new bracket's rate, $24\%$, so
$$T(100{,}526) = 17{,}168.50 + (1)(0.24) = 17{,}168.74.$$
The function rises by 24 cents, not by twenty thousand dollars. As we let that extra income shrink to zero, $\lim_{I\to 100{,}525^+} T(I) = 17{,}168.50 = T(100{,}525)$, and the left limit equals the same value because the lower-bracket sum is itself continuous. All three conditions of Section 4.2 hold: $T$ is continuous at the seam. The same check passes at every boundary, so $T(I)$ is continuous on all of $[0,\infty)$. The bracket design is, mathematically, a deliberate continuity guarantee.
The Key Insight. The total-tax function is continuous by construction: each bracket's higher rate applies only to the income inside that bracket, so the pieces are engineered to meet at the seams. Continuity here is not an accident of the formula — it is the policy goal, expressed in the language of Section 4.2.
But the Marginal Rate Is Discontinuous — and That Is the Point
The slope of $T$ — the marginal rate $T'(I)$ — is a different story. Just below the boundary the slope is $0.22$; just above it is $0.24$. The marginal-rate function has a jump discontinuity of size $0.02$ at $I = 100{,}525$ (Section 4.3), and a similar jump at every boundary. The right panel of the figure is a staircase: flat on each bracket, leaping at each seam.
This is the staircase's whole purpose. A continuous $T$ guarantees fairness — crossing a boundary never costs you a lump sum. A discontinuous $T'$ is what creates the progressive structure — higher earners face higher marginal rates. The two facts coexist comfortably: a continuous function can have a discontinuous slope (think of $|x|$, continuous everywhere with a slope that jumps at $0$ — a connection we will sharpen when we study derivatives in Chapter 6). The tax code is the civic-life example of that phenomenon.
What If $T$ Itself Jumped? The Marginal-Rate Paradox
Now imagine the naive system the misconception describes: cross a boundary and your entire income is retaxed at the new rate. Then $T$ would have genuine jump discontinuities. Watch the disaster at $I = 100{,}525$:
- Earn \$100,525: real tax $= \$17{,}168.50$ (as computed above).
- Earn \$100,526 under the naive rule: $T = 100{,}526 \times 0.24 = \$24{,}126.24$.
One extra dollar of income would trigger an extra **\$6,957.74** in tax. Take-home pay would *fall off a cliff* — earning slightly more would leave you with dramatically less. This is the **marginal-rate paradox**: a region where additional income reduces net income. Rational workers would refuse raises to stay just below a boundary. No competent tax authority designs this; the continuity of the real $T$ is precisely what prevents it.
real = tax(100526)
naive_jump = 100526 * 0.24 - tax(100525)
print(f"Real extra tax on the +$1: ${tax(100526) - tax(100525):.2f}") # $0.24
print(f"Naive 'whole income' jump: ${naive_jump:.2f}") # $6957.74
Where Continuity Really Does Break: Welfare Cliffs
The bracket system is carefully continuous. Many benefit programs are not. A household's total resources — after-tax income plus government transfers — often have real jump discontinuities at eligibility thresholds. Cross an income line by a dollar and an entire benefit (Medicaid, SNAP, a childcare subsidy) can vanish at once. The combined "income + benefits" function then has a downward jump discontinuity of hundreds or thousands of dollars, reproducing the marginal-rate paradox in real life. This is the well-documented welfare cliff: a single-mother household earning \$1 more can lose \$8,000 in childcare assistance, so the net effect of a raise is strongly negative.
Here the calculus is not decoration — it is diagnostic. The policy failure is a discontinuity in a resource function that ought to be continuous, and the fix is literally to make the function continuous. The Earned Income Tax Credit (EITC) is engineered exactly this way: it phases in and phases out gradually (continuous, piecewise-linear, no jumps), smoothing what would otherwise be a cliff. "Design the benefit so the resource function is continuous" is a sentence an economist and a calculus student can now both write, and mean the same thing.
Why IVT Quietly Helps the Honest System
There is a final, subtler payoff. Because the real tax function $T(I)$ is continuous and strictly increasing, the Intermediate Value Theorem (Section 4.6) guarantees that for any target tax bill $B$ between $T(0)=0$ and some high income's tax, there is exactly one income that produces it. Policy questions like "what income corresponds to an effective rate of 18%?" are therefore well-posed root-finding problems — solve $T(I) - 0.18\,I = 0$ — and a bisection solver (Section 4.7) finds the answer reliably, precisely because continuity holds. The discontinuous welfare system has no such guarantee: between two incomes, an intermediate benefit level may simply not be attainable, because the function leapt over it.
Connections to the Chapter
- Continuity at a point (Section 4.2): verified $T$ continuous at the bracket seam by checking the three conditions.
- Jump discontinuities (Section 4.3): the marginal rate $T'$ jumps at each boundary; the naive system and welfare cliffs are jumps in $T$ itself.
- One-sided continuity (Section 4.8): the left- and right-limits at a seam are the natural diagnostic for a piecewise policy function.
- Intermediate Value Theorem (Section 4.6): continuity makes "what income yields this tax?" a solvable root problem; discontinuity destroys that guarantee.
- Forward to derivatives (Chapter 6): the continuous-$T$/discontinuous-$T'$ split is the first hint that differentiability is strictly stronger than continuity.
Discussion Questions
-
Carry out the seam check of Section 4.2 at the \$47,150 boundary: compute $T(47{,}150)$, then $T(47{,}151)$, and confirm the function rises by exactly the marginal rate of the new bracket. By how much?
-
Why do most countries use piecewise-linear brackets rather than a smoothly increasing marginal rate? (Consider administrative simplicity, transparency, and political bargaining.)
-
The misconception "crossing a bracket retaxes my whole income" is widespread and false. Using the continuity argument above, write a two-sentence rebuttal you could give to a non-mathematician.
-
Look up one real welfare cliff (SNAP, Medicaid, or housing assistance) and describe the discontinuity quantitatively: at what income, and how large is the drop in net resources?
-
The EITC smooths a cliff into a continuous phase-out. Sketch (or describe) the resource function "earnings + EITC" and identify the intervals where it is increasing, flat, and decreasing in slope — all while remaining continuous.
Your Turn — Mini-Project
Extend the Python code above to:
- Define a naive tax function
naive_tax(I)that taxes the whole income at the top bracket reached, and plot it beside the realtax(I). Visually locate its jump discontinuities and confirm their sizes by computing one-sided values at two boundaries. - Compute the average tax rate $T(I)/I$ and plot it against $I$. Is it continuous? (It is — explain why, given that $T$ is continuous and $I \ne 0$, using the quotient rule for continuity from Section 4.5.)
- Use bisection (Section 4.7) to find the income at which the average rate first reaches $15\%$. State the bracket it falls in and verify the sign change before bisecting.
Further Reading
- Slemrod, J. (2013). Taxing Ourselves: A Citizen's Guide to the Debate over Taxes (5th ed.). MIT Press. An accessible, math-aware tour of how tax schedules are built and why continuity of $T$ matters.
- Saez, E. (2001). "Using elasticities to derive optimal income tax rates." Review of Economic Studies, 68(1), 205–229. The theory of smooth optimal-tax schedules; readable with a calculus background.
- Center on Budget and Policy Priorities, https://www.cbpp.org/. Empirical documentation of welfare cliffs and how phase-outs like the EITC restore continuity to household resource functions.
Tax policy is calculus made civic. The continuity of $T(I)$ is what keeps the system fair; the jump in $T'(I)$ is what makes it progressive; and the jumps that policymakers fail to design out — the welfare cliffs — are discontinuities that punish exactly the families a benefit was meant to help.