Results 1  10
of
12
Nominal Unification
 Theoretical Computer Science
, 2003
"... We present a generalisation of firstorder unification to the practically important case of equations between terms involving binding operations. A substitution of terms for variables solves such an equation if it makes the equated terms #equivalent, i.e. equal up to renaming bound names. For the a ..."
Abstract

Cited by 52 (20 self)
 Add to MetaCart
We present a generalisation of firstorder unification to the practically important case of equations between terms involving binding operations. A substitution of terms for variables solves such an equation if it makes the equated terms #equivalent, i.e. equal up to renaming bound names. For the applications we have in mind, we must consider the simple, textual form of substitution in which names occurring in terms may be captured within the scope of binders upon substitution. We are able to take a `nominal' approach to binding in which bound entities are explicitly named (rather than using nameless, de Bruijnstyle representations) and yet get a version of this form of substitution that respects #equivalence and possesses good algorithmic properties. We achieve this by adapting an existing idea and introducing a key new idea. The existing idea is terms involving explicit substitutions of names for names, except that here we only use explicit permutations (bijective substitutions). The key new idea is that the unification algorithm should solve not only equational problems, but also problems about the freshness of names for terms. There is a simple generalisation of the classical firstorder unification algorithm to this setting which retains the latter's pleasant properties: unification problems involving #equivalence and freshness are decidable; and solvable problems possess most general solutions.
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.
A logic for reasoning about generic judgments
 International Workshop on Logical Frameworks and MetaLanguages:Theory and Practice (LFMTP’06
, 2006
"... This paper presents an extension of a proof system for encoding generic judgments, the logic F Oλ ∆ ∇ of Miller and Tiu, with an induction principle. The logic F Oλ ∆ ∇ is itself an extension of intuitionistic logic with fixed points and a “generic quantifier”, ∇, which is used to reason about the d ..."
Abstract

Cited by 15 (4 self)
 Add to MetaCart
This paper presents an extension of a proof system for encoding generic judgments, the logic F Oλ ∆ ∇ of Miller and Tiu, with an induction principle. The logic F Oλ ∆ ∇ is itself an extension of intuitionistic logic with fixed points and a “generic quantifier”, ∇, which is used to reason about the dynamics of bindings in object systems encoded in the logic. A previous attempt to extend F Oλ ∆ ∇ with an induction principle has been unsuccessful in modeling some behaviours of bindings in inductive specifications. It turns out that this problem can be solved by relaxing some restrictions on ∇, in particular by adding the axiom B ≡ ∇x.B, where x is not free in B. We show that by adopting the equivariance principle, the presentation of the extended logic can be much simplified. Cutelimination for the extended logic is stated, and some applications in reasoning about an object logic and a simply typed λcalculus are illustrated.
A Definitional TwoLevel Approach to Reasoning with HigherOrder Abstract Syntax
 Journal of Automated Reasoning
, 2010
"... Abstract. Combining higherorder abstract syntax and (co)induction in a logical framework is well known to be problematic. Previous work [ACM02] described the implementation of a tool called Hybrid, within Isabelle HOL, syntax, and reasoned about using tactical theorem proving and principles of (co ..."
Abstract

Cited by 14 (3 self)
 Add to MetaCart
Abstract. Combining higherorder abstract syntax and (co)induction in a logical framework is well known to be problematic. Previous work [ACM02] described the implementation of a tool called Hybrid, within Isabelle HOL, syntax, and reasoned about using tactical theorem proving and principles of (co)induction. Moreover, it is definitional, which guarantees consistency within a classical type theory. The idea is to have a de Bruijn representation of syntax, while offering tools for reasoning about them at the higher level. In this paper we describe how to use it in a multilevel reasoning fashion, similar in spirit to other metalogics such as Linc and Twelf. By explicitly referencing provability in a middle layer called a specification logic, we solve the problem of reasoning by (co)induction in the presence of nonstratifiable hypothetical judgments, which allow very elegant and succinct specifications of object logic inference rules. We first demonstrate the method on a simple example, formally proving type soundness (subject reduction) for a fragment of a pure functional language, using a minimal intuitionistic logic as the specification logic. We then prove an analogous result for a continuationmachine presentation of the operational semantics of the same language, encoded this time in an ordered linear logic that serves as the specification layer. This example demonstrates the ease with which we can incorporate new specification logics, and also illustrates a significantly
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).
Simple nominal type theory
"... Abstract. Nominal logic is an extension of firstorder logic with features useful for reasoning about abstract syntax with bound names. For computational applications such as programming and formal reasoning, it is desirable to develop constructive type theories for nominal logic which extend standa ..."
Abstract

Cited by 8 (1 self)
 Add to MetaCart
Abstract. Nominal logic is an extension of firstorder logic with features useful for reasoning about abstract syntax with bound names. For computational applications such as programming and formal reasoning, it is desirable to develop constructive type theories for nominal logic which extend standard type theories for propositional, first or higherorder logic. This has proven difficult, largely because of complex interactions between nominal logic’s nameabstraction operation and ordinary functional abstraction. This difficulty already arises in the case of propositional logic and simple type theory. In this paper we show how this difficulty can be overcome, and present a simple nominal type theory which enjoys properties such as type soundness and strong normalization, and which can be soundly interpreted using existing nominal set models of nominal logic. We also sketch how recursion combinators for languages with binding structure can be provided. This is an important first step towards understanding the constructive content of nominal logic and incorporating it into existing logics and type theories. 1
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.
Toward a General Theory of Names, Binding and Scope
, 2005
"... Highlevel formalisms for reasoning about names and binding such as de Bruijn indices, various flavors of higherorder abstract syntax, the Theory of Contexts, and nominal abstract syntax address only one relatively restrictive form of scoping: namely, unary lexical scoping, in which the scope of a ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
Highlevel formalisms for reasoning about names and binding such as de Bruijn indices, various flavors of higherorder abstract syntax, the Theory of Contexts, and nominal abstract syntax address only one relatively restrictive form of scoping: namely, unary lexical scoping, in which the scope of a (single) bound name is a subtree of the abstract syntax tree (possibly with other subtrees removed due to shadowing). Many languages exhibit binding or renaming structure that does not fit this mold. Examples include binding transitions in the #calculus; unique identifiers in contexts, memory heaps, and XML documents; declaration scoping in modules and namespaces; anonymous identifiers in automata, type schemes, and Horn clauses; and pattern matching and mutual recursion constructs in functional languages. In these cases, it appears necessary to either rearrange the abstract syntax so that lexical scoping can be used, or revert to firstorder techniques. The purpose