Results 1 - 10
of
10
A Compiled Implementation of Strong Reduction
"... Motivated by applications to proof assistants based on dependent types, we develop and prove correct a strong reducer and b- equivalence checker for the l-calculus with products, sums, and guarded fixpoints. Our approach is based on compilation to the bytecode of an abstract machine performing weak ..."
Abstract
-
Cited by 57 (5 self)
- Add to MetaCart
Motivated by applications to proof assistants based on dependent types, we develop and prove correct a strong reducer and b- equivalence checker for the l-calculus with products, sums, and guarded fixpoints. Our approach is based on compilation to the bytecode of an abstract machine performing weak reductions on non-closed terms, derived with minimal modifications from the ZAM machine used in the Objective Caml bytecode interpreter, and complemented by a recursive "read back" procedure. An implementation in the Coq proof assistant demonstrates important speedups compared with the original interpreter-based implementation of strong reduction in Coq.
A Functional Correspondence between Call-by-Need Evaluators and Lazy Abstract Machines
, 2004
"... ..."
From Reduction-Based to Reduction-Free Normalization
, 2004
"... We present a systematic construction of a reduction-free normalization function. Starting from ..."
Abstract
-
Cited by 10 (7 self)
- Add to MetaCart
We present a systematic construction of a reduction-free normalization function. Starting from
Refocusing in Reduction Semantics
, 2004
"... The evaluation function of a reduction semantics (i.e., a small-step operational semantics with an explicit representation of the reduction context) is canonically defined as the transitive closure of (1) decomposing a term into a reduction context and a redex, (2) contracting this redex, and (3) ..."
Abstract
-
Cited by 6 (3 self)
- Add to MetaCart
The evaluation function of a reduction semantics (i.e., a small-step operational semantics with an explicit representation of the reduction context) is canonically defined as the transitive closure of (1) decomposing a term into a reduction context and a redex, (2) contracting this redex, and (3) plugging the contractum in the context. Directly implementing this evaluation function therefore yields an interpreter with a worst-case overhead, for each step, that is linear in the size of the input term. We present
The next 700 Krivine Machines
- in « Higher-Order and Symbolic Computation
, 2003
"... Abstract: The Krivine machine is a simple and natural implementation of the normal weak-head reduction strategy for pure λ-terms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we prese ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
Abstract: The Krivine machine is a simple and natural implementation of the normal weak-head reduction strategy for pure λ-terms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we present the Krivine machine and some well-known variants in a common framework. Our framework consists of a hierarchy of intermediate languages that are subsets of the λ-calculus. The whole implementation process (compiler + abstract machine) is described via a sequence of transformations all of which express an implementation choice. We characterize the essence of the Krivine machine and locate it in the design space of functional language implementations. We show that, even within the particular class of Krivine machines, hundreds of variants can be designed. Key-words: Krivine machine, abstract machines, program transformation, compilation, functional language implementations.
State-Transition Machines, Revisited
"... at the University of Kansas, were studying compiler synthesis from Scott-Strachey denotational-semantics definitions; I was Neil’s student. Neil read intently John Reynolds’s 1972 paper, Definitional Interpreters for Higher-Order Programming Languages [14], and applied Reynolds’s continuation-passin ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
at the University of Kansas, were studying compiler synthesis from Scott-Strachey denotational-semantics definitions; I was Neil’s student. Neil read intently John Reynolds’s 1972 paper, Definitional Interpreters for Higher-Order Programming Languages [14], and applied Reynolds’s continuation-passing and defunctionalization transformations to lambda-calculus-coded denotational-semantics definitions, using the transformed definitions as templates for syntax-directed translation. Neil dubbed the translated source programs, “State-Transition Machines ” (STMs), because an object program was a set of equationally defined functions that looked like the transition rules of a finite-state machine. Our initial efforts were spent on transforming denotational definitions of block-structured, imperative languages into compiling schemes that generated STMs that looked like ordinary assembly code. In the summer of 1979, Steve moved to the University of California,
Checking Dependent Types Using Compiled Code -- Preliminary Report
"... Type checkers for dependent types need to evaluate user defined functions during type checking. For this, current implementations typically use an interpreter, which has drawbacks. We show, how at this stage compiled code can be used for a language with lazy evaluation. ..."
Abstract
- Add to MetaCart
Type checkers for dependent types need to evaluate user defined functions during type checking. For this, current implementations typically use an interpreter, which has drawbacks. We show, how at this stage compiled code can be used for a language with lazy evaluation.
Author manuscript, published in "N/P" 1 The Next 700 Krivine Machines
, 2005
"... Abstract: The Krivine machine is a simple and natural implementation of the normal weak-head reduction strategy for pure λ-terms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we prese ..."
Abstract
- Add to MetaCart
Abstract: The Krivine machine is a simple and natural implementation of the normal weak-head reduction strategy for pure λ-terms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we present the Krivine machine and some well-known variants in a common framework. Our framework consists of a hierarchy of intermediate languages that are subsets of the λ-calculus. The whole implementation process (compiler + abstract machine) is described via a sequence of transformations all of which express an implementation choice. We characterize the essence of the Krivine machine and locate it in the design space of functional language implementations. We show that, even within the particular class of Krivine machines, hundreds of variants can be designed. Key-words: Krivine machine, abstract machines, program transformation, compilation, functional language implementations.

