Proc. of a conference on Functional programming languages and computer architecture
Proc. of a conference on Functional programming languages and computer architecture
How to replace failure by a list of successes
Proc. of a conference on Functional programming languages and computer architecture
Lambda lifting: transforming programs to recursive equations
Proc. of a conference on Functional programming languages and computer architecture
Logical frameworks
An algorithm for testing conversion in type theory
Logical frameworks
Unification under a mixed prefix
Journal of Symbolic Computation
Computation and reasoning: a type theory for computer science
Computation and reasoning: a type theory for computer science
Closure under alpha-conversion
TYPES '93 Proceedings of the international workshop on Types for proofs and programs
Substitution: a formal methods case study using monads and transformations
TAPSOFT '93 Selected papers of the colloquium on Formal approaches of software engineering
Some Lambda Calculus and Type Theory Formalized
Journal of Automated Reasoning
Inverting Inductively Defined Relations in LEGO
TYPES '96 Selected papers from the International Workshop on Types for Proofs and Programs
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
TYPES '00 Selected papers from the International Workshop on Types for Proofs and Programs
Journal of Functional Programming
de Bruijn notation as a nested datatype
Journal of Functional Programming
Journal of Functional Programming
Nominal Reasoning Techniques in Coq
Electronic Notes in Theoretical Computer Science (ENTCS)
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The calculus of nominal inductive constructions: an intensional approach to encoding name-bindings
Proceedings of the Fourth International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice
Electronic Notes in Theoretical Computer Science (ENTCS)
IFL'06 Proceedings of the 18th international conference on Implementation and application of functional languages
ESOP'08/ETAPS'08 Proceedings of the Theory and practice of software, 17th European conference on Programming languages and systems
Proceedings of the third ACM SIGPLAN workshop on Mathematically structured functional programming
A Tutorial Implementation of a Dependently Typed Lambda Calculus
Fundamenta Informaticae - Dependently Typed Programming
Hobbits for Haskell: a library for higher-order encodings in functional programming languages
Proceedings of the 4th ACM symposium on Haskell
A few constructions on constructors
TYPES'04 Proceedings of the 2004 international conference on Types for Proofs and Programs
Hi-index | 0.00 |
In this paper, we show how to manipulate syntax with binding using a mixed representation of names for free variables (with respect to the task in hand) and de Bruijn indices [5] for bound variables. By doing so, we retain the advantages of both representations: naming supports easy, arithmetic-free manipulation of terms; de Bruijn indices eliminate the need for α-conversion. Further, we have ensured that not only the user but also the implementation need never deal with de Bruijn indices, except within key basic operations.Moreover, we give a hierarchical representation for names which naturally reflects the structure of the operations we implement. Name choice is safe and straightforward. Our technology combines easily with an approach to syntax manipulation inspired by Huet's 'zippers'[10].Without the ideas in this paper, we would have struggled to implement EPIGRAM [19]. Our example-constructing inductive elimination operators for datatype families-is but one of many where it proves invaluable.