Results 1  10
of
24
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 42 (4 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 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.
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 principl ..."
Abstract

Cited by 21 (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 20 (10 self)
 Add to MetaCart
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 17 (5 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.
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.
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
Implementing nominal unification
 In 3rd Int. Workshop on Term Graph Rewriting (TERMGRAPH’06), Vienna, Electronic
"... Nominal matching and unification underly the dynamics of nominal rewriting. Urban, Pitts and Gabbay gave a nominal unification algorithm which finds the most general solution to a nominal matching or unification problem, if one exists. Later the algorithm was extended by Fernández and Gabbay to deal ..."
Abstract

Cited by 6 (2 self)
 Add to MetaCart
Nominal matching and unification underly the dynamics of nominal rewriting. Urban, Pitts and Gabbay gave a nominal unification algorithm which finds the most general solution to a nominal matching or unification problem, if one exists. Later the algorithm was extended by Fernández and Gabbay to deal with name generation and locality. In this paper we describe first a direct implementation of the nominal unification algorithm, including the extensions, in Maude. This implementation is not efficient (it is exponential in time), but we will show that we can obtain a feasible implementation by using termgraphs.
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
Fresh O’Caml: Nominal abstract syntax for the masses
 In ACM Workshop on ML
, 2005
"... Nominal abstract syntax, as pioneered by the ‘FreshML ’ series of metalanguages, provides firstorder tools for the representation and manipulation of syntax involving bound names, binding operations and αequivalence. Fresh O’Caml fuses nominal abstract syntax with the full Objective Caml language ..."
Abstract

Cited by 4 (1 self)
 Add to MetaCart
Nominal abstract syntax, as pioneered by the ‘FreshML ’ series of metalanguages, provides firstorder tools for the representation and manipulation of syntax involving bound names, binding operations and αequivalence. Fresh O’Caml fuses nominal abstract syntax with the full Objective Caml language to yield a functional programming language with powerful facilities for representing and manipulating syntax. In this paper, we first provide an examplesdriven overview of the language and its functionality. Then we proceed to comment on some of the difficult issues involved in implementing nominal abstract syntax and explain how they have been addressed in the latest version of the compiler.