Skip to main content
Top

2010 | Book

Computer Aided Verification

22nd International Conference, CAV 2010, Edinburgh, UK, July 15-19, 2010. Proceedings

Editors: Tayssir Touili, Byron Cook, Paul Jackson

Publisher: Springer Berlin Heidelberg

Book Series : Lecture Notes in Computer Science

insite
SEARCH

Table of Contents

Frontmatter

Invited Talks

Policy Monitoring in First-Order Temporal Logic

We present an approach to monitoring system policies. As a specification language, we use an expressive fragment of a temporal logic, which can be effectively monitored. We report on case studies in security and compliance monitoring and use these to show the adequacy of our specification language for naturally expressing complex, realistic policies and the practical feasibility of monitoring these policies using our monitoring algorithm.

David Basin, Felix Klaedtke, Samuel Müller
Retrofitting Legacy Code for Security
(Invited Talk)

Research in computer security has historically advocated Design for Security, the principle that security must be proactively integrated into the design of a system. While examples exist in the research literature of systems that have been designed for security, there are few examples of such systems deployed in the real world. Economic and practical considerations force developers to abandon security and focus instead on functionality and performance, which are more tangible than security. As a result, large bodies of legacy code often have inadequate security mechanisms. Security mechanisms are added to legacy code on-demand using ad hoc and manual techniques, and the resulting systems are often insecure.

Somesh Jha
Quantitative Information Flow: From Theory to Practice?

Most computational systems share two basic properties: first they process information, second they allow for observations of this processing to be made. For example a program will typically process the inputs and allows its output to be observed on a screen. In a distributed system each unit processes information and will allow some observation to be made by the environment or other units, for example by message passing. In an election voters cast their vote, officials count the votes and the public can observe the election result.

Pasquale Malacaria
Memory Management in Concurrent Algorithms
(Invited Talk)

Many shared memory concurrent algorithms involve accessing dynamic nodes of shared structures optimistically, where a thread may access dynamic nodes while they are being updated by concurrent threads. Optimistic access is often necessary to enable non-blocking progress, and it is desirable for increasing concurrency and reducing conflicts among concurrent operations.

Maged M. Michael

Invited Tutorials

ABC: An Academic Industrial-Strength Verification Tool

ABC is a public-domain system for logic synthesis and formal verification of binary logic circuits appearing in synchronous hardware designs. ABC combines scalable logic transformations based on And-Inverter Graphs (AIGs), with a variety of innovative algorithms. A focus on the synergy of sequential synthesis and sequential verification leads to improvements in both domains. This paper introduces ABC, motivates its development, and illustrates its use in formal verification.

Robert Brayton, Alan Mishchenko
There’s Plenty of Room at the Bottom: Analyzing and Verifying Machine Code
(Invited Tutorial)

This paper discusses the obstacles that stand in the way of doing a good job of machine-code analysis. Compared with analysis of source code, the challenge is to drop all assumptions about having certain kinds of information available (variables, control-flow graph, call-graph, etc.) and also to address new kinds of behaviors (arithmetic on addresses, jumps to “hidden” instructions starting at positions that are out of registration with the instruction boundaries of a given reading of an instruction stream, self-modifying code, etc.).

The paper describes some of the challenges that arise when analyzing machine code, and what can be done about them. It also provides a rationale for some of the design decisions made in the machine-code-analysis tools that we have built over the past few years.

Thomas Reps, Junghee Lim, Aditya Thakur, Gogul Balakrishnan, Akash Lal
Constraint Solving for Program Verification: Theory and Practice by Example

Program verification relies on the construction of auxiliary assertions describing various aspects of program behaviour, e.g., inductive invariants, resource bounds, and interpolants for characterizing reachable program states, ranking functions for approximating number of execution steps until program termination, or recurrence sets for demonstrating non-termination. Recent advances in the development of constraint solving tools offer an unprecedented opportunity for the efficient automation of this task. This paper presents a series of examples illustrating algorithms for the automatic construction of such auxiliary assertions by utilizing constraint solvers as the basic computing machinery.

Andrey Rybalchenko

Session 1. Software Model Checking

Invariant Synthesis for Programs Manipulating Lists with Unbounded Data

We address the issue of automatic invariant synthesis for sequential programs manipulating singly-linked lists carrying data over infinite data domains. We define for that a framework based on abstract interpretation which combines a specific finite-range abstraction on the shape of the heap with an abstract domain on sequences of data, considered as a parameter of the approach. We instantiate our framework by introducing different abstractions on data sequences allowing to reason about various aspects such as their sizes, the sums or the multisets of their elements, or relations on their data at different (linearly ordered or successive) positions. To express the latter relations we define a new domain whose elements correspond to an expressive class of first order universally quantified formulas. We have implemented our techniques in an efficient prototype tool and we have shown that our approach is powerful enough to generate non-trivial invariants for a significant class of programs.

Ahmed Bouajjani, Cezara Drăgoi, Constantin Enea, Ahmed Rezine, Mihaela Sighireanu
Termination Analysis with Compositional Transition Invariants

