Title: Rule Based Systems (Prolog)
1Rule Based Systems(Prolog)
- M. Reza Zakerinasab
- mrzakeri_at_ucalgary.ca
- Please include CPSC433 in the subject line of
any emails regarding this course. - Slides originally created by Andrew M Kuipers.
- Some slides adopted from 600.325/425 Declarative
Methods - J. Eisner
2Prolog as constraint programming
Person Food
sam dal
sam curry
josie samosas
josie curry
rajiv dal
(Person, Food)
- An ordinary constraint between two variables
Person and Food - Prolog makes you name this constraint. Heres a
program that defines it - eats(sam, dal). eats(josie, samosas).
- eats(sam, curry). eats(josie, curry).
- eats(rajiv, dal).
- Now it acts like a subroutine! At the Prolog
prompt you can type - eats(Person1, Food1). constraint over two
variables - eats(Person2, Food2). constraint over two
other variables
3Using Prolog
- eats(sam, dal). eats(josie, samosas).
- eats(sam, curry). eats(josie, curry).
- eats(rajiv, burgers). eats(rajiv, dal).
-
- eats(Person1, Food), eats(Person2, Food).
- Person1sam, Person2josie, Foodcurry
- Person1josie, Person2sam, Foodcurry
Your program file (compiled) Sometimes called the
database
Query that you type interactively
Prologs answer
4Adding more rules
- eats(sam, dal). eats(josie, samosas).
- eats(sam, curry). eats(josie, curry).
- eats(rajiv, burgers). eats(rajiv, dal).
- compatible(Person1, Person2) - eats(Person1,
Food), eats(Person2, Food). - compatible(Person1, Person2) - watches(Person1,
Movie), watches(Person2, Movie). - compatible(hal, Person2) - female(Person2),
rich(Person2).
5Basic Prolog Process
- Negate query, set as current goal.
- while current goal is non-empty
- choose the leftmost subgoal
- if a rule applies to the subgoal
- select the first applicable rule
(top-to-bottom) - perform resolution on subgoal and selected rule
- else
- backtrack if possible, otherwise fail
- success
6Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
Logically sound?!!
?- witch(X). Goals
7Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0)
8Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0)
9Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0) ?burns(_G0) ?
?woman(_G0)
10Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0) ?burns(_G0) ?
?woman(_G0)
11Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0) ?burns(_G0) ?
?woman(_G0) ? madeofwood(_G0)
12Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
?- witch(X). Goals ?witch(_G0) ?burns(_G0) ?
?woman(_G0) ? madeofwood(_G0)
13Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
14Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
15Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(duck)
16Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(duck)
17Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(duck) ? ?woman(duck)
18Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(duck) ? ?woman(duck)
fail! backtrack...
19Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
20Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
- floats(_G1) ? ?sameweight(_G1, _G0)
21Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
- floats(_G1) ? ?sameweight(_G1, _G0)
22Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
- floats(duck) ? ?sameweight(duck, _G0)
23Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
- floats(duck) ? ?sameweight(duck, _G0)
24Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(_G0)
- floats(duck) ? ?sameweight(duck, girl)
25Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(_G0)
- floats(girl)
26Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(_G0) ? ?woman(_G0)
- madeofwood(girl)
27Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(girl) ? ?woman(girl)
28Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(_G0)
- ?burns(girl) ? ?woman(girl)
works this time
29Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).
- ?- witch(X).
- Goals
- ?witch(girl)
30Sir Bedeveres Infamous Deduction
witch(X) - burns(X),woman(X). woman(girl). burns(
X) - madeofwood(X). madeofwood(X) -
floats(X). floats(duck). floats(Y) -
floats(X),sameweight(X,Y). sameweight(duck,girl).