Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSE (c) S. Tanimoto, 2004 Logic Programming

Similar presentations


Presentation on theme: "CSE (c) S. Tanimoto, 2004 Logic Programming"— Presentation transcript:

1 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Outline: Motivation. Examples: The Grandmother relation. Formulation in Prolog. Formulation using Lisp syntax (Mock Prolog). List manipulation using logic. Logic, clauses, and Horn clauses. Unification. The Backtracking Search Resolver. CSE (c) S. Tanimoto, Logic Programming

2 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Motivation 1. Reduce the programming burden. 2. System should simply accept the necessary information and the objective (goal), and then figure out its own solution. 3. Have a program that looks more like its own specification. 4. Take advantage of logical inference to automatically get many of the consequences of the given information. CSE (c) S. Tanimoto, Logic Programming

3 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Sample Problem For someone (call him or her X) to be the grandmother of someone else (call him or her Y), X must be the mother of someone (call him or her Z) who is a parent of Y. Someone is a parent of another person, if that someone is either the mother or the father of the other person. Mary is the mother of Stan. Gwen is the mother of Alice. Valery is the mother of Gwen. Stan is the father of Alice. The question: Who is a grandmother of Alice? CSE (c) S. Tanimoto, Logic Programming

4 Sample Prolog Program: grandmother.pl
grandmother(X, Y) :- mother(X, Z), parent(Z, Y). parent(X, Y) :- mother(X, Y). parent(X, Y) :- father(X, Y). mother(mary, stan). mother(gwen, alice). mother(valery, gwen). father(stan, alice). CSE (c) S. Tanimoto, Logic Programming

5 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Sample Prolog Session Welcome to SWI-Prolog (Version 3.3.2) Copyright (c) University of Amsterdam. All rights reserved. For help, use ?- help(Topic). or ?- apropos(Word). ?- [grandmother]. % grandmother compiled 0.00 sec, 1,312 bytes Yes ?- grandmother(X, alice). X = mary ; X = valery ; No ?- CSE (c) S. Tanimoto, Logic Programming

6 Example with Lisp Syntax
; courses.lsp Some prerequisite relationships ((prereq cse142 cse143)) ((prereq cse143 cse373)) ((prereq cse373 cse415)) ; To prove X must come before Y, it’s ; enough to show that X is a prereq. for y. ((before X Y) (prereq X Y)) ; Alternatively, one can show X must come ; before Y by showing that for some Z, ; X is a prereq of Z and Z comes before y. ((before X Y) (prereq X Z) (before Z Y)) ; Before(x,y) v ~Prereq(x,z) v ~Before(z,y) ; ( <head> <-- <atomic formula 1> <af2> ...<afn>) CSE (c) S. Tanimoto, Logic Programming

7 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
A Session (load ”prolog.lsp” ) (setq *database* ’( ((prereq cse142 cse143)) . . . ) ) (query ’((prereq cse142, X))) X=CSE143 CSE (c) S. Tanimoto, Logic Programming

8 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
A session (cont) (query a ’(prereq X Y)) X = CSE142; Y = CSE143; X = CSE143; Y = CSE373; X = CSE373; Y = CSE415; CSE (c) S. Tanimoto, Logic Programming

9 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
A session (cont) (query ’(before X cse373)) X = cse143; X = cse142 ; CSE (c) S. Tanimoto, Logic Programming

10 Lists in Prolog: Transformations can be Expressed Declaratively
colors([r, g, b]). ?- colors(L). L = [r, g, b] ?- colors([X|Y]). X = r, Y = [g, b] % X is the head. Y is the tail. ?- mylist([a, [b, c]]). CSE (c) S. Tanimoto, Logic Programming

11 Defining Predicates on Lists
car([X|L], X). cdr([X|L], L). cons(X, L, [X|L]). ?- car([a, b, c], X). X = a ?- cdr([a, b, c], X). X = [b, c] ?- cons(a, [b, c], X). X = [a, b, c] CSE (c) S. Tanimoto, Logic Programming

12 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
concat a.k.a. append concat([], L, L). concat([X|L1], L2, [X|L3]) :- concat(L1, L2, L3). ?- concat([a, b, c], [d, e], X). X = [a, b, c, d, e] ?- concat(X, [d, e], [a, b, c, d, e]). X = [a, b, c] CSE (c) S. Tanimoto, Logic Programming

