General Purpose Restrictions


Pure Literal Deletion

If an input clause has a literal for which there is no complimentarily unifiable literal in the input set, then that literal can never be resolved upon. Such literals are said to be pure. Clauses in the input set containing pure literals can be discarded. By discarding such clauses, more pure literals may be created. The process continues until no pure literals remain. If all clauses are discarded then the input set was satisfiable.

Example
S = { q(a,T),
      ~p(Y,Z) | q(Z,Y),
      ~s,
      r(X) | p(X,a),
      ~q(a,b) | s }

r(X) | p(X,a) is pure by r(X)
~p(Y,Z) | q(Z,Y) is pure by ~p(Y,Z)


Tautology Deletion

In the basic resolution procedure, and most refinements of the resolution procedure, it can be shown that tautologies cannot be part of a refutation. Thus tautologous clauses can be discarded. Tautology deletion is applied to the input set and to each resolvant inferred.

Example with contrived control
S = { r(X) | p(X,a),
      ~p(a,Y) | ~r(Y),
      ~p(b,Y) | ~r(Y),
      ~r(b),
      r(a) }

r(X) | p(X,a) is the ChosenClause
+ ~p(a,Y) | ~r(Y) » r(a) | ~r(a) (tautology)
+ ~p(b,Y) | ~r(Y) » r(b) | ~r(a)
+ ~r(b) » p(b,a)
r(b) | ~r(a) is the ChosenClause
etc, etc


Subsumption

Subsumption prevents the use of clauses that contain information that is the same as, or more specific than, information in other clauses. For example, if it is known that "everyone tells the truth", there is no point is also knowing (storing the information) that "Geoff tells the truth". The earlier information subsumes the latter. In terms of clauses, subsumption checks if a (subsuming) clause can do everything that a (subsumed) clause could do. If that is the case, the subsumed clause can be discarded because the subsuming clause can be used instead.

Clause C| subsumes clause D| iff there is an instance C|θ of C| such that each literal of C|θ is a literal of D|.

Example
wise(geoff)
Subsumed by wise(X)
θ = {X/geoff}
taller(jim,geoff) | wise(geoff) | taller(X,brother_of(X))
Subsumed by wise(Y) | taller(jim,Z)
θ = {Y/geoff, Z/geoff}
taller(jim,geoff)
Subsumed by taller(X,geoff) | taller(jim,Y)
θ = {X/jim, Y/geoff}

Example - Which subsume which?
~p(b,a) | ~p(c,a) | q(X,f(c))
q(Y,f(T)) | ~p(T,a)
~p(Z,a) | q(d,f(Z))

θ subsumption insists that, in addition to the above restriction, the subsuming clause must have no more literals than the subsumed clause. When using binary resolution and factoring, θ subsumption must be used to maintain refutation completeness.

When a new clause is inferred, forward subsumption is applied, and if the clause is not forward subsumed, backwards subsumption is applied.

Subsumption is a critical component of any ATP system. Beware: some refinements of the resolution procedure are not compatible with subsumption checking.


Inference Rules

For problems without equality, the ANL algorithm is complete with binary resolution and binary factoring. Full resolvants are produced as follows:


The ANL Algorithm with Restrictions

Do tautology deletion, introspective subsumption, pure literal deletion
Let CanBeUsed = {}
Let ToBeUsed = Input clauses
While Refutation not found && ToBeUsed not empty
    Select the ChosenClause from ToBeUsed
    Move the ChosenClause to CanBeUsed
    Infer all possible clauses using the ChosenClause and other clauses from CanBeUsed.
    Do tautology deletion, introspective subsumption, and pure literal deletion  on the inferred clauses
    Do forward subsumption on the inferred clauses
    Do backward subsumption on the inferred clauses
    If an inferred clause subsumes the ChosenClause then
        Discard all other inferred clauses 
    Add the remaining inferred clauses to ToBeUsed

Example
S1 = { p(b) | r(Y) | p(Y),
       t(Y,c) | r(a),
       ~p(S) | p(b),
       ~r(a) | ~q(a),
       ~r(b) | r(b),
       q(a) | ~t(X,c),
       ~p(b),
       ~r(a),
       ~r(c) }
 }

~r(b) | r(b) is a tautology
~r(a) | ~q(a) is subsumed by ~r(a)
q(a) | ~t(X,c) is pure
t(Y,c) | r(a) is pure
~p(b) is the ChosenClause
~r(a) is the ChosenClause
~r(c) is the ChosenClause
~p(S) | p(b) is the ChosenClause
+ ~p(b) » ~p(S)
Backward subsumes ~p(S) | p(b) (ChosenClause)
~p(b)
~p(S) is the ChosenClause
p(b) | r(Y) | p(Y) is the ChosenClause
p(b) | r(Y) | p(Y) + ~r(a) » p(b) | p(a)
+ ~r(c) » p(b) | p(c)
+ ~p(S) » r(Y) | p(Y)
Backward subsumes p(b) | r(Y) | p(Y) (ChosenClause)
Discard others p(b) | p(a)
p(b) | p(c)
r(Y) | p(Y) is the ChosenClause
+ ~r(a) » p(a)
+ ~r(c) » p(c)
+ ~p(S) » r(Y)
Backward subsumes r(Y) | p(Y) (ChosenClause)
Discard others p(a)
p(c)
r(Y) is the ChosenClause
+ ~r(a) » FALSE

Example
S10 = { p(X) | ~p(f(X))
        ~p(a)
        p(S) | q(S) | r(S)
        ~q(T) | p(a)
        ~r(T) | p(a) }


The DISCOUNT Loop

The DISCOUNT loop is an alternative flexible algorithm for controlling the generation of inferred clauses. The DISCOUNT loop delays simplifications.

Let CanBeUsed = {}
Let ToBeUsed = Input clauses
While Refutation not found && ToBeUsed not empty
    Select the ChosenClause from ToBeUsed
    if (ChosenClause is not subsumed by a member of ToBeUsed or CanBeUsed)
        Remove all members of CanBeUsed subsumed by the ChosenClause
        Move the ChosenClause to CanBeUsed
        Infer all possible clauses using the ChosenClause and other clauses from CanBeUsed.
        As each clause is inferred do
            If the inferred clause is a tautology or pure then
                Discard the inferred clause
            ElseIf the inferred clause is forward subsumed by any clause in CanBeUsed then
                Discard the inferred clause
            Else
                Add the resolvant to ToBeUsed


Exam Style Questions

  1. Show the execution of the ANL loop with all restrictions, using least symbol count as the selection strategy, to derive the empty clause from the following. Use pure literal deletion, tautology deletion, and subsumption. Write the subsuming clause next to the crossed out subsumed clause.
    S = { ~m(b) | p(Y) | ~m(Y),
          ~p(a),
          ~p(a) | ~q(a),
          t(Y,c) | p(a),
          q(a) | ~t(X,c),
          m(b),
          m(S) | ~m(b),
          ~p(b) | p(b),
          ~p(c) } 

    S = { p(X) | ~p(f(X))
          ~p(a)
          p(S) | q(S) | r(S)
          ~q(T) | p(a)
          ~r(T) | p(a) }