After [FittingFitting1985] (using the terminology of [Apt and BolApt and Bol1994]),
we define , an analogue of
which maps interpretations to
interpretations. For simplicity, we define it in terms of the model
theory (
could be defined in the same way -- the inadmissible
case would never arise).
generalises
: if there are no inadmissible atoms in
there are none in
. Various properties of
are discussed
in [Apt and BolApt and Bol1994]. One important result is that a least fixpoint
with respect to the information ordering exists.
Another immediate consequence operator, , which retains the
truth value of inadmissible atoms, was introduced in [NaishNaish2000b]
(where it was called
). Essentially, inadmissible atoms
are assumed to succeed.
Like ,
generalises
. If
is empty,
is equivalent to
and thus each fixpoint of
corresponds
to a fixpoint of
. Fixpoints of
are also fixpoints
of
. Generally
has additional fixpoints as well.
It is particularly useful when the set of inadmissible atoms in the
intended interpretation is known. Using
, analysis can restrict
attention to the behaviour of admissible atoms. If (in)admissibility can
be determined from the program, for example, from type/mode declarations,
automatic analysis may benefit. In any case it simplifies manual analysis
and avoids analysis which can often be non-intuitive.
For example, suppose is our intended interpretation for
merge/3. The inadmissible atoms in
are the
same as those in
. To find the true atoms in
we
consider each clause and determine what admissible atoms can
be derived in one step from the true and inadmissible atoms in
.
For the first two clauses we can ignore inadmissible atoms such as
merge([],a,a). For the last two clauses it is easy to show that
if the clause head is admissible then the recursive call is admissible,
so we can ignore inadmissible atoms such as merge([2,3], [2,1],
[2,1,2,3]). This ``forward'' reasoning essentially replaces reasoning
about inadmissible atoms. Forward reasoning is more procedural in nature
[NaishNaish1993] and essential for reasoning about instantiatedness
of calls (something logic programmers must consider). It is simple to
establish that the true atoms in
are a subset of those in
(in fact, they are equal). From this we can conclude
is a model
(see below).