Reference. Towards Automatic Inference of Inductive Invariants
Cite
Cited by (4)
Regularity and Quantification: A New Approach to Verify Distributed Protocols goelRegularityQuantificationNew
Proving that an unbounded distributed protocol satisfies a given safety property amounts to finding a quantified inductive invariant that implies the property for all possible instance sizes of the protocol. Existing methods for solving this problem can be described as search procedures for an invariant whose quantification prefix fits a particular template. We propose an alternative constructive approach that does not prescribe, a priori, a specific quantifier prefix. Instead, the required prefix is automatically inferred without any enumerative search by carefully analyzing the spatial and temporal regularity of the protocol. The key insight underlying this approach is that structural regularity and quantification are closely related concepts that express protocol invariance under different re-arrangements of its components and its unbounded evolution over time. We extended the finite-domain IC3/PDR algorithm to use these regularities and boost clause learning to automatically derive the required quantified inductive invariant by exploiting the connection between structural regularities and quantification. We also describe a procedure to automatically find a minimal finite size, the cutoff, that yields a quantified invariant proving safety for any size. Our approach is implemented in IC3PO, a new verifier for distributed protocols that significantly outperforms the state-of-the-art, scales orders of magnitude faster, and robustly derives compact inductive invariants fully automatically.
Sift: Using Refinement-guided Automation to Verify Complex Distributed Systems maSiftUsingRefinementguided
Distributed systems are hard to design and implement correctly. Recent work has tried to use formal verification techniques to provide rigorous correctness guarantees. These works present a hard choice, though. One must either opt for the power of refinement-based approaches like IronFleet and Verdi, at the cost of large amounts of manual effort; or choose the more automated approach of I4, IC3PO, SWISS and DistAI which give up the ability to prove refinement and the power and scalability that come with it.
On Symmetry and Quantification: A New Approach to Verify Distributed Protocols goelSymmetryQuantificationNew2021
Proving that an unbounded distributed protocol satisfies a given safety property amounts to finding a quantified inductive invariant that implies the property for all possible instance sizes of the protocol. Existing methods for solving this problem can be described as search procedures for an invariant whose quantification prefix fits a particular template. We propose an alternative constructive approach that does not prescribe, a priori, a specific quantifier prefix. Instead, the required prefix is automatically inferred without any search by carefully analyzing the structural symmetries of the protocol. The key insight underlying this approach is that symmetry and quantification are closely related concepts that express protocol invariance under different re-arrangements of its components. We propose symmetric incremental induction, an extension of the finite-domain IC3/PDR algorithm, that automatically derives the required quantified inductive invariant by exploiting the connection between symmetry and quantification. While various attempts have been made to exploit symmetry in verification applications, to our knowledge, this is the first demonstration of a direct link between symmetry and quantification in the context of clause learning during incremental induction. We also describe a procedure to automatically find a minimal finite size, the cutoff, that yields a quantified invariant proving safety for any size. Our approach is implemented in IC3PO, a new verifier for distributed protocols that significantly outperforms the state-of-the-art, scales orders of magnitude faster, and robustly derives compact inductive invariants fully automatically.
AVR: Abstractly Verifying Reachability goelAVRAbstractlyVerifying2020
We present AVR, a push-button model checker for verifying state transition systems directly at the source-code level. AVR uses information embedded in the word-level syntax of the design representation to automatically perform scalable model checking by combining a novel syntax-guided abstraction-refinement technique with a word-level implementation of the IC3 algorithm. AVR provides independently-verifiable certificates that offer provable assurance and are easy to relate to the word-level system. Moreover, proof certificates can be further used in innovative ways to extract key design information and are useful in a growing number of applications.
Cites 40 works (3 here)
With notes (3)
Ivy: Safety verification by interactive generalization padonIvySafetyVerification
Despite several decades of research, the problem of formal verification of infinite-state systems has resisted effective automation. We describe a system — Ivy — for interactively verifying safety of infinite-state systems. Ivy’s key principle is that whenever verification fails, Ivy graphically displays a concrete counterexample to induction. The user then interactively guides generalization from this counterexample. This process continues until an inductive invariant is found. Ivy searches for universally quantified invariants, and uses a restricted modeling language. This ensures that all verification conditions can be checked algorithmically. All user interactions are performed using graphical models, easing the user’s task. We describe our initial experience with verifying several distributed protocols.
IronFleet: proving practical distributed systems correct hawblitzel-2015-ironfleet
SAT-Based Model Checking without Unrolling bradleySATBasedModelChecking2011
A new form of SAT-based symbolic model checking is described. Instead of unrolling the transition relation, it incrementally generates clauses that are inductive relative to (and augment) stepwise approximate reachability information. In this way, the algorithm gradually refines the property, eventually producing either an inductive strengthening of the property or a counterexample trace. Our experimental studies show that induction is a powerful tool for generalizing the unreachability of given error states: it can refine away many states at once, and it is effective at focusing the proof search on aspects of the transition system relevant to the property. Furthermore, the incremental structure of the algorithm lends itself to a parallel implementation.
External (37)
- Empirical Evaluation of IC3-Based Model Checking Techniques on Verilog RTL Designs (2019)
- Model Checking of Verilog RTL Using IC3 with Syntax-Guided Abstraction (2019)
- Horn-ICE learning for synthesizing invariants and contracts (2018)
- IEEE standard for SystemVerilog—unified hardware design, specification, and verification language (IEEE Std 1800-2017) (2018)
- Verifying a high-performance crash-safe file system using a tree specification (2017)
- Dirty cow vulnerability (2017)
- Property-Directed Inference of Universal Invariants or Proving Their Absence (2017)
- Hyperkernel: Push-Button Verification of an OS Kernel (2017)
- Using Crash Hoare logic for certifying the FSCQ file system (2015)
- Verdi: a framework for implementing and formally verifying distributed systems (2015)
- ICE: A Robust Framework for Learning Invariants (2014)
- Property-Directed Shape Analysis (2014)
- Unbounded Scalable Verification Based on Approximate Property-Directed Reachability and Datapath Abstraction (2014)
- Ironclad apps: end-to-end security via automated full-system verification (2014)
- Software Model Checking via IC3 (2012)
- Synthesizing software verifiers from proof rules (2012)
- Generalized Property Directed Reachability (2012)
- Secure distributed programming with value-dependent types (2011)
- Dafny: an automatic program verifier for functional correctness (2010)
- seL4: formal verification of an OS kernel (2009)
- KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs (2008)
- Amazon S3 availability event: July 20, 2008 (2008)
- The Farsite project: a retrospective (2007)
- DART: directed automated random testing (2005)
- CUTE: a concolic unit testing engine for C (2005)
- General Electric acknowledges Northeastern blackout bug (2004)
- Specifying systems: the TLA+ language and tools for hardware and software engineers (2002)
- Isabelle/HOL: A Proof Assistant for Higher-order Logic (2002)
- Houdini, an annotation assistant for ESC/Java (2001)
- Quickly detecting relevant program invariants (2000)
- The part-time parliament (1998)
- An improved algorithm for decentralized extrema-finding in circular configurations of processes (1979)
- Symbolic execution and program testing (1976)
- SELECT—a formal system for testing and debugging programs by symbolic execution (1975)
- Reduction: a method of proving properties of parallel programs (1975)
- The Coq proof assistant reference manual
- Averroes 2 (AVR)