Valuing a company with an AI assistant
Episode 2 of the AI-assisted financial analysis series. Last time we built a company — a five-year income statement, balance sheet and cash-flow forecast for a leveraged buyout, mostly written by an AI assistant. This time we put a price on it. Three different valuation methods, three different discount rates, and — if the model is right — one equity value they all agree on, down to the last euro. I do the one piece of algebra worth doing by hand and hand the rest to the assistant. This post is the canonical write-up: the video below is the short version, and everything here is readable on its own. It follows directly from Episode 1, whose company we are now valuing.
The promise, and the bench in one minute
Here is where we are headed.
Check Results table. Equity value by the weighted-average-cost-of-capital method: 146,307.53. By adjusted present value: the same number. By flow-to-equity: the same number again. A fourth, independent npv() restatement: identical. Three completely different roads — and they land on the same spot, to the cent.
Three valuation methods, built on the same forecast, discounting the same cash flows at three different rates, and all four numbers in that table read 146,307.53 (thousands, throughout). By the end of this post you will have built that table, and — more to the point — you will know exactly why those numbers cannot disagree, and why one number in the model deliberately does.
If you have arrived here first, three things sit on the bench and it is worth naming them.
The Workbench is this site: field notes from an ongoing experiment in building small, transparent tools for teaching finance and for probing how AI actually works. The manifesto says why; the blog is the permanent home and the videos are demonstrations.
Impromptu is the modeling engine on screen — a multidimensional spreadsheet in the Lotus Improv tradition that lives on today in Quantrix Modeler, the tool of our Financial Planning Lab at Trento. You do not write =B7*C7 and drag it down. You write Equity = V_L - Debt, once, over a whole named array, and it applies to every year and every scenario at once. It is a research prototype, not a product and not a replacement for the tools we teach with; it exists because some questions can only be answered with an instrument you can take apart. What is actually running is the subject of a separate note.
Claude Code is the AI assistant, and the important word is wired. It is connected to the same live engine through MCP — the Model Context Protocol — so it can list datasets, read existing formulas, write new ones, recalculate and read the results back, while I watch every step. When the assistant writes a formula, that formula lands in the model the way mine does, in the same readable language.
Technical terms are named where they first appear and collected in the glossary. The complete formula set is in Appendix A, so you can rebuild the valuation in the tool of your choice.
What made it valuation-ready
The forecast is exactly where Episode 1 left it — income statement, balance sheet, cash flow, all balancing, for a manufacturer bought at the end of 2022 for 196,000, with 90,000 of bank debt. Two small changes carried over from that build matter a great deal for valuation.
The first is a tidying. The company’s 2022 actuals — last year’s sales, costs, the opening asset base — now live in their own dataset, LastActuals, with no scenario axis. History does not change when you run a what-if, so it should not sit on the same axis as the assumptions that do. Assumpt now holds only the drivers that vary by scenario. That separation is what lets the scenario axis, later, do real work without corrupting the past.
The second is a policy, and it is the reason the whole valuation is possible. In Episode 1 the cash line was flat on purpose: every year’s free cash flow to equity is paid out as a dividend if positive, or covered by a stock issue if negative, so net cash flow is zero and the cash balance never moves. That is the FCFE policy (free cash flow to equity). Because no cash piles up on the balance sheet and no financing plug wanders, the entire value of the business can ride on its free cash flows and nothing else. A model that hoards cash makes you argue about what the cash is worth; this one doesn’t, so we can get straight to the point.
The one piece of algebra: the cost of capital
To discount anything we need a cost of capital, and for that we need the company’s own risk — its beta. But our company is private; it does not trade. So we borrow risk from firms that do.
We take two listed peers — call them Tusk and Sangyo — and strip their financing out. The unlevered (asset) beta is the value-weighted average of a firm’s equity and debt betas: it is what the business risk would be if the firm carried no debt. This is the one formula I write by hand, on camera, and it is worth seeing in the model’s own language:
betaU[peer:butlast] = betaE*(1-D/V) + betaD*D/V
betaU[industry average] = mean(betaU[peer:butlast], dims=Dim{:peer})
Peers dataset. Two companies, their equity betas, debt betas and leverage typed in; the asset beta betaU computed by the unlevering formula in the editor pane on the right. Tusk unlevers to 0.876, Sangyo to 0.920, and the industry average row — a slice of the two companies only — averages them to 0.898.
Two details in that formula repay a second look. [peer:butlast] means every peer except the last — the two real companies, not the industry average summary row that sits beneath them. And the average is taken over that same slice, mean(betaU[peer:butlast], …), so the summary row is the mean of the companies and never folds itself into its own calculation. (This is the sliced-mean fix that gives this build its betafixed name; an earlier version averaged over the whole column, including the blank summary cell.)
Notice what the numbers say. The two peers differ visibly in equity beta — 1.20 against 1.40 — but barely at all in asset beta, 0.876 against 0.920. Almost the entire gap was leverage, not business risk. That convergence is the whole justification for the exercise: strip the financing and the two firms look like what they are, two companies in the same line of work. We take the average, βU = 0.898, as our company’s asset risk.
From there, one line of CAPM prices any beta — r = r_F + \beta \cdot \text{MRP}, a risk-free rate plus beta times the market risk premium. With r_F = 4\% and a premium of 5.5\%, the asset beta gives the unlevered cost of capital:
r_U = r_F + \beta_U \cdot \text{MRP} = 4\% + 0.898 \times 5.5\% = 8.94\%
That is the rate the business earns, before anyone decides how to finance it — the anchor for everything that follows.
Now we add the leverage back. Modigliani–Miller Proposition II says leverage does not create value, it redistributes risk: equity holders bear the business risk plus a premium for the debt sitting in front of them. Relevering at a target debt ratio of D/V = 40\% (so D/E = 0.667), with a debt cost r_D = 4.44\%:
r_E = r_U + (r_U - r_D)\cdot\frac{D}{E} = 8.94\% + (8.94\% - 4.44\%)\times 0.667 = 11.94\%
And finally the blend — the weighted average cost of capital, the after-tax average of what the two claims cost:
r_{WACC} = r_E\cdot\frac{E}{V} + r_D(1-T)\cdot\frac{D}{V} = 8.32\%
Look at where the WACC lands: 8.32 %, below rU’s 8.94 %. That gap of roughly 0.62 % is not rounding. It is the tax shield — the subsidy the tax code hands a levered firm because interest is deductible. The model even carries the WACC a second way, as a shortcut, r_U - r_D \cdot (D/V) \cdot T, and the two agree to eleven decimal places. That agreement is not luck; it is an algebraic identity, and it is the assistant’s own proof that it relevered correctly. Read that way, r_{WACC} stops being a formula to memorise: it is the unlevered rate with the tax shield quietly added back. Every method below is a consequence of that one sentence.
Everything on that map, from rD down to rWacc, the assistant wrote — I described the cost of capital in plain finance and it produced the formulas. And the moment the peer betas existed, the ValParams dataset that depends on them lit up on its own, the way a spreadsheet recomputes — except here the “cell” is a whole named quantity and the formula reads like the textbook line it implements.
Three roads to one value
With a cost of capital in hand, we can value the company three ways.
Road one — the WACC benchmark
Discount the free cash flow to the firm at the WACC. The mechanics are worth slowing down for, because they show what the year dimension is for. We cannot forecast forever, so at the horizon we drop in a continuation value — the last year’s EBITDA times an EV/EBITDA multiple of 6.8, a simple and defensible anchor for everything after 2026. Then the discounting is not one long sum but a backward recursion: each year’s value is next year’s cash flow plus next year’s value, discounted one period. Written once, with a [year:next] reference, and the engine rolls it back from the horizon to today:
V_L[year: last] = Continuation Value
V_L[year: butlast] = (FCFF[year: next] + V_L[year: next]) / (1 + rWacc)
rWacc V_U dataset. The backward recursion in the editor (V_L[year: butlast] = (FCFF[year: next] + V_L[year: next]) / (1 + rWacc)); the results in the grid. Levered value V_L = 243,845.88, the zero-debt baseline V_U = 238,422.34, and equity 146,307.53.
The same dataset runs the recursion a second time at the unlevered rate rU, giving V_U = 238,422.34 — what these identical cash flows would be worth to a firm with no debt at all. That is the baseline the next method builds on. The levered value is 243,845.88; take 40 % of it as debt, subtract, and equity comes to 146,307.53. Hold that number — we are going to reach it two more times.
Road two — the APV bridge, and the real lesson
The adjusted present value method values the pieces separately: take the business as if it were unlevered, then add the value of the tax shield the debt creates.
V_L = V_U + PV(\text{tax shields})
The virtue of APV is that the tax shield becomes a visible line item with its own cash flows and its own discount rate — and that discount rate is where debt policy enters. Here is the pivot of the whole episode. The model carries one dataset with two debt policies side by side, and the assistant writes only the two formulas that actually differ between them; every other line is written once and shared:
- Constant debt ratio. Debt is rebalanced to 40 % of firm value every year, so future debt rises and falls with the business. The shields are therefore as risky as the assets, and we discount them at rU. This branch lands on equity 146,307.53 — matching the WACC benchmark exactly, as it must.
- Predetermined schedule. Debt follows the LBO’s actual amortisation plan (90,000 → 100,000 → 99,000), fixed in advance. The shields are now about as safe as the debt itself, so we discount them at the cheaper rD. This branch lands on equity 153,759.04 — higher, and now you know exactly why.
Same company, same cash flows, seven thousand euros of difference. The method did not move the answer; the financing assumption did. That is the lesson of the episode, and it is why the model keeps both policies in view.
Road three — flow to equity
The third road skips the firm entirely and goes straight to the shareholder. Build the cash flow to equity — free cash flow to the firm, less the after-tax interest the lenders take, plus any net new borrowing — and discount that at the cost of equity, 11.94 %:
FCFE = FCFF + less after tax Interest + change in Debt
Equity Value[year: butlast] = (FCFE[year: next] + Equity Value[year: next]) / (1 + rE)
It is the most laborious of the three — it needs the full debt schedule and the levered rate — which is exactly why it is the best cross-check: if the debt in the cash flow and the leverage in the rate ever disagreed, this is where it would show. It lands on 146,307.53. Third road, same number. Not close — identical.
Proving it — the reconciliation
Agreement you print is worth less than agreement you can prove. So the last valuation step re-values everything a second way — with plain npv() net-present-value formulas, the kind any spreadsheet has — and asks which numbers must coincide, and why. That is the Check Results table at the top of this post: the levered value by npv matches the recursion; equity by WACC, by APV (constant ratio) and by flow-to-equity all read 146,307.53, agreeing to the cent, and the independent npv restatement makes a fourth.
That agreement is not a coincidence you admire; it is an identity you can prove. The three methods are one proposition written three ways: the same cash flows, the same debt policy, three different arrangements of the same algebra. The full proof — why WACC is APV once you accept the constant-ratio assumption, and why the flow-to-equity recursion telescopes into V_L - D — is in the teaching note, because it is the assistant’s own to make.
But notice the one number in the model that doesn’t join in: the predetermined-schedule equity, sitting apart at 153,759. That is not an error. It is the control — a genuinely different financing assumption giving a genuinely different answer. If that one had matched, I would know something was broken. A reconciliation is only convincing if you can also show the thing that shouldn’t reconcile, and doesn’t.
Unleashing the analyst
Up to this point the assistant has been kept on a short harness: our datasets, our structure, our pipeline. The last step takes the leash off. I ask it to do what a certified analyst does — explain the model. Not just the numbers, but the theory: the propositions, the debt-policy debate, when a practitioner should reach for each method — and to ground every word in this model’s own figures.
What comes back is a proper teaching note — the peer analysis, the cost-of-capital chain, all three methods with the model’s tables, the reconciliation we just watched, the classic papers named where they illuminate what is on screen. It is long, and it is its own document, so it lives on a companion page:
→ Read the full teaching note the assistant generated: DCF valuation under alternative debt policies.
One thing it flags is worth repeating here, because it is the difference between a tool and an analyst. Our continuation value uses an EV/EBITDA multiple of 6.8, seeded identically into the levered and unlevered recursions. The note points out that this quietly implies a long-run growth rate of around 6 %, and that seeding both recursions the same way sets the terminal tax shield to exactly zero — a modelling convention, not a fact, and one the reconciliation quietly depends on. It also keeps its own epistemics honest: the four-way agreement, it says, “confirms the arithmetic, not the economics — three methods reading the same wrong input would agree just as beautifully.” That is not a formula filling a cell. That is judgement.
The scenario axis pays off
One more move, because it shows what the whole structure was for. The model was built scenario-ready from the start: every valuation dataset carries a scenario axis that, until now, held only base. So we add a best case and a worst case — just input numbers, growth rates, margins, betas.
The promise is that this takes no new formulas: describe the structure once and every what-if comes for free. It very nearly holds — every valuation dataset recomputes for all three scenarios at once — but “very nearly” is where it gets interesting. Adding the extra scenarios surfaced two things the assistant had to fix, and the video shows it catch and repair each one, live.
The first was an average that had never been told which axis to average over. The industry asset beta is the mean of the two peers, betaU[industry average] = mean(betaU[peer:butlast]). With one scenario that bare mean() returned the right number; with three, it collapsed the scenario axis as well as the peer axis, smearing the three cases into a single beta. The size of the axis had been standing in for its name — length one hides the mistake, length three exposes it. The fix is to pin the reduction to the axis it was always meant for — mean(betaU[peer:butlast], dims=Dim{:peer}) — averaging the peers within each scenario. (That correction is why the model behind this post is the one named betafixed.)
The second was subtler, and it is a genuinely useful lesson about what “comes for free” and what does not. A formula fans out across a new scenario automatically — that is the whole point of the axis. A typed input does not: it is a value, not a rule, so it has to exist for every scenario or it is simply blank. Most of the scenario inputs you remember to enter, because they are what you came to change — the growth rates, the margins, the betas. The one you forget is the debt schedule: the LBO’s contractual repayment plan, 90,000 rising to 100,000 and amortising to 99,000, which we typed in back in Episode 1 and which is the same in every scenario precisely because it is a signed loan agreement, not a forecast. When the best and worst columns appeared, that schedule was blank in them — and empty debt would have quietly broken the interest line and the predetermined-debt valuation. The assistant caught the gap and copied the base schedule across, which is exactly right: growth rates and margins change from case to case; the debt does not.
Worth naming, because it is the sharper version of the same lesson: this was not the first time the scenario axis earned its keep. An earlier session — not the one recorded here — had used it to flush out something genuinely nasty. References that reach across datasets were being matched by axis position rather than by name, and the forecast and valuation datasets happen to order their scenario axis at opposite ends. With a single scenario every axis is length one and lines up by luck; with three, figures from one scenario landed under another and base equity came out at roughly half the truth — while the balance sheet still tied to zero, the three methods still agreed with each other, and every npv() check still reconciled. A bug that keeps every check green while the answer is wrong by half is the most dangerous kind there is; it took a dedicated engineering session to trace and repair, not in a formula but in the engine itself. A new axis is exactly the instrument that flushes such things out.
Once all of that is settled, the axis delivers what it promised: base equity holds at 146,307.53, the best case comes out at 235,270 and the worst at 63,174, with all three methods still agreeing to the cent in every scenario.
What it cost
The video is edited: the assistant’s thinking and tool calls are fast-forwarded, so the runtime you watch is not the runtime I lived. Here are the session’s real figures, and I report them because the number should be reported — an AI assistant in a financial workflow has a price and a duration, and both belong next to the results.
- API time: 25 minutes 24 seconds — the time the model actually spent working.
- Tokens: roughly 15.2 million, of which about 14.7 million were cache reads — the model re-reading a conversation and a model structure it had already been shown, turn after turn. The genuinely new output — the formulas, the checks, the teaching note — is a thin slice on top of that.
- Cost: $13.57 (Opus 4.8, with a few cents of Haiku).
Thirteen dollars and twenty-five minutes of machine time to value a company three ways, prove the three agree, and write the analyst’s note — built on a forecast that itself cost six dollars in Episode 1. The cache-read figure is the honest shape of the work: most of what you pay for is the assistant holding the whole model in view while it reasons about one more line.
Where this goes next
We have a value now, and we have shown it is the same value three ways — and that the interesting disagreements come from what you assume, not which formula you pick. Next in the series we make the model breathe: a cost of capital that changes year to year, and real cash on the balance sheet — excess cash and overdrafts instead of the flat-cash policy that kept this one simple.
New episodes go up on the YouTube channel. Everything permanent lives here.
Appendix A: the formulas, in full
The complete formula set, dataset by dataset, pulled live from the finished betafixed model in the engine’s calculation order. Anything not listed is a typed input, not a formula.
A note on reading these. A bare name is a coordinate of the current dataset. Dataset.name reaches into another dataset. [year:first], [year:last], [year:prev] and [year:next] are positional operators of the recursive year dimension — the first period, the last, the one before, the one after — and [year:butlast] means every year except the last. [peer:butlast] is the same idea on the peer axis. A formula with no positional qualifier applies across every coordinate at once.
LastActuals — the 2022 unit economics
Scenario-free. These four lines derive the unit economics from the 2022 actuals; the forecast engine reads them for its opening year.
market share = company sales 000units / market size 000units
avg sales price = Sales t0 / company sales 000units
raw material unit cost = -Raw Materials t0 / company sales 000units
direct labor unit cost = -Direct Labor Costs t0 / company sales 000units
Peers — the unlevered beta
betaU[peer:butlast] = betaE*(1-D/V) + betaD*D/V
betaU[industry average] = mean(betaU[peer:butlast], dims=Dim{:peer})
rU = ValParams.rF + betaU * ValParams.CAPM market risk premium
The first line is the sliced-β formula: it computes an asset beta for the two real companies ([peer:butlast]) and leaves the industry average row to the second line, which averages only those companies.
ValParams — the cost of capital
betaU = Peers.betaU[industry average]
constant tax rate = Rates.tax rate
rU = rF + betaU*CAPM market risk premium
rD = rF + betaD*CAPM market risk premium
D/E = (constant debt ratio D/V)/(1-(constant debt ratio D/V))
rE = rU + (rU-rD)*(D/E)
rWacc = rE*(1-(constant debt ratio D/V)) + rD*(1-constant tax rate)*(constant debt ratio D/V)
rWacc shortcut = rU - rD*(constant debt ratio D/V)*constant tax rate
The last two lines are the WACC computed two ways — the definitional blend and the shortcut r_U - r_D(D/V)T — which agree exactly.
Rates — the debt cost
One formula. In this model the cost of debt is deliberately tied to the CAPM debt cost rD, so that the constant-ratio APV and the WACC method reconcile exactly rather than approximately.
cost of debt = ValParams.rD
rWacc V_U — the WACC benchmark and the zero-debt value
FCFF = SCF.FCFF
Continuation Value[year: last] = IS.EBITDA * ValParams.EV/EBITDA continuation value
rWacc = ValParams.rWacc
rU = ValParams.rU
V_L[year: last] = Continuation Value
V_L[year: butlast] = (FCFF[year: next] + V_L[year: next]) / (1 + rWacc)
Debt = V_L * ValParams.constant debt ratio D/V
Equity = V_L - Debt
V_U[year: last] = Continuation Value
V_U[year: butlast] = (FCFF[year: next] + V_U[year: next]) / (1 + rU)
APV — adjusted present value, two debt policies
The apvModel dimension carries two policies, predetD and constD/V. Only Debt and the shield’s discount rate rT differ between them; every other line is written once and shared.
Debt[predetD] = FinDebt.Outstanding debt
Debt[constD/V] = rWacc V_U.Debt
rT[predetD] = ValParams.rD
rT[constD/V] = ValParams.rU
Interest = Debt[year: prev] * Rates.cost of debt
Tax Shield = Interest * ValParams.constant tax rate
Tax Shield Value[year: last] = 0
Tax Shield Value[year: butlast] = (Tax Shield[year: next] + Tax Shield Value[year: next]) / (1 + rT)
V_U = rWacc V_U.V_U
V_L = V_U + Tax Shield Value
Equity Value = V_L - Debt
FTE — flow to equity
FCFF = rWacc V_U.FCFF
less after tax Interest = -(APV.Interest[constD/V]) * (1 - ValParams.constant tax rate)
change in Debt = APV.Debt[constD/V] - APV.Debt[constD/V][year: prev]
FCFE = FCFF + less after tax Interest + change in Debt
rE = ValParams.rE
Equity Continuation Value[year: last] = rWacc V_U.Continuation Value - rWacc V_U.Debt
Equity Value[year: last] = Equity Continuation Value
Equity Value[year: butlast] = (FCFE[year: next] + Equity Value[year: next]) / (1 + rE)
Check Results — the reconciliation
V_L da npv = npv(ValParams.rWacc, rWacc V_U.FCFF + rWacc V_U.Continuation Value)
V_U da npv = npv(ValParams.rU, rWacc V_U.FCFF + rWacc V_U.Continuation Value)
E da npv = npv(ValParams.rE, ifelse(isnan(FTE.FCFE), 0, FTE.FCFE) + FTE.Equity Continuation Value)
E da rWacc = rWacc V_U.Equity[year: first]
E da APV d cost = APV.Equity Value[constD/V][year: first]
E da FTE = FTE.Equity Value[year: first]
The forecast engine, carried from Episode 1
The datasets that produce the cash flows — SalesCOGS, FinDebt, IS, BS, SCF — are the ones we built in Episode 1, essentially unchanged except that their opening-year inputs now read from LastActuals rather than from Assumpt. Their full formulas are in that post’s Appendix A. The only line the valuation leans on directly is SCF.FCFF, the free cash flow to the firm, which feeds rWacc V_U above.
Appendix B: Glossary
Two short glossaries. Terms shared with Episode 1 — dataset, dimension and coordinate, coord-formula dimension, recursive dimension, cross-dataset reference, sum_group, cycle group, MCP, LBO, FCFF/FCFE — are defined in the Episode 1 glossary; this one adds what is new in Episode 2.
Impromptu and software
Positional slices — [year:next] and [peer:butlast]
The recursive dimensions give you a vocabulary for looking along an axis. Beyond Episode 1’s first/prev/rest, this model uses [year:next] (the following period — how the backward recursion reads next year’s value), [year:last] and [year:butlast] (the horizon, and every year before it), and the same idea on the peer axis: [peer:butlast] selects every peer except the summary row. A slice is how one formula says “these coordinates, not those” without leaving the named world for cell arithmetic.
The apvModel per-model dimension
An axis whose coordinates are not time or line items but whole modelling assumptions — here, the two debt policies predetD and constD/V. A formula written once applies to both; a formula written [predetD] or [constD/V] applies to one. It is how a single dataset holds a controlled comparison: everything shared is written once, and only the two lines that genuinely differ are split. The model makes the claim structurally — these are not two methods, they are one method under two assumptions.
npv()
The ordinary net-present-value function every spreadsheet has: npv(rate, cashflows) discounts a stream at a flat rate. The model uses it in Check Results as an independent restatement of values it computed by backward recursion — a deliberately different piece of machinery, so that agreement between them is a real check and not a tautology.
Finance
Beta, and unlevered (asset) beta
Beta measures how much an asset’s return moves with the market. A listed firm’s equity beta (\beta_E) is contaminated by its leverage; strip the financing out and you get the unlevered (asset) beta (\beta_U), the risk of the underlying business. Unlevering is \beta_U = \beta_E(E/V) + \beta_D(D/V) — the asset is a portfolio of the claims on it, so its beta is their value-weighted average.
rU, rE, rWacc
Three costs of capital for the same firm. rU (8.94 %) is the return demanded on the assets, before any financing. rE (11.94 %) is what equity holders demand once debt sits in front of them. rWacc (8.32 %) is the after-tax weighted average of what debt and equity cost — and, because interest is tax-deductible, it sits below rU by exactly the tax shield.
Modigliani–Miller and relevering
The Modigliani–Miller propositions say that, in a frictionless world, capital structure does not create value (Proposition I) — it only redistributes risk, so the cost of equity rises with leverage (Proposition II): r_E = r_U + (r_U - r_D)(D/E). Relevering is using that identity to convert an asset return back into an equity return at a chosen debt ratio.
WACC-DCF, continuation value and the exit multiple
The WACC discounted-cash-flow method values a firm by discounting its free cash flow to the firm at the WACC. Because you cannot forecast forever, you cap the horizon with a continuation (terminal) value — here an exit multiple, the last forecast year’s EBITDA times an assumed EV/EBITDA ratio (6.8). It is the simplest defensible anchor for everything beyond the forecast.
V_U and V_L
The unlevered and levered enterprise values. V_U (238,422) is what the business is worth financed entirely by equity; V_L (243,846) is what it is worth with the debt in place. The difference is the value of the tax shield.
Tax shield
The value created purely because interest is tax-deductible: the tax authority effectively pays a fraction of the interest bill. It is the gap between V_L and V_U, the gap between rU and rWacc, and — in APV — an explicit line item with its own cash flows.
APV (adjusted present value)
Valuing the levered firm in pieces: V_L = V_U + PV(\text{tax shields}). Value the business unlevered, then add the financing side-effects separately. Its virtue is transparency — the tax shield is a visible number with its own discount rate, not a digit buried inside a WACC — which is why it is the natural language of the leveraged buyout.
Flow to equity (FTE)
Valuing equity directly: build the cash flow that actually reaches shareholders — FCFF, less after-tax interest, plus net new borrowing — and discount it at the cost of equity, rE. No tax shield appears, because the interest is already deducted at its after-tax cost inside the cash flow itself.
Constant debt ratio vs predetermined (fixed) debt schedule
The debt-policy choice at the heart of the episode. Under a constant debt ratio the firm rebalances debt to a fixed fraction of its value every year, so future debt is unknown today and moves with the business — the tax shields carry the business risk and are discounted at rU (this is the Harris–Pringle convention). Under a predetermined schedule the euro amounts of debt are fixed in advance, so the shields are as safe as the debt and are discounted at rD (the Modigliani–Miller / Myers convention). Same firm, same cash flows, different equity value — because the two policies describe different companies.
The reconciliation identity
The fact that the WACC, constant-ratio APV and flow-to-equity methods must give the same equity value when their assumptions are made consistent — because r_{WACC} = r_U - r_D(D/V)T is exactly “discount at rU and add the shield back,” which is what APV does explicitly and what FTE does implicitly. Agreement confirms the arithmetic; it is a necessary check, never a sufficient one.





