@inproceedings{10688,
  abstract     = {Civl is a static verifier for concurrent programs designed around the conceptual framework of layered refinement,
which views the task of verifying a program as a sequence of program simplification steps each justified by its own invariant. Civl verifies a layered concurrent program that compactly expresses all the programs in this sequence and the supporting invariants. This paper presents the design and implementation of the Civl verifier.},
  author       = {Kragl, Bernhard and Qadeer, Shaz},
  booktitle    = {Proceedings of the 21st Conference on Formal Methods in Computer-Aided Design},
  editor       = {Ruzica, Piskac and Whalen, Michael W.},
  isbn         = {978-3-85448-046-4},
  location     = {Virtual},
  pages        = {143–152},
  publisher    = {TU Wien Academic Press},
  title        = {{The Civl verifier}},
  doi          = {10.34727/2021/isbn.978-3-85448-046-4_23},
  volume       = {2},
  year         = {2021},
}

@inproceedings{8012,
  abstract     = {Asynchronous programs are notoriously difficult to reason about because they spawn computation tasks which take effect asynchronously in a nondeterministic way. Devising inductive invariants for such programs requires understanding and stating complex relationships between an unbounded number of computation tasks in arbitrarily long executions. In this paper, we introduce inductive sequentialization, a new proof rule that sidesteps this complexity via a sequential reduction, a sequential program that captures every behavior of the original program up to reordering of coarse-grained commutative actions. A sequential reduction of a concurrent program is easy to reason about since it corresponds to a simple execution of the program in an idealized synchronous environment, where processes act in a fixed order and at the same speed. We have implemented and integrated our proof rule in the CIVL verifier, allowing us to provably derive fine-grained implementations of asynchronous programs. We have successfully applied our proof rule to a diverse set of message-passing protocols, including leader election protocols, two-phase commit, and Paxos.},
  author       = {Kragl, Bernhard and Enea, Constantin and Henzinger, Thomas A and Mutluergil, Suha Orhun and Qadeer, Shaz},
  booktitle    = {Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation},
  isbn         = {9781450376136},
  location     = {London, United Kingdom},
  pages        = {227--242},
  publisher    = {Association for Computing Machinery},
  title        = {{Inductive sequentialization of asynchronous programs}},
  doi          = {10.1145/3385412.3385980},
  year         = {2020},
}

@inproceedings{8195,
  abstract     = {This paper presents a foundation for refining concurrent programs with structured control flow. The verification problem is decomposed into subproblems that aid interactive program development, proof reuse, and automation. The formalization in this paper is the basis of a new design and implementation of the Civl verifier.},
  author       = {Kragl, Bernhard and Qadeer, Shaz and Henzinger, Thomas A},
  booktitle    = {Computer Aided Verification},
  isbn         = {9783030532871},
  issn         = {1611-3349},
  pages        = {275--298},
  publisher    = {Springer Nature},
  title        = {{Refinement for structured concurrent programs}},
  doi          = {10.1007/978-3-030-53288-8_14},
  volume       = {12224},
  year         = {2020},
}

@phdthesis{8332,
  abstract     = {Designing and verifying concurrent programs is a notoriously challenging, time consuming, and error prone task, even for experts. This is due to the sheer number of possible interleavings of a concurrent program, all of which have to be tracked and accounted for in a formal proof. Inventing an inductive invariant that captures all interleavings of a low-level implementation is theoretically possible, but practically intractable. We develop a refinement-based verification framework that provides mechanisms to simplify proof construction by decomposing the verification task into smaller subtasks.

In a first line of work, we present a foundation for refinement reasoning over structured concurrent programs. We introduce layered concurrent programs as a compact notation to represent multi-layer refinement proofs. A layered concurrent program specifies a sequence of connected concurrent programs, from most concrete to most abstract, such that common parts of different programs are written exactly once. Each program in this sequence is expressed as structured concurrent program, i.e., a program over (potentially recursive) procedures, imperative control flow, gated atomic actions, structured parallelism, and asynchronous concurrency. This is in contrast to existing refinement-based verifiers, which represent concurrent systems as flat transition relations. We present a powerful refinement proof rule that decomposes refinement checking over structured programs into modular verification conditions. Refinement checking is supported by a new form of modular, parameterized invariants, called yield invariants, and a linear permission system to enhance local reasoning.

In a second line of work, we present two new reduction-based program transformations that target asynchronous programs. These transformations reduce the number of interleavings that need to be considered, thus reducing the complexity of invariants. Synchronization simplifies the verification of asynchronous programs by introducing the fiction, for proof purposes, that asynchronous operations complete synchronously. Synchronization summarizes an asynchronous computation as immediate atomic effect. Inductive sequentialization establishes sequential reductions that captures every behavior of the original program up to reordering of coarse-grained commutative actions. A sequential reduction of a concurrent program is easy to reason about since it corresponds to a simple execution of the program in an idealized synchronous environment, where processes act in a fixed order and at the same speed.

Our approach is implemented the CIVL verifier, which has been successfully used for the verification of several complex concurrent programs. In our methodology, the overall correctness of a program is established piecemeal by focusing on the invariant required for each refinement step separately. While the programmer does the creative work of specifying the chain of programs and the inductive invariant justifying each link in the chain, the tool automatically constructs the verification conditions underlying each refinement step.},
  author       = {Kragl, Bernhard},
  issn         = {2663-337X},
  pages        = {120},
  publisher    = {Institute of Science and Technology Austria},
  title        = {{Verifying concurrent programs: Refinement, synchronization, sequentialization}},
  doi          = {10.15479/AT:ISTA:8332},
  year         = {2020},
}

