Monadic Presentations of Lambda Terms Using Generalized Inductive Types
CSL '99 Proceedings of the 13th International Workshop and 8th Annual Conference of the EACSL on Computer Science Logic
Implementing typeful program transformations
Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
FreshML: programming with binders made simple
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Parametric polymorphism and operational equivalence
Mathematical Structures in Computer Science
de Bruijn notation as a nested datatype
Journal of Functional Programming
Combining higher-order abstract syntax with first-order abstract syntax in ATS
Proceedings of the 3rd ACM SIGPLAN workshop on Mechanized reasoning about languages with variable binding
Alpha-structural recursion and induction
Journal of the ACM (JACM)
A certified type-preserving compiler from lambda calculus to assembly language
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Static Name Control for FreshML
LICS '07 Proceedings of the 22nd Annual IEEE Symposium on Logic in Computer Science
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Applicative programming with effects
Journal of Functional Programming
A type-preserving compiler in Haskell
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
System Description: Delphin -- A Functional Programming Language for Deductive Systems
Electronic Notes in Theoretical Computer Science (ENTCS)
Syntax for Free: Representing Syntax with Binding Using Parametricity
TLCA '09 Proceedings of the 9th International Conference on Typed Lambda Calculi and Applications
A universe of binding and computation
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Unembedding domain-specific languages
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
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
A fresh look at programming with names and binders
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Mechanized metatheory for the masses: the PoplMark challenge
TPHOLs'05 Proceedings of the 18th international conference on Theorem Proving in Higher Order Logics
The ∇-calculus. functional programming with higher-order encodings
TLCA'05 Proceedings of the 7th international conference on Typed Lambda Calculi and Applications
A fresh look at programming with names and binders
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Programming with binders and indexed data-types
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
On nominal regular languages with binders
FOSSACS'12 Proceedings of the 15th international conference on Foundations of Software Science and Computational Structures
A characterisation of languages on infinite alphabets with nominal regular expressions
TCS'12 Proceedings of the 7th IFIP TC 1/WG 202 international conference on Theoretical Computer Science
Compiling contextual objects: bringing higher-order abstract syntax to programmers
PLPV '13 Proceedings of the 7th workshop on Programming languages meets program verification
Combinators for impure yet hygienic code generation
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.00 |
A wide range of computer programs, including compilers and theorem provers, manipulate data structures that involve names and binding. However, the design of programming idioms which allow performing these manipulations in a safe and natural style has, to a large extent, remained elusive. In this paper, we present a novel approach to the problem. Our proposal can be viewed either as a programming language design or as a library: in fact, it is currently implemented within Agda. It provides a safe and expressive means of programming with names and binders. It is abstract enough to support multiple concrete implementations: we present one in nominal style and one in de Bruijn style. We use logical relations to prove that "well-typed programs do not mix names with different scope". We exhibit an adequate encoding of Pitts-style nominal terms into our system.