Artificial Intelligence 8. The Resolution Method Course V231 Department of Computing Imperial College, London Jeremy Gow
Soundness & Completeness Want to prove theorem T from Axioms Ax Chosen a set of inference rules R A B means B is entailed by A A B means B is derived from A using R R should be sound: if A B then A B Want R to be complete: if A B then A B
Choose Your Search Space Soundness and completeness of R isn’t enough We want a reasonable search space R determines operators, so influences the space Can I see where I’m going? (Heuristic measure) Can I restrict options at each state? (Branching) Three main approaches Forwards chaining: no heuristic guidance Backwards chaining: large branching (many things entail KB) Proof by refutation: clear goal (false), forwards inference
Proof by Refutation Proof by contradiction, reductio ad absurdum Negate the theorem & add to axioms (¬T,Ax) Use rules of inference to derive the False So sentences (¬T,Ax) can’t all be true (unsatisfiable) But the axioms Ax are true Hence the negated theorem ¬T must be false Hence the theorem T must be true
The Resolution Method Proof by refutation with a single inference rule No need to worry about choice of rule Just how we apply the one rule Resolution is complete for FOL Refutation-complete [Robinson 1965] If (¬T,Ax) unsatisfiable it will derive a contradiction So if will prove any true theorem of FOL Even so, it might take a long time (> universe) Even fairly trivial theorems can take a long time Can use search heuristics to speed it up (next lecture) No guarantees if it’s not a theorem
Binary Resolution (Propositional) Unit resolution rule (last lecture) AB, ¬B A Binary resolution rule AB, ¬BC AC The literals B and ¬B are resolved
Binary Resolution (First-Order) Binary resolution rule AB, ¬CD Subst(, AD) if substitution s.t. Subst(,B) = Subst(,C) The literals B and ¬C are resolved B and C have been made the same by
Resolution in FOL (This Lecture) What if KB contains non-disjuncts? Preprocessing step: rewrite to CNF How do we find substitution ? The unification algorithm But what if more than two disjuncts? Extend binary resolution to full resolution
Conjunctive Normal Form A conjunction of clauses Each clause is a disjunction of literals Prop. literal: proposition or negated proposition FO literal: predicate or negated predicate No quantifiers (all variables implicitly universal) Example FO clause likes(george, X) ¬likes(tony, houseof(george)) ¬is_mad(maggie) Any FO sentence can be rewritten as CNF
Converting FOL to CNF (see notes) Eliminate implication/equivalence (rewrite) Move ¬ inwards (rewrite) Rename variables apart (substitution) Move quantifiers outwards (rewrite) Skolemise existential variables (substitution) Distribute over (rewrite) Flatten binary connectives (rewrite) (Optional: Reintroduce implications)
Example CNF Conversion Propositional example (B (A C)) (B ¬A) 1. Remove implication: ¬(B (A C)) (B ¬A) 2. Move ¬ inwards (De Morgan’s x 2): (¬B ¬(A C)) (B ¬A) (¬B (¬A ¬C)) (B ¬A) (Skip 3 to 5 as no variables.)
Example CNF Conversion (Contd) (¬B (¬A ¬C)) (B ¬A) 6. Distribute over : (¬B (B ¬A)) ((¬A ¬C) (B ¬A)) 7. Flatten connectives (¬B B ¬A) (¬A ¬C B ¬A) Drop 1st clause (¬B B), remove duplicate from 2nd: ¬A ¬C B
¬A ¬C B becomes (A C) B Kowalski Normal Form Can reintroduce to CNF, e.g. ¬A ¬C B becomes (A C) B Kowalski form (A1 … An) (B1 … Bn) Binary resolution… AB, BC AC Resembles Horn clauses (basis for Prolog)
Skolemisation Replace V with a ‘something’ term If no preceeding U use fresh Skolem constant Otherwise fresh Skolem function parameterised by all preceeding U X Y (person(X) has(X, Y) heart(Y)) to person(X) has(X, f(X)) heart(f(X)) (The particular heart f(X) depends on person X)
Substitutions & Inference Rules Propositional inference rules used in first-order logic But in FOL we can make substitutions Sometimes a substitution can allow a rule to be applied cf. FO binary resolution knows(john, X) hates(john, X) knows(john, mary) Substitution + Modus Ponens: infer hates(john, mary) Need to find substitution that makes literals equal Known as a unifier
Unifying Predicates We unified these two predicates: knows(john, X) and knows(john, mary) By saying that X should be substituted by mary Why? Because john = john and can {X\mary} For knows(jack, mary) and knows(john, X) john doesn’t match jack So we cannot unify the two predicates Hence we cannot use the rule of inference
Unification Want an algorithm which: Example: Takes two FOL sentences as input Outputs a substitution {X/mary, Y/Z, etc.} Which assigns terms to variables in the sentences So that the first sentence looks exactly like the second Or fails if there is no way to unify the sentences Example: Unify(“knows(john, X)”, “knows(john,mary)”) = {X/mary} Unify(“knows(john, X)”, “knows(jack,mary)”) = Fail
Functions Within the Unify Algorithm isa_variable(x) checks whether x is a variable isa_list(x) checks whether x is a list head(x) outputs the head of a list (first term) e.g., head([a,b,c]) = a tail(x) outputs the elements other than the head in a list e.g., tail([a,b,c]) = [b,c]
More Internal Functions (Compound Expressions) isa_compound(x) checks whether x is compound expression (either a predicate, a function or a connective) args(x) finds the subparts of the compound expression x arguments of a predicate, function or connective Returns the list of arguments op(x) predicate name/function name/connective symbol
Two Parts of the Unification Algorithm Algorithm is recursive (it calls itself) Passes around a set of substitutions, called mu Making sure that new substitutions are consistent with old ones unify(x,y) = unify_internal(x,y,{}) x and y are either a variable, constant, list, or compound unify_internal(x,y,mu) x and y are sentences, mu is a set of substitutions finds substitutions making x look exactly like y unify_variable(var,x,mu) var is a variable finds a single substitution (which may be in mu already)
unify_internal unify_internal(x,y,mu) ---------------------- Cases 1.if (mu=failure) then return failure 2.if (x=y) then return mu. 3.if (isa_variable(x)) then return unify_variable(x,y,mu) 4.if (isa_variable(y)) then return unify_variable(y,x,mu) 5.if (isa_compound(x) and isa_compound(y)) then return unify_internal(args(x),args(y),unify_internal(op(x),op(y),mu)) 6.if (isa_list(x) and isa_list(y)) then return unify_internal(tail(x),tail(y),unify_internal(head(x),head(y),mu)) 7.return failure
unify_variable unify_variable(var,x,mu) ------------------------ Cases 1. if (a substitution var/val is in mu) then return unify_internal(val,x,mu) 2. if (a substitution x/val is in mu) then return unify_internal(var,val,mu) 3. if (var occurs anywhere in x) return failure 4. add var/x to mu and return
Notes on the Unification Algorithm unify_internal will not match a constant to a constant, unless they are equal (case 2) Case 5 in unify_internal checks that two compound operators are the same (e.g. same predicate name) Case 6 in unify_internal causes the algorithm to recursivly unify the whole list Cases 1 and 2 in unify_variable check that neither inputs have already been substituted
The Occurs Check Suppose we needed to substitute X with f(X,Y) This would give us f(X,Y) instead of X But there is still an X in there, so the substitution isn’t complete: we need f(f(X,Y),Y), then f(f(f(X,Y),Y),Y) and so on We need to avoid this situation Otherwise the algorithm won’t stop Case 3 in unify_variable checks this Known as the “occurs check” Occurs check slows the algorithm down Order (n2), where n is size of expressions being unified
An Example Unification Suppose we want to unify these sentences: 1. p(X,tony) q(george,X,Z) 2. p(f(tony),tony) q(B,C,maggie) By inspection, this is a good substitution: {X/f(tony), B/george, C/f(tony), Z/maggie} This makes both sentences become: p(f(tony),tony) q(george, f(tony), maggie) Note that we want to substitute X for C But we have substituted f(tony) for X already See the notes for this as a worked example Using the unification algorithm Requires five iterations!
Binary Resolution (First-Order) Binary resolution rule (using unification) AB, ¬CD Subst(, AD) if Unify(B, C) = Unification algorithm finds Most General Unifier (MGU) Don’t substitute any more than need to
The Full Resolution Rule If Unify(Pj, ¬Qk) = (¬ makes them unifiable) P1 … Pm, Q1 … Qn Subst(, P1 … (no Pj) … Pm Q1 … (no Qk) ... Qn) Pj and Qk are resolved Arbitrary number of disjuncts Relies on preprocessing into CNF
Using Full Resolution Sentences already in CNF Pick two clauses Pick positive literal P from first Pick negative literal N from second Find MGU of ¬P and N Write both clauses as one big disjunction With P and N missing Apply to the new clause
Resolution Proof Search Keep on resolving clause pairs Eventually result in zero-length clause This indicates that some literal K was true at the same time as the literal ¬K Only way to reduce sentence to be empty Hence there was an inconsistency Which proves the theorem Topic of the next lecture
Coursework: War of Life http://www.doc.ic.ac.uk/~sgc/teaching/v231/ Two player version of Game of Life Implement several strategies in Prolog Run a tournament On CATE this afternoon Submit via CATE (more to follow…) Deadline: 3 weeks today