Results 1  10
of
42
A unified computation model for functional and logic programming
 IN PROC. OF THE 24TH ACM SYMPOSIUM ON PRINCIPLES OF PROGRAMMING LANGUAGES (PARIS
, 1997
"... We propose a new computation model which combines the operational principles of functional languages (reduction), logic languages (nondeterministic search for solutions), and integrated functional logic languages (residuation and narrowing). This computation model combines efficient evaluation prin ..."
Abstract

Cited by 144 (71 self)
 Add to MetaCart
We propose a new computation model which combines the operational principles of functional languages (reduction), logic languages (nondeterministic search for solutions), and integrated functional logic languages (residuation and narrowing). This computation model combines efficient evaluation principles of functional languages with the problemsolving capabilities of logic programming. Since the model allows the delay of function calls which are not sufficiently instantiated, it also supports a concurrent style of programming. We provide soundness and completeness results and show that known evaluation principles of functional logic languages are particular instances of this model. Thus, our model is a suitable basis for future declarative programming languages.
Specialization of Lazy Functional Logic Programs
 IN PROC. OF THE ACM SIGPLAN CONF. ON PARTIAL EVALUATION AND SEMANTICSBASED PROGRAM MANIPULATION, PEPM'97, VOLUME 32, 12 OF SIGPLAN NOTICES
, 1997
"... Partial evaluation is a method for program specialization based on fold/unfold transformations [8, 25]. Partial evaluation of pure functional programs uses mainly static values of given data to specialize the program [15, 44]. In logic programming, the socalled static/dynamic distinction is hard ..."
Abstract

Cited by 37 (23 self)
 Add to MetaCart
Partial evaluation is a method for program specialization based on fold/unfold transformations [8, 25]. Partial evaluation of pure functional programs uses mainly static values of given data to specialize the program [15, 44]. In logic programming, the socalled static/dynamic distinction is hardly present, whereas considerations of determinacy and choice points are far more important for control [12]. We discuss these issues in the context of a (lazy) functional logic language. We formalize a twophase specialization method for a nonstrict, first order, integrated language which makes use of lazy narrowing to specialize the program w.r.t. a goal. The basic algorithm (first phase) is formalized as an instance of the framework for the partial evaluation of functional logic programs of [2, 3], using lazy narrowing. However, the results inherited by [2, 3] mainly regard the termination of the PE method, while the (strong) soundness and completeness results must be restated for the lazy strategy. A postprocessing renaming scheme (second phase) is necessary which we describe and illustrate on the wellknown matching example. This phase is essential also for other nonlazy narrowing strategies, like innermost narrowing, and our method can be easily extended to these strategies. We show that our method preserves the lazy narrowing semantics and that the inclusion of simplification steps in narrowing derivations can improve control during specialization.
Algebra of logic programming
 International Conference on Logic Programming
, 1999
"... At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating th ..."
Abstract

Cited by 20 (3 self)
 Add to MetaCart
At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating the expressiveness of these two models of computation. In this thesis we work towards an integration of the methodology from the two research areas. To this end, we propose an algebraic approach to reasoning about logic programs, corresponding to the approach taken in functional programming. In the first half of the thesis we develop and discuss a framework which forms the basis for our algebraic analysis and transformation methods. The framework is based on an embedding of definite logic programs into lazy functional programs in Haskell, such that both the declarative and the operational semantics of the logic programs are preserved. In spite of its conciseness and apparent simplicity, the embedding proves to have many interesting properties and it gives rise to an algebraic semantics of logic programming. It also allows us to reason about logic programs in a simple calculational style, using rewriting and the algebraic laws of combinators. In the embedding, the meaning of a logic program arises compositionally from the meaning of its constituent subprograms and the combinators that connect them. In the second half of the thesis we explore applications of the embedding to the algebraic transformation of logic programs. A series of examples covers simple program derivations, where our techniques simplify some of the current techniques. Another set of examples explores applications of the more advanced program development techniques from the Algebra of Programming by Bird and de Moor [18], where we expand the techniques currently available for logic program derivation and optimisation. To my parents, Sandor and Erzsebet. And the end of all our exploring Will be to arrive where we started And know the place for the first time.
A Transformation System for Lazy Functional Logic Programs
, 1999
"... Needed narrowing is a complete operational principle for modern declarative languages which integrate the best features of (lazy) functional and logic programming. We define a transformation methodology for functional logic programs based on needed narrowing. We provide (strong) correctness results ..."
Abstract

Cited by 19 (13 self)
 Add to MetaCart
Needed narrowing is a complete operational principle for modern declarative languages which integrate the best features of (lazy) functional and logic programming. We define a transformation methodology for functional logic programs based on needed narrowing. We provide (strong) correctness results for the transformation system w.r.t. the set of computed values and answer substitutions and show that the prominent properties of needed narrowing  namely, the optimality w.r.t. the length of derivations and the number of computed solutions  carry over to the transformation process and the transformed programs. We illustrate the power of the system by taking on in our setting two wellknown transformation strategies (composition and tupling). We also provide an implementation of the transformation system which, by means of some experimental results, highlights the benefits of our approach.
Improving Control in Functional Logic Program Specialization
, 1998
"... We have recently defined a framework for Narrowingdriven Partial Evaluation (NPE) of functional logic programs. This method is as powerful as partial deduction of logic programs and positive supercompilation of functional programs. Although it is possible to treat complex terms containing primitive ..."
Abstract

Cited by 18 (12 self)
 Add to MetaCart
We have recently defined a framework for Narrowingdriven Partial Evaluation (NPE) of functional logic programs. This method is as powerful as partial deduction of logic programs and positive supercompilation of functional programs. Although it is possible to treat complex terms containing primitive functions (e.g. conjunctions or equations) in the NPE framework, its basic control mechanisms do not allow for effective polygenetic specialization of these complex expressions. We introduce a sophisticated unfolding rule endowed with a dynamic narrowing strategy which permits flexible scheduling of the elements (in conjunctions) which are reduced during specialization. We also present a novel abstraction operator which carefully considers primitive functions and is the key to achieving accurate polygenetic specialization. The abstraction operator extends some recent partitioning techniques defined in the framework of conjunctive partial deduction. We provide experimental results obtained from an implementation using the INDY system which demonstrate that the control refinements produce better specializations.
Embedding prolog in haskell
 Department of Computer Science, University of Utrecht
, 1999
"... The distinctive merit of the declarative reading of logic programs is the validity ofallthelaws of reasoning supplied by the predicate calculus with equality. Surprisingly many of these laws are still valid for the procedural reading � they can therefore be used safely for algebraic manipulation, pr ..."
Abstract

Cited by 16 (4 self)
 Add to MetaCart
The distinctive merit of the declarative reading of logic programs is the validity ofallthelaws of reasoning supplied by the predicate calculus with equality. Surprisingly many of these laws are still valid for the procedural reading � they can therefore be used safely for algebraic manipulation, program transformation and optimisation of executable logic programs. This paper lists a number of common laws, and proves their validity for the standard (depth rst search) procedural reading of Prolog. They also hold for alternative search strategies, e.g. breadth rst search. Our proofs of the laws are based on the standard algebra of functional programming, after the strategies have been given a rather simple implementation in Haskell. 1
A Debugging Scheme for Functional Logic Programs
 Proc. WFLP’2001
, 2002
"... We present a generic scheme for the declarative debugging of functional logic programs which is valid for eager as well as lazy programs. In particular we show that the framework extends naturally some previous work and applies to the most modern lazy strategies, such as needed narrowing. First we a ..."
Abstract

Cited by 13 (6 self)
 Add to MetaCart
We present a generic scheme for the declarative debugging of functional logic programs which is valid for eager as well as lazy programs. In particular we show that the framework extends naturally some previous work and applies to the most modern lazy strategies, such as needed narrowing. First we associate to our pro grams a semantics based on a (continuous) immediate consequence operator, which models computed answers. We show that, given the intended specification of a program 7, it is possible to check the correctness of 7 by a single step of Tn. We consider then a more effective methodology which is based on abstract interpretation: by approximating the intended specification of the success set we derive a finitely terminating diagnosis method, which can be used statically and is parametric w.r.t. to the chosen approximation. In order to correct the bugs, we sketch a preliminary deductive approach which uses exampleguided unfolding. We specialize the incorrect rules w.r.t. sets of positive and negative examples which are gathered (bottomup) during the diagnosis process, so that all refutations of nega tive examples and no refutation of positive examples are excluded. Our debugging framework does not require the user to either provide error symptoms in advance or answer diicult questions concerning program correctness. We extend an implementation of our system to the case of needed narrowing and illustrate it through some examples which demonstrate the practicality of our approach.
Context Patterns in Haskell
 In 8th Int. Workshop on Implementation of Functional Languages, LNCS 1268
, 1996
"... In modern functional languages, pattern matching is used to define functions or expressions by performing an analysis of the structure of values. We extend Haskell with a new nonlocal form of patterns called context patterns, which allow the matching of subterms without fixed distance from the root ..."
Abstract

Cited by 9 (2 self)
 Add to MetaCart
In modern functional languages, pattern matching is used to define functions or expressions by performing an analysis of the structure of values. We extend Haskell with a new nonlocal form of patterns called context patterns, which allow the matching of subterms without fixed distance from the root of the whole term. The semantics of context patterns is defined by transforming them to standard Haskell programs. Typical applications of context patterns are functions which search a data structure and possibly transform it. This concept can easily be adopted for other languages using pattern matching like ML or Clean.
HigherOrder Lazy Narrowing Calculus: A Computation Model for a Higherorder Functional Logic Language
 In Proceedings of Sixth International Joint Conference, ALP '97  HOA '97, LNCS 1298
, 1997
"... this paper we present a computation model for a higherorder functional and logic programming. Although investigations of computation models for higherorder functional logic languages are under way[13, 9, 8, 20, 22], implemented functional logic languages like KLEAF[6] and Babel[18] among others, a ..."
Abstract

Cited by 8 (4 self)
 Add to MetaCart
this paper we present a computation model for a higherorder functional and logic programming. Although investigations of computation models for higherorder functional logic languages are under way[13, 9, 8, 20, 22], implemented functional logic languages like KLEAF[6] and Babel[18] among others, are all based on firstorder models of computation. Firstorder narrowing has been used as basic computation mechanism. The lack of higherorderness is exemplified by the following prototypical program
Decidability of Bounded HigherOrder Unification
, 2002
"... It is shown that unifiability of terms in the simply typed lambda calculus with beta and eta rules becomes decidable if there is a bound on the number of bound variables and lambdas in a unifier in etaexpanded betanormal form. ..."
Abstract

Cited by 7 (0 self)
 Add to MetaCart
It is shown that unifiability of terms in the simply typed lambda calculus with beta and eta rules becomes decidable if there is a bound on the number of bound variables and lambdas in a unifier in etaexpanded betanormal form.