Auto in Agda - Programming Proof Search Using Reflection

As proofs in type theory become increasingly complex, there is a growing need to provide better proof automation. This paper shows how to implement a Prolog-style resolution procedure in the dependently typed programming language Agda. Connecting this resolution procedure to Agda’s reflection mechanism provides a first-class proof search tactic for first-order Agda terms. As a result, writing proof automation tactics need not be different from writing any other program.

[1]  Walid Taha,et al.  Multi-stage programming with explicit annotations , 1997, PEPM.

[2]  Kent M. Pitman,et al.  Special forms in Lisp , 1980, LISP Conference.

[3]  M. Gordon,et al.  Introduction to HOL: a theorem proving environment for higher order logic , 1993 .

[4]  U. Norell,et al.  Towards a practical programming language based on dependent type theory , 2007 .

[5]  Peyton Jones,et al.  Haskell 98 language and libraries : the revised report , 2003 .

[6]  Nils Anders Danielsson A Formalisation of a Dependently Typed Language as an Inductive-Recursive Family , 2006, TYPES.

[7]  Fredrik Lindblad,et al.  A Tool for Automated Theorem Proving in Agda , 2004, TYPES.

[8]  Dominique Devriese,et al.  Typed syntactic meta-programming , 2013, ICFP.

[9]  Wouter Swierstra,et al.  The power of Pi , 2008, ICFP 2008.

[10]  Adam Chlipala,et al.  Certified Programming with Dependent Types - A Pragmatic Introduction to the Coq Proof Assistant , 2013 .

[11]  Wouter Swierstra More dependent types for distributed arrays , 2010, High. Order Symb. Comput..

[12]  Per Martin-Löf,et al.  Constructive mathematics and computer programming , 1984 .

[13]  James Chapman,et al.  Type checking and normalisation , 2009 .

[14]  Jurriaan Hage,et al.  Implementation and Application of Functional Languages , 2011, Lecture Notes in Computer Science.

[15]  Simon L. Peyton Jones,et al.  Template meta-programming for Haskell , 2002, Haskell '02.

[16]  J. Huisman The Netherlands , 1996, The Lancet.

[17]  Conor McBride,et al.  Outrageous but meaningful coincidences: dependent type-safe syntax and evaluation , 2010, WGP '10.

[18]  Adam Chlipala,et al.  Compositional Computational Reflection , 2014, ITP.

[19]  Dominique Devriese,et al.  On the bright side of type classes: instance arguments in Agda , 2011, ICFP '11.

[20]  S. Doaitse Swierstra,et al.  Forty hours of declarative programming: Teaching Prolog at the Junior College Utrecht , 2012, TFPIE.

[21]  Conor McBride First-order unification by structural recursion , 2003, J. Funct. Program..

[22]  Wouter Swierstra,et al.  A library for polymorphic dynamic typing , 2013, J. Funct. Program..

[23]  Ulf Norell,et al.  Dependently typed programming in Agda , 2009, TLDI '09.

[24]  Hugo Herbelin,et al.  The Coq proof assistant : reference manual, version 6.1 , 1997 .

[25]  Viktor Vafeiadis,et al.  Mtac: a monad for typed tactic programming in Coq , 2013, ICFP.

[26]  Matthieu Sozeau,et al.  First-Class Type Classes , 2008, TPHOLs.

[27]  P. D. van der Walt,et al.  Reflection in Agda , 2012 .

[28]  Wouter Swierstra,et al.  Engineering Proof by Reflection in Agda , 2012, IFL.

[29]  Edwin Brady,et al.  Idris, a general-purpose dependently typed programming language: Design and implementation , 2013, Journal of Functional Programming.