-
Chapter and Conference Paper
A Formal Model to Prove Instantiation Termination for E-matching-Based Axiomatisations
SMT-based program analysis and verification often involve reasoning about program features that have been specified using quantifiers; incorporating quantifiers into SMT-based reasoning is, however, known to b...
-
Chapter and Conference Paper
The Prusti Project: Formal Verification for Rust
Rust is a modern systems programming language designed to offer both performance and static safety. A key distinguishing feature is a strong type system, which enforces by default that memory is either shared ...
-
Chapter and Conference Paper
Sound Automation of Magic Wands
The magic wand \(\mathbin {-\!\!*}\) - ...
-
Article
Open AccessShisa6 mediates cell-type specific regulation of depression in the nucleus accumbens
Depression is the leading cause of disability and produces enormous health and economic burdens. Current treatment approaches for depression are largely ineffective and leave more than 50% of patients symptoma...
-
Chapter and Conference Paper
Formally Validating a Practical Verification Condition Generator
A program verifier produces reliable results only if both the logic used to justify the program’s correctness is sound, and the implementation of the program verifier is itself correct. Whereas it is common to fo...
-
Article
Automating deductive verification for weak-memory programs (extended version)
Writing correct programs for weak-memory models such as the C11 memory model is challenging because of the weak consistency guarantees these models provide. The first program logics for the verification of suc...
-
Chapter and Conference Paper
Local Reasoning for Global Graph Properties
Separation logics are widely used for verifying programs that manipulate complex heap-based data structures. These logics build on so-called separation algebras, which allow expressing properties of heap regions ...
-
Chapter and Conference Paper
The Axiom Profiler: Understanding and Debugging SMT Quantifier Instantiations
SMT solvers typically reason about universal quantifiers via E-matching: syntactic matching patterns for each quantifier prescribe shapes of ground terms whose presence in the SMT run will trigger quantifier i...
-
Chapter and Conference Paper
Permission Inference for Array Programs
Information about the memory locations accessed by a program is, for instance, required for program parallelisation and program verification. Existing inference techniques for this information provide only par...
-
Chapter and Conference Paper
Automating Deductive Verification for Weak-Memory Programs
Writing correct programs for weak memory models such as the C11 memory model is challenging because of the weak consistency guarantees these models provide. The first program logics for the verification of suc...
-
Chapter and Conference Paper
Automatic Verification of Iterated Separating Conjunctions Using Symbolic Execution
In permission logics such as separation logic, the iterated separating conjunction is a quantifier denoting access permission to an unbounded set of heap locations. In contrast to recursive predicates, iterate...
-
Chapter and Conference Paper
Actor Services
We present actor services: a novel program logic for defining and verifying response and functional properties of programs which communicate via asynchronous messaging. Actor services can specify how parts of ...
-
Chapter and Conference Paper
Viper: A Verification Infrastructure for Permission-Based Reasoning
The automation of verification techniques based on first-order logic specifications has benefitted greatly from verification infrastructures such as Boogie and Why. These offer an intermediate language that ca...
-
Chapter and Conference Paper
An Automatic Encoding from VeriFast Predicates into Implicit Dynamic Frames
VeriFast is a symbolic-execution-based verifier, based on separation logic specifications. Chalice is a verifier based on verification condition generation, which employs specifications in implicit dynamic fra...
-
Chapter and Conference Paper
Verification Condition Generation for Permission Logics with Abstract Predicates and Abstraction Functions
Abstract predicates are the primary abstraction mechanism for program logics based on access permissions, such as separation logic and implicit dynamic frames. In addition to abstract predicates, it is useful ...
-
Chapter and Conference Paper
A Formal Semantics for Isorecursive and Equirecursive State Abstractions
Methodologies for static program verification and analysis often support recursive predicates in specifications, in order to reason about recursive data structures. Intuitively, a predicate instance represents...
-
Chapter and Conference Paper
Abstract Read Permissions: Fractional Permissions without the Fractions
Fractional Permissions are a popular approach to reasoning about programs that use shared-memory concurrency, because they provide a way of proving data race freedom while permitting concurrent read access. Ho...
-
Chapter and Conference Paper
The Relationship between Separation Logic and Implicit Dynamic Frames
Separation logic is a concise method for specifying programs that manipulate dynamically allocated storage. Partially inspired by separation logic, Implicit Dynamic Frames has recently been proposed, aiming at...
-
Chapter and Conference Paper
Considerate Reasoning and the Composite Design Pattern
We propose Considerate Reasoning, a novel specification and verification technique based on object invariants. This technique supports succinct specifications of implementations which follow the pattern of breaki...
-
Chapter and Conference Paper
Universe Types for Topology and Encapsulation
The Universe Type System is an ownership type system for object-oriented programming languages that hierarchically structures the object store; it is used to reason modularly about programs.