Automatic Generation of Invariants
Formal Methods in System Design - Special issue on The First Federated Logic Conference (FLOC'96), part II
Simplification by Cooperating Decision Procedures
ACM Transactions on Programming Languages and Systems (TOPLAS)
The synthesis of loop predicates
Communications of the ACM
Predicate abstraction for software verification
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Technique for Invariant Generation
TACAS 2001 Proceedings of the 7th International Conference on Tools and Algorithms for the Construction and Analysis of Systems
PROSPER - An Investigation into Software Architecture for Embedded Proof Engines
FroCoS '02 Proceedings of the 4th International Workshop on Frontiers of Combining Systems
Construction of Abstract State Graphs with PVS
CAV '97 Proceedings of the 9th International Conference on Computer Aided Verification
The Quest for Efficient Boolean Satisfiability Solvers
CAV '02 Proceedings of the 14th International Conference on Computer Aided Verification
New Directions in Instantiation-Based Theorem Proving
LICS '03 Proceedings of the 18th Annual IEEE Symposium on Logic in Computer Science
High Integrity Software: The SPARK Approach to Safety and Security
High Integrity Software: The SPARK Approach to Safety and Security
Non-linear loop invariant generation using Gröbner bases
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Simplify: a theorem prover for program checking
Journal of the ACM (JACM)
An Algorithm for Automated Generation of Invariants for Loops with Conditionals
SYNASC '05 Proceedings of the Seventh International Symposium on Symbolic and Numeric Algorithms for Scientific Computing
Harnessing Disruptive Innovation in Formal Verification
SEFM '06 Proceedings of the Fourth IEEE International Conference on Software Engineering and Formal Methods
An Integrated Approach to High Integrity Software Verification
Journal of Automated Reasoning
Software verification with BLAST
SPIN'03 Proceedings of the 10th international conference on Model checking software
Isabelle/HOL: a proof assistant for higher-order logic
Isabelle/HOL: a proof assistant for higher-order logic
APLAS'05 Proceedings of the Third Asian conference on Programming Languages and Systems
The spec# programming system: an overview
CASSIS'04 Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
Lazy abstraction with interpolants
CAV'06 Proceedings of the 18th international conference on Computer Aided Verification
An algebraic approach for the unsatisfiability of nonlinear constraints
CSL'05 Proceedings of the 19th international conference on Computer Science Logic
An industrially effective environment for formal hardware verification
IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems
Fuzzing and delta-debugging SMT solvers
Proceedings of the 7th International Workshop on Satisfiability Modulo Theories
Program verification in SPARK and ACSL: a comparative case study
Ada-Europe'10 Proceedings of the 15th Ada-Europe international conference on Reliable Software Technologies
SPARKSkein: a formal and fast reference implementation of skein
SBMF'11 Proceedings of the 14th Brazilian conference on Formal Methods: foundations and Applications
Hi-index | 0.00 |
In this paper we report on our experiments in using the currently popular Smt (Sat Modulo Theories) solvers Yices [10] and Cvc3 [1] and the Simplify theorem prover [9] to discharge verification conditions (VCs) from programs written in the Spark language [5]. Spark is a subset of Ada used primarily in high-integrity systems in the aerospace, defence, rail and security industries. Formal verification of Spark programs is supported by tools produced by the UK company Praxis High Integrity Systems. These tools include a VC generator and an automatic prover for VCs. We find that Praxis's prover can prove more VCs than Yices, Cvc3 or Simplify because it can handle some relatively simple non-linear problems, though, by adding some axioms about division and modulo operators to Yices, Cvc3 and Simplify, we can narrow the gap. One advantage of Yices, Cvc3 and Simplify is their ability to produce counterexample witnesses to VCs that are not valid. This work is the first step in a project to increase the fraction of VCs from current Spark programs that can be proved automatically and to broaden the range of properties that can be automatically checked. For example, we are interested in improving support for non-linear arithmetic and automatic loop invariant generation.