Chapter 2 · Part I — Foundations and Recurrence as an Explanatory Model
The Rule That Remembers
#Opening signal
Try to compute while being allowed to remember only . You cannot. The recurrence needs two predecessors, and if you have discarded , the sequence stops dead. Now imagine the same failure in a system that matters: a deployment pipeline that can see its current state but has thrown away the state it would need to roll back to. It, too, stops dead the moment something goes wrong — not because the rule is complex, but because a required predecessor is gone.
#Mathematical core
FACT. The Fibonacci recurrence is second-order: each term depends on the two immediately preceding terms. More generally, a linear recurrence of order depends on the preceding terms, and to continue it you must retain at least those values. This is a precise statement about state requirements. The order of the recurrence is exactly the amount of preserved history the process needs to take one more step.
We can make the state requirement vivid with a small reformulation. Define the state vector . Then the recurrence becomes a single matrix step: FACT. This matrix form is not decoration; it is a well-known identity, and it makes the memory requirement explicit. The state of the process at step is not a single number but a pair — the two values the rule will consume. Lose either component of and you cannot take the next step. The matrix is sometimes called the Fibonacci Q-matrix, and its powers reproduce the sequence: .[4] We will use it again in Chapter 5 to compute far-off terms quickly, and in Chapter 12 to validate terms independently.
#A worked recurrence ledger
FACT. Here is the sequence from to , written as a ledger that shows each term and its derivation — the two predecessors it was computed from. This is what it looks like to grow while preserving provenance.
| Derivation | ||
|---|---|---|
| 0 | 0 | base case (declared) |
| 1 | 1 | base case (declared) |
| 2 | 1 | |
| 3 | 2 | |
| 4 | 3 | |
| 5 | 5 | |
| 6 | 8 | |
| 7 | 13 | |
| 8 | 21 | |
| 9 | 34 | |
| 10 | 55 | |
| 11 | 89 | |
| 12 | 144 | |
| 13 | 233 | |
| 14 | 377 | |
| 15 | 610 | |
| 16 | 987 | |
| 17 | 1597 | |
| 18 | 2584 | |
| 19 | 4181 | |
| 20 | 6765 |
Notice the third column. It is not part of the sequence, and no one needs it to read the numbers. But it is what makes the ledger auditable: with the derivation preserved, anyone can recompute any term and confirm it, and anyone can walk backward from to . A bare list of numbers loses this the moment it is written; the ledger keeps it.
#Odisena translation
CANON. Two of the four RFPA framing moves speak directly to this chapter. Recover means being able to reconstruct the prior state a rule requires. Preserve — one of the AVPT execution beats — means keeping the snapshots, sources, and predecessor states so that recovery is possible at all. The recurrence's order- memory requirement is the mathematical picture of a preservation obligation: the rule tells you exactly how much history you are contractually required to keep.
METHOD. In a real system, the analogue of the state vector is your recoverable checkpoint: the minimal bundle of prior state from which you can take the next step and, if needed, reverse it. Identifying that bundle — asking "what is the here? what must I never discard?" — is one of the most valuable design acts you can perform, and it is almost always skipped. The derivation column is the analogue of an evidence record: the notation of what produced the current state, kept not because you need it to run but because you need it to audit and recover.
#Boundary note
INTERPRETATION. The matrix form is beautiful, and it is tempting to treat it as proof that "everything is linear algebra underneath." Resist that. The matrix form is a faithful re-description of this recurrence; it is a fact about Fibonacci, not a claim that all systems reduce to matrix multiplication. What travels from the mathematics to the method is not the algebra itself but a design question the algebra makes unavoidable: what is the state I must preserve to take, and to reverse, one step?
#Applied CASE
CASE. In the Odisena AVPT continuous-integration and deployment work, this principle is implemented as a snapshot-first deployment cadence: before any change is rolled out, the pre-deployment state is preserved, the change is then attempted on a limited surface, and rollback and drift are tracked so that deployment velocity can be honestly compared against the time it takes to recover from an incident.[5] The pre-deployment snapshot is the state vector : the minimal preserved predecessor from which the previous known-good state can be reconstructed. A pipeline without that snapshot is a recurrence that has thrown away one of its two required predecessors — it can move forward but cannot come back.
#Failure mode
The failure mode here is the discarded predecessor. A system keeps its current state but not the state it would need to reverse or re-derive the current one. Everything is fine until a step fails or a result is disputed; then the system discovers it retained but not , and it is stuck. In deployment this is the pipeline with no rollback target. In writing it is the document with no earlier draft. In data work it is the migration with no pre-migration snapshot. The rule of thumb: if you cannot name the predecessors your next step consumes, you have almost certainly already discarded one of them.
#Reusable protocol — The Predecessor Preservation Checklist
- Name the order. How many prior states does one step of your process consume? (Fibonacci's answer is two.)
- Name the state bundle. What is the minimal set of prior state — the analogue of — needed to take and reverse one step?
- Verify preservation. Is every element of that bundle actually preserved before you take the step, not after?
- Record derivation. For each new state, record what it was computed from — the analogue of the ledger's third column.
- Test recovery. Can you reconstruct the immediately prior state from what you preserved? If not, you are not yet safe to proceed.
#Validation questions
- What is the "order" of your process — how many prior states does one step consume?
- Can you name, right now, the state bundle you would need to roll back your last change?
- For your most recent significant state change, is the derivation recorded anywhere?
- Have you ever actually tested a recovery, or only assumed one would work?
#Why the derivation column is not optional — a longer look
INTERPRETATION. It is worth lingering on why the third column of the ledger — the derivation — is the load-bearing part, because this is the single habit that most distinguishes systems that survive from systems that quietly rot. A bare list of numbers is self-certifying: it asserts its own correctness and gives you no way to check it. The moment you add the derivation, the list becomes externally verifiable: anyone can take , see that it claims to be , and confirm the arithmetic without trusting the person who wrote it. This is the difference between "trust me" and "here is my work." In a small ledger the difference feels pedantic. In a system that runs for years, accumulates thousands of states, and outlives the people who built it, the difference is the difference between an auditable history and an unfalsifiable legend. Every state that records its own derivation is a state that can defend itself; every state that records only its value is a state you must take on faith, and faith does not survive contact with a serious incident.
There is a second, subtler payoff. The derivation column makes localization of error possible. Suppose a single term deep in the ledger is wrong. If only values were stored, the error is invisible until it causes a downstream contradiction, and even then you cannot tell which term first went wrong. With derivations stored, you can walk the ledger and check each claimed derivation against its recorded predecessors; the first term whose derivation does not reproduce its value is exactly where the error entered. We will make this precise in Chapter 18, where a deliberately corrupted term is localized and rolled back using nothing but the preserved derivations and an invariant. For now, note the shape of the idea: preservation is not merely storage; it is the thing that makes diagnosis possible.
#The order of a recurrence is a preservation contract
INTERPRETATION. The most transferable idea in this chapter is that the order of a recurrence — the number of prior terms one step consumes — is a precise statement of how much history the system is contractually obligated to keep. Fibonacci is second-order, so it must keep two terms; a third-order recurrence must keep three; and a system whose next state depends on its entire history must keep everything. This gives you a diagnostic question of surprising power to ask of any real system: what is its order? How far back does one step actually reach? Teams are routinely wrong about this, and always in the same direction — they underestimate their system's order, believing one step depends on less history than it truly does, and so they preserve too little and are stranded when a step turns out to have needed a predecessor they discarded. The discipline is to determine the true order honestly, by asking not "what do I usually need?" but "what does the rule, in its worst case, consume?" — and then to preserve exactly that, treating the order as a contract rather than a guess.
There is a warning hidden here about systems whose order is unbounded — whose next state can, in principle, depend on any part of their entire history. Such systems cannot bound their preservation obligation by keeping a fixed window; they must either preserve everything (expensive) or accept that some recoveries will be impossible (dangerous), or — the disciplined path — redesign so that the effective order is bounded, by summarizing old history into a compact preserved state that captures everything future steps could need. This is exactly what the state-vector reformulation does for Fibonacci: it collapses "all of history" into the two-value state that provably suffices. Bounding a system's effective order — finding the compact preserved state that captures everything the future can require — is one of the highest-leverage design moves available, because it converts an unbounded, unaffordable preservation obligation into a bounded, affordable one without losing recoverability. The systems that scale gracefully are almost always the ones that found their bounded effective order; the ones that collapse under their own history are the ones that never asked what their order was.
#Bridge
We can now grow while preserving predecessors. But growth raises a question the sequence answers with surprising elegance: as the terms get larger, is there any stable relationship hiding inside the churn? The next chapter looks at the ratios between successive terms and finds a limit — and, with it, our first encounter with validation as the act of checking a new state against something known.