Modern termination provers rely on a safety checker to construct disjunctively well-founded transition invariants. This safety check is known to be the bottleneck of the procedure. We present an alternative algorithm that uses a light-weight check based on transitivity of ranking relations to prove program termination. We provide an experimental evaluation over a set of 87 Windows drivers, and demonstrate that our algorithm is often able to conclude termination by examining only a small fraction of the program. As a consequence, our algorithm is able to outperform known approaches by multiple orders of magnitude.

Daniel Kroening, Natasha Sharygina, Aliaksei Tsitovich, Christoph M. Wintersteiger
Lazy Annotation for Program Testing and Verification

We describe an interpolant-based approach to test generation and model checking for sequential programs. The method generates Floyd/Hoare style annotations of the program on demand, as a result of failure to achieve goals, in a manner analogous to conflict clause learning in a DPLL style SAT solver.

Kenneth L. McMillan
The Static Driver Verifier Research Platform

The

Sdv

Research Platform (

Sdvrp

) is a new academic release of Static Driver Verifier (

Sdv

) and the

Slam

software model checker that contains: (1) a parameterized version of

Sdv

that allows one to write custom API rules for APIs independent of device drivers; (2) thousands of Boolean programs generated by

Sdv

in the course of verifying Windows device drivers, including the functional and performance results (of the

Bebop

model checker) and test scripts to allow comparison against other Boolean program model checkers; (3) a new version of the

Slam

analysis engine, called

Slam

2, that is much more robust and performant.

Thomas Ball, Ella Bounimova, Vladimir Levin, Rahul Kumar, Jakob Lichtenberg
Dsolve: Safety Verification via Liquid Types

We present

Dsolve

, a verification tool for

OCaml

.

Dsolve

automates verification by inferring “Liquid” refinement types that are expressive enough to verify a variety of complex safety properties.

Ming Kawaguchi, Patrick M. Rondon, Ranjit Jhala
Contessa: Concurrency Testing Augmented with Symbolic Analysis

Testing of multi-threaded programs poses enormous challenges. To improve the coverage of testing, we present a framework named

Contessa

that augments conventional testing (concrete execution) with symbolic analysis in a scalable and efficient manner to explore both thread interleaving and input data space. It is built on partial-order reduction techniques that generate verification conditions with reduced size and search space. It also provides a visual support for debugging the witness traces. We show its significance in testbeds.

Sudipta Kundu, Malay K. Ganai, Chao Wang

Session 2. Model Checking and Automata

Simulation Subsumption in Ramsey-Based Büchi Automata Universality and Inclusion Testing

There are two main classes of methods for checking universality and language inclusion of Büchi-automata: Rank-based methods and Ramsey-based methods. While rank-based methods have a better worst-case complexity, Ramsey-based methods have been shown to be quite competitive in practice [10,9]. It was shown in [10] (for universality checking) that a simple subsumption technique, which avoids exploration of certain cases, greatly improves the performance of the Ramsey-based method. Here, we present a much more general subsumption technique for the Ramsey-based method, which is based on using simulation preorder on the states of the Büchi-automata. This technique applies to both universality and inclusion checking, yielding a substantial performance gain over the previous simple subsumption approach of [10].

Parosh Aziz Abdulla, Yu-Fang Chen, Lorenzo Clemente, Lukáš Holík, Chih-Duo Hong, Richard Mayr, Tomáš Vojnar
Efficient Emptiness Check for Timed Büchi Automata

The Büchi non-emptiness problem for timed automata concerns deciding if a given automaton has an infinite non-Zeno run satisfying the Büchi accepting condition. The standard solution to this problem involves adding an auxiliary clock to take care of the non-Zenoness. In this paper, we show that this simple transformation may sometimes result in an exponential blowup. We propose a method avoiding this blowup.

Frédéric Herbreteau, B. Srivathsan, Igor Walukiewicz

Session 3. Tools

Merit: An Interpolating Model-Checker

We present the tool

Merit

, a

Cegar

model-checker for safety properties of counter-systems, which sits in the Lazy Abstraction with Interpolants (

lawi

) framework.

lawi

is parametric with respect to the interpolation technique and so is

Merit

. Thanks to its open architecture,

Merit

makes it possible to experiment new refinement techniques without having to re-implement the generic, technical part of the framework. In this paper, we first recall the basics of the

lawi

algorithm. We then explain two heuristics in order to help termination of the

Cegar

loop: the first one presents different approaches to symbolically compute interpolants. The second one focuses on how to improve the unwinding strategy. We finally report our experimental results, obtained using those heuristics, on a large amount of classical models.

Nicolas Caniart
Breach, A Toolbox for Verification and Parameter Synthesis of Hybrid Systems

We describe

Breach

, a Matlab/C++ toolbox providing a coherent set of simulation-based techniques aimed at the analysis of deterministic models of hybrid dynamical systems. The primary feature of

Breach

is to facilitate the computation and the property investigation of large sets of trajectories. It relies on an efficient numerical solver of ordinary differential equations that can also provide information about sensitivity with respect to parameters variation. The latter is used to perform approximate reachability analysis and parameter synthesis. A major novel feature is the robust monitoring of metric interval temporal logic (MITL) formulas. The application domain of

Breach

ranges from embedded systems design to the analysis of complex non-linear models from systems biology.

