2002 · 280 citations · 14 references
ComputingComputer ScienceAlgorithmsFormal MethodsTheory Of ComputationAbstract InterpretationControl-flow AnalysisPredicate LogicStatic Code AnalysisVerificationAbstractionHeuristicsInvariant GenerationInvariantsLoop InvariantsPredicate AbstractionPredicate AnalysisProgram Verification
Software verification is a critical yet challenging problem, and static checking often requires programmer‑provided annotations such as method specifications and loop invariants, whose overhead—especially for loop invariants—poses a major barrier to adoption. This work seeks to alleviate that burden by automatically inferring loop invariants through predicate abstraction, including universally‑quantified invariants essential for programs manipulating unbounded data like arrays. The authors develop heuristics to generate suitable predicates for each loop and an efficient algorithm to compute the abstraction of state sets using these predicates, allowing optional programmer‑specified predicates. Experiments on a 44‑KLOC program demonstrate that the method automatically infers the necessary predicates and invariants for all but 31 of the 396 loop‑containing routines.
Software verification is an important and difficult problem. Many static checking techniques for software require annotations from the programmer in the form of method specifications and loop invariants. This annotation overhead, particularly of loop invariants, is a significant hurdle in the acceptance of static checking. We reduce the annotation burden by inferring loop invariants automatically.Our method is based on predicate abstraction, an abstract interpretation technique in which the abstract domain is constructed from a given set of predicates over program variables. A novel feature of our approach is that it infers universally-quantified loop invariants, which are crucial for verifying programs that manipulate unbounded data such as arrays. We present heuristics for generating appropriate predicates for each loop automatically; the programmer can specify additional predicates as well. We also present an efficient algorithm for computing the abstraction of a set of states in terms of a collection of predicates.Experiments on a 44KLOC program show that our approach can automatically infer the necessary predicates and invariants for all but 31 of the 396 routines that contain loops.
14
Graph-Based Algorithms for Boolean Function Manipulation
Bryant · IEEE Transactions on Computers · 1986 · 8.9K citations · Full text
Patrick Cousot, Radhia Cousot · 1977 · 6.2K citations
Automatic discovery of linear restraints among variables of a program
Patrick Cousot, Nicolas Halbwachs · 1978 · 1.6K citations
Automatic predicate abstraction of C programs
Thomas Ball, Rupak Majumdar, Todd Millstein et al. · ACM SIGPLAN Notices · 2012 · 703 citations
Automatic predicate abstraction of C programs
Thomas Ball, Rupak Majumdar, Todd Millstein et al. · 2001 · 438 citations