Declarative Programming

38
2 Declarative Programming Motivation Warm Fuzzies What is Logic? ... Logic Programming? Foundations: Terms, Substitution, Unification, Horn Clauses Proof (Resolution) Examples: List Processing; Integer Issues Logic / Theorem Proving Search Strategies Declarative/Procedural, ... Other parts of Prolog “Impure'' Operators” --- NOT, ! Utilities ? Constraint Programming ? Bayesian Belief Nets

description

Declarative Programming. Motivation Warm Fuzzies What is Logic? ... Logic Programming? Foundations: Terms, Substitution, Unification, Horn Clauses Proof (Resolution) Examples: List Processing; Integer Issues Logic / Theorem Proving Search Strategies Declarative/Procedural, ... - PowerPoint PPT Presentation

Transcript of Declarative Programming

Page 1: Declarative Programming

2

Declarative Programming Motivation

Warm Fuzzies What is Logic? ... Logic Programming?

Foundations: Terms, Substitution, Unification, Horn Clauses Proof (Resolution)

Examples: List Processing; Integer Issues

Logic / Theorem Proving Search Strategies Declarative/Procedural, ...

Other parts of Prolog “Impure'' Operators” --- NOT, ! Utilities

? Constraint Programming ? Bayesian Belief Nets

Page 2: Declarative Programming

3

What is Logic?

Logic is formal system for reasoning Reasoning is inferring new facts from old

Given { All men are mortal. Socrates is a man. }

infer (conclude, reason

that, ...) Socrates is mortal.

What is role of Logic within CS? Foundation of discrete mathematics Automatic theorem proving Hardware design/debugging Artificial intelligence (Cmput366)

Components: Syntax (What does it look like?) Reasoning/ProofTheory (New facts from old) Semantics (What should it do?)

Page 3: Declarative Programming

4

Logic Programming Program Logic Formula

Execution of program Proving a theorem

User: 1. Specifies WHAT is true 2. Asks if something else followsProlog: Answers question.

By comparison, in Procedural Programming (C, JAVA, Fortran, ...)

user must … decide on data-structure explicitly write procedures: search, match, substitute write diff programs forfather(X, tom) vs father(tom, Y)

Page 4: Declarative Programming

5

What is Logic? Syntax: Set of Expressions

? Well-formed or not? SEQUENCE of Symbols

Accept: The boys are at home. at(X, home) :- boy(X).

