A program, a hardware circuit, a network protocol — any of them can be described as a transition system: a set of states and rules that say how the system moves from one state to the next. A bug is just a bad state the system should never reach.
Bounded Model Checking (BMC) asks a sharply focused question: is there an execution of at most steps that lands in a bad state? The idea, introduced by Armin Biere, Alessandro Cimatti, Edmund Clarke, and Yunshan Zhu in 1999, is disarmingly simple — unroll the transition relation times, add a clause asserting that the bad state is reached at some step, and hand the whole formula to a SAT solver.
If the solver says satisfiable, the satisfying assignment is an exact bug trace: state at step 0, state at step 1, ..., state at step . If it says unsatisfiable, no bug exists within steps. Increase , repeat.
This one trick turned formal verification from a niche academic exercise into a tool that chip designers and software engineers use every day.
Comments
Loading comments...