Zeno: An Automated Prover for Properties of Recursive Data Structures
Zeno is a new tool for the automatic generation of proofs of simple properties of functions over recursively defined data structures. It takes a Haskell program and an assertion as its goal and tries to contruct a proof for that goal. If successful, it converts the proof into Isabelle code. Zeno searches for a proof tree by iteratively reducing the goal into a conjunction of sub-goals, terminating when all leaves are proven true.
This process requires the exploration of many alternatives. We have adapted known, and developed new, heuristics for the reduction of the search space. Our new heuristics aim to promote the application of function definitions, and avoid the repetition of similar proof steps.
We compare with the rippling based tool IsaPlanner and the industrial strength tool ACL2s on the basis of a test suite from the IsaPlanner website. We found that Zeno compared favourably with these tools both in terms of theorem proving power and speed.
- 3.Boyer, R.S., Moore, J.S.: A theorem prover for a computational logic. In: CADE (1990)Google Scholar
- 4.Bundy, A., Stevens, A., Harmelen, F.V., Ireland, A., Smaill, A.: Rippling: A Heuristic for Guiding Inductive Proofs. Art. Intell. (62) (1993)Google Scholar
- 5.Claessen, K., Hughes, J.: Quickcheck: a lightweight tool for random testing of Haskell programs. In: ICFP, pp. 268–279 (2000)Google Scholar
- 7.Dillinger, P.C., Manolios, P., Vroon, D., Moore, J.S.: ACL2s: ”The ACL2 Sedan”. In: ICSE, pp. 59–60 (2007)Google Scholar
- 9.Ireland, A., Bundy, A.: Productive use of failure in inductive proof. Journal of Automated Reasoning 16, 16–1 (1995)Google Scholar
- 13.Paulson, L.C.: The foundation of a generic theorem prover. Journal of Automated Reasoning 5 (1989)Google Scholar
- 14.Runciman, C., Naylor, M., Lindblad, F.: Smallcheck and lazy Smallcheck: automatic exhaustive testing for small values. In: First ACM SIGPLAN Symposium on Haskell, pp. 37–48 (2008)Google Scholar
- 17.Xu, D., Peyton-Jones, S., Claesen, K.: Static Contract Checking for Haskell. In: POPL (2009)Google Scholar