Reject: boys.home the angrily democracyX(at), xY=, Boy(1X,( ) :-

AcceptReject

Given { All men are mortal. Socrates is a man. }

infer (conclude, reason

that, ...) Socrates is mortal.

Proof Process: Given Believed statements, Determine other Believed statements.

{ s1, ..., sn } ⊢P s Semantics: Which expressions are Believed ?

John's mother is Mary. T John's mother is Fred. F Colorless green ideas sleep furiously. F

Page 5: Declarative Programming

6

Concept of PROLOG PROgramming in LOGic

Sound Reasoning Engine1. User asserts true statements.

User asserts { All men are mortal.Socrates is a man. }

2. User poses query. “Is Socrates mortal?” “Who/what is mortal?”

3. Prolog provides answer (Y/N, binding). “Yes” “Socrates''

Page 6: Declarative Programming

7

Tying Prolog to Logic Syntax: Horn Clauses

(aka Rules + Facts) Terms

Proof Process: Resolution Substitution Unification

Semantics (From Predicate Calculus … + not )

Page 7: Declarative Programming

8

Terms BNF:

term ::= constant | variable | functor constant ::= atom starting w/lower casevariable ::= atom starting w/upper casefunctor ::= constant (tlist ) tlist ::= “” | term {, tlist }

Examples of term :a1 b fred constantX Yc3 Fred _4 variable married(fred) g(a, f(Yc3), b) functor

Ground Term term with no variablesf(q) g(f(w), w1(b,c)) are groundf(Q) g(f(w), w1(B,c)) are not

Page 8: Declarative Programming

9

Substitution A Substitution is a set { t1/v1 t2/v2 ... tn/vn }

where vi are distinct variables ti are terms that do not use any vj

Examples: + { a/X } { a/X b/Y f(a,W)/Z } { W/X f(W)/Y W/Z }

- { a/f(X) } { a/X b/X } { f(X)/X } { f(Y)/X g(q)/Y }

- { f(g(Y))/X g(q)/Y }

Page 9: Declarative Programming

10

Applying a Substitution Given

“t” is term, result of applying to t

Small Examples: X {a/X} a f(X) {a/X} f(a)

Example, using t = f( a, h(Y,b), X )

t -- a term -- a substitution

{ b/X } f( a, h(Y,b), b )

{ b/X f(Z)/Y } f( a, h(f(Z),b), b )

{ Z/X f(Z,a)/Y } f( a, h(f(Z,a),b), Z )

{ Z/W } f( a, h(Y,b), X )

Page 10: Declarative Programming

11

Applying a Substitution

f( a, h(Y,b), X ) { b/X } = f( a, h(Y,b), b )f( a, h(Y,b), X ) { b/X f(Z)/Y } = f( a, h(f(Z),b), b )f( a, h(Y,b), X ) { Z/X f(Z,a)/Y } =

f( a, h(f(Z,a),b), Z )f( a, h(Y,b), X ) { Z/W } = f( a, h(Y,b), X )

need not include all variables in t can include variables not in t.

Page 11: Declarative Programming

12

Composition of Substitutions ○ is composition of substitutions ,

For any term t, t [○] = (t ).

Example:f(X) [{ Z/X} ○ { a/Z}] = (f(X) { Z/X}) {a/Z} = f(Z) { a/Z} = f(a)

○ is typically a substitutionEg:

{ a/X} ○ { b/Y} = { a/X, b/Y} { Z/X} ○ { a/Z} = { a/X, a/Z}

Page 12: Declarative Programming

13

Examples:t1 t2 unifier termf(b,c) f(b,c) {} f(b,c)f(X,b) f(a,Y) { a/X b/Y } f(a,b)f(a,b) f(c,d) * f(a,b) f(X,X) * f(X,a) f(Y,Y) { a/X a/Y } f( a, a )f(g(U),d) f(X,U) { d/U g(d)/X } f( g(d),d )f(X) g(X) * f(X,g(X)) f(Y,Y) * f(X) f(Y) { Y/X } f(Y)

Unifiers t1 and t2 are unified by iff

t1 = t2 .Then is called a unifier

t1 and t2 are unifiable

NB t1 and t2 are symmetric -- either can have variables

Page 13: Declarative Programming

14

Multiple Unifiers Unifier for t1 = f(X) and t2 = f(Y) …

{ X/Y } and { Y/X }make sense, but { a/Y a/X } has irrelevant constant { X/Y g/W } has irrelevant variable (W)

Adding irrelevant constants/bindings unifiers best one??

t1 = t2 =

{ X/Y } f(X){ Y/X } f(Y){ a/Y a/X } f(a){ g(b,Z))/Y g(b,Z)/X) } f(g(b,Z) ){ X/Y W/g) } f(X)

Page 14: Declarative Programming

15

Quest for Best Unifier Wish list:

No irrelevant constants So {X/Y} preferred over { a/Y, a/X }

No irrelevant bindings So {X/Y} preferred over { X/Y, f(4,Z)/W }

Spse 1 has constant where 2 has variable1 = { a/X, a/Y }, 2 = {Y/X}

Then substitution s.t. 2 ○ = 1

= {a/Y} : {Y/X} ○ {a/Y} = { a/X, a/Y }

Spse 1 has extra binding over 2 1 = {a/X, b/Y}, 2 = {a/X}

Then substitution s.t. 2 ○ = 1

