CSCE 420 Lecture 18

From Notes
Jump to navigation Jump to search

« previous | Tuesday, March 26, 2013 | next »


The Unification Algorithm

function Unify(x,y,θ) returns a substitution to make x and y identical
    inputs: x - a variable, constant, list, or compound
            y - a variable, constant, list, or compound
            θ - the substitution built up so far
    if θ = failure then return failure
    else if x = y then return θ
    else if Variable?(x) then return Unify-Var(x,y,θ)
    else if Variable?(y) then return Unify-Var(y,x,θ)
    else if Compound?(x) and Compound?(y) then
        return Unify(Args[x], Args[y], Unify(Op[x], Op[y], θ))
    else if List?(x) and List?(y) then
        return Unify(Rest[x], Rest[y], Unify(First[x],First[y], θ))
    else return failure
    end if
end function

Forward Chaining

function FOL-FC-Ask(KB, α) returns a substitution or false
    repeat until new is empty
        new := {}
        for each sentence r in KB do
            (p1 ∧ … ∧ pn ⇒ q) := Standardize-Apart(r)
            for each θ such that (p1 ∧ … ∧ pn) θ = (p1' ∧ … ∧ pn') θ for some p1', …, pn' in KB
                q' := Subst(θ, q)
                if q' is not a renaming of a sentence already in KB or new then do
                    add q' to new
                    φ := Unify(q', α)
                    if φ is not fail then return φ
                end if
            end for
        end for
        add new to KB
    end repeat
    return false
end function

only applies to Horn-Clause KB's using Generalized Modus Ponens

Rete algorithm:

  • represents facts as a network (directed acyclic graph)
  • Hashing for efficiently determining which rules can fire
  • Many expert systems use forward chaining (a.k.a. production systems); also include:
    • explanation facilities: explains the "why?" behind results (just show proof tree)
    • uncertainty management: handling cases where data may be incomplete

Resolution Refutation

Same rules apply as in propositional logic:

  • Based on Generalized Resolution inference rule.
  • Negate query
  • Convert KB to CNF
  • Choosing clauses to resolve until empty clause is derived; heuristics:
    • Unit clause: pick clauses that can be resolved, where one clause has a single literal to shrink size of other clause
    • Input Resolution: at least one clause must come from original set (reduce irrelevant clauses)

Completeness

Completeness of Resolution Refutation in First-Order Logic is 'semi-decidable:

  • If , then it can be proved by Resolution refutation
  • If , then no finite proof exists

Ground Resolution Theorem: For a set of unsatisfiable ground/propositional sentences, there always is a finite derivation of the empty clause.

Herbrand's Theorem: For a set of unsatisfiable first-order logic sentences, there is a finite set of ground sentences that is unsatisfiable

Lifting Lemma (not given in class)

Backward Chaining

Restricted to Horn-Clause KB's

Uses goal stack data structure to keep track of what needs to be proved to support query:

KB = { A, B, D, A ∧ B → C, C ∧ D → E }
KB ⊧? E
Goal Stack:
  { E } pop top
  { C, D } push antecedents
  { D } pop top
  { A, B, D } push antecedents
  { B, D } pop top; known fact
  { D } pop top; known fact
  { } pop top; known fact

Potential choice points could be other rules to prove E or C (i.e. multiple rules that imply E or C). May have to backtrack to the most recent choice point if chosen decision method doesn't work.

function FOL-BC-Ask(KB, goals, θ) returns set of substitutions
    inputs: KB    - a knowledge base
            goals - a list of conjuncts forming a query
            θ     - the current substitution, initially the empty substitution {}
    local:  ans   - a set of substitutions, initially empty {}

    if goals is empty then return {θ}
    q' := Subst(θ, First(goals))
    for each r in KB where Standardize-Apart(r) = (p1 ∧ … ∧ pn ⇒ q) and θ' := Unify(q, q') succeeds
        ans := FOL-BC-Ask(KB, [p1, …, pn|Rest(goals)], Compose(θ,θ')) ∪ ans
    end for
    return ans
end function

For example,

KB = { ∀ x dog(x) → barks(x), dog(fido) }
KB ⊧? barks(fido)
Unifier        Goal Stack
-------        ----------
{ }            { barks(fido) }
{ x/fido }     { dog(fido) }
               { }

Backward chaining has particular advantages:

  • more efficient than forward chaining
  • only derives inference relative to query
  • no risk of generating irrelevant consequences

Thus B.C. is he basis of Prolog (a logic programming language; c.f. object-oriented, functional, and procedural)