@inproceedings{7348,
  abstract     = {The monitoring of event frequencies can be used to recognize behavioral anomalies, to identify trends, and to deduce or discard hypotheses about the underlying system. For example, the performance of a web server may be monitored based on the ratio of the total count of requests from the least and most active clients. Exact frequency monitoring, however, can be prohibitively expensive; in the above example it would require as many counters as there are clients. In this paper, we propose the efficient probabilistic monitoring of common frequency properties, including the mode (i.e., the most common event) and the median of an event sequence. We define a logic to express composite frequency properties as a combination of atomic frequency properties. Our main contribution is an algorithm that, under suitable probabilistic assumptions, can be used to monitor these important frequency properties with four counters, independent of the number of different events. Our algorithm samples longer and longer subwords of an infinite event sequence. We prove the almost-sure convergence of our algorithm by generalizing ergodic theory from increasing-length prefixes to increasing-length subwords of an infinite sequence. A similar algorithm could be used to learn a connected Markov chain of a given structure from observing its outputs, to arbitrary precision, for a given confidence. },
  author       = {Ferrere, Thomas and Henzinger, Thomas A and Kragl, Bernhard},
  booktitle    = {28th EACSL Annual Conference on Computer Science Logic},
  isbn         = {9783959771320},
  issn         = {1868-8969},
  location     = {Barcelona, Spain},
  publisher    = {Schloss Dagstuhl - Leibniz-Zentrum für Informatik},
  title        = {{Monitoring event frequencies}},
  doi          = {10.4230/LIPIcs.CSL.2020.20},
  volume       = {152},
  year         = {2020},
}

@inproceedings{160,
  abstract     = {We present layered concurrent programs, a compact and expressive notation for specifying refinement proofs of concurrent programs. A layered concurrent program specifies a sequence of connected concurrent programs, from most concrete to most abstract, such that common parts of different programs are written exactly once. These programs are expressed in the ordinary syntax of imperative concurrent programs using gated atomic actions, sequencing, choice, and (recursive) procedure calls. Each concurrent program is automatically extracted from the layered program. We reduce refinement to the safety of a sequence of concurrent checker programs, one each to justify the connection between every two consecutive concurrent programs. These checker programs are also automatically extracted from the layered program. Layered concurrent programs have been implemented in the CIVL verifier which has been successfully used for the verification of several complex concurrent programs.},
  author       = {Kragl, Bernhard and Qadeer, Shaz},
  location     = {Oxford, UK},
  pages        = {79 -- 102},
  publisher    = {Springer},
  title        = {{Layered Concurrent Programs}},
  doi          = {10.1007/978-3-319-96145-3_5},
  volume       = {10981},
  year         = {2018},
}

@inproceedings{133,
  abstract     = {Synchronous programs are easy to specify because the side effects of an operation are finished by the time the invocation of the operation returns to the caller. Asynchronous programs, on the other hand, are difficult to specify because there are side effects due to pending computation scheduled as a result of the invocation of an operation. They are also difficult to verify because of the large number of possible interleavings of concurrent computation threads. We present synchronization, a new proof rule that simplifies the verification of asynchronous programs by introducing the fiction, for proof purposes, that asynchronous operations complete synchronously. Synchronization summarizes an asynchronous computation as immediate atomic effect. Modular verification is enabled via pending asynchronous calls in atomic summaries, and a complementary proof rule that eliminates pending asynchronous calls when components and their specifications are composed. We evaluate synchronization in the context of a multi-layer refinement verification methodology on a collection of benchmark programs.},
  author       = {Kragl, Bernhard and Qadeer, Shaz and Henzinger, Thomas A},
  issn         = {18688969},
  location     = {Beijing, China},
  publisher    = {Schloss Dagstuhl - Leibniz-Zentrum für Informatik},
  title        = {{Synchronizing the asynchronous}},
  doi          = {10.4230/LIPIcs.CONCUR.2018.21},
  volume       = {118},
  year         = {2018},
}