= {b/Y} : {a/X} ○ {b/Y} = {a/X, b/Y} INFERIOR unifier = composition of Good Unifier + another substitution

Page 15: Declarative Programming

16

Most General Unifier is MGU for t1 and t2 iff

unifies t1 and t2 , and : unifier of t1 and t2 ,

substitution s.t. ○ = Ie, for all terms t, t = (t )

Eg, = {X/Y} is mgu for f(X) and f(Y)Consider unifier = {a/X a/Y} Use = { Y/a }:

f(X) = f(X) {a/X a/Y} = f(a)f(X)[ ○ ] = [f(X)] = [f(X) {Y/X}] = f(Y) {a/X a/Y} = f(a)

Similarly, f(Y) = f(a) = f(Y) [ ○ ]( is not a mgu, as ¬’s.t. ○ ’= )

Page 16: Declarative Programming

17

MGU --- Example#2

A mgu for f( W, Z, g(Z) ) & f( X, h(X), Y )

{W/X }

W/X

h(X)/Zh(W)/Z

g(Z)/Y

h(W)/Z g(h(W))/Y

g(h(W))/Y

Page 17: Declarative Programming

18

MGU (con't) Notes:

If t1 and t2 are unifiable, then mgu. Can be more than 1 mgu

but they differ only in variable names. Not every unifier is a mgu. A mgu uses constants only as necessary.

Implementation: fast algorithm that computes a mgu of t1 and t2, if one

exists;or reports failure.

Slow part is verifying legal substitution: none of vi appear in any tj.Avoid by resetting Prolog's occurscheck parameter.

Page 18: Declarative Programming

19

MGU ProcedureRecursive Procedure MGU( x, y ) If x=y then Return() If Variable(x) then Return( MguVar(x,y) ) If Variable(y) then Return( MguVar(y,x) ) If Constant(x) or Constant(y) then Return( False ) If Not(Length(x) = Length(y)) then Return( False ) g [] For i = 0 .. Length(x) s MGU( Part(x,i), Part(y,i) ) g Compose( g, s ) x Substitute( x, g ) y Substitute( y, g ) Return( g )End

Procedure MguVar (v,e) If Includes(v,e) then Return( False ) Return( [v/e] )End

Page 19: Declarative Programming

20

Prolog's Syntax BNF:

Horn ::= literal. | literal :- llist . llist ::= literal { , llist } literal ::= term

Examples:father(john, sue).father(odin, X).parent(X, Y) :- father(X, Y).gparent(X, Z) :- parent(X, Y), parent(Y, Z).

How to read as predicate calculus?father(john, sue) X. father(odin, X).X,Y. father(X,Y) parent(X,Y)X,Y,Z.parent(X,Y)} & parent(Y,Z) gparent(X,Z)

Page 20: Declarative Programming

21

Relation to Predicate Calculus In general:

t. x1, …, xm. t [called “atomic formula”]

t :- t1, …, tn. x1, …, xm. t1, …, tn t. [called “(production) rule”]

Can write any Predicate Calculus Expression in Conjunctive Normal Form

Horn clauses are CNF, with ONE Positive Literal

Horn CNF Predicate Calculus expressions that canNOT be written as Horn Clauses.

Axioms

A v B

Page 21: Declarative Programming

22

What User Really Types > sicstusSICStus 3.11.2 (x86-linux-glibc2.3): Wed Jun 2 11:44:50 CEST 2004Licensed to cs.ualberta.ca| ?- [user]. % For user to enter ``Assert-fact'' mode.% consulting user...| on(aa,bb).| on(bb,cc).| above(X,Y) :- on(X,Y).| % Typing ^D exits ``assert'' mode.% consulted user in module user, 0 msec 608 bytesyes % Prolog's answer to most operations| ?-

on(X,Y).X = aa,Y = bb ? ; % User types “;” to ask for ANOTHER answerX = bb,Y = cc ? ; no % Prolog's no means there are no other answers| ?-

