In this talk I will discuss Terminator, which is a program termination prover that supports large programs with arbitrarily nested loops or recursive functions, and imperative features such as references, functions with side-effects, and function pointers.
Terminator is based on a newly discovered method of counterexample-guided abstraction refinement for program termination proofs. The termination argument is constructed incrementally, based on failed proof attempts. Terminator also infers and proves required program invariants on demand.
We are now using Terminator to prove that Windows device driver dispatch routines always return back to their calling context. This talk will close with some discussion on these experimental results together with a bit of information on recent extensions.