Procedural semantics
Complementary to characterizing the meaning
of a program, a more pragmatically oriented question is
how we actually solve a goal, derive a conclusion or perform
a computation in a logic programming system.
Refutation procedures
\prologindex{procedural semantics}
In order to prove that a formula G is a logical consequence
of P, which we may write symbolically as
[]
it suffices to show, as we have seen in the previous section,
that the set of clauses that we get by adding the negation of G to P
is inconsistent.
Symbolically, we write
[]
to depict that we refute the assumption , which is the denial of G,
when added to P.
In [Ro65] resolution has been introduced as an efficient
refutation procedure.
Resolution knows a single inference rule.
This rule allows to discard literals from clauses until the empty clause,
containing no literals, results.
Regarding clauses as sets, the resolution rule may be phrased as
\[
\frac{ \{ A \} \u C_1 \mbox{\hspace{1.7cm}} \{ \neg A \u C_2 \} }{ C_1 \u C_2 }
\]
stating that the clause may be derived from the clauses
and
by discarding the clashing literals A and and merging the remainders
of the clauses.\ftn{
The justification for this inference rule lies in the fact
that the resulting set of clauses, the original set with the derived clause added,
is stronger than the original set.
}
The resulting clause is called the resolvent.
Obviously, this procedure does not necessarily result in
shorter clauses.
Only if C2 is empty the resulting clause will actually be shorter.
The empty clause is derived whenever the set of clauses
contains two clauses of the form and .
In addition to the resolution inference rule, a search strategy
is needed to arrive at the empty clause in an efficient way.
The resolution rule employed in logic programming systems, which
is known as SLD-resolution, is a refinement of the general
resolution rule that allows efficient search.
.so sld