xxi
Introduction
For reasons of this sort, research into non-monotonic reasoning has influenced research into logic programming, and vice-versa, giving rise to important and fruitful ideas and research directions in both areas. In particular,
such cross fertilization has led to the realization that logic programs, possibly augmented with some additional syntactic features, provide an excellent
language for knowledge representation in the presence of non-monotonicity.
In addition, such research has led to a number of implementations of nonmonotonic-reasoning-based logic programming systems commonly known as
answer set programming systems.
3
Thus, the interaction between logic programming and non-monotonic reasoning is important. It is not, however, the main focus of our work. On the
contrary, our main focal points are, in a nutshell, first, the detailed development of the mathematical tools and methods required to study the semantics
of logic programs, and second, in order to illustrate these methods, the detailed
development of the main semantics of logic programs per se. In addition, we
give an application of the methods we present to study semantics in the context of neural-symbolic integration, as described in more detail shortly. Thus,
we do not treat procedural matters and matters concerned with implementation in any depth, and indeed these issues are only touched on incidentally. We
also do not discuss matters primarily concerned with non-monotonic reasoning other than in the context of their role in guiding our thinking in relation
to negation in logic programs, as already noted. It will therefore be of value
to say a little more about our precise objectives, and we do this next.
In common with most programming languages, the syntax of logic programming is comparatively easy to specify formally, whereas the semantics is
much harder to deal with. Again, in common with other programming languages, there are several ways of giving logic programs a formal semantics.
First, logic programs have, of course, a procedural or operational semantics,
which describes and is described by their behaviour when executed on some
(abstract) machine. Second, unlike imperative or functional programs, logic
programs have a natural semantics, called their declarative semantics, which
arises simply because a logic program is a consistent set of well-formed formulae and can be viewed as a theory. This semantics is usually captured by means
of models, in the sense of mathematical logic, and will play a dominant role
in our development. Indeed, a central problem in the theory is the question of
selecting the “right” model for a program, namely, a model which reflects the
intended meaning of the programmer and relates it to what the program can
compute. It is here that ideas from non-monotonic reasoning play a fundamental role in determining the right models, including well-known ones such
as the supported, stable, and well-founded models. Third, a standard and very
important way of selecting the appropriate models for a logic program is to as3 For a discussion of these matters, see [Lifschitz, 1999, Marek and Truszczy´ nski, 1999,
Baral, 2003]. For current developments in non-monotonic reasoning (versus logic programming), one may consult the proceedings series of the International Conferences on Logic
Programming and Non-Monotonic Reasoning (LPNMR), for example.
Introduction
For reasons of this sort, research into non-monotonic reasoning has influenced research into logic programming, and vice-versa, giving rise to important and fruitful ideas and research directions in both areas. In particular,
such cross fertilization has led to the realization that logic programs, possibly augmented with some additional syntactic features, provide an excellent
language for knowledge representation in the presence of non-monotonicity.
In addition, such research has led to a number of implementations of nonmonotonic-reasoning-based logic programming systems commonly known as
answer set programming systems.
3
Thus, the interaction between logic programming and non-monotonic reasoning is important. It is not, however, the main focus of our work. On the
contrary, our main focal points are, in a nutshell, first, the detailed development of the mathematical tools and methods required to study the semantics
of logic programs, and second, in order to illustrate these methods, the detailed
development of the main semantics of logic programs per se. In addition, we
give an application of the methods we present to study semantics in the context of neural-symbolic integration, as described in more detail shortly. Thus,
we do not treat procedural matters and matters concerned with implementation in any depth, and indeed these issues are only touched on incidentally. We
also do not discuss matters primarily concerned with non-monotonic reasoning other than in the context of their role in guiding our thinking in relation
to negation in logic programs, as already noted. It will therefore be of value
to say a little more about our precise objectives, and we do this next.
In common with most programming languages, the syntax of logic programming is comparatively easy to specify formally, whereas the semantics is
much harder to deal with. Again, in common with other programming languages, there are several ways of giving logic programs a formal semantics.
First, logic programs have, of course, a procedural or operational semantics,
which describes and is described by their behaviour when executed on some
(abstract) machine. Second, unlike imperative or functional programs, logic
programs have a natural semantics, called their declarative semantics, which
arises simply because a logic program is a consistent set of well-formed formulae and can be viewed as a theory. This semantics is usually captured by means
of models, in the sense of mathematical logic, and will play a dominant role
in our development. Indeed, a central problem in the theory is the question of
selecting the “right” model for a program, namely, a model which reflects the
intended meaning of the programmer and relates it to what the program can
compute. It is here that ideas from non-monotonic reasoning play a fundamental role in determining the right models, including well-known ones such
as the supported, stable, and well-founded models. Third, a standard and very
important way of selecting the appropriate models for a logic program is to as3 For a discussion of these matters, see [Lifschitz, 1999, Marek and Truszczy´ nski, 1999,
Baral, 2003]. For current developments in non-monotonic reasoning (versus logic programming), one may consult the proceedings series of the International Conferences on Logic
Programming and Non-Monotonic Reasoning (LPNMR), for example.
