@inproceedings{4390,
  abstract     = {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.},
  author       = {Cerny, Pavol and Radhakrishna, Arjun and Zufferey, Damien and Chaudhuri, Swarat and Alur, Rajeev},
  location     = {Edinburgh, UK},
  pages        = {465 -- 479},
  publisher    = {Springer},
  title        = {{Model checking of linearizability of concurrent list implementations}},
  doi          = {10.1007/978-3-642-14295-6_41},
  volume       = {6174},
  year         = {2010},
}

@inbook{4392,
  abstract     = {While a boolean notion of correctness is given by a preorder on systems and properties, a quantitative notion of correctness is defined by a distance function on systems and properties, where the distance between a system and a property provides a measure of “fit” or “desirability.” In this article, we explore several ways how the simulation preorder can be generalized to a distance function. This is done by equipping the classical simulation game between a system and a property with quantitative objectives. In particular, for systems that satisfy a property, a quantitative simulation game can measure the “robustness” of the satisfaction, that is, how much the system can deviate from its nominal behavior while still satisfying the property. For systems that violate a property, a quantitative simulation game can measure the “seriousness” of the violation, that is, how much the property has to be modified so that it is satisfied by the system. These distances can be computed in polynomial time, since the computation reduces to the value problem in limit average games with constant weights. Finally, we demonstrate how the robustness distance can be used to measure how many transmission errors are tolerated by error correcting codes. },
  author       = {Cerny, Pavol and Henzinger, Thomas A and Radhakrishna, Arjun},
  booktitle    = {Time For Verification: Essays in Memory of Amir Pnueli},
  editor       = {Manna, Zohar and Peled, Doron},
  pages        = {42 -- 60},
  publisher    = {Springer},
  title        = {{Quantitative Simulation Games}},
  doi          = {10.1007/978-3-642-13754-9_3},
  volume       = {6200},
  year         = {2010},
}

@inproceedings{4393,
  abstract     = {Boolean notions of correctness are formalized by preorders on systems. Quantitative measures of correctness can be formalized by real-valued distance functions between systems, where the distance between implementation and specification provides a measure of “fit” or “desirability.” We extend the simulation preorder to the quantitative setting, by making each player of a simulation game pay a certain price for her choices. We use the resulting games with quantitative objectives to define three different simulation distances. The correctness distance measures how much the specification must be changed in order to be satisfied by the implementation. The coverage distance measures how much the implementation restricts the degrees of freedom offered by the specification. The robustness distance measures how much a system can deviate from the implementation description without violating the specification. We consider these distances for safety as well as liveness specifications. The distances can be computed in polynomial time for safety specifications, and for liveness specifications given by weak fairness constraints. We show that the distance functions satisfy the triangle inequality, that the distance between two systems does not increase under parallel composition with a third system, and that the distance between two systems can be bounded from above and below by distances between abstractions of the two systems. These properties suggest that our simulation distances provide an appropriate basis for a quantitative theory of discrete systems. We also demonstrate how the robustness distance can be used to measure how many transmission errors are tolerated by error correcting codes.},
  author       = {Cerny, Pavol and Henzinger, Thomas A and Radhakrishna, Arjun},
  location     = {Paris, France},
  pages        = {235 -- 268},
  publisher    = {Schloss Dagstuhl - Leibniz-Zentrum für Informatik},
  title        = {{Simulation distances}},
  doi          = {10.1007/978-3-642-15375-4_18},
  volume       = {6269},
  year         = {2010},
}

@inproceedings{4395,
  abstract     = {The problem of locally transforming or translating programs without altering their semantics is central to the construction of correct compilers. For concurrent shared-memory programs this task is challenging because (1) concurrent threads can observe transformations that would be undetectable in a sequential program, and (2) contemporary multiprocessors commonly use relaxed memory models that complicate the reasoning. In this paper, we present a novel proof methodology for verifying that a local program transformation is sound with respect to a specific hardware memory model, in the sense that it is not observable in any context. The methodology is based on a structural induction and relies on a novel compositional denotational semantics for relaxed memory models that formalizes (1) the behaviors of program fragments as a set of traces, and (2) the effect of memory model relaxations as local trace rewrite operations. To apply this methodology in practice, we implemented a semi- automated tool called Traver and used it to verify/falsify several compiler transformations for a number of different hardware memory models.},
  author       = {Burckhardt, Sebastian and Musuvathi, Madanlal and Singh, Vasu},
  editor       = {Gupta, Rajiv},
  location     = {Pahos, Cyprus},
  pages        = {104 -- 123},
  publisher    = {Springer},
  title        = {{Verifying local transformations on relaxed memory models}},
  doi          = {10.1007/978-3-642-11970-5_7},
  volume       = {6011},
  year         = {2010},
}

