# George F Luger ARTIFICIAL INTELLIGENCE 5th edition Structures and Strategies for Complex Problem Solving Programming in Logic (PROLOG) Luger: Artificial.

## Presentation on theme: "George F Luger ARTIFICIAL INTELLIGENCE 5th edition Structures and Strategies for Complex Problem Solving Programming in Logic (PROLOG) Luger: Artificial."— Presentation transcript:

George F Luger ARTIFICIAL INTELLIGENCE 5th edition Structures and Strategies for Complex Problem Solving Programming in Logic (PROLOG) Luger: Artificial Intelligence, 5 th edition. © Pearson Education Limited, 2005 1

PROLOG What is True What needs to be Proved Not How to do it like in other Programming languages 2

PROLOG Edinburgh Syntax Programming in PROLOG –Clocksin and Mellish, 1984 3

PROLOG EXAMPLES 4

EXAMPLE 1 Every sentence ends with a period “.” Names starts with lower case, constants 6

EXAMPLE 1 ? parent(ali, ahmad). By unifying this statement with the axioms (assertions) in order. The above query (goal) also ends with a period Ans: yes ?parent(ali,X). The above statement asks about all ali’s child Semicolon asks for more answers Ans: X=ahmad; Note: by unifying X with ahmad X=fatema; no 7

EXAMPLE 1 ?parent(X,Y). X=ali Y=ahmad; X=ahmad Y=salem; X=ali Y=fatema; X=fatema Y=osama; no 8

EXAMPLE 1 ?parent(X,ahmad), male(X). Comma “,” means and Who is ahmad’s father It first unifies the first part, i.e parent(X,ahmad). It finds that X could take the value of ali. It then attempts to prove male(ali) Ans: X=ali; No Backtracking on two levels to find other answers 9

EXAMPLE 1 Add the following rule (considered rule not fact): father(X,Y):- parent(X,Y), male(X). father(X,Y)called head parent(X,Y), male(X)called body ?father(X,ahmad). Ans: X=ali; No ?father(fatema,Y). no Because fatema is unified with X and there is no way to prove that male(fatema) 10

EXAMPLE 1 sibling(X,Y):- parent(Z,X), parent(Z,Y), X\==Y. ?sibling(X,Y) X=ahmad, Y=fatema; X=fatema, Y=ahmad; no 12

EXAMPLE 1 Define uncle relation, uncle(X,Y). uncle(X,Y):- parent(Z,Y), parent(G,Z), parent(G,X), X\==Z. 13

HW: Define the following rules: mother son daughter sister sibling grandfather(X,Y):-parent(X,Z),parent(Z,Y), male(X). grandmother cousin(X,Y) 14

Built-in mathematical predicates X=:=Ytrue when X equals Y X=\=Ytrue when X does not equal to Y XYtrue when X is greater than Y X==Ytrue when X is greater than or equal to Y 15

Built-in Mathematical predicates ?6 = : = 4 +2. yes ?8 = : = 4*2. yes ?7= : = 4+6. no ?6 =:= 6. yes 16

Built-in logical predicates X= =Y true when X can be unified with Y X\= =Y true when X is not the same as Y X=Y attempts to unify X with Y 17

Built-in logical predicates ?5= =5. yes ?X= = Y. no ?5+1 == 5+1. yes ?5+1 = = 1+5. no 18

Built-in logical predicates ?X= ali. X=ali ?X= 1/2. X=1/2 ? f(X)= f(ali). X=ali ?f = g. no 19

