How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Typing algorithm in type theory with inheritance
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type Classes with Functional Dependencies
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
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
TPHOLs '08 Proceedings of the 21st International Conference on Theorem Proving in Higher Order Logics
System Description: Delphin -- A Functional Programming Language for Deductive Systems
Electronic Notes in Theoretical Computer Science (ENTCS)
Formal verification of a realistic compiler
Communications of the ACM - Barbara Liskov: ACM's A.M. Turing Award Winner
TPHOLs '09 Proceedings of the 22nd International Conference on Theorem Proving in Higher Order Logics
Structuring the verification of heap-manipulating programs
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Dependent types and program equivalence
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
seL4: formal verification of an operating-system kernel
Communications of the ACM
VeriML: typed computation of logical terms inside a language with effects
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Instance chains: type class programming without overlapping instances
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
Mostly-automated verification of low-level programs in computational separation logic
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Point-free, set-free concrete linear algebra
ITP'11 Proceedings of the Second international conference on Interactive theorem proving
How to make ad hoc proof automation less ad hoc
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
LICS '11 Proceedings of the 2011 IEEE 26th Annual Symposium on Logic in Computer Science
Proving equalities in a commutative ring done right in coq
TPHOLs'05 Proceedings of the 18th international conference on Theorem Proving in Higher Order Logics
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
Tactics for reasoning modulo AC in coq
CPP'11 Proceedings of the First international conference on Certified Programs and Proofs
Dependently typed programming based on automated theorem proving
MPC'12 Proceedings of the 11th international conference on Mathematics of Program Construction
POPL '13 Proceedings of the 40th 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
Canonical structures for the working coq user
ITP'13 Proceedings of the 4th international conference on Interactive Theorem Proving
Lightweight proof by reflection using a posteriori simulation of effectful computation
ITP'13 Proceedings of the 4th international conference on Interactive Theorem Proving
A machine-checked proof of the odd order theorem
ITP'13 Proceedings of the 4th international conference on Interactive Theorem Proving
The picard algorithm for ordinary differential equations in coq
ITP'13 Proceedings of the 4th international conference on Interactive Theorem Proving
Hi-index | 0.00 |
Most interactive theorem provers provide support for some form of user-customizable proof automation. In a number of popular systems, such as Coq and Isabelle, this automation is achieved primarily through tactics, which are programmed in a separate language from that of the prover's base logic. While tactics are clearly useful in practice, they can be difficult to maintain and compose because, unlike lemmas, their behavior cannot be specified within the expressive type system of the prover itself. We propose a novel approach to proof automation in Coq that allows the user to specify the behavior of custom automated routines in terms of Coq's own type system. Our approach involves a sophisticated application of Coq's canonical structures, which generalize Haskell type classes and facilitate a flexible style of dependently-typed logic programming. Specifically, just as Haskell type classes are used to infer the canonical implementation of an overloaded term at a given type, canonical structures can be used to infer the canonical proof of an overloaded lemma for a given instantiation of its parameters. We present a series of design patterns for canonical structure programming that enable one to carefully and predictably coax Coq's type inference engine into triggering the execution of user-supplied algorithms during unification, and we illustrate these patterns through several realistic examples drawn from Hoare Type Theory. We assume no prior knowledge of Coq and describe the relevant aspects of Coq type inference from first principles.