2017 · 47 citations · 32 references
ComputingComputer EngineeringComputer ScienceAlgorithmsFormal MethodsProgramming LanguagesData-flow AnalysisNumerical AnalysisStatic AnalysisStatic Code AnalysisCounterexample GenerationInvariant GenerationInvariantsPolynomial InvariantsProgram InvariantsSource Code Analysis
Numerical invariants, e.g., relationships among numerical variables in a program, represent a useful class of properties to analyze programs. General polynomial invariants represent more complex numerical relations, but they are often required in many scientific and engineering applications. We present NumInv, a tool that implements a counterexample-guided invariant generation (CEGIR) technique to automatically discover numerical invariants, which are polynomial equality and inequality relations among numerical variables. This CEGIR technique infers candidate invariants from program traces and then checks them against the program source code using the KLEE test-input generation tool. If the invariants are incorrect KLEE returns counterexample traces, which help the dynamic inference obtain better results. Existing CEGIR approaches often require sound invariants, however NumInv sacrifices soundness and produces results that KLEE cannot refute within certain time bounds. This design and the use of KLEE as a verifier allow NumInv to discover useful and important numerical invariants for many challenging programs.
32
Patrick Cousot, Radhia Cousot · 1977 · 6.2K citations
Automatic discovery of linear restraints among variables of a program
Patrick Cousot, Nicolas Halbwachs · 1978 · 1.6K citations
Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar et al. · 2002 · 1.2K citations
The Daikon system for dynamic detection of likely invariants
Michael D. Ernst, Jeff Perkins, Philip J. Guo et al. · Science of Computer Programming · 2007 · 1.1K citations