Results 11  20
of
85
From operational semantics to abstract machines
 Mathematical Structures in Computer Science
, 1992
"... We consider the problem of mechanically constructing abstract machines from operational semantics, producing intermediatelevel specifications of evaluators guaranteed to be correct with respect to the operational semantics. We construct these machines by repeatedly applying correctnesspreserving t ..."
Abstract

Cited by 59 (6 self)
 Add to MetaCart
We consider the problem of mechanically constructing abstract machines from operational semantics, producing intermediatelevel specifications of evaluators guaranteed to be correct with respect to the operational semantics. We construct these machines by repeatedly applying correctnesspreserving transformations to operational semantics until the resulting specifications have the form of abstract machines. Though not automatable in general, this approach to constructing machine implementations can be mechanized, providing machineverified correctness proofs. As examples we present the transformation of specifications for both callbyname and callbyvalue evaluation of the untyped λcalculus into abstract machines that implement such evaluation strategies. We also present extensions to the callbyvalue machine for a language containing constructs for recursion, conditionals, concrete data types, and builtin functions. In all cases, the correctness of the derived abstract machines follows from the (generally transparent) correctness of the initial operational semantic specification and the correctness of the transformations applied. 1.
Le Fun: Logic, equations, and Functions
 In Proc. 4th IEEE Internat. Symposium on Logic Programming
, 1987
"... Abstract † We introduce a new paradigm for the integration of functional and logic programming. Unlike most current research, our approach is not based on extending unification to generalpurpose equation solving. Rather, we propose a computation delaying mechanism called residuation. This allows a ..."
Abstract

Cited by 44 (1 self)
 Add to MetaCart
Abstract † We introduce a new paradigm for the integration of functional and logic programming. Unlike most current research, our approach is not based on extending unification to generalpurpose equation solving. Rather, we propose a computation delaying mechanism called residuation. This allows a clear distinction between functional evaluation and logical deduction. The former is based on the λcalculus, and the latter on Horn clause resolution. In clear contrast with equationsolving approaches, our model supports higherorder function evaluation and efficient compilation of both functional and logic programming expressions, without being plagued by nondeterministic termrewriting. In addition, residuation lends itself naturally to process synchronization and constrained search. Besides unification (equations), other residuations may be any grounddecidable goal, such as mutual exclusion (inequations), and comparisons (inequalities). We describe an implementation of the residuation paradigm as a prototype language called Le Fun—Logic, equations, and Functions.
Unification and ML Type Reconstruction
, 1991
"... We study the complexity of type reconstruction for a core fragment of ML with lambda abstraction, function application, and the polymorphic let declaration. We derive exponential upper and lower bounds on recognizing the typable core ML expressions. Our primary technical tool is unification of succi ..."
Abstract

Cited by 42 (11 self)
 Add to MetaCart
We study the complexity of type reconstruction for a core fragment of ML with lambda abstraction, function application, and the polymorphic let declaration. We derive exponential upper and lower bounds on recognizing the typable core ML expressions. Our primary technical tool is unification of succinctly represented type expressions. After observing that core ML expressions, of size n, can be typed in DTIME(2 n ), we exhibit two different families of programs whose principal types grow exponentially. We show how to exploit the expressiveness of the letpolymorphism in these constructions to derive lower bounds on deciding typability: one leads naturally to NPhardness and the other to DTIME(2 n k )hardness for each integer k 1. Our generic simulation of any exponential time Turing Machine by ML type reconstruction may be viewed as a nonstandard way of computing with types. Our worstcase lower bounds stand in contrast to practical experience, which suggests that commonly used al...
Semantics of memory management for polymorphic languages
 In 1st Workshop on Higher Order Operational Techniques in Semantics, A. Gordon and A. Pitts, Eds. Publications of the Newton Institute
, 1997
"... The views and conclusions contained in this document arethose of the authors and should not be interpreted as representing o cial policies, either expressed or implied, of the Advanced We present a static and dynamic semantics for an abstract machine that evaluates expressions of a polymorphic progr ..."
Abstract

Cited by 42 (8 self)
 Add to MetaCart
The views and conclusions contained in this document arethose of the authors and should not be interpreted as representing o cial policies, either expressed or implied, of the Advanced We present a static and dynamic semantics for an abstract machine that evaluates expressions of a polymorphic programming language. Unlike traditional semantics, our abstract machine exposes many important issues of memory management, such as value sharing and control representation. We prove the soundness of the static semantics with respect to the dynamic semantics using traditional techniques. We then show how these same techniques may be used to establish the soundness of various memory management strategies, including typebased, tagfree garbage collection� tailcall elimination � and environment strengthening. Keywords: management Type theory and operational semantics are remarkably e ective tools for programming
Compiler Verification in LF
 Seventh Annual IEEE Symposium on Logic in Computer Science
, 1992
"... We sketch a methodology for the verification of compiler correctness based on the LF Logical Framework as realized within the Elf programming language. We have applied this technique to specify, implement, and verify a compiler from a simple functional programming language to a variant of the Catego ..."
Abstract

