Implementing mathematics with the Nuprl proof development system
Implementing mathematics with the Nuprl proof development system
A modal analysis of staged computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Using Reflection to Build Efficient and Certified Decision Procedures
TACS '97 Proceedings of the Third International Symposium on Theoretical Aspects of Computer Software
HOL Light: A Tutorial Introduction
FMCAD '96 Proceedings of the First International Conference on Formal Methods in Computer-Aided Design
The Calculus of algebraic Constructions
RtA '99 Proceedings of the 10th International Conference on Rewriting Techniques and Applications
Proof-assistants using dependent type systems
Handbook of automated reasoning
Programming with proofs and explicit contexts
Proceedings of the 10th international ACM SIGPLAN conference on Principles and practice of declarative programming
TPHOLs '08 Proceedings of the 21st International Conference on Theorem Proving in Higher Order Logics
Formal verification of a realistic compiler
Communications of the ACM - Barbara Liskov: ACM's A.M. Turing Award Winner
seL4: formal verification of an OS kernel
Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles
TYPES'06 Proceedings of the 2006 international conference on Types for proofs and programs
Isabelle/HOL: a proof assistant for higher-order logic
Isabelle/HOL: a proof assistant for higher-order logic
Practical programming with higher-order encodings and dependent types
ESOP'08/ETAPS'08 Proceedings of the Theory and practice of software, 17th European conference on Programming languages and systems
VeriML: typed computation of logical terms inside a language with effects
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
CSL'10/EACSL'10 Proceedings of the 24th international conference/19th annual conference on Computer science logic
Equality Is Typable in Semi-full Pure Type Systems
LICS '10 Proceedings of the 2010 25th Annual IEEE Symposium on Logic in Computer Science
Mostly-automated verification of low-level programs in computational separation logic
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
How to make ad hoc proof automation less ad hoc
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Static and user-extensible proof checking
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Static and user-extensible proof checking
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed syntactic meta-programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Mtac: a monad for typed tactic programming in Coq
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Despite recent successes, large-scale proof development within proof assistants remains an arcane art that is extremely time-consuming. We argue that this can be attributed to two profound shortcomings in the architecture of modern proof assistants. The first is that proofs need to include a large amount of minute detail; this is due to the rigidity of the proof checking process, which cannot be extended with domain-specific knowledge. In order to avoid these details, we rely on developing and using tactics, specialized procedures that produce proofs. Unfortunately, tactics are both hard to write and hard to use, revealing the second shortcoming of modern proof assistants. This is because there is no static knowledge about their expected use and behavior. As has recently been demonstrated, languages that allow type-safe manipulation of proofs, like Beluga, Delphin and VeriML, can be used to partly mitigate this second issue, by assigning rich types to tactics. Still, the architectural issues remain. In this paper, we build on this existing work, and demonstrate two novel ideas: an extensible conversion rule and support for static proof scripts. Together, these ideas enable us to support both user-extensible proof checking, and sophisticated static checking of tactics, leading to a new point in the design space of future proof assistants. Both ideas are based on the interplay between a light-weight staging construct and the rich type information available.