Alexandre Donzé
Jtlv: A Framework for Developing Verification Algorithms

Jtlv

is a computer-aided verification scripting environment offering state-of-the-art Integrated Developer Environment for algorithmic verification applications.

Jtlv

may be viewed as a new, and much enhanced

Tlv

[18], with Java rather than

Tlv

-basic as the scripting language. JTLV attaches its internal parsers as an Eclipse editor, and facilitates a rich, common, and abstract verification developer environment that is implemented as an Eclipse plugin.

Amir Pnueli, Yaniv Sa’ar, Lenore D. Zuck
Petruchio: From Dynamic Networks to Nets

We introduce

Petruchio

, a tool for computing Petri net translations of dynamic networks. To cater for unbounded architectures beyond the capabilities of existing implementations, the principle fixed-point engine runs interleaved with coverability queries. We discuss algorithmic enhancements and provide experimental evidence that

Petruchio

copes with models of reasonable size.

Roland Meyer, Tim Strazny

Session 4. Counter and Hybrid Systems Verification

Synthesis of Quantized Feedback Control Software for Discrete Time Linear Hybrid Systems

We present an algorithm that given a

Discrete Time Linear Hybrid System

${\cal H}$

returns a correct-by-construction software implementation

K

for a (

near time optimal

) robust quantized feedback controller for

${\cal H}$

along with the set of states on which

K

is guaranteed to work correctly (

controllable region

). Furthermore,

K

has a

Worst Case Execution Time

linear in the number of bits of the quantization schema.

Federico Mari, Igor Melatti, Ivano Salvo, Enrico Tronci
Safety Verification for Probabilistic Hybrid Systems

The interplay of random phenomena and continuous real-time control deserves increased attention for instance in wireless sensing and control applications. Safety verification for such systems thus needs to consider probabilistic variations of systems with hybrid dynamics. In safety verification of classical hybrid systems we are interested in whether a certain set of unsafe system states can be reached from a set of initial states. In the probabilistic setting, we may ask instead whether the probability of reaching unsafe states is below some given threshold. In this paper, we consider probabilistic hybrid systems and develop a general abstraction technique for verifying probabilistic safety problems. This gives rise to the first mechanisable technique that can, in practice, formally verify safety properties of non-trivial continuous-time stochastic hybrid systems—without resorting to point-wise discretisation. Moreover, being based on arbitrary abstractions computed by tools for the analysis of non-probabilistic hybrid systems, improvements in effectivity of such tools directly carry over to improvements in effectivity of the technique we describe. We demonstrate the applicability of our approach on a number of case studies, tackled using a prototypical implementation.

Lijun Zhang, Zhikun She, Stefan Ratschan, Holger Hermanns, Ernst Moritz Hahn
A Logical Product Approach to Zonotope Intersection

We define and study a new abstract domain which is a fine-grained combination of zonotopes with (sub-)polyhedric domains such as the interval, octagon, linear template or polyhedron domains. While abstract transfer functions are still rather inexpensive and accurate even for interpreting non-linear computations, we are able to also interpret tests (i.e. intersections) efficiently. This fixes a known drawback of zonotopic methods, as used for reachability analysis for hybrid systems as well as for invariant generation in abstract interpretation: intersection of zonotopes are not always zonotopes, and there is not even a best zonotopic over-approximation of the intersection. We describe some examples and an implementation of our method in the APRON library, and discuss some further interesting combinations of zonotopes with non-linear or non-convex domains such as quadratic templates and maxplus polyhedra.

Khalil Ghorbal, Eric Goubault, Sylvie Putot
Fast Acceleration of Ultimately Periodic Relations

Computing transitive closures of integer relations is the key to finding precise invariants of integer programs. In this paper, we describe an efficient algorithm for computing the transitive closures of difference bounds, octagonal and finite monoid affine relations. On the theoretical side, this framework provides a common solution to the acceleration problem, for all these three classes of relations. In practice, according to our experiments, the new method performs up to four orders of magnitude better than the previous ones, making it a promising approach for the verification of integer programs.

Marius Bozga, Radu Iosif, Filip Konečný
An Abstraction-Refinement Approach to Verification of Artificial Neural Networks

A key problem in the adoption of artificial neural networks in safety-related applications is that misbehaviors can be hardly ruled out with traditional analytical or probabilistic techniques. In this paper we focus on specific networks known as Multi-Layer Perceptrons (MLPs), and we propose a solution to verify their safety using abstractions to Boolean combinations of linear arithmetic constraints. We show that our abstractions are consistent, i.e., whenever the abstract MLP is declared to be safe, the same holds for the concrete one. Spurious counterexamples, on the other hand, trigger refinements and can be leveraged to automate the correction of misbehaviors. We describe an implementation of our approach based on the

HySAT

solver, detailing the abstraction-refinement process and the automated correction strategy. Finally, we present experimental results confirming the feasibility of our approach on a realistic case study.

Luca Pulina, Armando Tacchella

Session 5. Memory Consistency

Fences in Weak Memory Models

