Integrating Testing and Interactive Theorem Proving
arXiv:1105.4394 · doi:10.4204/EPTCS.70.1
Abstract
Using an interactive theorem prover to reason about programs involves a sequence of interactions where the user challenges the theorem prover with conjectures. Invariably, many of the conjectures posed are in fact false, and users often spend considerable effort examining the theorem prover's output before realizing this. We present a synergistic integration of testing with theorem proving, implemented in the ACL2 Sedan (ACL2s), for automatically generating concrete counterexamples. Our method uses the full power of the theorem prover and associated libraries to simplify conjectures; this simplification can transform conjectures for which finding counterexamples is hard into conjectures where finding counterexamples is trivial. In fact, our approach even leads to better theorem proving, e.g. if testing shows that a generalization step leads to a false conjecture, we force the theorem prover to backtrack, allowing it to pursue more fruitful options that may yield a proof. The focus of the paper is on the engineering of a synergistic integration of testing with interactive theorem proving; this includes extending ACL2 with new functionality that we expect to be of general interest. We also discuss our experience in using ACL2s to teach freshman students how to reason about their programs.
In Proceedings ACL2 2011, arXiv:1110.4473
Cited by in corpus (15)
- Data Definitions in the ACL2 Sedan
- Testing Noninterference, Quickly
- ACL2(ml): Machine-Learning for ACL2
- ACL2s Systems Programming
- Automated Grading of Automata with ACL2s
- Verification of GossipSub in ACL2s
- Finding Bugs with Specification-Based Testing is Easy!
- Proving Calculational Proofs Correct
- Proof Pad: A New Development Environment for ACL2
- An ACL2s Interface to Z3
- A Formalization of the Correctness of the Floodsub Protocol
- An Enumerative Embedding of the Python Type System in ACL2s
- From LCF to Isabelle/HOL
- A Reasoning Engine for the Gamification of Loop-Invariant Discovery
- Using ACL2 To Teach Students About Software Testing