on(aa,bb). % User asks a question.yes % Prolog's answer| ?- on(aa,Y). % User's second questionY = bb ? % Prolog's answer: a binding listyes % Prolog's statement that there was answer| ?-

Page 22: Declarative Programming

23

What User Really Types -- II

> sicstusSICStus 3.11.2 (x86-linux-glibc2.3): Wed Jun 2 11:44:50

CEST 2004Licensed to cs.ualberta.ca| ?- [file1]. % file ”file1” contains facts,

rules% file1 consulted 120 byes 0.3333 sec.yes | ?-

on(aa,b10).no % Prolog's answer: not derivable| ?- on(X,b10). no % Again: NO entailments| ?- above(bb,cc).yes % More than simple look-up!| ?- above(bb,W). W = cc ; % Prolog finds answer; user wants anotherno % but this is only one…| ?-

Page 23: Declarative Programming

24

Prolog's Proof Process User provides

KB: Knowledge Base (List of Horn Clauses --- axioms)

: Query (aka Goal, Theorem) -- Literal 1. Who is mortal? mortal(X). 2. Is Socrates mortal? mortal(socrates).

Prolog finds a Proof of , from KB , if one exists

& substitution for γ's variables: σ

KB ⊢P { σ }

KB1 ⊢P mortal(X){ socrates/X } Failure (otherwise)

Page 24: Declarative Programming

25

Proof Process (con’t) Prolog finds ``Top-Down'' (refutation)

Proof … returns bindings

Actually returns LIST of σi s

[one for each proof] { socrates/X } { plato/X }

{ freddy/X } ...

Page 25: Declarative Programming

26

Examples of Proofs: I (DB retrieval)

Using KB1 =

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

Query 1 : on(aa, bb) on(aa, bb)

success

(1)

Hence KB1 ├P on(aa, bb){}

empty substitution( Like Data Base retrieval )

Page 26: Declarative Programming

27

Examples of Proofs: IIa (Variables)

Query 2 : on(aa, Y) on(aa, Y)

success –{bb/Y}

(1) Y=bb

KB1 ├P on(aa, Y) { bb/Y }

Using KB1 =

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

Page 27: Declarative Programming

28

Examples of Proofs: IIb (Variables)

Query 3 : on( X, Y )

KB1 ├P on(X, Y){ aa/X, bb/Y } ... on(aa,bb)

KB1 ├P on(X, Y){ bb/X, cc/Y } ... on(bb,cc)

Using KB1 =on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

(2) X=bb, Y=cc

success{bb/X,cc/Y}

success{aa/X,bb/Y}

(1) X=aa, Y=bb

Either is sufficient!

Page 28: Declarative Programming

29

Ie, KB1 ├P on(aa,bb)

Examples of Proofs: III (Failure)

Query 4 : on(aa, b10)

Using KB1 =on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y).

(3)

Query 5 : on(X, b10)

Ie, KB1 ├P on(X,b10) for any value of X.

Attempts

Page 29: Declarative Programming

30

Examples of Proofs: IVa (Rules)

Query 6 : above(bb, cc)

Ie, KB1 ├P above(bb,cc)

on(bb,cc)

(3) X=bb, Y=cc

success

(2)

Using KB1 =on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

Page 30: Declarative Programming

31

Examples of Proofs: IVb (Rules)

Query 7 : above(bb, W)

Ie, KB1 ├P above(bb,W){cc/W}

on(bb, W)

(3) X=bb, Y=W

success –{cc/W}

(2)

Using KB1 =on(aa, bb). (1

)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

Page 31: Declarative Programming

32

Examples of Proofs: V (big)

Query 7 : above(aa, cc)

on(aa,cc)

(3) X=bb, Y=W

Using KB2 =on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

above(X,Y) :- on(X,Z), above(Z,Y). (4)

