Edinburgh Research Archive

Supporting dependently typed functional programming with proof automation and testing

dc.contributor.advisor
Fleuriot, Jacques
en
dc.contributor.advisor
Smaill, Alan
en
dc.contributor.author
Wilson, Sean
en
dc.contributor.sponsor
Engineering and Physical Sciences Research Council (EPSRC)
en
dc.date.accessioned
2011-09-07T12:43:44Z
dc.date.available
2011-09-07T12:43:44Z
dc.date.issued
2011-06-30
dc.description.abstract
Dependent types can be used to capture useful properties about programs at compile time. However, developing dependently typed programs can be difficult in current systems. Capturing interesting program properties usually requires the user to write proofs, where constructing the latter can be both a difficult and tedious process. Additionally, finding and fixing errors in program scripts can be challenging. This thesis concerns ways in which functional programming with dependent types can be made easier. In particular, we focus on providing help for developing programs that incorporate user-defined types and user-defined functions. For the purpose of supporting dependently typed programming, we have designed a framework that provides improved proof automation and error feedback. Proof automation is provided with the use of heuristic based tactics that automate common patterns of proofs that arise when programming with dependent types. In particular, we use heuristics for generalising goals and employ the rippling heuristic for guiding inductive and non-inductive proofs. The automation we describe includes features for caching and reusing lemmas proven during proof search and, whenever proof search fails, the user can assist the prover by providing high-level hints. We concentrate on providing improved feedback for the errors that occur when there is a mismatch between the specification of a program, described with the use of dependent types, and the behaviour of the program. We employ a QuickCheck-like testing tool for automatically identifying these forms of errors, where the counter examples generated are used as error messages. To demonstrate the effectiveness of our framework for supporting dependently typed programming, we have developed a prototype based around the Coq theorem prover. We demonstrate that the framework as a whole makes program development easier by conducting a series of case studies. In these case studies, which involved verifying properties of tail recursive functions, sorting functions and a binary adder, a significant number of the proofs required were automated.
en
dc.identifier.uri
http://hdl.handle.net/1842/5277
dc.language.iso
en
dc.publisher
The University of Edinburgh
en
dc.relation.hasversion
Wilson, S., Fleuriot, J., and Smaill, A. (2010b). Inductive proof automation for Coq. In Proceedings of the 2nd Coq Workshop, EPTCS.
en
dc.subject
dependent types
en
dc.subject
rippling
en
dc.title
Supporting dependently typed functional programming with proof automation and testing
en
dc.type
Thesis or Dissertation
en
dc.type.qualificationlevel
Doctoral
en
dc.type.qualificationname
PhD Doctor of Philosophy
en

Files

Original bundle

Now showing 1 - 1 of 1
Name:
Wilson2011.pdf
Size:
746.19 KB
Format:
Adobe Portable Document Format
Description:

This item appears in the following Collection(s)