Introduction
Logic programming is programming with logic. In essence, the idea is to use
formal logic as a knowledge representation language with which to specify a
problem and to view computation as the (automated) deduction of new knowledge from that given. The foundations of logic programming are usually based
upon the seminal paper of Robert Kowalski [Kowalski, 1974], which built on
John Alan Robinson’s well-known paper [Robinson, 1965] wherein foundations
were laid for the field of automated deduction using the resolution principle.
These ideas gave rise, more or less simultaneously, to the programming language Prolog, first realized by Alain Colmerauer et al. in Marseilles in 1973,
see [Colmerauer and Roussel, 1993]. In this computing paradigm, a knowledge
base is given in the form of a logic program, which may be thought of as a
conjunctive normal form of a formula in the first-order language L underlying
the program as defined formally in Chapters 1 and 2. Then the program, or
system, can be queried with conjunctions Q of partially instantiated atomic
formulas, that is, with conjunctions of atomic formulas containing variables.
The resulting answers produced by the system are substitutions θ for these
variables by terms in L such that Qθ is a logical consequence of the knowledge
base. The automated deduction performed by the system is usually based on
a restricted form of resolution called SLD(NF)-resolution, see [Apt, 1997].
Since this early work, logic programming has become a major programming paradigm and has developed in a considerable number of different and
diverse directions, including automated deduction (in the context, for example, of model checking), natural language processing, databases, knowledge
representation and reasoning (including applications to the Semantic Web),
cognitive robotics, and machine learning, to mention a few. Furthermore, the
industrial applications using the underlying technologies, Prolog in the main,
but also an increasing number of related systems, are growing steadily more
numerous and more and more varied.
1
1 For some examples, the proceedings of the annual International Conference on Logic
Programming (ICLP) provide a current view of the subject. The book [Bramer, 2010] contains an introduction to Prolog programming. A standard reference for the theory underlying Prolog programming is [Apt, 1997]. The reference [Apt and Wallace, 2007] contains
much about constraint logic programming. See [De Raedt et al., 2008] for details of current work in (probabilistic) inductive logic programming. For information about disjunctive
logic programming systems, see [Leone et al., 2006] and the website for the DLV project at
http://www.dbai.tuwien.ac.at/proj/dlv/, and for information concerning the related system
smodels, see [Simons et al., 2002] and the website http://www.tcs.hut.fi/Software/smodels/.
xix
Logic programming is programming with logic. In essence, the idea is to use
formal logic as a knowledge representation language with which to specify a
problem and to view computation as the (automated) deduction of new knowledge from that given. The foundations of logic programming are usually based
upon the seminal paper of Robert Kowalski [Kowalski, 1974], which built on
John Alan Robinson’s well-known paper [Robinson, 1965] wherein foundations
were laid for the field of automated deduction using the resolution principle.
These ideas gave rise, more or less simultaneously, to the programming language Prolog, first realized by Alain Colmerauer et al. in Marseilles in 1973,
see [Colmerauer and Roussel, 1993]. In this computing paradigm, a knowledge
base is given in the form of a logic program, which may be thought of as a
conjunctive normal form of a formula in the first-order language L underlying
the program as defined formally in Chapters 1 and 2. Then the program, or
system, can be queried with conjunctions Q of partially instantiated atomic
formulas, that is, with conjunctions of atomic formulas containing variables.
The resulting answers produced by the system are substitutions θ for these
variables by terms in L such that Qθ is a logical consequence of the knowledge
base. The automated deduction performed by the system is usually based on
a restricted form of resolution called SLD(NF)-resolution, see [Apt, 1997].
Since this early work, logic programming has become a major programming paradigm and has developed in a considerable number of different and
diverse directions, including automated deduction (in the context, for example, of model checking), natural language processing, databases, knowledge
representation and reasoning (including applications to the Semantic Web),
cognitive robotics, and machine learning, to mention a few. Furthermore, the
industrial applications using the underlying technologies, Prolog in the main,
but also an increasing number of related systems, are growing steadily more
numerous and more and more varied.
1
1 For some examples, the proceedings of the annual International Conference on Logic
Programming (ICLP) provide a current view of the subject. The book [Bramer, 2010] contains an introduction to Prolog programming. A standard reference for the theory underlying Prolog programming is [Apt, 1997]. The reference [Apt and Wallace, 2007] contains
much about constraint logic programming. See [De Raedt et al., 2008] for details of current work in (probabilistic) inductive logic programming. For information about disjunctive
logic programming systems, see [Leone et al., 2006] and the website for the DLV project at
http://www.dbai.tuwien.ac.at/proj/dlv/, and for information concerning the related system
smodels, see [Simons et al., 2002] and the website http://www.tcs.hut.fi/Software/smodels/.
xix
