/
CSC 270 – Survey of Programming Languages CSC 270 – Survey of Programming Languages

CSC 270 – Survey of Programming Languages - PowerPoint Presentation

karlyn-bohler
karlyn-bohler . @karlyn-bohler
Follow
417 views
Uploaded On 2016-05-14

CSC 270 – Survey of Programming Languages - PPT Presentation

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

unify mia prolog unification mia unify unification prolog terms woman word term variable father algorithm term2 term1 continued instantiated

Share:

Link:

Embed:

Download Presentation from below link

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.


Presentation Transcript

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