Results 1  10
of
55
Ott: Effective tool support for the working semanticist
 PROC. ICFP
, 2007
"... It is rare to give a semantic definition of a fullscale programming language, despite the many potential benefits. Partly this is because the available metalanguages for expressing semantics  usually either LATEX for informal mathematics, or the formal mathematics of a proof assistant  make it ..."
Abstract

Cited by 62 (5 self)
 Add to MetaCart
It is rare to give a semantic definition of a fullscale programming language, despite the many potential benefits. Partly this is because the available metalanguages for expressing semantics  usually either LATEX for informal mathematics, or the formal mathematics of a proof assistant  make it much harder than necessary to work with large definitions. We present a metalanguage specifically designed for this problem, and a tool,
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 39 (9 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.
The Complexity of Equivariant Unification
 In Proceedings of the 31st International Colloquium on Automata, Languages and Programming (ICALP 2004), volume 3142 of LNCS
"... Nominal logic is a firstorder theory of names and binding based on a primitive operation of swapping rather than substitution. Urban, Pitts, and Gabbay have developed a nominal unification algorithm that unifies terms up to nominal equality. However, because of nominal logic's equivariance pri ..."
Abstract

Cited by 32 (7 self)
 Add to MetaCart
Nominal logic is a firstorder theory of names and binding based on a primitive operation of swapping rather than substitution. Urban, Pitts, and Gabbay have developed a nominal unification algorithm that unifies terms up to nominal equality. However, because of nominal logic's equivariance principle, atomic formulas can be provably equivalent without being provably equal as terms, so resolution using nominal unification is sound but incomplete. For complete resolution, a more general form of unification called equivariant unification, or "unification up to a permutation" is required. Similarly, for rewrite rules expressed in nominal logic, a more general form of matching called equivariant matching is necessary. In this paper, we study the complexity of the decision problem for equivariant unification and matching. We show that these problems are NPcomplete in general. However, when one of the terms is essentially firstorder, equivariant and nominal unification coincide. This shows that equivariant unification can be performed efficiently in many interesting common cases: for example, anypurely firstorder logic program or rewrite system can be run efficiently on nominal terms.
A Simpler Proof Theory for Nominal Logic
 In FOSSACS 2005, number 3441 in LNCS
, 2005
"... Nominal logic is a variant of firstorder logic which provides support for reasoning about bound names in abstract syntax. A key feature of nominal logic is the newquantifier, which quantifies over fresh names (names not appearing in any values considered so far). Previous attempts have been made ..."
Abstract

Cited by 29 (11 self)
 Add to MetaCart
(Show Context)
Nominal logic is a variant of firstorder logic which provides support for reasoning about bound names in abstract syntax. A key feature of nominal logic is the newquantifier, which quantifies over fresh names (names not appearing in any values considered so far). Previous attempts have been made to develop convenient rules for reasoning with the newquantifier, but we argue that none of these attempts is completely satisfactory. In this paper we develop a new sequent calculus for nominal logic in which the rules for the newquantifier are much simpler than in previous attempts. We also prove several structural and metatheoretic properties, including cutelimination, consistency, and conservativity with respect to Pitts' axiomatization of nominal logic; these proofs are considerably simpler for our system. 1
Scrap your Nameplate  Functional Pearl
"... Recent research has shown how boilerplate code, or repetitive code for traversing datatypes, can be eliminated using generic programming techniques already available within some implementations of Haskell. One particularly intractable kind of boilerplate is nameplate, or code having to do with names ..."
Abstract

Cited by 20 (6 self)
 Add to MetaCart
Recent research has shown how boilerplate code, or repetitive code for traversing datatypes, can be eliminated using generic programming techniques already available within some implementations of Haskell. One particularly intractable kind of boilerplate is nameplate, or code having to do with names, namebinding, and fresh name generation. One reason for the difficulty is that operations on data structures involving names, as usually implemented, are not regular instances of standard map, fold , or zip operations. However, in nominal abstract syntax, an alternative treatment of names and binding based on swapping, operations such as #equivalence, captureavoiding substitution, and free variable set functions are much betterbehaved.
A study of substitution, using nominal techniques and FraenkelMostowki sets
"... FraenkelMostowski (FM) set theory delivers a model of names and alphaequivalence. This model, now generally called the ‘nominal ’ model, delivers inductive datatypes of syntax with alphaequivalence — rather than inductive datatypes of syntax, quotiented by alphaequivalence. The treatment of name ..."
Abstract

Cited by 14 (6 self)
 Add to MetaCart
(Show Context)
FraenkelMostowski (FM) set theory delivers a model of names and alphaequivalence. This model, now generally called the ‘nominal ’ model, delivers inductive datatypes of syntax with alphaequivalence — rather than inductive datatypes of syntax, quotiented by alphaequivalence. The treatment of names and alphaequivalence extends to the entire sets universe. This has proven useful for developing ‘nominal ’ theories of reasoning and programming on syntax with alphaequivalence, because a sets universe includes elements representing functions, predicates, and behaviour. Often, we want names and alphaequivalence to model captureavoiding substitution. In this paper we show that FM set theory models captureavoiding subsitution for names in much the same way as it models alphaequivalence; as an operation valid for the entire sets universe which coincides with the usual (inductively defined) operation on inductive datatypes. In fact, more than one substitution action is possible (they all agree on sets representing
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 12 (3 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
Permissive nominal terms and their unification: an infinite, coinfinite approach to nominal techniques
, 2010
"... ..."
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
(Show Context)
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.