Origin
George Boole, The Laws of Thought, 1854. Extended by Frege, Russell, and the propositional calculus. Applied to circuits by Shannon, 1937. Applied to software by Dijkstra, 1968.
The Principle
Propositional logic gives us exactly two values: true and false. A proposition is a statement that is one or the other. Compound propositions are built from simpler ones using AND (∧), OR (∨), NOT (¬), and implication (→).
Every if statement in every program ever written is a proposition. Every while loop is a proposition evaluated repeatedly. Every conditional branch is an assertion: "I believe this statement is true, and I will act on that belief." When the proposition is wrong — when the developer's logical model diverges from reality — the program takes the wrong branch. That is a bug. Not a typo, not a mistake, not an oversight. A logical error. A proposition that was false when the developer believed it was true.
Why This Is Bedrock
Control flow is applied propositional logic. Dijkstra proved this in 1968. Everything above us in the museum — every tangled conditional, every impossible state, every mishandled edge case — is a failure of logical reasoning about propositions.
This pattern has been found in applications built by talented developers at respected organizations across every decade of software history. Its presence in a codebase is not a reflection of the developer who wrote it — it is a reflection of what that developer was taught, what tools they had, and the path that was easiest given what they were taught. The goal is not to find fault. The goal is to find the pattern — before it finds you.
Katie's Law: The developers were not wrong. The shortcut was not wrong. The context changed and the shortcut didn't.