PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
A framework for defining logics
Journal of the ACM (JACM)
Metalogical Frameworks II: Developing a Reflected Decision Procedure
Journal of Automated Reasoning
Journal of Automated Reasoning
Computational Reflection in the Calculus of Constructions and its Application to Theorem Proving
TLCA '97 Proceedings of the Third International Conference on Typed Lambda Calculi and Applications
Sequent Schema for Derived Rules
TPHOLs '02 Proceedings of the 15th International Conference on Theorem Proving in Higher Order Logics
A Metalanguage for Programming with Bound Names Modulo Renaming
MPC '00 Proceedings of the 5th International Conference on Mathematics of Program Construction
A computational approach to reflective meta-reasoning about languages with bindings
Proceedings of the 3rd ACM SIGPLAN workshop on Mechanized reasoning about languages with variable binding
Toward a general theory of names: binding and scope
Proceedings of the 3rd ACM SIGPLAN workshop on Mechanized reasoning about languages with variable binding
Formalizing Type Operations Using the “Image” Type Constructor
Electronic Notes in Theoretical Computer Science (ENTCS)
Mechanized metatheory for the masses: the PoplMark challenge
TPHOLs'05 Proceedings of the 18th international conference on Theorem Proving in Higher Order Logics
Essential incompleteness of arithmetic verified by coq
TPHOLs'05 Proceedings of the 18th international conference on Theorem Proving in Higher Order Logics
Practical Reflection for Sequent Logics
Electronic Notes in Theoretical Computer Science (ENTCS)
Parametric higher-order abstract syntax for mechanized semantics
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
A universe of binding and computation
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Journal of Automated Reasoning
Hi-index | 0.00 |
We investigate the development of a general-purpose framework for mechanized reasoning about the meta-theory of programming languages. In order to provide a standard, uniform account of a programming language, we propose to define it as a logic in a logical framework, using the same mechanisms for definition, reasoning, and automation that are available to other logics. Then, in order to reason about the language's meta-theory, we use reflection to inject the programming language into (usually richer and more expressive) meta-theory.One of the key features of our approach is that structure of the language is preserved when it is reflected, including variables, meta-variables, and binding structure. This allows the structure of proofs to be preserved as well, and there is a one-to-one map from proof steps in the original programming logic to proof steps in the reflected logic. The act of reflecting a language is automated; all definitions, theorems, and proofs are preserved by the transformation and all the key lemmas (such as proof and structural induction) are automatically derived.The principal representation used by the reflected logic is higher-order abstract syntax (HOAS). However, reasoning about terms in HOAS can be awkward in some cases, especially for variables. For this reason, we define a computationally equivalent variable-free de Bruijn representation that is interchangeable with the HOAS in all contexts. The de Bruijn representation inherits the properties of substitution and alpha-equality from the logical framework, and it is not complicated by administrative issues like variable renumbering.We further develop the concepts and principles of proofs, provability, and structural and proof induction. This work is fully implemented in the MetaPRL theorem prover. We illustrate with an application to F