Cited by 41 (11 self)
 Add to MetaCart
We sketch a methodology for the verification of compiler correctness based on the LF Logical Framework as realized within the Elf programming language. We have applied this technique to specify, implement, and verify a compiler from a simple functional programming language to a variant of the Categorical Abstract Machine (CAM). 1 Introduction Compiler correctness is an essential aspect of program verification as almost all programs are compiled before being executed. Unfortunately, even for small languages and simple compilers, proving their correctness can be an enormous task, and verifying these proofs becomes an equally difficult task. Our goal is to develop techniques for mechanizing proofs of compiler correctness. To this end we employ 1. the LF Logical Framework [13] to specify relationships between source and target languages; 2. the Elf programming language [21] to provide an operational semantics for these relationships; and 3. a related metatheory [22] to reason about the ...
The Integration of Functions into Logic Programming: A Survey
, 1994
"... Functional and logic programming are the most important declarative programming paradigms, and interest in combining them has grown over the last decade. Early research concentrated on the definition and improvement of execution principles for such integrated languages, while more recently efficient ..."
Abstract

Cited by 35 (0 self)
 Add to MetaCart
Functional and logic programming are the most important declarative programming paradigms, and interest in combining them has grown over the last decade. Early research concentrated on the definition and improvement of execution principles for such integrated languages, while more recently efficient implementations of these execution principles have been developed so that these languages became relevant for practical applications. In this paper we survey the development of the operational semantics as well as
A Functional Correspondence between CallbyNeed Evaluators and Lazy Abstract Machines
, 2004
"... ..."
A Notation for Lambda Terms I: A Generalization of Environments
 THEORETICAL COMPUTER SCIENCE
, 1994
"... A notation for lambda terms is described that is useful in contexts where the intensions of these terms need to be manipulated. This notation uses the scheme of de Bruijn for eliminating variable names, thus obviating ffconversion in comparing terms. This notation also provides for a class of terms ..."
Abstract

Cited by 33 (12 self)
 Add to MetaCart
A notation for lambda terms is described that is useful in contexts where the intensions of these terms need to be manipulated. This notation uses the scheme of de Bruijn for eliminating variable names, thus obviating ffconversion in comparing terms. This notation also provides for a class of terms that can encode other terms together with substitutions to be performed on them. The notion of an environment is used to realize this `delaying' of substitutions. The precise mechanism employed here is, however, more complex than the usual environment mechanism because it has to support the ability to examine subterms embedded under abstractions. The representation presented permits a ficontraction to be realized via an atomic step that generates a substitution and associated steps that percolate this substitution over the structure of a term. The operations on terms that are described also include ones for combining substitutions so that they might be performed simultaneously. Our notatio...
Runtime Code Generation and ModalML
 In Conference on Programming Language Design and Implementation, PLDI’98
, 1998
"... This paper presents early experience with a typed programming language and compiler for runtime code generation. The language is an extension of the SML language with modal operators, based on the 2 language of Davies and Pfenning. It allows programmers to specify precisely, through types, the s ..."
Abstract

Cited by 28 (4 self)
 Add to MetaCart
This paper presents early experience with a typed programming language and compiler for runtime code generation. The language is an extension of the SML language with modal operators, based on the 2 language of Davies and Pfenning. It allows programmers to specify precisely, through types, the stages of computation in a program. The compiler generates target code that makes use of runtime code generation in order to exploit the staging information. The target machine is currently a version of the Categorial Abstract Machine, called the CCAM, which we have extended with facilities for runtime code generation. Using this approach, the programmer is able to express the staging that he wants to the compiler directly. It also provides a typed framework in which to verify the correctness of his staging intentions, and to discuss his staging decisions with other programmers. Finally, it supports in a natural way multiple stages of runtime specialization, so that dynamically generated c...
A Provably Correct Compiler Generator
, 1992
"... We have designed, implemented, and proved the correctness of a compiler generator that accepts action semantic descriptions of imperative programming languages. The generated compilers emit absolute code for an abstract RISC machine language that currently is assembled into code for the SPARC and th ..."
Abstract

Cited by 26 (2 self)
 Add to MetaCart
We have designed, implemented, and proved the correctness of a compiler generator that accepts action semantic descriptions of imperative programming languages. The generated compilers emit absolute code for an abstract RISC machine language that currently is assembled into code for the SPARC and the HP Precision Architecture. Our machine language needs no runtime typechecking and is thus more realistic than those considered in previous compiler proofs. We use solely algebraic specifications; proofs are given in the initial model. 1 Introduction The previous approaches to proving correctness of compilers for nontrivial languages all use target code with runtime typechecking. The following semantic rule is typical for these target languages: (FIRST : C; hv 1 ; v 2 i : S) ! (C; v 1 : S) The rule describes the semantics of an instruction that extracts the first component of the topelement of the stack, provided that the topelement is a pair. If not, then it is implicit that the...