Built-in logical predicates ?5 \= 4. yes ?ahmad @ { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/13/4168466/slides/slide_20.jpg", "name": "Built-in logical predicates 5 \= 4. yes ahmad @

Built-in logical predicates ? X is 1+2. X=3 ? X is 4*2. X=8 ?X is 7//3. X=2 ? X is 5, X is 3+3. no 21

Mathematical operations +Addition -Subtraction *Multiplication /Real division //Integer division modmodulus ^Exponent 22

Negation as failure home(X):-not out(X). out(ali). ?home(ali). no ?home(X). no ?home(zaki). yes ?out(zaki). no 23

Horn Clauses P1 ^ P2 ^ P3 ^ P4  R R:- P1, P2, P3, P4. 24

Recursion A program that calls itself Assume the following relations and attempt to find predecessor parent(ali,ahmad). parent(ahmad,fatema). parent(fatema,osama). 25

Recursion A non recursion version predecessor(X,Y):- parent (X,Y). predecessor(X,Y):- parent (X,Z), parent(Z,Y). predecessor(X,Y):- parent (X,Z1), parent (Z1,Z2), parent(Z2,Y). The above program is applicable to a limited number of generations. 26

Recursion Recursion version predecessor(X,Y):- parent (X,Y). predecessor(X,Y):- parent (X,Z), predecessor(Z,Y). 27

Recursion ? predecessor(ali,ahmad). yes ? predecessor(ali,fatema). yes ? predecessor(ali,osama). yes. ? predecessor(ali,X). X=ahmad 28

Recursion Factorial 29

Recursion Factorial fact(0,1). fact(N,X):- N>0, N1 is N-1, fact(N1,X1), X is N*X1. ?fact(0,X). X=1. ?fact(1,X). X=1 30

Recursion HW: Write a program to calculate the sum of the numbers: 1, 2, 3,..., N 31

List Processing Empty lists are denoted as [] [H | T] list of : –head H representing the first element. –tail T represents the rest of the elements. –[5, 2, 7, 10] H is 5, T is [2, 7, 10] 32

List Processing ?[H | T]=[5, 2, 7, 10]. H=5 T=[2, 7, 10] ?[a,b,c,d]=[X,Y | T]. X=a Y=b T=[c, d] 33

List Processing ?[H | T]=[ali]. H=ali T=[] ?[H | T]=[]. no 34

List Processing - membership Test for a membership in a list member(X,[X | T]). member(X,[ _ | T]):- member(X,T). ?member(5,[5, 7]). yes ?member(5,[1, 5]). yes 35

List Processing - membership To get all members of a list you can use: ?member(X,[a,b,c,d]). X=a; X=b; X=c; X=d; no 36

List Processing - count To count how many members in a list count([],0). count([X | T],C):- count(T,C1), C is C1+1. ?count([2,4,7],C). C=3 37

List Processing - sum To calculate the sum of the elements in a list sum([],0). sum([X | T],S):- sum(T, S1), S is S1+X. ?sum([2,4,7],S). S=13 38

List Processing - append To append two lists and produce a list containing the elements of the first list then the elements of the second list append([], L, L). append([H | T1], L, [H | T]): append(T1, L, T). 39

List Processing - append ?append([r,t],[a,b,c],L). L=[r,t,a,b,c]. ?append(L1,L2,[a,b,c]). L1=[] L2=[a,b,c]; L1=[a] L2=[b,c]; L1=[a,b] L2=[c]; L1=[a,b,c] L2=[]; no 40

List Processing - split To divide a list into two parts positive and negative positive([],[],[]). positive([X|Y],[X|L1], L2) :- X >= 0, positive(Y,L1, L2). positive([X|Y],L1, [X|L2]) :- positive(Y,L1, L2). 41

List Processing – write elements To print the elements of a list write_a_list([]). write_a_list([H|T]):- write(H), nl, write_a_list(T). ? write_a_list([5, 6, 7]). 5 6 7 42

Cut operator To find a maximum of two numbers, you might write: max(X,Y,X):- X>=Y. max(X,Y,Y). ?max(5,3,M). M=5; M=3; no 43

Cut operator To find a maximum of two numbers, you might write: max(X,Y,X):- X>=Y,!. max(X,Y,Y). ?max(5,3,M). M=5; no 44

Cut operator Add an element to a list only if that element does not exist already in the list add(X, L, L):- member(X,L), !. add(X, L, [X|L]). 45

Self test list exercises 1.Calculate the max/min value in a list. ? min_in_list([5,7,3,7,9], A). A=3 ? max_in_list([8,4,9,4],X). X=9 46

Self test list exercises 2.Calculate how many times a specific number appears in a list. 3.Take a list as input and return its reverse in another list. 4.Take two lists as input and return their union, intersection, and difference in another list. 5.Delete one number from a list. 47

Homework 1.Write a program to calculate the absolute value of X, absval(X,Y) where X is the input and Y is the output. 2.Write a program to define the even(X) which is true only if X is even. 3.Write a program write_reverse to print the elements of a list in a reverse order 4.Write a program that simulates repeat assuming repeat does not exist. 48

PROLOG Self test examples ?concatenate([2, 3, 5], [7, 9, 5], B). B=[2, 3, 5, 7, 9, 5] ?order([2, 8, 3, 5], B). B=[2, 3, 5, 8] 49

The fail predicate country(jordan). country(egypt). country(england). print_countries:- country(X), write(X), nl, fail. print_countries. 50

The fail predicate ?print_countries. jordan egypt england yes 51

The repeat command do:- repeat, read(X), square(X). do. square(stop):-!. square(X):- Y is X*X, write(Y), nl, fail. 52

The repeat command ?do. 5. 25 6. 36 stop. yes 53

The repeat command do:- read(X), square(X). square(stop). square(X):- X\==stop, Y is X*X, write(Y), nl, do. 54

Input / output procedures - write ?X=5, write(X). 5 yes ?write([a,b,5,6]). [a,b,5,6] yes 55

Input / output procedures - write ?write(date(16,11,2008)). date(16,11,2008) yes 56

Dynamic programs Programs that are able to modify themselves. Modification means the ability to add/ remove facts at runtime. Such procedures include: –assert(C) –retract(C) –abolish(C) 58

Dynamic programs - assert assert(C) ?parent(zaid, faris). no ?assert(parent(zaid, faris)). yes ?parent(zaid, faris). yes 59

Dynamic programs - assert asserta(C) adds the new statement C to the beginning of the program. assertz(C) adds the new statement C to the end of the program. 60

Dynamic programs - retract retract removes a statement from the program ?retract(parent(zaid, faris)). yes ?parent(zaid, faris). no 61

Dynamic programs - abolish ?abolish(parent,2). yes removes all statements defined as parent with arity 2. 62

Structures employee(Name,House_no,Street_name,City_name, Day,Month,Year). employee(ali,5,salt_street,amman,12,10,1980). ?employee(ali,No,S,C,D,M,Y). No=5 S=salt_street C=amman D=12 M=10 Y=1980 63

Structures ?employee(Name,A,date(_,_,1985)). Name=hasan A=address(12,university_street,zarqa); no ?employee(ali,A,date(Day, Month, Year)), 2011- Year>25. A=address(5,salt_street,amman) Day=12 Month=10 Year=1980; no 65

Structures – Binary Trees 66 2 5 10 7 9 3 b a c a Example 3 Example 2 Example 1

Structures – Binary Trees Binary trees when empty are called nil. It may contain 3 components: –Left subtree –Root –Right subtree It can be represented using the following structure: bin_tree(Left_subtree, Root, Right_subtree). 67

Structures – Binary Trees bin_tree(nil,a,nil). 68 a Example 1

Structures – Binary Trees bin_tree(bin_tree(nil,b,nil),a, bin_tree(nil,c,nil)). 69 Example 2 b a c

Structures – Binary Trees bin_tree(bin_tree(nil,2,nil),5, bin_tree(bin_tree(nil,7,nil),10, bin_tree(nil,9, bin_tree(nil,3,nil)))). 70 Example 3 2 5 10 7 9 3

Structures – Binary Trees - Count count(nil,0). count(bin_tree(Left,Root,Right),C):- count(Left,C1), count(Right,C2), C is C1+C2+1. 71

Structures – Binary Trees – Count V2 count(nil,0). count(bin_tree(Left, _,Right),C):- count(Left,C1), count(Right,C2), C is C1+C2+1. 72

Structures – Binary Trees - Sum sum(nil,0). sum(bin_tree(Left,Root,Right),S):- sum(Left,S1), sum(Right,S2), S is S1+S2+Root. 73

Structures – Binary Trees - depth depth(nil,0). depth(bin_tree(Left,Root,Right),D):- depth(Left,D1), depth(Right,D2), D1>=D2, D is D1+1. depth(bin_tree(Left,Root,Right),D):- depth(Left,D1), depth(Right,D2), D2>D1, D is D2+1. 74

Structures – Binary Trees – depth V2 depth(nil,0). depth(bin_tree(Left,Root,Right),D):- depth(Left,D1), depth(Right,D2), max(D1,D2,M), D is M+1. max(X,Y,X):- X>=Y,!. max(X,Y,Y):- X { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/13/4168466/slides/slide_75.jpg", "name": "Structures – Binary Trees – depth V2 depth(nil,0).", "description": "depth(bin_tree(Left,Root,Right),D):- depth(Left,D1), depth(Right,D2), max(D1,D2,M), D is M+1. max(X,Y,X):- X>=Y,!. max(X,Y,Y):- X

Binary Tree - Hw Write a PROLOG program max_tree to find the maximum value in a binary tree (bin_tree) assuming all values are numeric. Write a PROLOG program to add a new value to an ordered binary tree. Write a PROLOG program to display the values stored in an ordered binary tree in ascending order. 76

PROLOG Resources http://en.wikibooks.org/wiki/Prolog/Lists http://www.csupomona.edu/~jrfisher/www/pr olog_tutorial/2_7.html 77

Download ppt "George F Luger ARTIFICIAL INTELLIGENCE 5th edition Structures and Strategies for Complex Problem Solving Programming in Logic (PROLOG) Luger: Artificial."

Similar presentations