Monotonicity in concurrent systems stipulates that, in any global state, extant system actions remain executable when new processes are added to the state. This concept is not only natural and common in multi-threaded software, but also useful: if every thread's memory is finite, monotonicity often guarantees the decidability of safety property verification even when the number of running threads is unknown.
In this talk I show that the act of obtaining finite-data thread abstractions for model checking can be at odds with monotonicity: Predicate-abstracting certain classical monotone software results in non-monotone multi-threaded Boolean programs --- the monotonicity is "lost in the abstraction". As a result, well-established sound and complete safety checking algorithms for certain infinite-state systems become inapplicable. I demonstrate how the monotonicity in the abstract programs can be restored, without affecting safety properties of the non-monotone abstraction. This significantly improves earlier approaches of enforcing monotonicity via overapproximations.
We have applied our method successfully to numerous system-level concurrent programs and synchronization algorithms, whose predicate abstractions are, in many cases, fundamentally beyond existing tools.
Joint work with Alexander Kaiser and Daniel Kroening, Oxford University
|