Book Description
What sets this book apart from others on logic programming is the breadth of its coverage. The authors have achieved a fine balance between a clear and authoritative treatment of the theory and a practical, problem-solving approach to its applications. This edition introduces major new developments in a continually evolving field and includes such topics as concurrency and equational and constraint logic programming./p>
Reviews From AMAZON.COM
A good overview with many applications discussed
In this book the authors attempt to give a background into the foundations of logic programming and to develop programming expertise in the programming language Prolog. They do a good job, and considering the importance of logic programming in both research and industry, a perusal of this book will give the reader a good background to enter fields such as constraint logic programming or artificial intelligence.
Chapter 1 is an introduction to what logic programming is all about, with its declarative nature emphasized right away. The syntax of predicate logic is introduced as a formalization of a collection of declarative statements of natural language. The semantics of the formulas in predicate logic is discussed in terms of a relation between its language and a particular (algebraic) structure. The meaning of terms including both constants and variables is done using a 'valuation'. Some elementay model theory is developed here also.
In chapter 2, the authors take up logic programming by introducing the notion of 'definite clauses'. A 'definite program' is then a finite set of definite clauses. Logic programming is explained as writing down a collection of logic formulas, with the programmer attempting to describe an intended model via the use of definite clauses, or "facts" and "rules". The program can have many models, with a program being "incorrect" if and only if the intended model is not a model of the program. The authors show clearly the role of queries in establishing the truth of the intended model.They also show the existence of a model that reflects all of the information expressed in model but not any more, the famous 'Herbrand model'.
Logic programs are essentially reasoning systems, and so a notion of proof is needed. This is done in chapter 3, which discusses inference rules in the guise of "SLD-resolution", which is a model-theoretic notion of proof. The soundness and completeness of SLD-resolution is proven in detail. Readers familiar with resolution from earlier courses in logic will appreciate the discussion of 'proof trees" in this chapter.
Chapter 4 takes up the very controversial notion of negation in logic programming, and its connection with the 'closed world assumption', the latter of which allows one to derive negative conclusions based on the absence of positive information. The authors discuss various approaches to the justification of negative conclusions from general programs, and they explain the role of 'program completion" in capturing the notion of negation as finite failure.
Those readers who already have exposure will appreciate more the discussion in chapter 5, which deals with the 'cut' pruning strategy for traversing of SLD-trees, along with 'built-in arithmetic'. The effects of the cut operation are explained in detail, including its ability to destroy completeness of definite programs and soundness of general programs, and if negation is involved, give incorrect answers. The authors also show how the cut operation may be used to implement negation in Prolog. The discussion on built-in arithmetic in Prolog alleviates any concerns that one is departing from the declarative paradigm by its incorporation. Since only relations can be expressed in logic programs, readers need to know how to express arithmetic operations in such programs.
Chapter 6 is more practical, as it discusses the connection between logic programs and relational databases. The authors show how logic can both 'explicit' and 'implicit' data, the latter corresponding to 'views' in relational database theory. The authors show in detail how logic programs can implement the operations of 'relational algebra', and how they can be used as query languages. They also show how to construct compound terms in order represent more complicated constructions, like families and their members.
In chapter 7, the authors introduce tools for dealing with data objects that are variable in size or possibly infinite. These objects can be represented by 'recursive data structures' and which can contain (via recursion) subclasses of the same type. Readers familiar with the programming language LISP will appreciate the discussion, since the 'list' data structure is used throughout the chapter.
Chapter 8 is more esoteric, as it shows how to use logic programs as a "metalanguage" to describe logic programming, with emphasis on constructing 'interpreters', the latter being used to describe the operational semantics of a programming language. The authors show how to construct interpreters for Prolog without built-in predicates, these being called 'self-interpreters'. The discuss in detail the advantages of using self-interpreters. They discuss also however the built-in predicates in Prolog, and their advantages in metaprogramming.
The use of logic programming to build expert systems is discussed in chapter 9. The knowledge base of an expert system is a collection of definite or general clauses, but this base is usually incomplete in a logic program. This knowledge is added while using the program. The authors show how to construct an inference tool for the expert system based on the notion of a self-interpreter.
The connection of logic with computational linguistics and formal language theory is the topic of chapter 10. Parsers for context-free and context-dependent languages are constructed. Prolog programs are interpreted as 'definite clause grammars' in this chapter also.
Chapter 11 addresses algorithms for searching state spaces, with the famous "water-jug" and "blocks world" problems are discussed as examples.
The remaining chapters of the book discusses alternative approaches to logic programming, such as using parallelism to solve subgoals simultaneously and its connection with "concurrent logic programming". Also discussed is how to associate functions with functors, in order to incorporate a notion of equality into logic programming. The most important discussion is chapter 14, which treats constraint logic programming. This area has become extremely important in business and industry and several multi-million dollar companies have appeared in the last decade that specialize in constraint logic programming packages. The authors describe in detail how to give declarative meaning to constraint logic programming languages.
What sets this book apart from others on logic programming is the breadth of its coverage. The authors have achieved a fine balance between a clear and authoritative treatment of the theory and a practical, problem-solving approach to its applications. This edition introduces major new developments in a continually evolving field and includes such topics as concurrency and equational and constraint logic programming.

ISBN:0471926256