Results 1  10
of
17
Monadic Constraint Programming
, 2009
"... A constraint programming system combines two essential components: a constraint solver and a search engine. The constraint solver reasons about satisfiability of conjunctions of constraints, and the search engine controls the search for solutions by iteratively exploring a disjunctive search tree de ..."
Abstract

Cited by 26 (14 self)
 Add to MetaCart
(Show Context)
A constraint programming system combines two essential components: a constraint solver and a search engine. The constraint solver reasons about satisfiability of conjunctions of constraints, and the search engine controls the search for solutions by iteratively exploring a disjunctive search tree defined by the constraint program. In this paper we give a monadic definition of constraint programming where the solver is defined as a monad threaded through the monadic search tree. We are then able to define search and search strategies as first class objects that can themselves be built or extended by composable search transformers. Search transformers give a powerful and unifying approach to viewing search in constraint programming, and the resulting constraint programming system is first class and extremely flexible.
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 22 (4 self)
 Add to MetaCart
(Show Context)
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.
Typed Logical Variables in Haskell
 In Proceedings Haskell Workshop
, 2000
"... We describe how to embed a simple typed functional logic programming language in Haskell. The embedding is a natural extension of the Prolog embedding by Seres and Spivey [16]. To get full static typing we need to use the Haskell extensions of quantified types and the STmonad. 1 Introduction O ..."
Abstract

Cited by 19 (0 self)
 Add to MetaCart
(Show Context)
We describe how to embed a simple typed functional logic programming language in Haskell. The embedding is a natural extension of the Prolog embedding by Seres and Spivey [16]. To get full static typing we need to use the Haskell extensions of quantified types and the STmonad. 1 Introduction Over the last ten to twenty years, there have been many attempts to combine the flavours of logic and functional programming [3]. Among these, the most wellknown ones are the programming languages Curry [4], Escher [13], and Mercury [14]. Curry and Escher can be seen as variations on Haskell, where logic programming features are added. Mercury can be seen as an improvement of Prolog, where types and functional programming features are added. All three are completely new and autonomous languages. Defining a new programming language has as a drawback for the developer to build a new compiler, and for the user to learn a new language. A different approach which has gained a lot of popularity ...
Relating Models of Backtracking
 IN PROC. 9TH INT. CONF. ON FUNCTIONAL PROGRAMMING
, 2004
"... Past attempts to relate two wellknown models of backtracking computataion have met with only limited success. We relate these two models using logical relations. We accommodate higherorder values and in nite computations. We also provide an operational semantics, and we prove it adequate for both ..."
Abstract

Cited by 14 (0 self)
 Add to MetaCart
Past attempts to relate two wellknown models of backtracking computataion have met with only limited success. We relate these two models using logical relations. We accommodate higherorder values and in nite computations. We also provide an operational semantics, and we prove it adequate for both models.
Combinators for BreadthFirst Search
"... this article is devoted to nding a suitable denition for this operator, and verifying that it is associative, as it must be if we are to write expressions like test n ^ ..."
Abstract

Cited by 10 (0 self)
 Add to MetaCart
this article is devoted to nding a suitable denition for this operator, and verifying that it is associative, as it must be if we are to write expressions like test n ^
HigherOrder Transformation of Logic Programs
 In Proceedings of the Tenth International Workshop on Logicbased Program Synthesis and Transformation (LOPSTR 2000
, 2000
"... It has earlier been assumed that a compositional approach to algorithm design and program transformation is somehow unique to functional programming. Elegant theoretical results codify the basic laws of algorithmics within the functional paradigm and with this paper we hope to demonstrate that s ..."
Abstract

Cited by 6 (1 self)
 Add to MetaCart
(Show Context)
It has earlier been assumed that a compositional approach to algorithm design and program transformation is somehow unique to functional programming. Elegant theoretical results codify the basic laws of algorithmics within the functional paradigm and with this paper we hope to demonstrate that some of the same techniques and results are applicable to logic programming as well.
The Algebra of Searching
 PROCEEDINGS OF A SYMPOSIUM IN CELEBRATION OF THE WORK OF
, 1999
"... this paper, we seek to develop a logic for logic programs that takes into account this procedural aspect of their behaviour under dierent search strategies, emphasizing algebraic properties that are common to all search strategies. ..."
Abstract

Cited by 4 (2 self)
 Add to MetaCart
(Show Context)
this paper, we seek to develop a logic for logic programs that takes into account this procedural aspect of their behaviour under dierent search strategies, emphasizing algebraic properties that are common to all search strategies.
Soutei, a LogicBased TrustManagement System System Description
"... Abstract. We describe the design and implementation of a trustmanagement system Soutei, a dialect of Binder, for access control in distributed systems. Soutei policies and credentials are written in a declarative logicbased security language and thus constitute distributed logic programs. Soutei p ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
(Show Context)
Abstract. We describe the design and implementation of a trustmanagement system Soutei, a dialect of Binder, for access control in distributed systems. Soutei policies and credentials are written in a declarative logicbased security language and thus constitute distributed logic programs. Soutei policies are modular, concise, and readable. They support policy verification, and, despite the simplicity of the language, express role and attributebased access control lists, and conditional delegation. We describe the realworld deployment of Soutei into a publishsubscribe web service with distributed and compartmentalized administration, emphasizing the often overlooked aspect of authorizing the creation of resources and the corresponding policies. Soutei brings Binder from a research prototype into the real world. Supporting large, truly distributed policies required nontrivial changes to Binder, in particular moderestriction and goaldirected topdown evaluation. To improve the robustness of our evaluator, we describe a fair and terminating backtracking algorithm.
Aiding Dependent Type Checking with Rewrite Rules
, 2001
"... Dependent type checking in Cayenne often fails when the programmer has relied on nontrivial properties of functions that are used in types. For instance, associativity of addition on natural numbers does not follow immediately from the function definition, but it may be required during the type che ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Dependent type checking in Cayenne often fails when the programmer has relied on nontrivial properties of functions that are used in types. For instance, associativity of addition on natural numbers does not follow immediately from the function definition, but it may be required during the type checking process. We propose to tackle this problem by allowing the programmer to annotate programs with rewrite rules whenever such additional properties are required. We discuss two motivating examples and report on a feasibility study where we integrated a rewriting system into a type checking algorithm for a language with dependent types and general recursion.
Optimisation Problems in Logic Programming: An Algebraic Approach
, 2000
"... Declarative programming, with its mathematical underpinning, was aimed to simplify rigorous reasoning about programs. For functional programs, an algebraic calculus of relations has previously been applied to optimisation problems to derive ecient greedy or dynamic programs from the corresponding ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
Declarative programming, with its mathematical underpinning, was aimed to simplify rigorous reasoning about programs. For functional programs, an algebraic calculus of relations has previously been applied to optimisation problems to derive ecient greedy or dynamic programs from the corresponding inefficient but obviously correct specifications. Here we argue that this approach is natural also in the logic programming setting.