TAPSOFT '89 2nd international joint conference on Theory and practice of software development
Computation and reasoning: a type theory for computer science
Computation and reasoning: a type theory for computer science
Cayenne—a language with dependent types
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Tagless staged interpreters for typed languages
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
A compiled implementation of strong reduction
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Partial Evaluation of Computation Process—AnApproach to a Compiler-Compiler
Higher-Order and Symbolic Computation
Multistage programming: its theory and applications
Multistage programming: its theory and applications
Hume: a domain-specific language for real-time embedded systems
Proceedings of the 2nd international conference on Generative programming and component engineering
Journal of Functional Programming
A methodology for generating verified combinatorial circuits
Proceedings of the 4th ACM international conference on Embedded software
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Formal certification of a compiler back-end or: programming a compiler with a proof assistant
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Implicitly heterogeneous multi-stage programming
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
A dependently typed framework for static analysis of program execution costs
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
Type-specialized staged programming with process separation
Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming
IFL'06 Proceedings of the 18th international conference on Implementation and application of functional languages
Outrageous but meaningful coincidences: dependent type-safe syntax and evaluation
Proceedings of the 6th ACM SIGPLAN workshop on Generic programming
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Fundamenta Informaticae - Dependently Typed Programming
Resource-Safe systems programming with embedded domain specific languages
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Reasoning about multi-stage programs
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Strongly Typed Term Representations in Coq
Journal of Automated Reasoning
Type-specialized staged programming with process separation
Higher-Order and Symbolic Computation
Typed syntactic meta-programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Programming and reasoning with algebraic effects and dependent types
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Dependent types and multi-stage programming have both been used, separately, in programming language design and implementation. Each technique has its own advantages --- with dependent types, we can verify aspects of interpreters and compilers such as type safety and stack invariants. Multi-stage programming, on the other hand, can give the implementor access to underlying compiler technology; a staged interpreter is a translator. In this paper, we investigate the combination of these techniques. We implement an interpreter for a simply typed lambda calculus, using dependent types to guarantee correctness properties by construction. We give explicit proofs of these correctness properties, then add staging annotations to generate a translator from the interpreter. In this way, we have constructed a verified compiler from a verified staged interpreter. We illustrate the application of the technique by considering a simple staged interpreter that provides guarantees for some simple resource bound properties, as might be found in a domain specific language for real-time embedded systems.