We present a class of relaxed memory models, defined in Coq, parameterised by the chosen permitted local reorderings of reads and writes, and the visibility of inter- and intra-processor communications through memory (

e.g.

store atomicity relaxation). We prove results on the required behaviour and placement of memory fences to restore a given model (such as Sequential Consistency) from a weaker one. Based on this class of models we develop a tool,

diy

, that systematically and automatically generates and runs litmus tests to determine properties of processor implementations. We detail the results of our experiments on Power and the model we base on them. This work identified a rare implementation error in Power 5 memory barriers (for which IBM is providing a workaround); our results also suggest that Power 6 does not suffer from this problem.

Jade Alglave, Luc Maranget, Susmit Sarkar, Peter Sewell
Generating Litmus Tests for Contrasting Memory Consistency Models

Well-defined memory consistency models are necessary for writing correct parallel software. Developing and understanding formal specifications of hardware memory models is a challenge due to the subtle differences in allowed reorderings and different specification styles. To facilitate exploration of memory model specifications, we have developed a technique for systematically comparing hardware memory models specified using both operational and axiomatic styles. Given two specifications, our approach generates all possible multi-threaded programs up to a specified bound, and for each such program, checks if one of the models can lead to an observable behavior not possible in the other model. When the models differs, the tool finds a minimal “litmus test” program that demonstrates the difference. A number of optimizations reduce the number of programs that need to be examined. Our prototype implementation has successfully compared both axiomatic and operational specifications of six different hardware memory models. We describe two case studies: (1) development of a non-store atomic variant of an existing memory model, which illustrates the use of the tool while developing a new memory model, and (2) identification of a subtle specification mistake in a recently published axiomatic specification of TSO.

Sela Mador-Haim, Rajeev Alur, Milo M. K. Martin

Session 6. Verification of Hardware and Low Level Code

Directed Proof Generation for Machine Code

We present the algorithms used in

McVeto

(

M

achine-

C

ode

VE

rification

TO

ol), a tool to check whether a stripped machine-code program satisfies a safety property. The verification problem that

McVeto

addresses is challenging because it cannot assume that it has access to (i) certain structures commonly relied on by source-code verification tools, such as control-flow graphs and call-graphs, and (ii) meta-data, such as information about variables, types, and aliasing. It cannot even rely on out-of-scope local variables and return addresses being protected from the program’s actions. What distinguishes

McVeto

from other work on software model checking is that it shows how verification of machine-code can be performed, while avoiding conventional techniques that would be unsound if applied at the machine-code level.

Aditya Thakur, Junghee Lim, Akash Lal, Amanda Burton, Evan Driscoll, Matt Elder, Tycho Andersen, Thomas Reps
Verifying Low-Level Implementations of High-Level Datatypes

For efficiency and portability, network packet processing code is typically written in low-level languages and makes use of bit-level operations to compactly represent data. Although packet data is highly structured, low-level implementation details make it difficult to verify that the behavior of the code is consistent with high-level data invariants. We introduce a new approach to the verification problem, using a high-level definition of packet types as part of a specification rather than an implementation. The types are not used to check the code directly; rather, the types introduce functions and predicates that can be used to assert the consistency of code with programmer-defined data assertions. We describe an encoding of these types and functions using the theories of inductive datatypes, bit vectors, and arrays in the

Cvc

SMT solver. We present a case study in which the method is applied to open-source networking code and verified within the

Cascade

verification platform.

Christopher L. Conway, Clark Barrett
Automatic Generation of Inductive Invariants from High-Level Microarchitectural Models of Communication Fabrics

Abstract microarchitectural models of communication fabrics present a challenge for verification. Due to the presence of deep pipelining, a large number of queues and distributed control, the state space of such models is usually too large for enumeration by protocol verification tools such as Murphi. On the other hand, we find that state-of-the-art

rtl

model checkers such as

abc

have poor performance on these models since there is very little opportunity for localization and most of the recent capacity advances in

rtl

model checking have come from better ways of discarding the irrelevant parts of the model. In this work we explore a new approach for verifying these models where we capture a model at a high level of abstraction by requiring that it be described using a small set of well-defined microarchitectural primitives. We exploit the high level structure present in this description, to automatically strengthen some classes of properties, in order to make them 1-step inductive, and then use an

rtl

model checker to prove them. In some cases, even if we cannot make the property inductive, we can dramatically reduce the number and complexity of lemmas that are needed to make the property inductive.

Satrajit Chatterjee, Michael Kishinevsky
Efficient Reachability Analysis of Büchi Pushdown Systems for Hardware/Software Co-verification

We present an efficient approach to reachability analysis of Büchi Pushdown System (BPDS) models for Hardware/Software (HW/SW) co-verificat-ion. This approach utilizes the asynchronous nature of the HW/SW interactions to reduce unnecessary HW/SW state transition orders being explored in co-verificat-ion. The reduction is applied when the verification model is constructed. We have realized this approach in our co-verification tool, CoVer, and applied it to the co-verification of two fully functional Windows device drivers with their device models respectively. Both of the drivers are open source and their original C code has been used. CoVer has proven seven safety properties and detected seven previously undiscovered software bugs. Evaluation shows that the reduction can significantly scale co-verification.

Juncao Li, Fei Xie, Thomas Ball, Vladimir Levin

