Section: New Results
In an effort to improve meta-programming support (the ability to write programs that manipulate other programs) in programming languages, we have focused first on the issue of binders.
Programming with data structures containing binders occurs very often: from compilers and static analysis tools to theorem provers and code generators, it is necessary to manipulate abstract syntax trees, type expressions, logical formulae, proof terms, etc. All these data structures contain variables and binding constructs.
At first sight, it seems very easy to represent binders in general purpose programming languages. Several approaches are known: named variables; de-Bruijn indices; the “locally nameless” technique (a combination of both); higher order abstract syntax; etc. However, with more experience, it appears that the obvious representations are hard to manage, and that delicate programming errors occur often.
Our initial goal was to improve one of the known languages that provides support for binders: Pure FreshML  . We obtained a clean and quite general view of data structures with binders. In this presentation, data structures are indexed by a so-called “world”. In particular, the type for names (called atom) is also indexed. Then, name abstraction is achieved via an existential type for the inner world and a safe way to move across this abstraction frontier.
We gave a presentation of this ongoing work at the Computational Applications of Nominal Sets seminar at Cambridge University. We are currently working on finishing the last details of a very core system and mechanically proving its soundness using the Agda proof system. This work will soon be submitted to a conference.