Results 1  10
of
17
AlphaProlog: A Logic Programming Language with Names, Binding, and AlphaEquivalence
, 2004
"... There are two wellknown approaches to programming with names, binding, and equivalence up to consistent renaming: representing names and bindings as concrete identifiers in a firstorder language (such as Prolog), or encoding names and bindings as variables and abstractions in a higherorder langua ..."
Abstract

Cited by 35 (9 self)
 Add to MetaCart
There are two wellknown approaches to programming with names, binding, and equivalence up to consistent renaming: representing names and bindings as concrete identifiers in a firstorder language (such as Prolog), or encoding names and bindings as variables and abstractions in a higherorder language (such as LambdaProlog). However, both approaches have drawbacks: the former often involves stateful namegeneration and requires manual definitions for alphaequivalence and captureavoiding substitution, and the latter is semantically very complicated, so reasoning about programs written using either approach can be very di#cult. Gabbay and Pitts have developed a new approach to encoding abstract syntax with binding based on primitive operations of nameswapping and freshness. This paper presents AlphaProlog, a logic programming language that uses this approach, along with several illustrative example programs and an operational semantics.
Nominal logic programming
, 2006
"... Nominal logic is an extension of firstorder logic which provides a simple foundation for formalizing and reasoning about abstract syntax modulo consistent renaming of bound names (that is, αequivalence). This article investigates logic programming based on nominal logic. This technique is especial ..."
Abstract

Cited by 23 (8 self)
 Add to MetaCart
Nominal logic is an extension of firstorder logic which provides a simple foundation for formalizing and reasoning about abstract syntax modulo consistent renaming of bound names (that is, αequivalence). This article investigates logic programming based on nominal logic. This technique is especially wellsuited for prototyping type systems, proof theories, operational semantics rules, and other formal systems in which bound names are present. In many cases, nominal logic programs are essentially literal translations of “paper” specifications. As such, nominal logic programming provides an executable specification language for prototyping, communicating, and experimenting with formal systems. We describe some typical nominal logic programs, and develop the modeltheoretic, prooftheoretic, and operational semantics of such programs. Besides being of interest for ensuring the correct behavior of implementations, these results provide a rigorous foundation for techniques for analysis and reasoning about nominal logic programs, as we illustrate via two examples.
Nominal rewriting
 Information and Computation
"... Nominal rewriting is based on the observation that if we add support for alphaequivalence to firstorder syntax using the nominalset approach, then systems with binding, including higherorder reduction schemes such as lambdacalculus betareduction, can be smoothly represented. Nominal rewriting ma ..."
Abstract

Cited by 19 (7 self)
 Add to MetaCart
Nominal rewriting is based on the observation that if we add support for alphaequivalence to firstorder syntax using the nominalset approach, then systems with binding, including higherorder reduction schemes such as lambdacalculus betareduction, can be smoothly represented. Nominal rewriting maintains a strict distinction between variables of the objectlanguage (atoms) and of the metalanguage (variables or unknowns). Atoms may be bound by a special abstraction operation, but variables cannot be bound, giving the framework a pronounced firstorder character, since substitution of terms for variables is not captureavoiding. We show how good properties of firstorder rewriting survive the extension, by giving an efficient rewriting algorithm, a critical pair lemma, and a confluence theorem
Mechanized metatheory modelchecking
 In 9th International ACM SIGPLAN Symposium on Principles and Practice of Declarative Programming
, 2007
"... The problem of mechanically formalizing and proving metatheoretic properties of programming language calculi, type systems, operational semantics, and related formal systems has received considerable attention recently. However, the dual problem of searching for errors in such formalizations has rec ..."
Abstract

Cited by 10 (0 self)
 Add to MetaCart
The problem of mechanically formalizing and proving metatheoretic properties of programming language calculi, type systems, operational semantics, and related formal systems has received considerable attention recently. However, the dual problem of searching for errors in such formalizations has received comparatively little attention. In this paper, we consider the problem of bounded modelchecking for metatheoretic properties of formal systems specified using nominal logic. In contrast to the current state of the art for metatheory verification, our approach is fully automatic, does not require expertise in theorem proving on the part of the user, and produces counterexamples in the case that a flaw is detected. We present two implementations of this technique, one based on negationasfailure and one based on negation elimination, along with experimental results showing that these techniques are fast enough to be used interactively to debug systems as they are developed.
Completeness and Herbrand Theorems for Nominal Logic
 Journal of Symbolic Logic
, 2006
"... Nominal logic is a variant of firstorder logic in which abstract syntax with names and binding is formalized in terms of two basic operations: nameswapping and freshness. It relies on two important principles: equivariance (validity is preserved by nameswapping), and fresh name generation ("ne ..."
Abstract

