Reference. Decidability of inferring inductive invariants
Induction is a successful approach for verification of hardware and software systems. A common practice is to model a system using logical formulas, and then use a decision procedure to verify that some logical formula is an inductive safety invariant for the system. A key ingredient in this approach is coming up with the inductive invariant, which is known as invariant inference. This is a major difficulty, and it is often left for humans or addressed by sound but incomplete abstract interpretation. This paper is motivated by the problem of inductive invariants in shape analysis and in distributed protocols. This paper approaches the general problem of inferring first-order inductive invariants by restricting the language L of candidate invariants. Notice that the problem of invariant inference in a restricted language L differs from the safety problem, since a system may be safe and still not have any inductive invariant in L that proves safety. Clearly, if L is finite (and if testing an inductive invariant is decidable), then inferring invariants in L is decidable. This paper presents some interesting cases when inferring inductive invariants in L is decidable even when L is an infinite language of universal formulas. Decidability is obtained by restricting L and defining a suitable well-quasi-order on the state space. We also present some undecidability results that show that our restrictions are necessary. We further present a framework for systematically constructing infinite languages while keeping the invariant inference problem decidable. We illustrate our approach by showing the decidability of inferring invariants for programs manipulating linked-lists, and for distributed protocols.
Cite
Cited by (3)
Finding Invariants of Distributed Systems: It’s a Small (Enough) World After All hanceFindingInvariantsDistributed
Today’s distributed systems are increasingly complex, leading to subtle bugs that are difficult to detect with standard testing methods. Formal verification can provably rule out such bugs, but historically it has been excessively labor intensive. For distributed systems, recent work shows that, given a correct inductive invariant, nearly all other proof work can be automated; however, the construction of such invariants is still a difficult manual task. In this paper, we demonstrate a new methodology for automating the construction of inductive invariants, given as input a (formal) description of the distributed system and a desired safety condition. Our system performs an exhaustive search within a given space of candidate invariants in order to find and verify inductive invariants which suffice to prove the safety condition. Central to our ability to search efficiently is our algorithm’s ability to learn from counterexamples whenever a candidate fails to be invariant, allowing us to check the remaining candidates more efficiently. We hypothesize that many distributed systems, even complex ones, may have concise invariants that make this approach practical, and in support of this, we show that our system is able to identify and verify inductive invariants for the Paxos protocol, which proved too complex for previous work.
Deductive Verification of Distributed Protocols in First-Order Logic padonDeductiveVerificationDistributed2018
Formal verification of infinite-state systems, and distributed systems in particular, is a long standing research goal. In the deductive verification approach, the programmer provides inductive invariants and pre/post specifications of procedures, reducing the verification problem to checking validity of logical verification conditions. This check is often performed by automated theorem provers and SMT solvers, substantially increasing productivity in the verification of complex systems. However, the unpredictability of automated provers presents a major hurdle to usability of these tools. This problem is particularly acute in case of provers that handle undecidable logics, for example, first-order logic with quantifiers and theories such as arithmetic. The resulting extreme sensitivity to minor changes has a strong negative impact on the convergence of the overall proof effort.
Deductive Verification in Decidable Fragments with Ivy mcmillanDeductiveVerificationDecidable2018
This paper surveys the work to date on Ivy, a language and a tool for the formal specification and verification of distributed systems. Ivy supports deductive verification using automated provers, model checking, automated testing, manual theorem proving and generation of executable code. In order to achieve greater verification productivity, a key design goal for Ivy is to allow the engineer to apply automated provers in the realm in which their performance is relatively predictable, stable and transparent. In particular Ivy focuses on the use of decidable fragments of first-order logic. We consider the rationale or Ivy’s design, the various capabilities of the tool, as well as case studies and applications.
Cites 39 works (1 here)
With notes (1)
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 (38)
- Analyzing Program Analyses (2015)
- PostHat and All That: Automating Abstract Interpretation (2015)
- Property-Directed Inference of Universal Invariants or Proving Their Absence (2015)
- MONOTONIC ABSTRACTION FOR PROGRAMS WITH MULTIPLY-LINKED STRUCTURES (2013)
- AUTOMATED TERMINATION IN MODEL-CHECKING MODULO THEORIES (2013)
- Effectively-Propositional Reasoning about Reachability in Linked Data Structures (2013)
- Invariant generation through strategy iteration in succinctly represented control flow graphs (2012)
- Programs with lists are counter automata (2011)
- A parametric segmentation functor for fully automatic and scalable array content analysis (2011)
- Backward reachability of array-based systems by SMT solving: Termination and invariant synthesis (2010)
- An Analysis of Permutations in Arrays (2010)
- Revisiting Ackermann-Hardness for Lossy Counter Machines and Reset Petri Nets (2010)
- Dafny: An Automatic Program Verifier for Functional Correctness (2010)
- Lossy Counter Machines Decidability Cheat Sheet (2010)
- Polynomial Precise Interval Analysis Revisited (2009)
- The General Vector Addition System Reachability Problem by Presburger Inductive Invariants (2009)
- Monotonic Abstraction for Programs with Dynamic Memory Heaps (2008)
- Z3: An Efficient SMT Solver (2008)
- Regular Model Checking Without Transducers (On Efficient Verification of Parameterized Systems) (2007)
- A class of polynomially solvable range constraints for interval analysis without widenings (2005)
- New results on the computability and complexity of points–to analysis (2003)
- Undecidable problems in unreliable computations (2003)
- Parametric shape analysis via 3-valued logic (2002)
- Ensuring completeness of symbolic verification methods for infinite-state systems (2001)
- Well-structured transition systems everywhere! (2001)
- The pointer assertion logic engine (2001)
- Algorithmic Analysis of Programs with Well Quasi-ordered Domains (2000)
- Making abstract interpretations complete (2000)
- Putting static analysis to work for verification (2000)
- Descriptive Complexity (1999)
- General decidability theorems for infinite-state systems (1996)
- Verifying programs with unreliable channels (1993)
- Model Theory. Studies in Logic and the Foundations of Mathematics (1990)
- Systematic design of program analysis frameworks (1979)
- Assigning meanings to programs (1967)
- On well-quasi-ordering finite trees (1963)
- Well-quasi-ordering, the tree theorem, and Vazsonyi’s conjecture (1960)
- Ordering by Divisibility in Abstract Algebras (1952)