The single-liability case needs two conditions and a footnote. The multi-liability case needs three, and the third one is doing real work.
What are the three conditions for bond immunization?
The first condition is a present-value match. The market value of the assets equals the present value of the liabilities, both discounted off the same curve. Fail it and you are not immunised, you are underfunded or overfunded, and no duration match repairs that.
The second is a money-duration match. Asset money duration equals liability money duration, which, since the first condition has already equalised the two present values, reduces to matching modified duration. In practice you match basis point value instead, because BPV is a currency amount and can be compared directly across instruments including derivatives:
BPV = modified duration x present value x 0.0001
The third condition is a floor on dispersion and convexity. Each must be at least as large as the liability's, and only just. It has no single-liability analogue, and the reason for it is structural rather than arithmetic. Matching duration protects you against a parallel shift. It does nothing about a change in curve shape, and a portfolio whose cash flows are bunched at one maturity will be repriced by a twist very differently from a liability whose cash flows are spread across five. Requiring asset dispersion to exceed the liability's forces the assets to straddle the liability in time rather than sit at a single point beside it.
The "and only just" clause is equally important. Dispersion far above the liability's means a barbell, and a barbell is heavily exposed to exactly the twist you were trying to survive. The structural-risk work puts a number on that.
Advertisement
Worked example: a rupee build that passes and fails
Worked Example 1 verifies all three on a rupee build: ₹63.856687 crore of assets against ₹63.856687 crore of liabilities, asset BPV of ₹181,981.60 per basis point against liability BPV of ₹181,981.60 per basis point, asset dispersion of 2.215180 against liability dispersion of 1.962000, and asset convexity of 12.761829 against 12.530729. The third condition passes by 0.253180 years-squared of dispersion, which is the right margin: enough to satisfy the condition, not enough to make a barbell of it.
The same example shows the condition failing. A bullet build holding a single three-year bond matches present value at ₹63.856687 crore but produces a BPV of only ₹167,437.03 per basis point against the liability's ₹181,981.60, and a dispersion of 0.288796 against 1.962000. It fails conditions two and three together, and the dispersion failure is the one that would still be there if you fixed the duration by lengthening the bond.