This is an old revision of the document!
Predicate abstraction techniques
See predicate abstraction papers.
Three aspects:
- abstraction
- model checking (finite state or pushdown system)
- counterexample-driven refinement
Abstraction
Design space of abstractions:
- Cartesian product of abstractions for each predicate
- powerset with cartesian abstraction (ignores dependences in pre and post)
- powerset that takes into account the entire state (reduced product)
- focus (splitting, case analysis)
- best transformer in abstract domain
Computation using wp. Boolean programs.
Precision-preserving optimizations:
- cubes in increasing order
- do not update variables if command cannot change them
- cone of influence to reduce the number of predicates to consider
- syntactic construction of predicates
- caching of calls to theorem prover
Further approximations:
- bounding cube length to 3
- distributing approximation through logical operations
Model checking
Finite state space for now.
Bounded model checking for finite diameter systems.
Counterexample-driven refinement
Heuristic refinement
- expressions in branches
- adding weakest preconditions
- Craig's interpolation