Session 7. Tools

LTSmin: Distributed and Symbolic Reachability

In model checking, analysis algorithms are applied to large graphs (state spaces), which model the behavior of (computer) systems. These models are typically generated from specifications in high-level languages. The

LTSmin

toolset provides means to generate state spaces from high-level specifications, to check safety properties on-the-fly, to store the resulting labelled transition systems (LTSs) in compressed format, and to minimize them with respect to (branching) bisimulation.

Stefan Blom, Jaco van de Pol, Michael Weber
libalf: The Automata Learning Framework

This paper presents

libalf

, a comprehensive, open-source library for learning formal languages.

libalf

covers various well-known learning techniques for finite automata (e.g. Angluin’s

L*, Biermann

,

RPNI

etc.) as well as novel learning algorithms (such as for NFA and visibly one-counter automata).

libalf

is flexible and allows facilely interchanging learning algorithms and combining domain-specific features in a plug-and-play fashion. Its modular design and

C++

implementation make it a suitable platform for adding and engineering further learning algorithms for new target models (e.g., Büchi automata).

Benedikt Bollig, Joost-Pieter Katoen, Carsten Kern, Martin Leucker, Daniel Neider, David R. Piegdon

Session 8. Synthesis

Symbolic Bounded Synthesis

Synthesis of finite state systems from full linear time temporal logic (LTL) specifications is gaining more and more attention as several recent achievements have significantly improved its practical applicability. Many works in this area are based on the Safraless synthesis approach. Here, the computation is usually performed either in an explicit way or using symbolic data structures other than binary decision diagrams (BDDs). In this paper, we close this gap and consider Safraless synthesis using BDDs as state space representation. The key to this combination is the application of novel optimisation techniques which decrease the number of state bits in such a representation significantly. We evaluate our approach on several practical benchmarks, including a new load balancing case study. Our experiments show an improvement of several orders of magnitude over previous approaches.

Rüdiger Ehlers
Measuring and Synthesizing Systems in Probabilistic Environments

Often one has a preference order among the different systems that satisfy a given specification. Under a probabilistic assumption about the possible inputs, such a preference order is naturally expressed by a weighted automaton, which assigns to each word a value, such that a system is preferred if it generates a higher expected value. We solve the following optimal-synthesis problem: given an omega-regular specification, a Markov chain that describes the distribution of inputs, and a weighted automaton that measures how well a system satisfies the given specification under the given input assumption, synthesize a system that optimizes the measured value.

For safety specifications and measures that are defined by mean-payoff automata, the optimal-synthesis problem amounts to finding a strategy in a Markov decision process (MDP) that is optimal for a long-run average reward objective, which can be done in polynomial time. For general omega-regular specifications, the solution rests on a new, polynomial-time algorithm for computing optimal strategies in MDPs with mean-payoff parity objectives. We present some experimental results showing optimal systems that were automatically generated in this way.

Krishnendu Chatterjee, Thomas A. Henzinger, Barbara Jobstmann, Rohit Singh
Achieving Distributed Control through Model Checking

We apply model checking of knowledge properties to the design of distributed controllers that enforce global constraints on concurrent systems. We calculate when processes can decide, autonomously, to take or block an action so that the global constraint will not be violated. When the separate processes cannot make this decision alone, it may be possible to temporarily coordinate several processes in order to achieve sufficient knowledge jointly and make combined decisions. Since the overhead induced by such coordinations is important, we strive to minimize their number, again using model checking. We show how this framework is applied to the design of controllers that guarantee a priority policy among transitions.

Susanne Graf, Doron Peled, Sophie Quinton
Robustness in the Presence of Liveness

Systems ought to behave reasonably even in circumstances that are not anticipated in their specifications. We propose a definition of robustness for liveness specifications which prescribes, for any number of environment assumptions that are violated, a minimal number of system guarantees that must still be fulfilled. This notion of robustness can be formulated and realized using a Generalized Reactivity formula. We present an algorithm for synthesizing robust systems from such formulas. For the important special case of Generalized Reactivity formulas of rank 1, our algorithm improves the complexity of [PPS06] for large specifications with a small number of assumptions and guarantees.

Roderick Bloem, Krishnendu Chatterjee, Karin Greimel, Thomas A. Henzinger, Barbara Jobstmann
RATSY – A New Requirements Analysis Tool with Synthesis

Formal specifications play an increasingly important role in system design-flows. Yet, they are not always easy to deal with. In this paper we present RATSY, a successor of the Requirements Analysis Tool RAT. RATSY extends RAT in several ways. First, it includes a new graphical user interface to specify system properties as simple Büchi word automata. Second, it can help debug incorrect specifications by means of a game-based approach. Third, it allows correct-by-construction synthesis of systems from their temporal properties. These new features and their seamless integration assist in property-based design processes.

Roderick Bloem, Alessandro Cimatti, Karin Greimel, Georg Hofferek, Robert Könighofer, Marco Roveri, Viktor Schuppan, Richard Seeber
Comfusy: A Tool for Complete Functional Synthesis
(Tool Presentation)

Synthesis of program fragments from specifications can make programs easier to write and easier to reason about. We present

Comfusy

