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 [] P |- G 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 [] P \u { <- G } |- [] to depict that we refute the assumption <- G , 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 C1 \u C2 may be derived from the clauses { A } \u C1 and { \-A } \u C2 by discarding the clashing literals A and \-A 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 C1 \u C2 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 { A } and { \- A }. 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