Results 1  10
of
95
Classical Logic and Computation
, 2000
"... This thesis contains a study of the proof theory of classical logic and addresses the problem of giving a computational interpretation to classical proofs. This interpretation aims to capture features of computation that go beyond what can be expressed in intuitionisticlogic. We introduce several ..."
Abstract

Cited by 73 (7 self)
 Add to MetaCart
This thesis contains a study of the proof theory of classical logic and addresses the problem of giving a computational interpretation to classical proofs. This interpretation aims to capture features of computation that go beyond what can be expressed in intuitionisticlogic. We introduce several strongly normalising cutelimination procedures for classicallogic. Our procedures are less restrictive than previous strongly normalising procedures, while at the same time retaining the strong normalisation property, which various standardcutelimination procedures lack. In order to apply proof techniques from term rewriting, including symmetric reducibility candidates and recursive path ordering, we develop termannotations for sequent proofs of classical logic. We then present a sequenceconclusion natural deduction calculus for classical logicand study the correspondence between cutelimination and normalisation. In contrast to earlier work, which analysed this correspondence in various fragments of intuitionisticlogic, we establish the correspondence in classical logic. Finally, we study applications of cutelimination. In particular, we analyse severalclassical proofs with respect to their behaviour under cutelimination. Because our cutelimination procedures impose fewer constraints than previous procedures, we are ableto show how a fragment of classical logic can be seen as a typing system for the simplytyped lambda calculus extended with an erratic choice operator. As a pleasing consequence, we can give a simple computational interpretation to Lafont's example.
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 70 (28 self)
 Add to MetaCart
(Show Context)
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.
Macros as multistage computations: Typesafe, generative, binding macros in MacroML
 IN MACROML. IN THE INTERNATIONAL CONFERENCE ON FUNCTIONAL PROGRAMMING (ICFP ’01
, 2001
"... ..."
MetaProgramming with Names and Necessity
, 2002
"... Metaprogramming is a discipline of writing programs in a certain programming language that generate, manipulate or execute programs written in another language. In a typed setting, metaprogramming languages usually contain a modal type constructor to distinguish the level of object programs (which ..."
Abstract

Cited by 44 (7 self)
 Add to MetaCart
(Show Context)
Metaprogramming is a discipline of writing programs in a certain programming language that generate, manipulate or execute programs written in another language. In a typed setting, metaprogramming languages usually contain a modal type constructor to distinguish the level of object programs (which are the manipulated data) from the meta programs (which perform the computations). In functional programming, modal types of object programs generally come in two flavors: open and closed, depending on whether the expressions they classify may contain any free variables or not. Closed object programs can be executed at runtime by the meta program, but the computations over them are more rigid, and typically produce less e#cient residual code. Open object programs provide better inlining and partial evaluation, but once constructed, expressions of open modal type cannot be evaluated.
Understanding and Evolving the ML Module System
, 2005
"... 0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark ..."
Abstract

Cited by 41 (18 self)
 Add to MetaCart
(Show Context)
0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark of programming language support for data abstraction. Nevertheless, it is not in a fully evolved state. One prominent weakness is that module interdependencies in ML are restricted to be acyclic, which means that mutually recursive functions and data types must be written in the same module even if they belong conceptually in different modules. Existing efforts to remedy this limitation either involve drastic changes to the notion of what a module is, or fail to allow mutually recursive modules to hide type information from one another. Another issue is that there are several dialects of ML (the most popular being SML and O’Caml), and the module systems of these dialects differ in subtle yet semantically significant ways that have been difficult to account for in any rigorous way. It is important to come to a clear assessment of the existing design space and consolidate what is meant by “the ML module system” before embarking on such a major extension as recursive modules. In this dissertation I contribute to the understanding and evolution of the ML module system
Manipulating Trees with Hidden Labels
, 2003
"... We define an operational semantics and a type system for manipulating semistructured data that contains hidden information. The data model is simple labeled trees with a hiding operator. Data manipulation is based on pattern matching, with types that track the use of hidden labels. ..."
Abstract

Cited by 34 (4 self)
 Add to MetaCart
We define an operational semantics and a type system for manipulating semistructured data that contains hidden information. The data model is simple labeled trees with a hiding operator. Data manipulation is based on pattern matching, with types that track the use of hidden labels.
The ∇calculus. Functional programming with higherorder encodings
 In Proceedings of the 7th International Conference on Typed Lambda Calculi and Applications
, 2005
"... Abstract. Higherorder encodings use functions provided by one language to represent variable binders of another. They lead to concise and elegant representations, which historically have been difficult to analyze and manipulate. In this paper we present the ∇calculus, a calculus for defining gener ..."
Abstract

Cited by 27 (3 self)
 Add to MetaCart
Abstract. Higherorder encodings use functions provided by one language to represent variable binders of another. They lead to concise and elegant representations, which historically have been difficult to analyze and manipulate. In this paper we present the ∇calculus, a calculus for defining general recursive functions over higherorder encodings. To avoid problems commonly associated with using the same function space for representations and computations, we separate one from the other. The simplytyped λcalculus plays the role of the representationlevel. The computationlevel contains not only the usual computational primitives but also an embedding of the representationlevel. It distinguishes itself from similar systems by allowing recursion under representationlevel λbinders while permitting a natural style of programming which we believe scales to other logical frameworks. Sample programs include bracket abstraction, parallel reduction, and an evaluator for a simple language with firstclass continuations. 1
Metaprogramming through typeful code representation
 In Proceedings of the Eighth ACM SIGPLAN International Conference on Functional Programming
, 2003
"... By allowing the programmer to write code that can generate code at runtime, metaprogramming offers a powerful approach to program construction. For instance, metaprogramming can often be employed to enhance program efficiency and facilitate the construction of generic programs. However, metaprog ..."
Abstract

Cited by 27 (4 self)
 Add to MetaCart
(Show Context)
By allowing the programmer to write code that can generate code at runtime, metaprogramming offers a powerful approach to program construction. For instance, metaprogramming can often be employed to enhance program efficiency and facilitate the construction of generic programs. However, metaprogramming, especially in an untyped setting, is notoriously errorprone. In this paper, we aim at making metaprogramming less errorprone by providing a type system to facilitate the construction of correct metaprograms. We first introduce some code constructors for constructing typeful code representation in which program variables are replaced with deBruijn indices, and then formally demonstrate how such typeful code representation can be used to support metaprogramming. The main contribution of the paper lies in recognition and then formalization of a novel approach to typed metaprogramming that is practical, general and flexible.
Static name control for FreshML
 In IEEE Symposium on Logic in Computer Science (LICS
, 2007
"... 3 A complete example ..."
(Show Context)