Automated Abstraction of Software

Automatically proving that a program has some property requires the discovery of appropriate abstractions. Such abstractions simplify the proof task and make it tractable. One approach is for a human to identify an appropriate abstraction. Another approach is to use the computer to search for an appropriate abstraction, based on the program and property under consideration. I will explain how the techniques of predicate abstraction and analysis of spurious error paths can guide the search for appropriate abstractions. These techniques are embedded in the SLAM analysis engine, which forms the core of a recently released Microsoft tool for checking Windows device drivers, called Static Driver Verifier.