, a tool that extends the compiler for the general-purpose programming language Scala with (non-reactive) functional synthesis over unbounded domains.

Comfusy

accepts expressions with input and output variables specifying relations on integers and sets.

Comfusy

symbolically computes the precise domain for the given relation and generates the function from inputs to outputs. The outputs are guaranteed to satisfy the relation whenever the inputs belong to the relation domain. The core of our synthesis algorithm is an extension of quantifier elimination that generates programs to compute witnesses for eliminated variables. We present examples that demonstrate software synthesis using

Comfusy

and illustrate how synthesis simplifies software development.

Viktor Kuncak, Mikaël Mayer, Ruzica Piskac, Philippe Suter

Session 9. Concurrent Program Verification I

Universal Causality Graphs: A Precise Happens-Before Model for Detecting Bugs in Concurrent Programs

Triggering errors in concurrent programs is a notoriously difficult task. A key reason for this is the behavioral complexity resulting from the large number of interleavings of operations of different threads. Efficient static techniques, therefore, play a critical role in restricting the set of interleavings that need be explored in greater depth. The goal here is to exploit scheduling constraints imposed by synchronization primitives to determine whether the property at hand can be violated and report schedules that may lead to such a violation. Towards that end, we propose the new notion of a

Universal Causality Graph (UCG)

that given a correctness property

P

, encodes the set of all (statically) feasible interleavings that may violate

P

. UCGs provide a unified happens-before model by capturing causality constraints imposed by the property at hand as well as scheduling constraints imposed by synchronization primitives as causality constraints. Embedding all these constraints into one common framework allows us to exploit the synergy between the constraints imposed by different synchronization primitives, as well as between the constraints imposed by the property and the primitives. This often leads to the removal of significantly more redundant interleavings than would otherwise be possible. Importantly, it also guarantees both soundness and completeness of our technique for identifying statically feasible interleavings. As an application, we demonstrate the use of UCGs in enhancing the precision and scalability of predictive analysis in the context of runtime verification of concurrent programs.

Vineet Kahlon, Chao Wang
Automatically Proving Linearizability

This paper presents a practical automatic verification procedure for proving linearizability (i.e., atomicity and functional correctness) of concurrent data structure implementations. The procedure employs a novel instrumentation to verify logically pure executions, and is evaluated on a number of standard concurrent stack, queue and set algorithms.

Viktor Vafeiadis
Model Checking of Linearizability of Concurrent List Implementations

Concurrent data structures with fine-grained synchronization are notoriously difficult to implement correctly. The difficulty of reasoning about these implementations does not stem from the number of variables or the program size, but rather from the large number of possible interleavings. These implementations are therefore prime candidates for model checking. We introduce an algorithm for verifying linearizability of singly-linked heap-based concurrent data structures. We consider a model consisting of an unbounded heap where each vertex stores an element from an unbounded data domain, with a restricted set of operations for testing and updating pointers and data elements. Our main result is that linearizability is decidable for programs that invoke a fixed number of methods, possibly in parallel. This decidable fragment covers many of the common implementation techniques — fine-grained locking, lazy synchronization, and lock-free synchronization. We also show how the technique can be used to verify optimistic implementations with the help of programmer annotations. We developed a verification tool CoLT and evaluated it on a representative sample of Java implementations of the concurrent set data structure. The tool verified linearizability of a number of implementations, found a known error in a lock-free implementation and proved that the corrected version is linearizable.

Pavol Černý, Arjun Radhakrishna, Damien Zufferey, Swarat Chaudhuri, Rajeev Alur
Local Verification of Global Invariants in Concurrent Programs

We describe a practical method for reasoning about realistic concurrent programs. Our method allows global two-state invariants that restrict update of shared state. We provide simple, sufficient conditions for checking those global invariants modularly. The method has been implemented in VCC, an automatic, sound, modular verifier for concurrent C programs. VCC has been used to verify functional correctness of tens of thousands of lines of Microsoft’s Hyper-V virtualization platform and of SYSGO’s embedded real-time operating system PikeOS.

Ernie Cohen, Michał Moskal, Wolfram Schulte, Stephan Tobies
Abstract Analysis of Symbolic Executions

Multicore technology has moved concurrent programming to the forefront of computer science. In this paper, we look at the problem of reasoning about concurrent systems with infinite data domains and non-deterministic input, and develop a method for verification and falsification of safety properties of such systems. Novel characteristics of this method are (a) constructing under-approximating models via symbolic execution with abstract matching and (b) proving safety using under-approximating models.

Aws Albarghouthi, Arie Gurfinkel, Ou Wei, Marsha Chechik

Session 10. Compositional Reasoning

Automated Assume-Guarantee Reasoning through Implicit Learning

We propose a purely implicit solution to the contextual assumption generation problem in assume-guarantee reasoning. Instead of improving the

L

*

algorithm — a learning algorithm for

finite automata

, our algorithm computes implicit representations of contextual assumptions by the CDNF algorithm — a learning algorithm for

Boolean functions

. We report three parametrized test cases where our solution outperforms the monolithic interpolation-based Model Checking algorithm.