13 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
concat used backwards ?- concat(X, Y, [x, y, z]). X = [] Y = [x, y, z] ; X = [x] Y = [y, z] ; X = [x, y] Y = [z] ; X = [x, y, z] Y = [] ; No CSE (c) S. Tanimoto, Logic Programming

14 Logic Prog. vs Functional Prog.
Functional programming: evaluation is one-way. Logic programming: evaluation can be two-way. CSE (c) S. Tanimoto, Logic Programming

15 Steps in Writing a Logic Program
1. Formulate assertions in English and translate them into Logic, then into Prolog or Mock Prolog. or 2. Program directly in Prolog or Mock Prolog. CSE (c) S. Tanimoto, Logic Programming

16 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Predicate Logic “Every Macintosh computer uses electricity.” (all x) (Macintosh(x) implies UsesElectricity(x)) variables: x, y, z, etc. constants: a, b, c, etc. function symbols: f, g, etc. Predicate symbols: P, Q, Macintosh, UsesElectricity quantifiers: forall, exists Logical connectives: not, implies, and, or. ~, ->, &, v. CSE (c) S. Tanimoto, Logic Programming

17 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Clause Form (all x) (Macintosh(x) -> UsesElectricity(x) UsesElectricity(x) v Not Macintosh(x). Any boolean formula can be put into conjunctive normal form (CNF). If not Y then X and not Z. Y or (X & not Z) (Y or X & (Y or not Z) (X v Y) & (Y v ~Z) clauses: (X v Y), (Y v ~Z) X, Y, and ~Z are called literals. Each clause is a disjunction of literals. CSE (c) S. Tanimoto, Logic Programming

18 CSE 415 -- (c) S. Tanimoto, 2004 Logic Programming
Horn Clauses Horn clause: at most one unnegated literal (X v Y) is not a Horn clause. (Y v ~Z) is a Horn clause. “If X is the mother of Y and Y is a parent of Z, then X is a grandmother of Z.” (m(X,Y) & p(Y, Z)) -> g(X,Z). grandmother(X, Z) provided mother(X, Y) and parent (Y, Z) g(X,Z) :- m(X,Y), p(Y,Z). ; Edinburgh Prolog syntax grandmother(X, Z) : % head mother(X, Y), % subgoal 1 parent(Y, Z) % subgoal 2 CSE (c) S. Tanimoto, Logic Programming

19 How Does Matching Work in Prolog?
Literals are matched using a method called unification. The scope of a variable in Prolog is a single clause. Unification involves substituting “terms” for variables. CSE (c) S. Tanimoto, Logic Programming

20 Unification of Literals
A substitution is a set of term/variable pairs. { f(a)/x, b/y, z/w } A unifier for a pair of literals is a substitution that when applied to both literals, makes them identical. P(x, a), P(f(a), y) have the unifier { f(a)/x, a/y } P(x), P(y) have the unifier { a/x, a/y }, but they also have the unifier { x/y }. The latter is more general because after unifying with { x/y} we get P(x) whereas with the other it is P(a), yet we can obtain the latter from the former with an additional substitution { a/x }. CSE (c) S. Tanimoto, Logic Programming

21 Horn-Clause Resolution
Example of resolution with the grandmother rules: g(X, Z) :- m(X, Y), p(Y, Z). m(X, Y) :- p(X, Y), f(X). g(X, Z) :- p(X, Y), f(X), p(Y, Z). more generally, from: P :- Q1, Q2. Q1 :- R1, R2. we obtain the resolvent: P :- R1, R2, Q2 CSE (c) S. Tanimoto, Logic Programming

22 A Backtracking Horn-Clause Resolver
Maintain the rules in a database of rules. Accept a query (goal) as a positive unit clause, e.g., P(a, b). Put this goal on the subgoal list. Repeatedly try to satisfy the next clause on the subgoal list as follows: Find a rule in the database whose head unifies with the subgoal. Apply the same unifier to the literals in the body of that rule and replace the subgoal by these new literals. If the subgoal list is empty, stop. The combined set of unifiers includes the solution. CSE (c) S. Tanimoto, Logic Programming


Download ppt "CSE (c) S. Tanimoto, 2004 Logic Programming"

Similar presentations


Ads by Google