Relating nominal and higher-order abstract syntax specifications

Andrew Gacek
2010 Proceedings of the 12th international ACM SIGPLAN symposium on Principles and practice of declarative programming - PPDP '10  
Nominal abstract syntax and higher-order abstract syntax provide a means for describing binding structure which is higher-level than traditional techniques. These approaches have spawned two different communities which have developed along similar lines but with subtle differences that make them difficult to relate. The nominal abstract syntax community has devices like names, freshness, name-abstractions with variable capture, and the N-quantifier, whereas the higher-order abstract syntax
more » ... nity has devices like λ-binders, λ-conversion, raising, and the ∇-quantifier. This paper aims to unify these communities and provide a concrete correspondence between their different devices. In particular, we develop a semantics-preserving translation from αProlog, a nominal abstract syntax based logic programming language, to G − , a higher-order abstract syntax based logic programming language. We also discuss higher-order judgments, a common and powerful tool for specifications with higher-order abstract syntax, and we show how these can be incorporated into G − . This establishes G − as a language with the power of higher-order abstract syntax, the fine-grained variable control of nominal specifications, and the desirable properties of higher-order judgments.
doi:10.1145/1836089.1836112 dblp:conf/ppdp/Gacek10 fatcat:voueku6hujcpph4sj7lvgaxmdq