hans hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · deduction...
TRANSCRIPT
![Page 1: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/1.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
LOGIC PROGRAMMING IN PROLOG
Hans Hüttel6 October 2010
(original slides by Claus Brabrand, IT University of Copenhagen)
"Programming Paradigms", Dept. of Computer Science, Aalborg Uni. (Autumn 2010)
![Page 2: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/2.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Plan for Today
Scene V: "Monty Python and The Holy Grail" Lecture: "Relations & Inference Systems" (9:00 – 9:45)
Exercise 1 (10:00 – 10:45)
Lecture: "PROLOG & Matching" (11:00 – 12:00)
Lunch break (12:00 – 12:30) Exercises 2+3 (12:30 – 13:15) Lecture: "Proof Search & Recursion" (13:30 – 14:15) Exercises 4+5 (14:30 – 15:15)
![Page 3: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/3.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Outline (three parts)
Part 1: "Monty Python and the Holy Grail" (Scene V) Relations & Inference Systems
Part 2: Introduction to PROLOG (by-Example) Matching
Part 3: Proof Search (and Backtracking) Recursion
![Page 4: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/4.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
MONTY PYTHON
Keywords: Holy Grail, Camelot, King Arthur, Sir Bedevere, The Killer Rabbit®, Sir Robin-the-not-quite-so-brave-as-Sir Lancelot
![Page 5: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/5.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Movie(!) "Monty Python and the Holy Grail" (1975)
Scene V: "The Witch":
![Page 6: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/6.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
![Page 7: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/7.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
The Monty Python Reasoning:
"Axioms" (aka. "Facts"):
"Rules":
female(girl). %- by observation -----
floats(duck). %- King Arthur -----
sameweight(girl,duck). %- by experiment -----
witch(X) :- female(X) , burns(X).
burns(X) :- wooden(X).
wooden(X) :- floats(X).
floats(X) :- sameweight(X,Y) , floats(Y).
![Page 8: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/8.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Deduction vs. Induction
Deduction: whole → parts:
(aka. “top-down reasoning”) abstract → concrete general → specific
Induction: parts → whole:
(aka. “bottom-up reasoning”) concrete → abstract specific → general
Just two different ways of reasoning: Deduction ↔ Induction (just swap directions of arrows)
whole
A B C
whole
A B C
![Page 9: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/9.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Deductive Reasoning: witch(girl)
"Deduction":
witch(girl)
burns(girl)female(girl)
wooden(girl)
floats(girl)
floats(duck)sameweight(girl,duck)
%- by observation -----
%- by experiment ----- %- King Arthur -----
floats(X) :- sameweight(X,Y) , floats(Y).
witch(X) :- female(X) , burns(X).
burns(X) :- wooden(X).
wooden(X) :- floats(X).
↓
(aka. ”top-down reasoning”)
![Page 10: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/10.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Inductive Reasoning: witch(girl)
"Induction":
witch(girl)
burns(girl)female(girl)
wooden(girl)
floats(girl)
floats(duck)sameweight(girl,duck)
%- by observation -----
%- by experiment ----- %- King Arthur -----
floats(X) :- sameweight(X,Y) , floats(Y).
witch(X) :- female(X) , burns(X).
burns(X) :- wooden(X).
wooden(X) :- floats(X).
↑
(aka. ”bottom-up reasoning”)
![Page 11: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/11.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
↑
Induction vs. Deduction
Deduction whole → parts:
Induction parts → whole:
↓
Just two different ways of reasoning: Deduction ↔ Induction (just swap directions of arrows)
![Page 12: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/12.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Hearing: Nomination of CIA Director, General Michael Hayden (USAF).
LEVIN:
"You in my office discussed, I think, a very interesting approach, which is the difference between starting with a conclusion and trying to prove it and instead starting with digging into all the facts and seeing where they take you.
Would you just describe for us that difference and why [...]?"
LEVIN: U.S. SENATOR CARL LEVIN (D-MI)HAYDEN: GENERAL MICHAEL B. HAYDEN (USAF), NOMINEE TO BE DIRECTOR OF CIA
CQ TranscriptionsThursday, May 18, 2006; 11:41 AM
"DEDUCTIVE vs. INDUCTIVE REASONING"
HAYDEN: "Yes, sir. And I actually think I prefaced that with both of these are legitimate forms of reasoning,
that you've got deductive [...] in which you begin with, first, [general] principles and then you work your way down the specifics.
And then there's an inductive approach to the world in which you start out there with all the data and work yourself up to general principles.
They are both legitimate."
![Page 13: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/13.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
INFERENCE SYSTEMS
Keywords: relations, axioms, rules, fixed-points
![Page 14: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/14.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
A relation is just a set.
![Page 15: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/15.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Relations
Example1: “even” relation: Written as: as a short-hand for:
… and as: as a short-hand for:
Example2: “equals” relation: Written as: as a short-hand for:
… and as: as a short-hand for:
Example3: “DFA transition” relation: Written as: as a short-hand for:
… and as: as a short-hand for:
|_even ⊆ Z
|_even 4
|_even 5
4 ∈ |_even
5 ∉ |_even
2 ≠ 3 (2,3) ∉ ‘=’
‘=’ ⊆ Z × Z
(2,2) ∈ ‘=’2 = 2
‘→’ ⊆ Q × Σ × Q
q → q’ (q, σ, q’) ∈ ‘→’
(p, σ, p’) ∉ ‘→’p → p’
σ
σ
Signature of the relation
Signature of the relation
Signature of the relation
![Page 16: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/16.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Inference System
Inference System: is used for specifying relations consists of axioms and rules
Example:
Axiom: “0 (zero) is even”!
Rule: “If n is even, then m is even (where m = n+2)”
|_even 0
|_even n
|_even m where m = n+2
|_even ⊆ Z
![Page 17: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/17.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Terminology
We can read this rule in two ways: Deductive interpretation:
“m is even, if n is even (where m = n+2)” Inductive interpretation:
“If n is even, then m is even (where m = n+2)”; or
|_even n
|_even m m = n+2
premise(s)
conclusion
where
side-condition(s)
![Page 18: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/18.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Abbreviation
Often, rules are abbreviated:
Rule:
“m is even, if n is even (where m = n+2)”
Abbreviated rule: “n+2 is even, if n is even”
|_even n
|_even n+2
|_even n
|_even m where m = n+2
Even so; this is what we mean
![Page 19: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/19.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Relation Membership? x∈R
Axiom: “0 (zero) is even”!
Rule: “n+2 is even, if n is even”
Is 6 even?!?
The inference tree proves that:
|_even 0
|_even n
|_even n+2
6 ∈ |_even
?
|_even 6
written:
|_even 0 [axiom]
|_even 2 [rule]
|_even 4 [rule]
|_even 6 [rule]
![Page 20: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/20.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Example: “less-than-or-equal-to”
Relation:
Is ”1 ≤ 2” ? (why/why not)!? [activation exercise] Yes, because there exists an inference tree:
In fact, it has two inference trees:
0 ≤ 0 n ≤ mn ≤ m+1[rule1][axiom1]
‘≤’ ⊆ N × N
n ≤ mn+1 ≤ m+1[rule2]
0 ≤ 00 ≤ 11 ≤ 2 [rule2]
[rule1]
[axiom1] 0 ≤ 01 ≤ 11 ≤ 2 [rule1]
[rule2]
[axiom1]
![Page 21: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/21.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Activation Exercise 1
Activation Exercise: 1. Specify the signature of the relation: '<<'
x << y "y is-double-that-of x"
2. Specify the relation via an inference system i.e. axioms and rules
3. Prove that indeed: 3 << 6 "6 is-double-that-of 3"
![Page 22: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/22.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Activation Exercise 2
Activation Exercise: 1. Specify the signature of the relation: '//'
x // y "x is-half-that-of y"
2. Specify the relation via an inference system i.e. axioms and rules
3. Prove that indeed: 3 // 6 "3 is-half-that-of 6"
The two definitions are- Syntactically different- Semantically the same (they define the same relation)
![Page 23: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/23.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Relations and Functions
A function...
...is a relation ...with the special requirement:
i.e., "the result", b, is uniquely determined from "the argument", a.
f : A → B
Rf ⊆ A × B
∀a∈A, b1,b2∈B: Rf(a,b1) ∧ Rf(a,b2) => b1 = b2
![Page 24: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/24.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Relation vs. Function (Example)
The (2-argument) function '+'...
...induces a (3-argument) relation
...that obeys:
i.e., "the result", r, is uniquely determined from "the arguments", n and m
+ : N × N → N
R+ ⊆ N × N × N
∀n,m∈N, r1,r2∈N: R+(n,m,r1) ∧ R+(n,m,r2) => r1 = r2
![Page 25: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/25.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Example: “add”
Relation:
Is ”2 + 2 = 4” ?!? Yes, because there exists an inf. tree for "+(2,2,4)":
+(0,m,m)[axiom1]
‘+’ ⊆ N × N × N
+(n,m,r)+(n+1,m,r+1)[rule1]
+(0,2,2)+(1,2,3)+(2,2,4)
[rule1]
[rule1]
[axiom1]
Intended meaning: +(x,y,z) if x + y = z
![Page 26: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/26.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Example: “add” (cont’d)
Relation:
Note: Many different inf. sys.’s may exist for same relation:
+(0,m,m)[axiom1]
‘+’ ⊆ N × N × N
+(n,m,r)+(n+1,m,r+1)
[rule1]
+(0,m,m)[axiom1] +(n,m,r)+(n+2,m,r+2)[rule1]
+(1,m,m+1)[axiom2]
Intended meaning: +(x,y,z) if x + y = z
![Page 27: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/27.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Relation Definition (Interpretation)
Actually, an inference system:
…is a requirements specification for a relation:
The three relations R = {0, 2, 4, 6, …} (aka., 2N) R’ = {0, 2, 4, 5, 6, 7, 8, …} R’’ = {…, -2, -1, 0, 1, 2, …} (aka., Z)
…all satisfy the (above) specification! Which one should we choose?
|_R 0|_R n
|_R n+2[rule1][axiom1]
|_R ⊆ Z
(0 ∈ ‘|_R’) ∧ (∀ n ∈ ‘|_R’ ⇒ n+2 ∈ ‘|_R’)
![Page 28: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/28.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Inductive (Minimal) Interpretation ()
An inference system:
…induces a function:
Definition: ‘lfp’ (least fixed point) ~ least solution:
|_R 0|_R n
|_R n+2[rule1][axiom1]
FR: P(Z) → P(Z)
|_R ⊆ Z
FR(R) = {0} ∪ { n+2 | n ∈ R }
F(Ø) = {0} F2(Ø) = F({0}) = {0,2} F3(Ø) = F2({0}) = F({0,2}) = {0,2,4} …
|_even := lfp(FR) = ∪ FRn(Ø)n
|_R ∈ P(Z)
From rel. to rel.
2N
∪ ∪ ∪
=Fn(Ø) ~ “Anything that can be proved in n steps”
⇔
![Page 29: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/29.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Co-inductive (Maximal) Interpretation ()
A relation: ≡
…induces a function:
Definition: ‘gfp’ (greatest fixed point) ~ greatest solution:
|_even 0|_even n
|_even n+2[rule1][axiom1]
F: P(Z) → P(Z)
|_even ⊆ Z
F(R) = {0} ∪ { n+2 | n ∈ R }
F(Z) = Z
|_even := gfp(F) = ∩ Fn(Z)n
|_even ∈ P(Z)
From relations to relations
F2(Z) = F(Z) = Z∩ F3(Z) = F2(Z) = F(Z) = Z∩ … Z∩ =
Fn(Z) ~ “Anything that cannot be disproved in n steps”
![Page 30: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/30.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
Exercise 1:
10:15 – 11:00
![Page 31: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/31.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
1. Relations via Inf. Sys. (in Prolog)
Purpose: Learn how to describe relations via inf. sys. (in Prolog)
![Page 32: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/32.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
INTRODUCTION TO PROLOG(by example)
Keywords: Logic-programming, Relations, Facts & Rules, Queries, Variables, Deduction, Functors, & Pulp Fiction :)
![Page 33: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/33.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
PROLOG Material
We'll use the on-line material: "Learn Prolog Now!" [ Patrick Blackburn, Johan Bos, Kristina Striegnitz, 2001 ]
[ http://www.learnprolognow.org/]
![Page 34: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/34.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
PROLOG Material
The Prolog implementation is
http://www.swi-prolog.org/
![Page 35: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/35.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Prolog
A French programming language (from 1971): "Programmation en Logique" (="programming in logic")
A declarative, relational style of programming based on first-order logic:
Originally intended for natural-language processing, but has been used for many different purposes (esp. for programming artificial intelligence).
The programmer writes a "database" of "facts" and "rules";
e.g.:
The user then supplies a "goal" which the system attempts to prove deductively (using resolution and backtracking); e.g., witch(girl).
%- FACTS ----------female(girl).floats(duck).sameweight(girl,duck).
%- RULES ----------witch(X) :- burns(X) , female(X).burns(X) :- wooden(X).wooden(X) :- floats(X).floats(X) :- sameweight(X,Y) , floats(Y).
![Page 36: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/36.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Operational vs. Declarative Programming
Operational Programming: The programmer specifies operationally:
how to obtain a solution
Very dependent on operational details
Declarative Programming: The programmer declares:
what are the properties of a solution
(Almost) Independent on operational details
PROLOG: "The programmer describes the logical properties of the result of a computation, and the interpreter searches for a result having those properties".
- Prolog- Haskell- ...
- C- Java- ...
![Page 37: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/37.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Facts, Rules, and Queries
There are only 3 basic constructs in PROLOG: Facts
Rules
Queries (goals that PROLOG attempts to prove)
"knowledge base" (or "database")
Programming in PROLOG is all about writing knowledge bases.
We use the programs by posing the right queries.
![Page 38: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/38.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Introductory Examples
Five example (knowledge bases) …from "Pulp Fiction":
...in increasing complexity: KB1: Facts only KB2: Rules KB3: Conjunction ("and") and disjunction ("or") KB4: N-ary predicates and variables KB5: Variables in rules
![Page 39: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/39.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
KB1: Facts Only
KB1:
Basically, just a collection of facts: Things that are unconditionally true;
We can now use KB1 interactively:
% FACTS:woman(mia).woman(jody).woman(yolanda).playsAirGuitar(jody).
?- woman(mia).Yes
?- woman(jody).Yes
?- playsAirGuitar(jody).Yes
?- playsAirGuitar(mia).No
?- tatooed(joey).No
?- playsAirGuitar(marcellus).No
?- attends_dProgSprog(marcellus).No
?- playsAirGitar(jody).No
e.g."mia is a woman"
![Page 40: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/40.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Rules
Rules: Syntax: Semantics:
"If the body is true, then the head is also true"
To express conditional truths: e.g., i.e., "Mia plays the air-guitar, if she listens to music".
PROLOG then uses the following deduction principle(called: "modus ponens"):
head :- body.~body
headinference system.
H :- B // If B, then H (or "H <= B")B // B.
H // Therefore, H.
playsAirGuitar(mia) :- listensToMusic(mia).
![Page 41: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/41.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
KB2: Rules
KB2 contains 2 facts and 3 rules:
which define 3 predicates: (listensToMusic, happy, playsAirGuitar)
PROLOG is now able to deduce...
...using "modus ponens":
% FACTS:listensToMusic(mia).happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).playsAirGuitar(yolanda) :- listensToMusic(yolanda).listensToMusic(yolanda) :- happy(yolanda).
?- playsAirGuitar(mia).Yes
playsAirGuitar(mia) :- listensToMusic(mia).listensToMusic(mia).
playsAirGuitar(mia).
listensToMusic(yolanda) :- happy(yolanda).happy(yolanda).
listensToMusic(yolanda).
?- playsAirGuitar(yolanda).Yes
playsAirGuitar(yolanda) :- listensToMusic(yolanda).listensToMusic(yolanda).
playsAirGuitar(yolanda).
...combined with...
…using M.P. twice:
![Page 42: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/42.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Conjunction and Disjunction
Rules may contain multiple bodies (which may be combined in two ways):
Conjunction (aka. "and"):
i.e., "Vincent plays, if he listens to music and he's happy".
Disjunction (aka. "or"):
i.e., "Butch plays, if he listens to music or he's happy".
...which is the same as (preferred):
playsAirGuitar(vincent) :- listensToMusic(vincent), happy(vincent).
playsAirGuitar(butch) :- listensToMusic(butch); happy(butch).
playsAirGuitar(butch) :- listensToMusic(butch).playsAirGuitar(butch) :- happy(butch).
![Page 43: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/43.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
KB3: Conjunction and Disjunction
KB3 defines 3 predicates:happy(vincent).
listensToMusic(butch).
playsAirGuitar(vincent) :- listensToMusic(vincent), happy(vincent).
playsAirGuitar(butch) :- happy(butch).playsAirGuitar(butch) :- listensToMusic(butch).
?- playsAirGuitar(vincent).No
?- playsAirGuitar(butch).Yes
playsAirGuitar(butch) :- listensToMusic(butch).listensToMusic(butch).
playsAirGuitar(butch).
...because we cannot deduce:listensToMusic(vincent).
...using the last rule above
![Page 44: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/44.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
KB4: N-ary Predicates and Variables
KB4:
Interaction with Variables (in upper-case):
PROLOG tries to match woman(X) against the rules (from top to bottom) using X as a placeholder for anything.
More complex query:
woman(mia).woman(jody).woman(yolanda).
Defining unary predicate: woman/1 Defining binary predicate: loves/2
?- woman(X).X = mia?- ; // ";" ~ are there any other matches ?X = jody?- ; // ";" ~ are there any other matches ?X = yolanda?- ; // ";" ~ are there any other matches ?No
loves(vincent,mia).loves(marcellus,mia).loves(pumpkin,honey_bunny).loves(honey_bunny,pumpkin).
?- loves(marcellus,X), woman(X).X = mia
![Page 45: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/45.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
KB5: Variables in Rules
KB5:
i.e., "X is-jealous-of Y, if there exists someone Z such that X loves Z and Y also loves Z".
(statement about everything in the knowledge base)
Query:
(they both love Mia).
Q: Any other jealous people in KB5?
loves(vincent,mia).loves(marcellus,mia).
jealous(X,Y) :- loves(X,Z), loves(Y,Z).
?- jealous(marcellus,Who).Who = vincent
NB: (implicit)existential quantification (i.e., ”∃ Z”)
![Page 46: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/46.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Prolog Terms
Terms: Atoms (first char lower-case or is in quotes):
a, vincent, vincentVega, big_kahuna_burger, ... 'a', 'Mia', 'Five dollar shake', '#!%@*', ...
Numbers (usual): ..., -2, -1, 0, 1, 2, ...
Variables (first char upper-case or underscore): X, Y, X_42, Tail, _head, ... ("_" special variable)
Complex terms (aka. "structures"): (f is called a "functor") a(b), woman(mia), woman(X), loves(X,Y), ... father(father(jules)), f(g(X),f(y)), ... (nested)
f(term1, term2, …, termn)
constants
![Page 47: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/47.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Implicit Data Structures
PROLOG is an untyped language
Data structures are implicitly defined via constructors (aka. "functors"): e.g.
Note: these functors don't do anything; they just represent structured values e.g., the above might represent a three-element list:
[x,y,z]
cons(x, cons(y, cons(z, nil)))
![Page 48: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/48.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
MATCHING
Keywords: Matching, Unification, "Occurs check", Programming via Matching...
![Page 49: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/49.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Matching: simple recursive def. (≅)
Matching: iff c,c' same atom/number (c,c' constants)
e.g.; mia ≅ mia, mia ≅ vincent, 'mia' ≅ mia, ...
0 ≅ 0, -2 ≅ -2, 4 ≅ 5, 7 ≅ '7', ...
e.g.; X ≅ mia, woman(jody) ≅ X, A ≅ B, ...
iff f=f', n=m, ∀i recursively: ti ≅ t'i
e.g., woman(X) ≅ woman(mia), f(a,X) ≅ f(Y,b), woman(mia) ≅ woman(jody), f(a,X) ≅ f(X,b).
'≅' ⊆ TERM × TERM
Note: all vars matches compatible ∀i
c ≅ c'
X ≅ t
t ≅ X
X ≅ Y
f(t1,…,tn) ≅ f'(t'1,…,t'm)
always match (X,Y variables, t any term)
cons
tant
sva
riabl
esco
mpl
ex te
rms
![Page 50: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/50.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
"=/2" and QUIZzzzz...
In PROLOG (built-in matching pred.): "=/2":=(2,2); may also be written using infix notation:
i.e., as "2 = 2".
Examples: mia = mia ? mia = vincent ? -5 = -5 ? 5 = X ? vincent = Jules ? X = mia, X = vincent ? X = mia; X = vincent ? ; // “;” ~ are there any other matches ? kill(shoot(gun),Y) = kill(X,stab(knife)) ? loves(X,X) = loves(marcellus, mia) ?
![Page 51: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/51.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Variable Unification ("fresh vars")
Variable Unification: In some systems (such as SWI-Prolog), variables are identified when possible:
In others, fresh variables are always introduced:
"_G225" is a "fresh" variable (not occurring elsewhere)
Using such fresh names avoids name-clashes with variables with the same name nested inside [ More on this later... ]
?- X = Y.X = _G225Y = _G225
?- X = Y.X = Y
![Page 52: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/52.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
PROLOG: Non-Standard Unification PROLOG does not use "standard unification":
It uses a "short-cut" algorithm (w/o cycle detection for speed-up, saving so-called "occurs checks"):
Consider (non-unifiable) query:
...on older versions of PROLOG:
...on newer versions of PROLOG:
...representing an infinite term
?- father(X) = X.
Out of memory! // on older versions of PrologX = father(father(father(father(father(father(father(
X = father(**) // on newer versions of Prolog
PROLOG Design Choice:trading safety for efficiency(rarely a problem in practice)
![Page 53: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/53.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Programming via Matching
Consider the following knowledge base:
Almost looks too simple to be interesting; however...!:
We even get complex, structured output (that may contain fresh variables) "point(_G228,2)".
vertical(line(point(X,Y),point(X,Z))).horizontal(line(point(X,Y),point(Z,Y))).
?- vertical(line(point(1,2),point(1,4))). // matchYes?- vertical(line(point(1,2),point(3,4))). // no matchNo?- horizontal(line(point(1,2),point(3,Y))). // var matchY=2?- ; // <-- ";" are there any other lines ?No?- horizontal(line(point(1,2),P)). // any point?P = point(_G228,2) // i.e. any point w/ Y-coord 2?- ; // <-- ";" other solutions ?No
Note: scope rules:the X,Y,Z's are all different in the (two) different rules!
![Page 54: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/54.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
Exercises 2+3:
13:30 – 14:15
![Page 55: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/55.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
2. Finite-State Search Problems
�Purpose:�Learn to solve encode/solve/decode search problems
![Page 56: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/56.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
3. Finite-State Problem Solving
Purpose: Learn to solve encode/solve/decode search problems
![Page 57: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/57.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
PROOF SEARCH ORDER
Keywords: (14:30 – 15:15) Proof Search Order, Deduction, Backtracking, Non-termination, ...
![Page 58: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/58.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Proof Search Order
Consider the following knowledge base:
...and query:
We (homo sapiens) can "easily" figure out that Y=b is the (only) answer but how does PROLOG go about this?
f(a).f(b).
g(a).g(b).
h(b).
k(X) :- f(X),g(X),h(X).
?- k(Y).
![Page 59: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/59.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Resolution:
1. Search knowledge base (from top to bottom) for(axiom or rule head) matching with (first) goal:
Axiom match: remove goal and process next goal [→1] Rule match: (as in this case): [→2] No match: backtrack (= undo; try next choice in 1.) [→1]
2. "α-convert" variables (to avoid name clashes, later): Goalα: (record “Y = _G225”)
Matchα: [→3]
3. Replace goal with rule body: Now resolve new goals (from left to right); [→1]
f(a). f(b). g(a). g(b). h(b).k(X) :- f(X),g(X),h(X).
k(Y)
rule head rule body
axioms (5x)
rule (1x)
k(X) :- f(X),g(X),h(X).
k(_G225) :- f(_G225),g(_G225),h(_G225).
k(_G225)
f(_G225),g(_G225),h(_G225).
Possible outcomes:- success: no more goals to match (all matched w/ axioms and removed)- failure: unmatched goal (tried all possibilities: exhaustive backtracking)- non-termination: inherent risk (same- / bigger-and-bigger- / more-and-more -goals)
PROLOG's Search Order
![Page 60: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/60.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Search Tree (Visualization)
KB: ; goal:f(a). f(b). g(a). g(b). h(b).k(X) :- f(X),g(X),h(X). k(Y)
k(Y)
f(_G225), g(_G225), h(_G225)
g(a), h(a)
h(a)
g(b), h(b)
h(b)
backtrack
choice point
Yes “[Y=b]”
Y = _G225
_G225 = a _G225 = b
rule1
axiom1
axiom3
axiom2
axiom4
axiom5
![Page 61: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/61.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Timeout
Try to go through it (step by step)with the person next to you
![Page 62: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/62.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
RECURSION
Keywords: Recursion, Careful with Recursion, & PROLOG vs. inference systems
![Page 63: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/63.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Recursion (in Rules)
Declarative (recursive) specification:
What does PROLOG do (operationally) given query: ?
...same algorithm as before works fine with recursion!
just_ate(mosquito, blood(john)).just_ate(frog, mosquito).just_ate(stork, frog).
is_digesting(X,Y) :- just_ate(X,Y).is_digesting(X,Y) :- just_ate(X,Z), is_digesting(Z,Y).
?- is_digesting(stork, mosquito).
![Page 64: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/64.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Do we really need Recursion?
Example: Descendants "X descendant-of Y" ~ "X child-of, child-of, ..., child-of Y"
Okay for above knowledge base; but what about...:
child(anne, brit).child(brit, carol).
descend(A,B) :- child(A,B).descend(A,C) :- child(A,B), child(B,C).
child(anne, brit).child(brit, carol).child(carol, donna).child(donna, eva).
?- descend(anne, donna).No :(
![Page 65: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/65.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Need Recursion? (cont'd)
Then what about...:
Now works for...:
...but now what about:
Our "strategy" is: extremely redundant; and only works up to finite K!
descend(A,B) :- child(A,B).descend(A,C) :- child(A,B), child(B,C).descend(A,D) :- child(A,B), child(B,C), child(C,D).
?- descend(anne, donna).Yes :)
?- descend(anne, eva).No :(
![Page 66: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/66.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Solution: Recursion!
Recursion to the rescue:
Works:
...for structures of arbitrary size: ...even for "zoe":
...and is very concise!
descend(X,Y) :- child(X,Y).descend(X,Y) :- child(X,Z), descend(Z,Y).
?- descend(anne, eva).Yes :)
?- descend(anne, zoe).Yes :)
![Page 67: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/67.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Operationally (in PROLOG)
Search treefor query:
descend(a,d)
Yes
rule1
axiom3
child(a,b).child(b,c).child(c,d).child(d,e).
descend(X,Y) :- child(X,Y).descend(X,Y) :- child(X,Z), descend(Z,Y).
?- descend(a,d).Yes :)
choice point
child(a,d)
backtrack
child(a,_G1),descend(_G1,d)
rule2
axiom1
descend(b,d)
_G1 = b
child(b,d)
backtrack
rule1 rule2
child(b,_G2),descend(_G2,d)
axiom2_G2 = c
descend(c,d)
choice point
child(c,d)
rule1
![Page 68: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/68.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Example: Successor
Mathematical definition of numerals:
"Unary encoding of numbers" Computers use binary encoding Homo Sapiens agreed (over time) on decimal encoding (Earlier cultures used other encodings: base 20, 64, ...)
In PROLOG:
|_num 0|_num N
|_num succ N[rule1][axiom1]
numeral(0).
numeral(succ(N)) :- numeral(N).This is the naïve implementation of the inference rules.
![Page 69: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/69.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Backtracking (revisited)
Given:
Interaction with PROLOG:
numeral(0).
numeral(succ(N)) :- numeral(N).
?- numeral(0). // is 0 a numeral ?Yes?- numeral(succ(succ(succ(0)))). // is 3 a numeral ?Yes?- numeral(X). // okay, gimme a numeral ?X=0?- ; // please backtrack (gimme the next one?)X=succ(0)?- ; // backtrack (next?)X=succ(succ(0))?- ; // backtrack (next?)X=succ(succ(succ(0)))... // and so on...
![Page 70: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/70.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Example: Addition
Recall addition inference system (~3 hrs ago):
In PROLOG:
However, one extremely important difference:
+(0,M,M)[axiom1]‘+’ ⊆ N × N × N +(N,M,R)+(N+1,M,R+1)
[rule1]
add(0,M,M).
add(succ(N),M,succ(R)) :- add(N,M,R).
Again:typing in the inference system
"head under the arm"(using a Danish metaphor).
add(0,M,M).
add(succ(N),M,R) :- add(N,succ(M),R).
inference system vs. PROLOG
mathematically: ∃ (exist) inference tree vs. fixed search alg.
vs.+(0,M,M)[axiom1]+(N,M+1,R)+(N+1,M,R)[rule1]
no loops- top-to-bottom- left-to-right- backtracking
?- add(X,succ(succ(0)),succ(0)).+(?,2,1)
![Page 71: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/71.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Be Careful with Recursion!
Original:
Query:
rule bodies:
rules:
bodies+rules:
is_digesting(X,Y) :- just_ate(X,Z), is_digesting(Z,Y).is_digesting(A,B) :- just_ate(A,B).
is_digesting(A,B) :- just_ate(A,B).is_digesting(X,Y) :- is_digesting(Z,Y), just_ate(X,Z).
is_digesting(X,Y) :- is_digesting(Z,Y), just_ate(X,Z).is_digesting(A,B) :- just_ate(A,B).
just_ate(mosquito, blood(john)).just_ate(frog, mosquito).just_ate(stork, frog).
EXER
CIS
E:W
hat h
appe
ns if
we
swap
...
?- is_digesting(stork, mosquito).
is_digesting(A,B) :- just_ate(A,B).is_digesting(X,Y) :- just_ate(X,Z), is_digesting(Z,Y).
![Page 72: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/72.jpg)
Autumn 2010Hans Hüttel/ Claus Brabrand PROGRAMMING PARADIGMS
Exercises 4+5:
15:30 – 16:15
![Page 73: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/73.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
4. Multiple Solutions & Backtracking
Purpose: Learn how to deal with multiple solutions & backtracking
4
![Page 74: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/74.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
5. Recursion in Prolog
Purpose: Learn how to be careful with recursion
5
![Page 75: Hans Hüttel - people.cs.aau.dkpeople.cs.aau.dk/~hans/prolog/pp-1.pdf · 2010-10-06 · Deduction vs. Induction Deduction: whole → parts: (aka. “top-down reasoning”) abstract](https://reader036.vdocuments.us/reader036/viewer/2022081613/5fb9f7032820640ff803a3bc/html5/thumbnails/75.jpg)
[ ]Hans Hüttel / Claus Brabrand
?-
PROGRAMMING PARADIGMS Autumn 2010
Hand-in #4 (due: 27 October)
Hand-in: To check that you are able to solve problems in Prolog
explain carefully how you repr. & what PROLOG does!