Results 1 - 10
of
18
Total Functional Programming
- Journal of Universal Computer Science
, 2004
"... We now define the notion, already discussed, of an effectively calculable function of positive integers by identifying it with the notion of a recursive function of positive integers (or of a lambdadefinable function of positive integers). The phrase in parentheses refers to the apparatus which Chur ..."
Abstract
-
Cited by 25 (1 self)
- Add to MetaCart
We now define the notion, already discussed, of an effectively calculable function of positive integers by identifying it with the notion of a recursive function of positive integers (or of a lambdadefinable function of positive integers). The phrase in parentheses refers to the apparatus which Church had developed to investigate this and other problems in the foundations of mathematics: the calculus of lambda conversion. Both the Thesis and the lambda calculus have been of seminal influence on the development of Computing Science. The main subject of this article is the lambda calculus but I will begin with a brief sketch of the emergence of the Thesis. The epistemological status of Church’s Thesis is not immediately clear from the above quotation and remains a matter of debate, as is explored in other papers of this volume. My own view, which I will state but not elaborate here, is that the thesis is empirical because it relies for its significance on a claim about what can be calculated by mechanisms. This becomes clearer in
About Charity
, 1992
"... Charity is a categorical programming language based on distributive categories (in the sense of Schanuel and Lawvere) with strong datatypes (in the sense of Hagino). Distributive categories come with a term logic which can express most standard programs; and they are fundamental to computer science ..."
Abstract
-
Cited by 20 (0 self)
- Add to MetaCart
Charity is a categorical programming language based on distributive categories (in the sense of Schanuel and Lawvere) with strong datatypes (in the sense of Hagino). Distributive categories come with a term logic which can express most standard programs; and they are fundamental to computer science because they permit proof by case analysis and, when strong datatypes are introduced, proof by structural induction. Charity is functional and polymorphic in style, and is strongly normalizing. As a categorical programming language it provides a unique marriage of computer science and mathematical thought. The above aspects are particularly important for the production of verified programs as the naturality of morphisms gives us "theorems for free", termination proofs are not required, and mathemathical specifications can be used. 1 Introduction Functional and logic programming languages have reduced the gap between theory and implementation by reducing the notational movement from mathema...
Translating Higher-Order Clauses to First-Order Clauses
"... Abstract. Interactive provers typically use higher-order logic, while automatic provers typically use first-order logic. In order to integrate interactive provers with automatic ones, it is necessary to translate higher-order formulae to first-order form. The translation should ideally be both sound ..."
Abstract
-
Cited by 20 (2 self)
- Add to MetaCart
Abstract. Interactive provers typically use higher-order logic, while automatic provers typically use first-order logic. In order to integrate interactive provers with automatic ones, it is necessary to translate higher-order formulae to first-order form. The translation should ideally be both sound and practical. We have investigated several methods of translating function applications, types and λ-abstractions. Omitting some type information improves the success rate, but can be unsound, so the interactive prover must verify the proofs. This paper presents experimental data that compares the translations in respect of their success rates for three automatic provers. 1.
Compilation of Functional Languages Using Flow Graph Analysis
, 1994
"... syntax, and syntactic and semantic domains of a flow graph Figure 9. Semantic equations Def and Exp of a flow graph The first argument to the functions Def and Exp specifies a set of nodes that represent a flow graph, from which the element(s) of current interest are selected by pattern matching. ..."
Abstract
-
Cited by 16 (12 self)
- Add to MetaCart
syntax, and syntactic and semantic domains of a flow graph Figure 9. Semantic equations Def and Exp of a flow graph The first argument to the functions Def and Exp specifies a set of nodes that represent a flow graph, from which the element(s) of current interest are selected by pattern matching.
A Taxonomy of Functional Language Implementations Part II: Call-by-Name, Call-by-Need and Graph Reduction
, 1996
"... In Part I [5], we proposed an approach to formally describe and compare functional languages implementations. We focused on call-by-value and described well-known compilers for strict languages. Here, we complete our exploration of the design space of implementations by studying call-by-name, cal ..."
Abstract
-
Cited by 10 (4 self)
- Add to MetaCart
In Part I [5], we proposed an approach to formally describe and compare functional languages implementations. We focused on call-by-value and described well-known compilers for strict languages. Here, we complete our exploration of the design space of implementations by studying call-by-name, call-by-need and graph reduction. We express the whole compilation process as a succession of program transformations in a common framework. At each step, different transformations model fundamental choices or optimizations. We describe and compare the diverse alternatives for the compilation of the call-byname strategy in both environment and graph-based models. The different options for the compilation of b-reduction described in [5] can be applied here as well. Instead, we describe other possibilities specific to graph reduction. Call-by-need is nothing but call-by-name with redex sharing and update. We present how sharing can be expressed in our framework and we describe different...
A Systematic Study of Functional Language Implementations
- ACM Transactions on Programming Languages and Systems
, 1998
"... : We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of t ..."
Abstract
-
Cited by 7 (3 self)
- Add to MetaCart
: We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of this approach is to structure and decompose the implementation process. The correctness proofs can be tackled independently for each step and amount to proving program transformations in the functional world. This approach also paves the way to formal comparisons by making it possible to estimate the complexity of individual transformations or compositions of them. Our study aims at covering the whole known design space of sequential functional languages implementations. In particular, we consider call-by-value, call-by-name and call-by-need reduction strategies as well as environment and graph-based implementations. We describe for each compilation step the diverse alternatives as program tr...
A Fresh Look at Combinator Graph Reduction (Or, Having a TIGRE by the Tail)
- SIGPLAN Notices
, 1989
"... We present a new abstract machine for graph reduction called TIGRE. Benchmark results show that TIGRE's ex- ecution speed compares quite favorably with previous combinator -graph reduction techniques on similar hardware. Furthermore, the mapping of TIGRE onto conventional hardware is simple and effi ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
We present a new abstract machine for graph reduction called TIGRE. Benchmark results show that TIGRE's ex- ecution speed compares quite favorably with previous combinator -graph reduction techniques on similar hardware. Furthermore, the mapping of TIGRE onto conventional hardware is simple and efficient. Mainframe implementations of TIGRE provide performance levels exceeding those previously available on custom graph reduction hardware.
Binary Lambda Calculus and Combinatory Logic.” Sep 14, 2004. http://homepages. cwi.nl/ ∼ tromp/cl/LC.pdf [64] Tadaki, K. “Upper bound by Kolmogorov complexity for the probability
- in computable POVM measurement.” Proceedings of the 5th Conference on Real Numbers and Computers, RNC5
, 2003
"... In the first part, we introduce binary representations of both lambda calculus and combinatory logic terms, and demonstrate their simplicity by providing very compact parser-interpreters for these binary languages. Along the way we also present new results on list representations, bracket abstractio ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
In the first part, we introduce binary representations of both lambda calculus and combinatory logic terms, and demonstrate their simplicity by providing very compact parser-interpreters for these binary languages. Along the way we also present new results on list representations, bracket abstraction, and fixpoint combinators. In the second part we review Algorithmic Information Theory, for which these interpreters provide a convenient vehicle. We demonstrate this with several concrete upper bounds on program-size complexity, including an elegant self-delimiting code for binary strings. 1
What is an Efficient Implementation of the λ-calculus?
, 1991
"... We propose to measure the e#ciency of any implementation of the #- calculus as a function of a new parameter #, that is itself a function of any #-expression. Complexity is expressed here as a function of # just as runtime is expressed as a function of the input size n in ordinary analysis of alg ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
We propose to measure the e#ciency of any implementation of the #- calculus as a function of a new parameter #, that is itself a function of any #-expression. Complexity is expressed here as a function of # just as runtime is expressed as a function of the input size n in ordinary analysis of algorithms. This enables implementations to be compared for worst case e#ciency. We argue that any implementation must have complexity #(#), i.e. a linear lower bound. Furthermore, we show that implementations based upon Turner Combinators or Hughes Super-combinators have complexities 2 #(#) , i.e. an exponential lower bound. It is open whether any implementation of polynomial complexity, # O(1) , exists, although some implementations have been implicitly claimed to have this complexity. Introduction Objectives The aim of this paper is to provide a theoretical basis for e#ciency considerations in the implementation of functional languages. So far, people working in this area have approa...
What is an Efficient Implementation of the λ-calculus?
, 1991
"... We propose to measure the efficiency of any implementation of the λcalculus as a function of a new parameter ν, that is itself a function of any λ-expression. Complexity is expressed here as a function of ν just as runtime is expressed as a function of the input size n in ordinary analysis of algori ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
We propose to measure the efficiency of any implementation of the λcalculus as a function of a new parameter ν, that is itself a function of any λ-expression. Complexity is expressed here as a function of ν just as runtime is expressed as a function of the input size n in ordinary analysis of algorithms. This enables implementations to be compared for worst case efficiency. We argue that any implementation must have complexity Ω(ν), i.e. a linear lower bound. Furthermore, we show that implementations based upon Turner Combinators or Hughes Super-combinators have complexities 2 Ω(ν), i.e. an exponential lower bound. It is open whether any implementation of polynomial complexity, ν O(1), exists, although some implementations have been implicitly claimed to have this complexity.