Yu-Fang Chen, Edmund M. Clarke, Azadeh Farzan, Ming-Hsien Tsai, Yih-Kuen Tsay, Bow-Yaw Wang
Learning Component Interfaces with May and Must Abstractions

Component interfaces are the essence of modular program analysis. In this work, a component interface documents correct sequences of invocations to the component’s public methods. We present an automated framework that extracts finite

safe

,

permissive

, and

minimal

interfaces, from potentially infinite software components. Our proposed framework uses the L* automata-learning algorithm to learn finite interfaces for an infinite-state component. It is based on the observation that an interface

permissive

with respect to the component’s must abstraction and

safe

with respect to its may abstraction provides a precise characterization of the legal invocations to the methods of the concrete component. The abstractions are refined automatically from counterexamples obtained during the reachability checks performed by our framework. The use of must abstractions enables us to avoid an exponentially expensive determinization step that is required when working with may abstractions only, and the use of L* guarantees minimality of the generated interface. We have implemented the algorithm in the ARMC tool and report on its application to a number of case studies including several Java2SDK and J2SEE library classes as well as to NASA flight-software components.

Rishabh Singh, Dimitra Giannakopoulou, Corina Păsăreanu
A Dash of Fairness for Compositional Reasoning

Proofs of progress properties often require fairness assumptions. Directly incorporating global fairness assumptions in a compositional method is difficult, given the local flavor of such reasoning. We present a fully automated local reasoning algorithm which handles fairness assumptions through a process of iterative refinement. Refinement strengthens local proofs by the addition of auxiliary shared variables which expose internal process state; it is needed as local reasoning is inherently incomplete. Experiments demonstrate that the new algorithm shows significant improvement over standard model checking.

Ariel Cohen, Kedar S. Namjoshi, Yaniv Sa’ar
SPLIT: A Compositional LTL Verifier

This paper describes

Split

, a compositional verifier for safety and general

Ltl

properties of shared-variable, multi-threaded programs. The foundation is a computation of compact local invariants, one for each process, which are used for constructing a proof for the property. An automatic refinement procedure gradually exposes more local information, until a decisive result (proof/disproof) is obtained.

Ariel Cohen, Kedar S. Namjoshi, Yaniv Sa’ar

Session 11. Tools

A Model Checker for AADL

We present a graphical toolset for verifying AADL models, which are gaining widespread acceptance in aerospace, automobile and avionics industries for comprehensively specifying safety-critical systems by capturing functional, probabilistic and hybrid aspects. Analyses are implemented on top of mature model checking tools and range from requirements validation to functional verification, safety assessment via automatic derivation of FMEA tables and dynamic fault trees, to performability evaluation, and diagnosability analysis. The toolset is currently being applied to several case studies by a major industrial developer of aerospace systems.

Marco Bozzano, Alessandro Cimatti, Joost-Pieter Katoen, Viet Yen Nguyen, Thomas Noll, Marco Roveri, Ralf Wimmer
PESSOA: A Tool for Embedded Controller Synthesis

In this paper we present

Pessoa

, a tool for the synthesis of correct-by-design embedded control software.

Pessoa

relies on recent results on approximate abstractions of control systems to reduce the synthesis of control software to the synthesis of reactive controllers for finite-state models. We describe the capabilities of

Pessoa

and illustrate them through an example.

Manuel Mazo Jr., Anna Davitian, Paulo Tabuada

Session 12. Decision Procedures

On Array Theory of Bounded Elements

We investigate a first-order array theory of bounded elements. By reducing to weak second-order logic with one successor (WS1S), we show that the proposed array theory is decidable. Finally, two natural extensions to the new theory are shown to be undecidable.

Min Zhou, Fei He, Bow-Yaw Wang, Ming Gu
Quantifier Elimination by Lazy Model Enumeration

We propose a quantifier elimination scheme based on nested lazy model enumeration through SMT-solving, and projections. This scheme may be applied to any logic that fulfills certain conditions; we illustrate it for linear real arithmetic. The quantifier elimination problem for linear real arithmetic is doubly exponential in the worst case, and so is our method. We have implemented it and benchmarked it against other methods from the literature.

David Monniaux

Session 13. Concurrent Program Verification II

Bounded Underapproximations

We show a new and constructive proof of the following language-theoretic result: for every context-free language

L

, there is a

bounded

context-free language

L

′ ⊆ 

L

which has the same Parikh (commutative) image as

L

. Bounded languages, introduced by Ginsburg and Spanier, are subsets of regular languages of the form

$w_1^*w_2^*\cdots w_k^*$

for some

$w_1,\ldots,w_k\in\Sigma^*$

. In particular bounded context-free languages have nice structural and decidability properties. Our proof proceeds in two parts. First, using Newton’s iterations on the language semiring, we construct a context-free subset

L

N

of

L

that can be represented as a sequence of substitutions on a linear language and has the same Parikh image as

L

. Second, we inductively construct a Parikh-equivalent bounded context-free subset of

L

N

.

As an application of this result in model checking, we show how to underapproximate the reachable state space of multithreaded procedural programs. The bounded language constructed above provides a decidable underapproximation for the original problem. By iterating the construction, we get a semi-algorithm for the original problems that constructs a sequence of underapproximations such that no two underapproximations of the sequence can be compared. This provides a progress guarantee: every word