@misc{6426,
  abstract     = {Synchronous programs are easy to specify because the side effects of an operation are finished by the time the invocation of the operation returns to the caller. Asynchronous programs, on the other hand, are difficult to specify because there are side effects due to pending computation scheduled as a result of the invocation of an operation. They are also difficult to verify because of the large number of possible interleavings of concurrent asynchronous computation threads. We show that specifications and correctness proofs for asynchronous programs can be structured by introducing the fiction, for proof purposes, that intermediate, non-quiescent states of asynchronous operations can be ignored. Then, the task of specification becomes relatively simple and the task of verification can be naturally decomposed into smaller sub-tasks. The sub-tasks iteratively summarize, guided by the structure of an asynchronous program, the atomic effect of non-atomic operations and the synchronous effect of asynchronous operations. This structuring of specifications and proofs corresponds to the introduction of multiple layers of stepwise refinement for asynchronous programs. We present the first proof rule, called synchronization, to reduce asynchronous invocations on a lower layer to synchronous invocations on a higher layer. We implemented our proof method in CIVL and evaluated it on a collection of benchmark programs.},
  author       = {Henzinger, Thomas A and Kragl, Bernhard and Qadeer, Shaz},
  issn         = {2664-1690},
  pages        = {28},
  publisher    = {IST Austria},
  title        = {{Synchronizing the asynchronous}},
  doi          = {10.15479/AT:IST-2018-853-v2-2},
  year         = {2017},
}

@inproceedings{1011,
  abstract     = {Pushdown systems (PDSs) and recursive state machines (RSMs), which are linearly equivalent, are standard models for interprocedural analysis. Yet RSMs are more convenient as they (a) explicitly model function calls and returns, and (b) specify many natural parameters for algorithmic analysis, e.g., the number of entries and exits. We consider a general framework where RSM transitions are labeled from a semiring and path properties are algebraic with semiring operations, which can model, e.g., interprocedural reachability and dataflow analysis problems. Our main contributions are new algorithms for several fundamental problems. As compared to a direct translation of RSMs to PDSs and the best-known existing bounds of PDSs, our analysis algorithm improves the complexity for finite-height semirings (that subsumes reachability and standard dataflow properties). We further consider the problem of extracting distance values from the representation structures computed by our algorithm, and give efficient algorithms that distinguish the complexity of a one-time preprocessing from the complexity of each individual query. Another advantage of our algorithm is that our improvements carry over to the concurrent setting, where we improve the bestknown complexity for the context-bounded analysis of concurrent RSMs. Finally, we provide a prototype implementation that gives a significant speed-up on several benchmarks from the SLAM/SDV project.},
  author       = {Chatterjee, Krishnendu and Kragl, Bernhard and Mishra, Samarth and Pavlogiannis, Andreas},
  editor       = {Yang, Hongseok},
  issn         = {03029743},
  location     = {Uppsala, Sweden},
  pages        = {287 -- 313},
  publisher    = {Springer},
  title        = {{Faster algorithms for weighted recursive state machines}},
  doi          = {10.1007/978-3-662-54434-1_11},
  volume       = {10201},
  year         = {2017},
}

@inproceedings{1872,
  abstract     = {Extensionality axioms are common when reasoning about data collections, such as arrays and functions in program analysis, or sets in mathematics. An extensionality axiom asserts that two collections are equal if they consist of the same elements at the same indices. Using extensionality is often required to show that two collections are equal. A typical example is the set theory theorem (∀x)(∀y)x∪y = y ∪x. Interestingly, while humans have no problem with proving such set identities using extensionality, they are very hard for superposition theorem provers because of the calculi they use. In this paper we show how addition of a new inference rule, called extensionality resolution, allows first-order theorem provers to easily solve problems no modern first-order theorem prover can solve. We illustrate this by running the VAMPIRE theorem prover with extensionality resolution on a number of set theory and array problems. Extensionality resolution helps VAMPIRE to solve problems from the TPTP library of first-order problems that were never solved before by any prover.},
  author       = {Gupta, Ashutosh and Kovács, Laura and Kragl, Bernhard and Voronkov, Andrei},
  booktitle    = {ATVA 2014},
  editor       = {Cassez, Franck and Raskin, Jean-François},
  location     = {Sydney, Australia},
  pages        = {185 -- 200},
  publisher    = {Springer},
  title        = {{Extensional crisis and proving identity}},
  doi          = {10.1007/978-3-319-11936-6_14},
  volume       = {8837},
  year         = {2014},
}

@inproceedings{2237,
  abstract     = {We describe new extensions of the Vampire theorem prover for computing tree interpolants. These extensions generalize Craig interpolation in Vampire, and can also be used to derive sequence interpolants. We evaluated our implementation on a large number of examples over the theory of linear integer arithmetic and integer-indexed arrays, with and without quantifiers. When compared to other methods, our experiments show that some examples could only be solved by our implementation.},
  author       = {Blanc, Régis and Gupta, Ashutosh and Kovács, Laura and Kragl, Bernhard},
  location     = {Stellenbosch, South Africa},
  pages        = {173 -- 181},
  publisher    = {Springer},
  title        = {{Tree interpolation in Vampire}},
  doi          = {10.1007/978-3-642-45221-5_13},
  volume       = {8312},
  year         = {2013},
}

