53,562 research outputs found
Nominal Logic Programming
Nominal logic is an extension of first-order logic which provides a simple
foundation for formalizing and reasoning about abstract syntax modulo
consistent renaming of bound names (that is, alpha-equivalence). This article
investigates logic programming based on nominal logic. We describe some typical
nominal logic programs, and develop the model-theoretic, proof-theoretic, 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 examples.Comment: 46 pages; 19 page appendix; 13 figures. Revised journal submission as
of July 23, 200
Relating Nominal and Higher-order Abstract Syntax Specifications
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 new-quantifier,
whereas the higher-order abstract syntax community has devices like
lambda-binders, lambda-conversion, raising, and the nabla-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 alpha-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.Comment: To appear in PPDP 201
A Simple Nominal Type Theory
Abstract. Nominal logic is an extension of first-order 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 higher-order logic. This has proven difficult, largely because of complex interactions between nominal logic’s name-abstraction 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.
Relational Programming in miniKanren: Techniques, Applications, and Implementations
Thesis (Ph.D.) - Indiana University, Computer Sciences, 2009The promise of logic programming is that programs can be written
relationally, without distinguishing between input
and output arguments. Relational programs are remarkably
flexible—for example, a relational type-inferencer also performs
type checking and type inhabitation, while a relational theorem prover
generates theorems as well as proofs and can even be used as a simple
proof assistant.
Unfortunately, writing relational programs is difficult, and requires
many interesting and unusual tools and techniques. For example, a
relational interpreter for a subset of Scheme might use nominal
unification to support variable binding and scope, Constraint Logic
Programming over Finite Domains (CLP(FD)) to implement relational
arithmetic, and tabling to improve termination behavior.
In this dissertation I present miniKanren, a family
of languages specifically designed for relational programming, and
which supports a variety of relational idioms and techniques. I show
how miniKanren can be used to write interesting relational programs,
including an extremely flexible lean tableau theorem prover and a
novel constraint-free binary arithmetic system with strong termination
guarantees. I also present interesting and practical techniques used
to implement miniKanren, including a nominal unifier that uses
triangular rather than idempotent substitutions and a novel
“walk”-based algorithm for variable lookup in triangular
substitutions.
The result of this research is a family of languages that supports a
variety of relational idioms and techniques, making it feasible and
useful to write interesting programs as relations
A simple sequent calculus for nominal logic
Nominal logic is a variant of first-order logic that provides support for
reasoning about bound names in abstract syntax. A key feature of nominal logic
is the new-quantifier, 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 new-quantifier, but we argue that none
of these attempts is completely satisfactory.
In this article we develop a new sequent calculus for nominal logic in which
the rules for the new- quantifier are much simpler than in previous attempts.
We also prove several structural and metatheoretic properties, including
cut-elimination, consistency, and equivalence to Pitts' axiomatization of
nominal logic
Constraint Handling Rules with Binders, Patterns and Generic Quantification
Constraint Handling Rules provide descriptions for constraint solvers.
However, they fall short when those constraints specify some binding structure,
like higher-rank types in a constraint-based type inference algorithm. In this
paper, the term syntax of constraints is replaced by -tree syntax, in
which binding is explicit; and a new generic quantifier is introduced,
which is used to create new fresh constants.Comment: Paper presented at the 33nd International Conference on Logic
Programming (ICLP 2017), Melbourne, Australia, August 28 to September 1, 2017
16 pages, LaTeX, no PDF figure
- …