Prolog Lecture 2 Unification and Proof Search Unification From Knowledge Base 4 woman mia woman jody woman yolanda Querying Knowledge Base 4 1 womanX X ID: 319395
Download Presentation The PPT/PDF document "CSC 270 – Survey of Programming Langua..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
CSC 270 – Survey of Programming Languages
Prolog Lecture 2 – Unification and Proof SearchSlide2
Unification
From Knowledge Base 4:
woman(
mia
).
woman(
jody
).
woman(
yolanda
).
…
Querying Knowledge Base 4:
1
?-
woman(X).
X =
mia
.
2
?-
Prolog unifies
woman(X)
with
woman(
mia
)
, thereby instantiating the variable
X
to
miaSlide3
Types in Prolog – A Quick Review
Recall
that there are three types of term:
Constants
. These can either be atoms (such as
vincent
) or numbers (such as
24
).
Variables
. (Such as
X
,
Z3
, and
List
.)
Complex
terms. These have the form:
functor
(
term_1
,...,
term_n
) .Slide4
Unification – A Definition
Two terms
unify
:
they
are the same term or
if
they contain variables that can be uniformly instantiated with terms in such a way that the resulting terms are equal
.Slide5
Unification – An Example
This means that
mia
and
mia
unify, because they are the same
atom.
42
and
42
unify, because they are the same
number.
X
and
X
unify, because they are the same
variable.
woman(
mia
)
and
woman(
mia
)
unify, because they are the same complex term
.Slide6
Unification – An Example (continued)
This means that
woman(
mia
)
and
woman(
vincent
)
do
not unify,
because
they are not the same (and neither of them contains a variable that could be instantiated to make them the same). Slide7
Unification and Instantiation
mia
and
X
are
not the
same, but
X
can be instantiated to
mia
which makes them equal
. Therefore,
mia
and
X
unify.
woman(X
)
and
woman(
mia
)
unify, because they can be made equal by instantiating
X
to
mia
.
loves(
vincent,X
)
and
loves(
X,mia
)
do not unify because it
is impossible to find an instantiation of X that makes the two terms equal
.Slide8
A Formal Definition of Unification
If
term1 and term2 are constants, then term1 and term2 unify if and only if they are the same atom, or the same number
.Slide9
A Formal Definition of Unification (continued)
If
term1 is a variable and term2 is any type of term, then term1 and term2 unify, and term1 is instantiated to term2 .
If
term2 is a variable and term1 is any type of term, then term1 and term2 unify, and term2 is instantiated to term1 .
If
they are both variables, they’re both instantiated to each other, and we say that they share values
.Slide10
A Formal Definition of Unification (continued)
If
term1 and term2 are complex terms, then they unify if and only if:
They
have the same
functor
and
arity
, and
all
their corresponding arguments unify, and
the
variable instantiations are compatible
.Slide11
A Formal Definition of Unification (continued)
E. g., it’s impossible
to instantiate variable
X
to
mia
when unifying one pair of arguments, and to instantiate
X
to
vincent
when unifying another pair of arguments
.)
Two terms unify if and only if it follows from the previous three clauses that they unify
.Slide12
Unification – Some Examples
1
?- =(
mia
,
mia
).
true.
2
?- =(2, 2
).
true.
3
?-
mia
=
mia
.
true.
4
?- 2 = 2.
true.
5
?-
mia
=
vincent
.
false.
6
?- '
mia
' =
mia
.
true.
7
?- '2' = 2.
false.
8 ?-Slide13
8
?-
mia
= X.
X =
mia
.
9
?-
mia
= X.
X =
mia
.
10
?- X = Y.
X = Y.
11
?- X = _5067.
X = _5067.
12
?- Y = _5067.
Y = _5067.
13
?- X =
mia
, X =
vincent
.
false
.Slide14
Unification – Another Example
2 ?- k(s(g), Y) = k(X, t(k
))
.
Y = t(k),
X = s(g).
3
?-
We use clause
3
because
we are trying to unify two complex terms
. Do both
complex terms have the same
functor
and
arity
? Yes.
So
do the first arguments, s(g) and X , unify? By clause 2,
yes.
So
do the second arguments, Y and t(k) , unify?
By
clause 2,
yes. Slide15
Unification – Other Examples
3 ?- k(s(g), t(k)) = k(X, t(Y)).
X = s(g),
Y = k.
4 ?- loves(X, X) = loves(
marcellus
,
mia
).
false.
5 ?-
These
terms
do not unify because while they
are both complex terms and have the same
functor
and
arity
,
all
corresponding arguments
do not unify in this exampleSlide16
Prolog and Unification Algorithm
Prolog
does not use a standard unification algorithm when it performs its version of
unification; it
takes a shortcut. You need to know about this shortcut.
Consider
the following query:
?-
father(X) = X
.Slide17
Prolog and Unification
Algorithm (continued)
Do
these terms unify or not?
No
Why
is that?
Pick
any term and instantiate X to the term you picked
.
father(father(father(butch)))
= father(father(butch))
and so on.Slide18
Prolog and Unification Algorithm (continued)
Prolog
unification
won’t spot the problem and halt. Having
instantiated X to father(X) , Prolog is committed to carrying out an unending sequence of
expansions and will run until it runs out of memory.Slide19
Prolog and Unification Algorithm (continued)
There
are
actually 3 responses
to
“does father(X
) unify with X ”.
Standard
unification algorithm
(no)
Older
Prolog implementations
(run
amok until they use up the available memory
)
Sophisticated
Prolog implementations
(yes)
In
short, there is no ‘right’ answer to this question
.Slide20
occurs check
A standard
algorithm given
two terms to
unify carries
out what is known as the
occurs check
.
This means that if it is asked to unify a variable with a term, it first checks whether the variable occurs in the
term.
If
it does, the standard algorithm declares that unification is impossible, for clearly it is the presence of the variable X in father(X) which leads to
problems.
Only
if the variable does not occur in the term do standard algorithms attempt to carry out the unification. Slide21
Prolog and Unification Algorithm (continued)
Prolog
comes with a built-in predicate that carries out standard unification (that is, unification with the occurs check). The predicate is
unify_with_occurs_check
/2
.
So
if we posed the query
?-
unify_with_occurs_check
(father(X
),
X).
we
would get the response no. Slide22
Unification Proof Search
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X),g(X),h(X).
try to match f (_1), g(_1), h(_1)
When f(a), then _1 = a.
Does it find f(a), g(a),h(a) – nope
When f(b) then _1 = b.
Does it find f(b), g(b), h(b) – yes so it stops and says true.
See with trace
Stop trace with
notraceSlide23
Crossword puzzle match
word(
astante,a,s,t,a,n,t,e
).
word(
astoria,a,s,t,o,r,i,a
).
word(
baratto,b,a,r,a,t,t,o
).
word(
cobalto,c,o,b,a,l,t,o
).
word(
pistola,p,i,s,t,o,l,a
).
word(
statale,s,t,a,t,a,l,e
).
crossword(X,Y
, Z, A, B, C)
:-
word(X,_,X1,_,X2,_,X3,_),
word(Y,_,Y1,_,Y2,_,Y3,_),
word(Z,_,Z1,_,Z2,_,Z3,_),
word(C,_,X3,_,Y3,_,Z3,_),
word(B,_,X2,_,Y2,_,Z2,_),
word(A,_,X1,_,Y1,_,Z1,_).Slide24
Summary
Prolog proves by instantiating variables and then checking truth
Stops at first complete matching truth
Will continue finding match when you press ;
Trace using trace /
notrace
Can go into infinite checking unless you call with
unify_with_occurs_check