Cited by 9 (4 self)
 Add to MetaCart
Nominal logic is a variant of firstorder logic in which abstract syntax with names and binding is formalized in terms of two basic operations: nameswapping and freshness. It relies on two important principles: equivariance (validity is preserved by nameswapping), and fresh name generation ("new" or fresh names can always be chosen).
A metalanguage for structural operational semantics
 In Symposium on Trends in Functional Programming
, 2007
"... We present MLSOS, a functional metalanguage for encoding definitions of structural operational semantics. The key features of this language are inbuilt support for representing objectlanguage binding structures and performing proofsearch. MLSOS uses the nominal approach to dealing with binders and ..."
Abstract

Cited by 6 (1 self)
 Add to MetaCart
We present MLSOS, a functional metalanguage for encoding definitions of structural operational semantics. The key features of this language are inbuilt support for representing objectlanguage binding structures and performing proofsearch. MLSOS uses the nominal approach to dealing with binders and a FreshMLstyle generative treatment of atoms. This allows us to prototype systems in a natural way, starting from a semiformal specification. We outline the main design choices behind the language and illustrate its use. 1
Nominal unification from a higherorder perspective
 In Proceedings of RTA’08
"... Abstract. Nominal Logic is an extension of firstorder logic with equality, namebinding, nameswapping, and freshness of names. Contrarily to higherorder logic, bound variables are treated as atoms, and only free variables are proper unknowns in nominal unification. This allows “variable capture”, ..."
Abstract

Cited by 5 (1 self)
 Add to MetaCart
Abstract. Nominal Logic is an extension of firstorder logic with equality, namebinding, nameswapping, and freshness of names. Contrarily to higherorder logic, bound variables are treated as atoms, and only free variables are proper unknowns in nominal unification. This allows “variable capture”, breaking a fundamental principle of lambdacalculus. Despite this difference, nominal unification can be seen from a higherorder perspective. From this view, we show that nominal unification can be reduced to a particular fragment of higherorder unification problems: higherorder patterns unification. This reduction proves that nominal unification can be decided in quadratic deterministic time. 1
Nominal Abstraction
, 2009
"... Recursive relational specifications are commonly used to describe the computational structure of formal systems. Recent research in proof theory has identified two features that facilitate direct, logicbased reasoning about such descriptions: the interpretation of atomic judgments through recursive ..."
Abstract

Cited by 4 (2 self)
 Add to MetaCart
Recursive relational specifications are commonly used to describe the computational structure of formal systems. Recent research in proof theory has identified two features that facilitate direct, logicbased reasoning about such descriptions: the interpretation of atomic judgments through recursive definitions and an encoding of binding constructs via generic judgments. However, logics encompassing these two features do not currently allow for the definition of relations that embody dynamic aspects related to binding, a capability needed in many reasoning tasks. We propose a new relation between terms called nominal abstraction as a means for overcoming this deficiency. We incorporate nominal abstraction into a rich logic also including definitions, generic quantification, induction, and coinduction that we then prove to be consistent. We present examples to show that this logic can provide elegant treatments of binding contexts that appear in many proofs, such as those establishing properties of typing calculi and of arbitrarily cascading substitutions that play a role in reducibility arguments.
Avoiding Equivariance in AlphaProlog
, 2004
"... Prolog is a logic programming language which is wellsuited for rapid prototyping of type systems and operational semantics of typed #calculi and many other languages involving bound names. In #Prolog, the nominal unification algorithm of Urban, Pitts and Gabbay is used instead of firstorder un ..."
Abstract

Cited by 4 (0 self)
 Add to MetaCart
Prolog is a logic programming language which is wellsuited for rapid prototyping of type systems and operational semantics of typed #calculi and many other languages involving bound names. In #Prolog, the nominal unification algorithm of Urban, Pitts and Gabbay is used instead of firstorder unification.
AN EFFICIENT NOMINAL UNIFICATION ALGORITHM
"... Abstract. Nominal Unification is an extension of firstorder unification where terms can contain binders and unification is performed modulo αequivalence. Here we prove that the existence of nominal unifiers can be decided in quadratic time. First, we linearlyreduce nominal unification problems to ..."
Abstract

Cited by 3 (1 self)
 Add to MetaCart
Abstract. Nominal Unification is an extension of firstorder unification where terms can contain binders and unification is performed modulo αequivalence. Here we prove that the existence of nominal unifiers can be decided in quadratic time. First, we linearlyreduce nominal unification problems to a sequence of freshness and equalities between atoms, modulo a permutation, using ideas as Paterson and Wegman for firstorder unification. Second, we prove that solvability of these reduced problems may be checked in quadratic time. Finally, we point out how using ideas of Brown and Tarjan for unbalanced merging, we could solve these reduced problems more efficiently. 1.