@inproceedings{4396,
  abstract     = {Shape analysis is a promising technique to prove program properties about recursive data structures. The challenge is to automatically determine the data-structure type, and to supply the shape analysis with the necessary information about the data structure. We present a stepwise approach to the selection of instrumentation predicates for a TVLA-based shape analysis, which takes us a step closer towards the fully automatic verification of data structures. The approach uses two techniques to guide the refinement of shape abstractions: (1) during program exploration, an explicit heap analysis collects sample instances of the heap structures, which are used to identify the data structures that are manipulated by the program; and (2) during abstraction refinement along an infeasible error path, we consider different possible heap abstractions and choose the coarsest one that eliminates the infeasible path. We have implemented this combined approach for automatic shape refinement as an extension of the software model checker BLAST. Example programs from a data-structure library that manipulate doubly-linked lists and trees were successfully verified by our tool.},
  author       = {Beyer, Dirk and Henzinger, Thomas A and Théoduloz, Grégory and Zufferey, Damien},
  editor       = {Rosenblum, David and Taenzer, Gabriele},
  location     = {Paphos, Cyprus},
  pages        = {263 -- 277},
  publisher    = {Springer},
  title        = {{Shape refinement through explicit heap analysis}},
  doi          = {10.1007/978-3-642-12029-9_19},
  volume       = {6013},
  year         = {2010},
}

@article{474,
  abstract     = {Classical models of gene flow fail in three ways: they cannot explain large-scale patterns; they predict much more genetic diversity than is observed; and they assume that loosely linked genetic loci evolve independently. We propose a new model that deals with these problems. Extinction events kill some fraction of individuals in a region. These are replaced by offspring from a small number of parents, drawn from the preexisting population. This model of evolution forwards in time corresponds to a backwards model, in which ancestral lineages jump to a new location if they are hit by an event, and may coalesce with other lineages that are hit by the same event. We derive an expression for the identity in allelic state, and show that, over scales much larger than the largest event, this converges to the classical value derived by Wright and Malécot. However, rare events that cover large areas cause low genetic diversity, large-scale patterns, and correlations in ancestry between unlinked loci.},
  author       = {Barton, Nicholas H and Kelleher, Jerome and Etheridge, Alison},
  journal      = {Evolution},
  number       = {9},
  pages        = {2701 -- 2715},
  publisher    = {Wiley-Blackwell},
  title        = {{A new model for extinction and recolonization in two dimensions: Quantifying phylogeography}},
  doi          = {10.1111/j.1558-5646.2010.01019.x},
  volume       = {64},
  year         = {2010},
}

@inproceedings{488,
  abstract     = {Streaming string transducers [1] define (partial) functions from input strings to output strings. A streaming string transducer makes a single pass through the input string and uses a finite set of variables that range over strings from the output alphabet. At every step, the transducer processes an input symbol, and updates all the variables in parallel using assignments whose right-hand-sides are concatenations of output symbols and variables with the restriction that a variable can be used at most once in a right-hand-side expression. It has been shown that streaming string transducers operating on strings over infinite data domains are of interest in algorithmic verification of list-processing programs, as they lead to PSPACE decision procedures for checking pre/post conditions and for checking semantic equivalence, for a well-defined class of heap-manipulating programs. In order to understand the theoretical expressiveness of streaming transducers, we focus on streaming transducers processing strings over finite alphabets, given the existence of a robust and well-studied class of &quot;regular&quot; transductions for this case. Such regular transductions can be defined either by two-way deterministic finite-state transducers, or using a logical MSO-based characterization. Our main result is that the expressiveness of streaming string transducers coincides exactly with this class of regular transductions. },
  author       = {Alur, Rajeev and Cerny, Pavol},
  location     = {Chennai, India},
  pages        = {1 -- 12},
  publisher    = {Schloss Dagstuhl - Leibniz-Zentrum für Informatik},
  title        = {{Expressiveness of streaming string transducers}},
  doi          = {10.4230/LIPIcs.FSTTCS.2010.1},
  volume       = {8},
  year         = {2010},
}

@inproceedings{489,
  abstract     = {Graph games of infinite length are a natural model for open reactive processes: one player represents the controller, trying to ensure a given specification, and the other represents a hostile environment. The evolution of the system depends on the decisions of both players, supplemented by chance. In this work, we focus on the notion of randomised strategy. More specifically, we show that three natural definitions may lead to very different results: in the most general cases, an almost-surely winning situation may become almost-surely losing if the player is only allowed to use a weaker notion of strategy. In more reasonable settings, translations exist, but they require infinite memory, even in simple cases. Finally, some traditional problems becomes undecidable for the strongest type of strategies.},
  author       = {Cristau, Julien and David, Claire and Horn, Florian},
  booktitle    = {Proceedings of GandALF 2010},
  location     = {Minori, Amalfi Coast, Italy},
  pages        = {30 -- 39},
  publisher    = {Open Publishing Association},
  title        = {{How do we remember the past in randomised strategies? }},
  doi          = {10.4204/EPTCS.25.7},
  volume       = {25},
  year         = {2010},
}

@article{533,
  abstract     = {Any programming error that can be revealed before compiling a program saves precious time for the programmer. While integrated development environments already do a good job by detecting, e.g., data-flow abnormalities, current static analysis tools suffer from false positives (&quot;noise&quot;) or require strong user interaction. We propose to avoid this deficiency by defining a new class of errors. A program fragment is doomed if its execution will inevitably fail, regardless of which state it is started in. We use a formal verification method to identify such errors fully automatically and, most significantly, without producing noise. We report on experiments with a prototype tool.},
  author       = {Hoenicke, Jochen and Leino, Kari and Podelski, Andreas and Schäf, Martin and Wies, Thomas},
  journal      = {Formal Methods in System Design},
  number       = {2-3},
  pages        = {171 -- 199},
  publisher    = {Springer},
  title        = {{Doomed program points}},
  doi          = {10.1007/s10703-010-0102-0},
  volume       = {37},
  year         = {2010},
}

