Dear Russ,
I assume you are talking about the form of the search tree when you
talk about paths. I don't understand what you mean by 'concurrent
paths'.
The propagate-and-search approach (or propagate-and-distribute)
combines making deductions (propagation) and making decisions
(distribution). Making deductions only excludes variable domain values
which can not be part of any solution. Such deductions can never be
'wrong'.
When no further propagation is possible, a decision is made. A decision
is potentially 'wrong' and undone later (although the Oz gurus maintain
that this is no backtracking..). The search tree (as shown, e.g., by
the explorer) only depicts the spaces created by decisions as nodes
(i.e. the propagation process is not visualised).
The decision making process (distribution strategy) is fully
programmable in Oz. An efficient decision making process leaves most of
the work to propagation: to reduce the number of necessary decisions
means to reduce the number of decisions which are potentially wrong ;-)
Obviously, this model is very different from Prolog.
Constraint propagation happens concurrently in a space, constraint
distribution on the other hand is sequential (parallel search engines
are a special issue).
New constraint domains (plus propagators) can be defined for Oz (see
the Constraint Extensions Tutorial). A number of domains are already
predefined by the system (e.g. finite domain integers, finite sets) and
some more are developed by the community (e.g. real intervals (i.e.
floats), graphs).
Best,
Torsten
On 11.10.2005, at 22:41, Russ Abbott wrote:
Thanks, Peter. If I said that concurrent logic programming does
backtracking, it wasn't my intention. Do you remember where I said
that? I'll correct it. At this point my interest is more on the
distinction (that you make also) between logic programming in general
(concurrent or backtracking) and algorithmic programming—and how
Oz seems to provide a nice way to integrate those two paradigms.
Regarding constraint programming, I've just started to learn about
Oz's approach to it. Perhaps the following is an obvious observation
made by a newcomer, but it seems to me that the essence of the Oz
approach to constraint programming is that it groups concurrent paths
together where possible. That is, instead of having a separate path
for each value in a range, it keeps the entire range together in a
single path as long as possible. It's sort of like dynamic refactoring
in which one factors out what is common to many search paths. Of
course it's not put in those terms, but that seems like one way to
think of the difference between pure concurrent search (1 [] 2[] 3 []
... [] k) and Oz's constraint processing (1::k).
Oz has lots of stuff built in to support refactoring of integer ranges
and sets. It seems to me that the next question should be: what other
kinds of choices can be factored out using similar techniques.
-- Russ
On 10/11/05, Peter Van Roy <[EMAIL PROTECTED]> wrote:
Russ Abbott wrote:
> In
>
http://cs.calstatela.edu/~wiki/index.php/Courses/CS_460/Fall_2005/
Concurrent_logic_programming_in_Oz
> <
http://cs.calstatela.edu/%7Ewiki/index.php/Courses/CS_460/Fall_2005/
Concurrent_logic_programming_in_Oz>
> , I attempt to give a brief description of concurrent logic
> programming in Oz. The first (and main) part is explicitly
> procedural. Its procedurality bothered me enough to prompt an
attempt
> to offer a declarative interpretation. This seems somewhat unusual in
> that it offers a declarative version of logic programming in terms of
> a procedural version rather than the other way around.
>
> If anyone has any comments, I'd be very interested.
>
> -- Russ
Dear Russ,
Here is some extra information that can be useful for you when
completing this section.
First of all, 'concurrent logic programming' does not do any
backtracking! It is the kind
of logic programming done by the committed-choice languages (see
section
5.8.1 in
the CTM book, page 394). It is very different from Prolog, which is
based on backtracking.
Prolog-style logic programming is exactly what is given by the Solve
operation of
chapter 9. The Solve operation is a kind of first-class Prolog top
level: it generates
a lazy list of solutions exactly in the order that Prolog generates
them. Section 9.7
of CTM explains how to translate Prolog programs to Oz. (Solve is
defined in
chapter 12, but you don't need to understand computation spaces to
understand
that Solve returns a lazy list of solutions in the order of depth-first
search!)
So there are two styles of logic programming that are currently
popular:
- concurrent logic programming (no backtracking, committed-choice,
concurrent)
- Prolog-style logic programming (global backtracking search,
sequential)
As a final comment, constraint programming works very differently from
these two
styles. It is a kind of third style. It tries to avoid search by
pruning solutions, whereas
the Prolog style does generate and test. The pruning is done in a
concurrent way, by
propagators that each observes the store and tries to do its own
pruning
independently
of the others.
I hope this clarifies some things!
Peter
--
_____________________________________________
Professor, Computer Science
California State University, Los Angeles
o Check out my blog at http://russabbott.blogspot.com/
_______________________________________________________________________
__________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users
--
Torsten Anders
Sonic Arts Research Centre
Queen's University Belfast (UK)
www.torsten-anders.de
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users