Inference in first-order
logic
Outline
|
|
|
Reducing first-order inference to
propositional inference |
|
Unification |
|
Generalized Modus Ponens |
|
Forward chaining |
|
Backward chaining |
|
Resolution |
Universal instantiation
(UI)
|
|
|
|
Every instantiation of a universally
quantified sentence is entailed by it: |
|
"v α
Subst({v/g}, α) |
|
for any variable v and ground term g |
|
|
|
E.g., "x King(x) Ù Greedy(x) Þ Evil(x) yields: |
|
King(John) Ù Greedy(John)
Þ Evil(John) |
|
King(Richard) Ù Greedy(Richard)
Þ Evil(Richard) |
|
King(Father(John)) Ù Greedy(Father(John)) Þ Evil(Father(John)) |
|
. |
|
. |
|
. |
Existential instantiation
(EI)
|
|
|
|
|
|
|
For any sentence α, variable v,
and constant symbol k that does not appear elsewhere in the knowledge base: |
|
$v α |
|
Subst({v/k}, α) |
|
|
|
E.g., $x Crown(x) Ù OnHead(x,John) yields: |
|
|
|
Crown(C1) Ù OnHead(C1,John) |
|
|
|
provided C1 is a new
constant symbol, called a Skolem constant |
Reduction to
propositional inference
|
|
|
|
|
|
|
Suppose the KB contains just the
following: |
|
"x
King(x) Ù
Greedy(x) Þ
Evil(x) |
|
King(John) |
|
Greedy(John) |
|
Brother(Richard,John) |
|
|
|
Instantiating the universal sentence in
all possible ways, we have: |
|
King(John) Ù Greedy(John) Þ Evil(John) |
|
King(Richard) Ù Greedy(Richard) Þ Evil(Richard) |
|
King(John) |
|
Greedy(John) |
|
Brother(Richard,John) |
|
|
|
The new KB is propositionalized:
proposition symbols are |
|
|
|
King(John), Greedy(John), Evil(John),
King(Richard), etc. |
|
|
Reduction contd.
|
|
|
|
|
|
|
Every FOL KB can be propositionalized
so as to preserve entailment |
|
|
|
(A ground sentence is entailed by new
KB iff entailed by original KB) |
|
|
|
Idea: propositionalize KB and query,
apply resolution, return result |
|
|
|
Problem: with function symbols, there
are infinitely many ground terms, |
|
e.g., Father(Father(Father(John))) |
Reduction contd.
|
|
|
|
Theorem: Herbrand (1930). If a sentence
α is entailed by an FOL KB, it is entailed by a finite subset of the
propositionalized KB |
|
|
|
Idea: For n = 0 to ∞ do |
|
create a propositional KB by instantiating with depth-n terms |
|
see if α is entailed by this KB |
|
|
|
Problem: works if α is entailed,
loops if α is not entailed |
|
|
|
Theorem: Turing (1936), Church (1936)
Entailment for FOL is
semidecidable (algorithms exist that
say yes to every entailed sentence, but no algorithm exists that also says no
to every non-entailed sentence.) |
Problems with propositionalization
|
|
|
|
Propositionalization seems to generate
lots of irrelevant sentences. |
|
|
|
E.g., from: |
|
"x
King(x) Ù
Greedy(x) Þ
Evil(x) |
|
King(John) |
|
"y
Greedy(y) |
|
Brother(Richard,John) |
|
|
|
it seems obvious that Evil(John), but
propositionalization produces lots of facts such as Greedy(Richard) that are
irrelevant |
|
|
|
With p k-ary predicates and n
constants, there are p·nk instantiations. |
Unification
|
|
|
|
|
|
|
We can get the inference immediately if
we can find a substitution θ such that King(x) and Greedy(x) match King(John)
and Greedy(y) |
|
|
|
θ = {x/John,y/John} works |
|
|
|
Unify(α,β) = θ if αθ
= βθ |
|
p q θ |
|
Knows(John,x) Knows(John,Jane) |
|
Knows(John,x) Knows(y,OJ) |
|
Knows(John,x) Knows(y,Mother(y)) |
|
Knows(John,x) Knows(x,OJ) |
|
|
|
Standardizing apart eliminates overlap
of variables, e.g., Knows(z17,OJ) |
Unification
|
|
|
|
|
|
|
We can get the inference immediately if
we can find a substitution θ such that King(x) and Greedy(x) match King(John)
and Greedy(y) |
|
|
|
θ = {x/John,y/John} works |
|
|
|
Unify(α,β) = θ if αθ
= βθ |
|
p q θ |
|
Knows(John,x) Knows(John,Jane) {x/Jane}} |
|
Knows(John,x) Knows(y,OJ) |
|
Knows(John,x) Knows(y,Mother(y)) |
|
Knows(John,x) Knows(x,OJ) |
|
|
|
Standardizing apart eliminates overlap
of variables, e.g., Knows(z17,OJ) |
Unification
|
|
|
|
|
|
|
We can get the inference immediately if
we can find a substitution θ such that King(x) and Greedy(x) match King(John)
and Greedy(y) |
|
|
|
θ = {x/John,y/John} works |
|
|
|
Unify(α,β) = θ if αθ
= βθ |
|
p q θ |
|
Knows(John,x) Knows(John,Jane) {x/Jane}} |
|
Knows(John,x) Knows(y,OJ) {x/OJ,y/John}} |
|
Knows(John,x) Knows(y,Mother(y)) |
|
Knows(John,x) Knows(x,OJ) |
|
|
|
Standardizing apart eliminates overlap
of variables, e.g., Knows(z17,OJ) |
Unification
|
|
|
|
|
|
|
We can get the inference immediately if
we can find a substitution θ such that King(x) and Greedy(x) match King(John)
and Greedy(y) |
|
|
|
θ = {x/John,y/John} works |
|
|
|
Unify(α,β) = θ if αθ
= βθ |
|
p q θ |
|
Knows(John,x) Knows(John,Jane) {x/Jane}} |
|
Knows(John,x) Knows(y,OJ) {x/OJ,y/John}} |
|
Knows(John,x) Knows(y,Mother(y)) {y/John,x/Mother(John)}} |
|
Knows(John,x) Knows(x,OJ) |
|
|
|
Standardizing apart eliminates overlap
of variables, e.g., Knows(z17,OJ) |
Unification
|
|
|
|
|
|
|
We can get the inference immediately if
we can find a substitution θ such that King(x) and Greedy(x) match King(John)
and Greedy(y) |
|
|
|
θ = {x/John,y/John} works |
|
|
|
Unify(α,β) = θ if αθ
= βθ |
|
p q θ |
|
Knows(John,x) Knows(John,Jane) {x/Jane}} |
|
Knows(John,x) Knows(y,OJ) {x/OJ,y/John}} |
|
Knows(John,x) Knows(y,Mother(y)) {y/John,x/Mother(John)}} |
|
Knows(John,x) Knows(x,OJ) {fail} |
|
|
|
Standardizing apart eliminates overlap
of variables, e.g., Knows(z17,OJ) |
Unification
|
|
|
|
|
|
|
To unify Knows(John,x) and Knows(y,z), |
|
θ = {y/John, x/z } or θ =
{y/John, x/John, z/John} |
|
|
|
The first unifier is more general than
the second. |
|
|
|
There is a single most general unifier
(MGU) that is unique up to renaming of variables. |
|
MGU = { y/John, x/z } |
The unification algorithm
The unification algorithm
Generalized Modus Ponens
(GMP)
|
|
|
p1', p2', … , pn',
( p1 Ù p2 Ù … Ù pn Þq) |
|
qθ |
|
p1' is King(John) p1 is King(x) |
|
p2' is Greedy(y) p2 is Greedy(x) |
|
θ is {x/John,y/John} q is Evil(x) |
|
q θ is Evil(John) |
|
|
|
GMP used with KB of definite clauses (exactly
one positive literal) |
|
|
|
All variables assumed universally
quantified |
Soundness of GMP
|
|
|
|
Need to show that |
|
p1', …, pn', (p1
Ù … Ù pn Þ q) ╞ qθ |
|
provided that pi'θ = piθ
for all I |
|
|
|
Lemma: For any sentence p, we have p ╞
pθ by UI |
|
|
|
(p1 Ù … Ù pn Þ q) ╞ (p1 Ù … Ù pn Þ q)θ = (p1θ Ù … Ù pnθ Þ qθ) |
|
p1', …, pn' ╞
p1' Ù … Ù pn' ╞ p1'θ Ù … Ù pn'θ |
|
From 1 and 2, qθ follows by
ordinary Modus Ponens |
Example knowledge base
|
|
|
|
|
|
|
The law says that it is a crime for an
American to sell weapons to hostile nations.
The country Nono, an enemy of America, has some missiles, and all of
its missiles were sold to it by Colonel West, who is American. |
|
|
|
Prove that Col. West is a criminal |
Example knowledge base
contd.
|
|
|
|
... it is a crime for an American to
sell weapons to hostile nations: |
|
American(x) Ù Weapon(y) Ù Sells(x,y,z) Ù Hostile(z) Þ Criminal(x) |
|
Nono … has some missiles, i.e., $x Owns(Nono,x) Ù Missile(x): |
|
Owns(Nono,M1) and Missile(M1) |
|
… all of its missiles were sold to it
by Colonel West |
|
Missile(x) Ù Owns(Nono,x) Þ Sells(West,x,Nono) |
|
Missiles are weapons: |
|
Missile(x) Þ Weapon(x) |
|
An enemy of America counts as
"hostile“: |
|
Enemy(x,America) Þ Hostile(x) |
|
West, who is American … |
|
American(West) |
|
The country Nono, an enemy of America … |
|
Enemy(Nono,America) |
Forward chaining
algorithm
Forward chaining proof
Forward chaining proof
Forward chaining proof
Properties of forward
chaining
|
|
|
|
|
|
|
Sound and complete for first-order
definite clauses |
|
|
|
Datalog = first-order definite clauses
+ no functions |
|
FC terminates for Datalog in finite
number of iterations |
|
|
|
May not terminate in general if α
is not entailed |
|
|
|
This is unavoidable: entailment with
definite clauses is semidecidable |
Efficiency of forward
chaining
|
|
|
|
|
|
|
Incremental forward chaining: no need
to match a rule on iteration k if a premise wasn't added on iteration k-1 |
|
Þ match each rule whose premise contains a newly added
positive literal |
|
|
|
Matching itself can be expensive: |
|
Database indexing allows O(1) retrieval
of known facts |
|
e.g., query Missile(x) retrieves Missile(M1) |
|
|
|
Forward chaining is widely used in deductive
databases |
Hard matching example
|
|
|
Colorable() is inferred iff the CSP has
a solution |
|
CSPs include 3SAT as a special case,
hence matching is NP-hard |
Backward chaining
algorithm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SUBST(COMPOSE(θ1, θ2),
p) = SUBST(θ2, SUBST(θ1, p)) |
Backward chaining example
Backward chaining example
Backward chaining example
Backward chaining example
Backward chaining example
Backward chaining example
Backward chaining example
Properties of backward
chaining
|
|
|
|
Depth-first recursive proof search:
space is linear in size of proof |
|
Incomplete due to infinite loops |
|
Þ fix
by checking current goal against every goal on stack |
|
Inefficient due to repeated subgoals
(both success and failure) |
|
Þ fix
using caching of previous results (extra space) |
|
Widely used for logic programming |
Logic programming: Prolog
|
|
|
|
Algorithm = Logic + Control |
|
|
|
Basis: backward chaining with Horn
clauses + bells & whistles |
|
Widely used in Europe, Japan (basis of
5th Generation project) |
|
Compilation techniques Þ 60 million LIPS |
|
|
|
Program = set of clauses = head :-
literal1, … literaln. |
|
criminal(X) :- american(X), weapon(Y),
sells(X,Y,Z), hostile(Z). |
|
|
|
Depth-first, left-to-right backward
chaining |
|
Built-in predicates for arithmetic
etc., e.g., X is Y*Z+3 |
|
Built-in predicates that have side
effects (e.g., input and output |
|
predicates, assert/retract predicates) |
|
Closed-world assumption ("negation
as failure") |
|
e.g., given alive(X) :- not dead(X). |
|
alive(joe) succeeds if dead(joe) fails |
Prolog
|
|
|
Appending two lists to produce a third: |
|
append([],Y,Y). |
|
append([X|L],Y,[X|Z]) :-
append(L,Y,Z). |
|
|
|
query:
append(A,B,[1,2]) ? |
|
|
|
answers: A=[] B=[1,2] |
|
A=[1] B=[2] |
|
A=[1,2] B=[] |
Resolution: brief summary
|
|
|
Full first-order version: |
|
l1 Ú ··· Ú lk, m1
Ú ··· Ú mn |
|
(l1 Ú ··· Ú li-1 Ú li+1 Ú ··· Ú lk Ú m1 Ú ··· Ú mj-1 Ú mj+1 Ú ··· Ú mn)θ |
|
where Unify(li, Ømj) = θ. |
|
|
|
The two clauses are assumed to be
standardized apart so that they share no variables. |
|
For example, |
|
ØRich(x) Ú Unhappy(x) |
|
Rich(Ken) |
|
Unhappy(Ken) |
|
with θ = {x/Ken} |
|
|
|
Apply resolution steps to CNF(KB Ù Øα);
complete for FOL |
Conversion to CNF
|
|
|
|
|
|
|
Everyone who loves all animals is loved
by someone: |
|
"x
["y Animal(y) Þ Loves(x,y)] Þ [$y Loves(y,x)] |
|
|
|
1. Eliminate biconditionals and
implications |
|
"x
[Ø"y ØAnimal(y) Ú Loves(x,y)] Ú [$y Loves(y,x)] |
|
|
|
2. Move Ø inwards: Ø"x p ≡ $x Øp, Ø $x p ≡ "x Øp |
|
"x
[$y Ø(ØAnimal(y)
Ú Loves(x,y))] Ú [$y Loves(y,x)] |
|
"x
[$y ØØAnimal(y) Ù ØLoves(x,y)] Ú [$y Loves(y,x)] |
|
"x
[$y Animal(y) Ù ØLoves(x,y)] Ú [$y Loves(y,x)] |
Conversion to CNF contd.
|
|
|
|
|
|
|
Standardize variables: each quantifier
should use a different one |
|
"x
[$y Animal(y) Ù ØLoves(x,y)] Ú [$z Loves(z,x)] |
|
|
|
Skolemize: a more general form of
existential instantiation. |
|
Each existential variable is replaced
by a Skolem function of the enclosing universally quantified variables: |
|
"x [Animal(F(x)) Ù ØLoves(x,F(x))] Ú Loves(G(x),x) |
|
|
|
Drop universal quantifiers: |
|
[Animal(F(x)) Ù ØLoves(x,F(x))] Ú Loves(G(x),x) |
|
|
|
Distribute Ú over Ù : |
|
[Animal(F(x)) Ú Loves(G(x),x)]
Ù [ØLoves(x,F(x)) Ú Loves(G(x),x)] |
Resolution proof:
definite clauses