Artificial Intelligence A Modern Approach (3rd Edition): Figure 9.3, page
332.
function FOL-FC-ASK(KB, alpha) returns a substitution or false
inputs: KB, the knowledge base, a set of first order definite clauses
alpha, the query, an atomic sentence
local variables: new, the new sentences inferred on each iteration
repeat until new is empty
new <- {}
for each rule in KB do
(p1 ˆ ... ˆ pn => q) <- STANDARDIZE-VARAIBLES(rule)
for each theta such that SUBST(theta, p1 ˆ ... ˆ pn) = SUBST(theta, p'1 ˆ ... ˆ p'n)
for some p'1,...,p'n in KB
q' <- SUBST(theta, q)
if q' does not unify with some sentence already in KB or new then
add q' to new
theta <- UNIFY(q', alpha)
if theta is not fail then return theta
add new to KB
return false
Figure 9.3 A conceptually straightforward, but very inefficient
forward-chaining algo- rithm. On each iteration, it adds to KB all the atomic
sentences that can be inferred in one step from the implication sentences and
the atomic sentences already in KB. The function STANDARDIZE-VARIABLES
replaces all variables in its arguments with new ones that have not been used
before.