We now have fully adiabatic circuits and
MOV that overwrites a register
throws away its old value — an erasure the hardware underneath cannot take back gently, however
perfect its ramps. If the machine is to be reversible, reversibility must be lifted into
Design rule: every instruction must be a bijection on the machine state — old state
recoverable from new. Walk the standard
Start with
| # | instruction | meaning | r1 | r2 | r3 |
|---|---|---|---|---|---|
| — | (start) | 3 | 5 | 0 | |
| 1 | ADD r1, r2 | r1 += r2 | 8 | 5 | 0 |
| 2 | EXCH r2, r3 | swap r2, r3 | 8 | 0 | 5 |
| 3 | ADDI r2, 4 | r2 += 4 | 8 | 4 | 5 |
| 4 | XOR r3, r2 | r3 ^= r2 | 8 | 4 | 1 |
| 5 | NEG r1 | r1 = −r1 | −8 | 4 | 1 |
Now run it backwards: invert each instruction, in reverse order — last done, first undone:
| # | inverse instruction | meaning | r1 | r2 | r3 |
|---|---|---|---|---|---|
| — | (end state) | −8 | 4 | 1 | |
| 5⁻¹ | NEG r1 | r1 = −r1 | 8 | 4 | 1 |
| 4⁻¹ | XOR r3, r2 | r3 ^= r2 | 8 | 4 | 5 |
| 3⁻¹ | SUBI r2, 4 | r2 −= 4 | 8 | 0 | 5 |
| 2⁻¹ | EXCH r2, r3 | swap r2, r3 | 8 | 5 | 0 |
| 1⁻¹ | SUB r1, r2 | r1 −= r2 | 3 | 5 | 0 |
Back to
Data instructions were the easy half. Control flow hides a subtler erasure: after an ordinary jump, the program counter holds the target address — and the machine has forgotten where it jumped from. Two different jump origins landing on one target is a many-to-one merge in the PC, just as fatal as a MOV. Running backwards from the target, which way do you go?
PISA's cure is paired branches: control transfer is annotated at both ends. A jump's target site carries a matching come-from annotation, so that at every point in execution the previous PC value is deducible from the current state — each jump-in is paired with exactly one acknowledged origin, and branch conditions are computed from registers that the branch itself does not disturb. Backwards execution then reads the pairing in reverse: the come-from tells the reversed machine which way the PC must retrace. The bookkeeping echoes everything in this course: what Bennett's histories did for Turing machines and retraction order did for cascades, come-from pairing does for the program counter. Instructions can also be classed expanding (they grow the represented information — e.g. producing a result alongside preserved inputs) or contracting (they consume previously saved information, running an expansion in reverse); a well-formed reversible program balances the two, which is precisely the garbage management story returning at instruction granularity.
Because a pendulum is the physicist's favourite machine that runs the same forwards and backwards: film a frictionless pendulum and the reversed film is indistinguishable from the original — and it swings all day on no energy input, losing only what friction skims. The MIT group (Carlin Vieri, Michael Frank, Tom Knight and colleagues, late 1990s) wanted exactly those two properties in silicon: a processor whose execution could swing either way, built on charge-recovery circuits that, like the pendulum's bob, borrow energy and give it back every cycle. The name is a thesis statement in one word. The project produced real fabricated chips — proof that "reversible computer" names an engineering artefact, not a thought experiment.
"ADD is invertible" has fine print: ADD