Who To Think As a Compiler - PNU-CS-AI

Download Report

Transcript Who To Think As a Compiler - PNU-CS-AI

How To Think Like a Prolog ?
DONE BY :
ASMA ALMANE , BANAN ALHADLAQ
Example 1:
Consider the following
Prolog program:
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
Q: As a compiler , find the possible answers
of X in the following query :
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
? – predecessor ( X , jim ) .
? – predecessor ( X , jim ) .
Example 1:
predecessor(X,jim)
Consider the following
Prolog program:
By using rule pr1
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
From the fact parent (pat,jim)
X = pat , Z = jim
parent(pat,jim)
parent(bob,ann).
parent(bob,pat).
TRUE
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
X= pat ;
? – predecessor ( X , jim ) .
Example 1:
predecessor(X,jim)
By using rule pr 2
Consider the following
Prolog program:
From the fact Parent(pam,bob).
X=pam , Y=bob
parent( pam , bob ) ,
predecessor(bob , jim).
parent(pam,bob).
parent(tom,bob).
predecessor(bob , jim).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
By using rule pr 1
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
parent( bob , jim ).
By using rule pr 2
From the fact Parent(bob,ann).
X=bob , Y=ann
parent( bob , ann ),
predecessor( ann , jim).
FALSE
By using rule pr 1
parent( ann , jim).
FALSE
predecessor( ann , jim).
By using rule pr 2
parent( ann , Y ),
predecessor( Y , jim).
FALSE
? – predecessor ( X , jim ) .
predecessor(X,jim)
Example 1:
By using rule pr 2
Consider the following
Prolog program:
From the fact Parent(pam,bob).
X=pam , Y=bob
parent( pam , bob ) ,
predecessor(bob , jim).
parent(pam,bob).
parent(tom,bob).
predecessor(bob , jim).
parent(tom,liz).
parent(bob,ann).
By using rule pr 2
By using rule pr 1
parent(bob,pat).
From te fact Parent(bob,pat).
X=bob , Y=ann
parent(pat,jim).
predecessor(X,Z):-
parent( bob , pat ),
predecessor( pat , jim).
parent( bob , jim ).
parent(X,Z).
FALSE
predecessor( pat , jim).
predecessor(X,Z):-
By using rule pr 1
parent(X,Y),
predecessor(Y,Z).
X=pam ;
parent( pat , jim).
TRUE
? – predecessor ( X , jim ) .
Example 1:
predecessor(X,jim)
By using rule pr 2
Consider the following
Prolog program:
From the fact Parent(pam,bob).
X=tom , Y=bob
parent( tom , bob ) ,
predecessor(bob , jim).
parent(pam,bob).
parent(tom,bob).
predecessor(bob , jim).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
By using rule pr 1
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
parent( bob , jim ).
By using rule pr 2
From the fact Parent(bob,ann).
X=bob , Y=ann
parent( bob , ann ),
predecessor( ann , jim).
FALSE
By using rule pr 1
parent( ann , jim).
FALSE
predecessor( ann , jim).
By using rule pr 2
parent( ann , Y ),
predecessor( Y , jim).
FALSE
? – predecessor ( X , jim ) .
predecessor(X,jim)
Example 1:
By using rule pr 2
Consider the following
Prolog program:
From the fact Parent(pam,bob).
X=tom , Y=bob
parent( tom , bob ) ,
predecessor(bob , jim).
parent(pam,bob).
parent(tom,bob).
predecessor(bob , jim).
parent(tom,liz).
parent(bob,ann).
By using rule pr 2
By using rule pr 1
parent(bob,pat).
From the fact Parent(bob,pat).
X=bob , Y=ann
parent(pat,jim).
parent( bob , pat ),
predecessor( pat , jim).
parent( bob , jim ).
predecessor(X,Z):parent(X,Z).
FALSE
predecessor( pat , jim).
predecessor(X,Z):-
By using rule pr 1
parent(X,Y),
predecessor(Y,Z).
X=tom
;
parent( pat , jim).
TRUE
? – predecessor ( X , jim ) .
Example 1:
predecessor(X,jim)
By using rule pr 2
Consider the following
Prolog program:
From the fact Parent(pam,bob).
X=tom , Y=liz
parent( tom , liz ) ,
predecessor(liz , jim).
parent(pam,bob).
parent(tom,bob).
predecessor(liz , jim).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
By using rule pr 1
By using rule pr 2
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
parent( liz , jim ).
FALSE
parent( liz , Y ),
predecessor( Y , jim).
There is NO Y
FALSE
? – predecessor ( X , jim ) .
Example 1:
Consider the following
Prolog program:
predecessor(X , jim).
By using rule pr 2
From the fact Parent(bob,ann).
X=bob , Y=ann
parent(pam,bob).
parent( bob , ann ),
predecessor( ann , jim).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor( ann , jim).
By using rule pr 1
parent( ann , jim).
FALSE
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
By using rule pr 2
parent( ann , Y ),
predecessor( Y , jim).
There is NO Y
FALSE
? – predecessor ( X , jim ) .
Example 1:
predecessor(X,jim)
Consider the following
Prolog program:
By using rule pr 2
From the fact Parent(bob,pat).
X=bob , Y=pat
parent( bob , pat ),
predecessor( pat , jim).
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
predecessor( pat , jim).
parent(bob,pat).
By using rule pr 1
parent(pat,jim).
parent( pat , jim).
predecessor(X,Z):-
TRUE
parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
X=bob
;
? – predecessor ( X , jim ) .
Example 1:
Consider the following
Prolog program:
predecessor(X,jim)
By using rule pr 2
parent( pat , jim ),
predecessor( jim , jim).
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
predecessor( jim , jim).
parent(bob,pat).
parent(pat,jim).
predecessor(X,Z):parent(X,Z).
predecessor(X,Z):parent(X,Y),
predecessor(Y,Z).
By using rule pr 1
parent( jim , jim).
FALSE
By using rule pr 2
parent( jim , Y ),
predecessor( Y , jim).
There is NO Y
FALSE
Example 2:
Consider the
following Prolog
program:
father(ahmad,sami).
father(ahmad,khalid).
Q: As a compiler , find the possible answers
of X and Y in the following query :
father(sami,fahad).
father(sami,mohammed).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
father(Z,Y),
not(X=Y).
? – brother ( X , Y ) .
Example 2:
Consider the
following Prolog
program:
? – brother ( X , Y ) .
brother ( X , Y )
father(ahmad,sami).
father(ahmad,khalid).
father(sami,fahad).
By using the facts
father(sami,mohammed).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
father(Z,Y),
not(X=Y).
father (ahmad , sami) ,
father (ahmed,Y) ,
not(sami=Y).
TRUE
X= sami , Y=khalid
;
Example 2:
Consider the
following Prolog
program:
? – brother ( X , Y ) .
brother ( X , Y )
father(ahmad,sami).
father(ahmad,khalid).
father(sami,fahad).
By using the facts
father(sami,mohammed).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
father(Z,Y),
not(X=Y).
father (ahmad , khalid) ,
father (ahmed,Y) ,
not(khalid=Y).
TRUE
X= khalid , Y=sami
;
Example 2:
Consider the
following Prolog
program:
? – brother ( X , Y ) .
brother ( X , Y )
father(ahmad,sami).
father(ahmad,khalid).
father(sami,fahad).
father(sami,mohammed).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
By using the facts
father (sami , fahad) ,
father (sami,Y),
Not(fahad=Y).
TRUE
father(Z,Y),
not(X=Y).
X= fahad , Y=mohammed
;
Example 2:
Consider the
following Prolog
program:
? – brother ( X , Y ) .
brother ( X , Y )
father(ahmad,sami).
father(ahmad,khalid).
father(sami,fahad).
father(sami,mohammed).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
By using the facts
father (sami,mohammed),
father(sami,Y),
not(mohammed=Y).
TRUE
father(Z,Y),
not(X=Y).
X=mohammed , Y= fahad
;
Example 2:
? – brother ( X , Y ) .
Consider the
following Prolog
program:
brother ( X , Y )
father(ahmad,sami).
father(ahmad,khalid).
By using the facts
father(sami,fahad).
father(sami,mohammed).
father (khalid,naseer),
father(khalid,Y),
not(naseer=Y).
father(khalid,naseer).
brother(X,Y):father(Z,X) ,
FALSE
father(Z,Y),
not(X=Y).
false.