Inductive invariant generation via abductive inference

@article{Dillig2013InductiveIG,
  title={Inductive invariant generation via abductive inference},
  author={Işil Dillig and Thomas Dillig and Boyang Li and Kenneth L. McMillan},
  journal={Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages \& applications},
  year={2013}
}
  • Işil DilligThomas Dillig K. McMillan
  • Published 29 October 2013
  • Computer Science
  • Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
This paper presents a new method for generating inductive loop invariants that are expressible as boolean combinations of linear integer constraints. [] Key Method Starting with true, our method iteratively strengthens loop invariants until they are inductive and strong enough to verify the program. A key feature of our technique is that it is lazy: It only infers those invariants that are necessary for verifying program correctness.

Figures from this paper

Ilinva: Using Abduction to Generate Loop Invariants

A method to automatically synthesize inductive invariants of the loops contained in the program to prove properties of programs and relies on an existing system called GPiD for abductive reasoning modulo theories and the platform for program verification Why3.

Learning inductive invariants by sampling from frequency distributions

A framework that follows the Syntax-Guided Synthesis paradigm to iteratively sample candidate invariants from a formal grammar and check them with an SMT solver, and is able to check several candidates at the same time to filter them effectively using the well known Houdini algorithm.

From invariant checking to invariant inference using randomized search

A general framework c2i is described, given a checker and a language of possible invariants, that generates an inference procedure that iteratively invokes two phases that prove safety properties of numerical programs, and prove functional specifications of heap manipulating programs that use linked list data structures.

Invariant Synthesis for Incomplete Verification Engines

This work proposes a framework for synthesizing inductive invariants for incomplete verification engines, which soundly reduce logical problems in undecidable theories to decidable theories and allows verification engines to communicate non-provability information to guide invariant synthesis.

Compositional safety verification with Max-SMT

An automated compositional program verification technique for safety properties based on conditional inductive invariants using a Max-SMT solver to build a bottom-up program verification framework that propagates preconditions of small program parts as postconditions for preceding program parts.

Inferring Loop Invariants by Mutation, Dynamic Analysis, and Static Checking

This work shows that significant loop invariant candidates can be generated by systematically mutating postconditions; then, dynamic checking weeds out invalid candidates, and static checking selects provably valid ones, paving the way for fully automatic verification without manually written loop invariants.

Learning Disjunctive Invariants based on Loop Structures

  • Computer Science
  • 2017
This work presents a novel technique to learn disjunctive loop-invariants based on the loop structure, and proposes a technique to unwind the program structure adaptively in order to learn simpler invariants (invariant with fewerdisjunctive clauses).

Inference of Progressive Loop Invariants for Array Programs

This thesis introduces progressive loop invariants – an abstraction that captures information about which loop iterations have already been executed and which ones will be executed in the future.

Inference of Progressive Loop Invariants for Array Programs

This thesis introduces progressive loop invariants – an abstraction that captures information about which loop iterations have already been executed and which ones will be executed in the future.

LoopInvGen: A Loop Invariant Generator based on Precondition Inference

The LoopInvGen tool for generating loop invariants that can provably guarantee correctness of a program with respect to a given specification is described and appears to be significantly faster than the existing tools over the SyGuS-COMP 2018 benchmarks from the INV track.
...

References

SHOWING 1-10 OF 61 REFERENCES

Constraint-Based Invariant Inference over Predicate Abstraction

The key idea of the technique is to represent each invariant in bounded DNF form by means of boolean indicator variables, one for each predicate p and each disjunct d denoting whether p is present in d or not.

Synthesis of circular compositional program proofs via abduction

This paper presents a new technique for synthesizing circular compositional proofs of program correctness that uses abductive inference to decompose the proof into small lemmas and proves that each lemma is not the first one to fail (i.e., circularity).

Property-directed incremental invariant generation

This work describes a general method of generating invariants that is incremental and property-directed, and provides evidence that the method scales to checking safety properties of some large finite-state systems.

Path invariants

The method handles loops without unrolling and infers abstractions that involve universal quantification and naturally incorporates disjunctive reasoning, and uses path invariants for abstraction refinement in order to remove all infeasible error computations that are represented by a path program.

SAT-Based Model Checking without Unrolling

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.

A Practical and Complete Approach to Predicate Refinement

This work presents a practical method of predicate selection that is complete in the above sense, based on interpolation and uses a “split prover”, somewhat in the style of structure-based provers used in artificial intelligence.

Counterexample-guided abstraction refinement for symbolic model checking

An automatic iterative abstraction-refinement methodology that extends symbolic model checking to large hardware designs and devise new symbolic techniques that analyze such counterexamples and refine the abstract model correspondingly.

Verification of Java Programs Using Symbolic Execution and Invariant Generation

This work presents a novel iterative technique that uses invariant strengthening and approximation for discovering loop invariants automatically and it was used for the verification of several non-trivial Java programs.

Automatically Refining Abstract Interpretations

Three techniques to automatically refine abstract interpretations to reduce false errors are presented, including a new operator called interpolated widen, which automatically recovers precision lost due to widen, a new way to handle disjunctions that arise due to refinement, and a new refinement algorithm, which refines abstract interpretations that use the join operator to merge abstract states at join points.

Counterexample Driven Refinement for Abstract Interpretation

This work presents a new counterexample driven refinement technique to reduce false errors in abstract interpretations, and sketches how the technique can be used to perform shape analysis by simply defining an appropriate widening operator over shape graphs.
...