on(aa,Z)&above(Z,cc)

(4) X=aa, Y=cc

(1) Z=bb

above(bb,cc)

Page 32: Declarative Programming

33

Examples of Proofs: V (big)

above(aa,cc)

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

above(X,Y):- on(X,Z),above(Z,Y). (4)

on(aa,Z),above(Z,cc)

(4) X=aa, Y=cc

(1) Z=bb

above(bb, cc)

on(bb,cc)

(3) X=bb, Y=cc

(2) Z=cc

above(cc, cc)

(2)

success

on(cc,cc)

(3)

on(aa,cc)

(3) X=bb, Y=cc

on(bb,Z), above(Z, cc)

(4) X=bb, Y=cc

on(cc,Z),above(Z,cc)

(4) X=cc, Y=cc

aa

bb

cc

Page 33: Declarative Programming

34

Examples of Proofs: VI (many answers)

Query 9 : above( X, Y) Answers

{ X=aa, Y=bb } above( aa, bb) (3), (1) { X=bb, Y=cc } above( bb, cc) (3), (2) { X=aa, Y=cc } above( aa, cc) (4), (1),

(3), (2) { X=c1, Y=c2 } above( c1, c2) (5)

Using KB3 =

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

above(X,Y) :- on(X,Z), above(Z,Y). (4)

above(d1, d2) (5)

Page 34: Declarative Programming

35

Prolog's Proof Process A goal is either

a sequence of literals (conjunction) , the special goal ``success ''

(eg, )on(X,Y) p(X,5), q(X) success

Sequence of (sub)goals G1, G2, ..., Gn

is a top-down proof of G1 (from KB) iff

1. Gn = success, and2. Gi is a SUBGOAL (in KB) of Gi-1, i=2,3,...

n

Page 35: Declarative Programming

36

Subgoals

Subgoals of G = { g1, ..., gr} in KB:

Rule 1: If atomic axiom ``t '' in KB where t and gi have mgu ,

then

{ g1 , ..., gi-1, gi+1, ..., gr } is a subgoal of G .

(If r=1, then ``success'' is subgoal of G .)

Rule 2: If rule ``t :- t1, ..., t_k '' in KB where t and gi have mgu ,

then

{ t1, ..., tk, g1, ..., gi-1, gi+1, ..., gr }is a subgoal of G .

Page 36: Declarative Programming

37

Example of Subgoals -- I

Subgoals of are = {X/A, Y/B}

using Rule 2, (3) = {X/A, Y/B}

using Rule 2, (4) = {c1/A, c2/B}

using Rule 1, (5)

KB3 =

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

above(X,Y) :- on(X,Z), above(Z,Y). (4)

above(c1, c2) (5)

above(A,B)

on(A,B)

on(A,Z), above(Z, B)

success

Page 37: Declarative Programming

38

Example of Subgoals -- II

Subgoals of are = {aa/A, bb/Z1}

using Rule 3, (1) [first literal] = {bb/A, bb/Z1}

using Rule 3, (2) [first literal] = {c1/Z1, c2/B}

using Rule 3, (5) [second literal] = {X/Z1, B/Y}

using Rule 4, (3) [second literal] = {X/Z1, Y/B}

using Rule 4, (4) [second literal]

on(aa, bb). (1)

on(bb, cc). (2)

above(X, Y) :- on(X,Y). (3)

above(X,Y):-on(X,Z),above(Z,Y). (4)

above(c1, c2) (5)

above(A,Z1), above(Z1, B)

above(bb,B)

above(cc, B)

on(A,c1)

on(Z1,B), on(A, Z1)

on(Z1,Z), above(Z,B), on(A, Z1)

Page 38: Declarative Programming

39

Comments wrt Prolog's Proof Procedure

found during proof

Prolog returns these overall mgu's 1-by-1 .

Prolog uses specific strategy called “SLD Resolution”

Variable bindingsUnifier