w

 ∈ 

L

is in some underapproximation of the sequence, and hence, a program bug is guaranteed to be found. In particular, we show that verification with bounded languages generalizes context-bounded reachability for multithreaded programs.

Pierre Ganty, Rupak Majumdar, Benjamin Monmege
Global Reachability in Bounded Phase Multi-stack Pushdown Systems

Bounded phase multi-stack pushdown systems (

mpds

) have been studied recently. Given a set

$\mathcal{C}$

of configurations of a

mpds

$\mathcal{M}$

, let

$pre_{\mathcal{M}}^{*}(\mathcal{C},k)$

be the set of configurations of

$\mathcal{M}$

from which

$\mathcal{M}$

can reach an element of

$\mathcal{C}$

in at most

k

phases. In this paper, we show that for any

mpds

$\mathcal{M}$

, any regular set

$\mathcal{C}$

of configurations of

$\mathcal{M}$

and any number

k

, the set

$pre_{\mathcal{M}}^{*}(\mathcal{C},k)$

, is regular. We use saturation like method to construct a non-deterministic finite multi-automaton recognizing

$pre_{\mathcal{M}}^{*}(\mathcal{C},k)$

. Size of the automaton constructed is double exponential in

k

which is optimal as the worst case complexity measure.

Anil Seth
Model-Checking Parameterized Concurrent Programs Using Linear Interfaces

We consider the verification of parameterized Boolean programs— abstractions of shared-memory concurrent programs with an unbounded number of threads. We propose that such programs can be model-checked by iteratively considering the program under

k

-round schedules, for increasing values of

k

, using a novel compositional construct called

linear interfaces

that summarize the effect of a block of threads in a

k

-round schedule. We also develop a game-theoretic sound technique to show that

k

rounds of schedule suffice to explore the entire search-space, which allows us to prove a parameterized program entirely correct. We implement a symbolic model-checker, and report on experiments verifying parameterized predicate abstractions of Linux device drivers interacting with a kernel to show the efficacy of our technique.

Salvatore La Torre, P. Madhusudan, Gennaro Parlato
Dynamic Cutoff Detection in Parameterized Concurrent Programs

We consider the class of finite-state programs executed by an unbounded number of replicated threads communicating via shared variables. The

thread-state reachability

problem for this class is essential in software verification using predicate abstraction. While this problem is decidable via

Petri net coverability

analysis, techniques solely based on coverability suffer from the problem’s exponential-space complexity. In this paper, we present an alternative method based on a

thread-state cutoff

: a number

n

of threads that suffice to generate all reachable thread states. We give a condition, verifiable dynamically during reachability analysis for increasing

n

, that is sufficient to conclude that

n

is a cutoff. We then make the method complete, via a coverability query that is of low cost in practice. We demonstrate the efficiency of the approach on Petri net encodings of communication protocols, as well as on non-recursive Boolean programs run by arbitrarily many parallel threads.

Alexander Kaiser, Daniel Kroening, Thomas Wahl

Session 14. Tools

PARAM: A Model Checker for Parametric Markov Models

We present

PARAM

1.0, a model checker for parametric discrete-time Markov chains (PMCs).

PARAM

can evaluate temporal properties of PMCs and certain extensions of this class. Due to parametricity, evaluation results are polynomials or rational functions. By instantiating the parameters in the result function, one can cheaply obtain results for multiple individual instantiations, based on only a single more expensive analysis. In addition, it is possible to post-process the result function symbolically using for instance computer algebra packages, to derive optimum parameters or to identify worst cases.

Ernst Moritz Hahn, Holger Hermanns, Björn Wachter, Lijun Zhang
Gist: A Solver for Probabilistic Games

Gist

is a tool that (a) solves the qualitative analysis problem of turn-based probabilistic games with

ω

-regular objectives; and (b) synthesizes reasonable environment assumptions for synthesis of unrealizable specifications. Our tool provides the first and efficient implementations of several reduction-based techniques to solve turn-based probabilistic games, and uses the analysis of turn-based probabilistic games for synthesizing environment assumptions for unrealizable specifications.

Krishnendu Chatterjee, Thomas A. Henzinger, Barbara Jobstmann, Arjun Radhakrishna
A NuSMV Extension for Graded-CTL Model Checking

Graded-CTL is an extension of CTL with graded quantifiers which allow to reason about either

at least

or

all but

any number of possible futures. In this paper we show an extension of the NuSMV model-checker implementing symbolic algorithms for graded-CTL model checking. The implementation is based on the CUDD library, for BDDs and ADDs manipulation, and includes also an efficient algorithm for multiple counterexamples generation.

Alessandro Ferrante, Maurizio Memoli, Margherita Napoli, Mimmo Parente, Francesco Sorrentino
Backmatter
Metadata
Title
Computer Aided Verification
Editors
Tayssir Touili
Byron Cook
Paul Jackson
Copyright Year
2010
Publisher
Springer Berlin Heidelberg
Electronic ISBN
978-3-642-14295-6
Print ISBN
978-3-642-14294-9
DOI
https://doi.org/10.1007/978-3-642-14295-6

Premium Partner