860 likes | 1.06k Views
Logic Programming in Prolog. Lecturer: Dr. Abeer Mahmoud. acknowledgement. Patrick Blackburn, Johan Bos & Kristina Striegnitz (lecture notes on logic programming in prolog). Lecture 3. Quiz. Define the predicate parent_of Sibling (person have the same parent) Grandparent_of
E N D
Logic Programming in Prolog Lecturer: Dr. Abeer Mahmoud
acknowledgement Patrick Blackburn, Johan Bos & Kristina Striegnitz (lecture notes on logic programming in prolog)
Quiz Define the predicate parent_of Sibling (person have the same parent) Grandparent_of Greatgrandparent_of
exercise • Convert the following paragraph into fact or rule: • 1. a person may be a smart buyer for something if the person is a smart and he likes the thing and the thing is valuable and the thing has a discount. • 2. Bob likes all kind of game. Football is a game. Anything anyone plays and not killed by is a game.
smart(ahmed). smart(nada). smart(noha). smart(islam). discount(books). discount(perfumes). a person may be a smart buyer for something if the person is a smart and he likes the thing and the thing is valuable and the thing has a discount. Smart-buyer(X,Y):-smart(X),likes(X,Y),valuable(Y), discount(Y). likes(ahmed, leather-jackets). likes(ahmed, sun-glasses). likes(soha,sun-glasses). likes(islam,books). likes(nada, perfume). valuable(gold). valuable(books). valuable(leather-jackets).
plays(player1,football). plays(player2,tennis). plays(player3,handball). plays(player4,car-racing). Bob likes all kind of game. Football is a game. Anything anyone plays and not killed by is a game. not-killed(football). not-killed(tennis). not-killed(handball). likes(‘Bob’, X):-game(X). game(Anything):- plays(_,Anything),not-killed(Anything)
Prolog Syntax • What exactly are facts, rules and queries built out of? Terms Terms Simple Terms Simple Terms Complex Terms Complex Terms Constants Constants Variables Variables Atoms Atoms Numbers Numbers
Atoms • A sequence of characters of upper-case letters, lower-case letters, digits, or underscore, starting with a lowercase letter • Examples: butch, big_kahuna_burger, playGuitar • An arbitrary sequence of characters enclosed in single quotes • Examples: 'Vincent', 'Five dollar shake', '@$%' • A sequence of special characters • Examples: : , ; . :-
Numbers • Integers: 12, -34, 22342 • Floats: 34573.3234
Variables • If we want to get more interest information about fact or rule, we can use variable to get more than Yes/No answer. • A sequence of characters of upper-case letters, lower-case letters, digits, or underscore, starting with either an uppercase letter or an underscore • Examples: X, Y, Variable, Vincent, _tag
Variables • variable name must begin with capital letter. • *using variable we can get all possible answer about a particular fact or rule.
Variables Always begin with a capital letter ?-likes (john,X). ?- likes (john, Something). But not ?- likes (john,something)
Example of usage of variable Facts: likes(john,flowers). likes(john,mary). likes(paul,mary). Question: ?- likes(john,X) Answer: X=flowers and wait ; mary ; no
Complex Terms • Atoms, numbers and variables are building blocks for complex terms • Complex terms are built out of a functor directly followed by a sequence of arguments • Arguments are put in round brackets, separated by commas
Complex terms are of the form: functor (argument, ..., argument). • Functors have to be atoms. • Arguments can be any kind of Prolog term, e.g., complex terms. date April 13 1988 date(“Aprile”,13,1988)
Examples of complex terms • Examples we have seen before: • playsAirGuitar(jody) • loves(vincent, mia) • jealous(marsellus, W)
Arity • The number of arguments a complex term has is called its arity • Examples:woman(mia) is a term with arity 1loves(vincent,mia) has arity 2father(father(butch)) arity 1
Arity is important • In Prolog you can define two predicates with the same functor but with different arity • Prolog would treat this as two different predicates • In Prolog documentation arity of a predicate is usually indicated with the suffix "/" followed by a number to indicate the arity
Example of Arity • This knowledge base defines • happy/1 • listens2music/1 • playsAirGuitar/1 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsAirGuitar(mia):- listens2music(mia). playsAirGuitar(yolanda):- listens2music(yolanda).
summary data type Prolog supports the following data type to define program entries. • Integer: to define numerical value like 1, 20, 0,-3,-50, ect. • Real: to define the decimal value like 2.4, 3.0, 5,-2.67, ect. • Char: to define single character, the character can be of type small letter or capital letter or even of type integer under one condition it must be surrounded by single quota. For example, ‘a’,’C’,’123’. • string : to define a sequence of character like “good” i.e define word or statement entries the string must be surrounded by double quota for example “computer”, “134”, “a”. The string can be of any length and type. • Symbol: anther type of data type to define single character or sequence of character but it must begin with small letter and don’t surround with single quota or double quota.
summary program structure Prolog program structure consists of five segments, not all of them must appear in each program. The following segment must be included in each program predicates, clauses, and goal. • Domains: define global parameter used in the program. I= integer C= char S = string R = real • Data base: define internal data base generated by the program Database Greater (integer) • Predicates: define rule and fact used in the program. Mark(symbol,integer).
summary program structure Prolog program structure consists of five segments, not all of them must appear in each program. The following segment must be included in each program predicates, clauses, and goal. 4. Clauses: define the body of the program.. For the above predicates the clauses portion may contain Mark (a, 20). 5.Goal: can be internal or external, internal goal written after clauses portion , external goal supported by the prolog compiler if the program syntax is correct
summary mathematical and logical operation
summary Other mathematical function
summary Read and write function
Example write prolog program to read integer value and print it.
Example write prolog program that take two integer input us integer and print the greater.
assignment • write prolog program that read any phrase then print it. • write prolog program that read an integer number then print it after multiplying it by 5.
Discuss unification in Prolog • Show how Prolog unification differs from standard unification • Explain the search strategy that Prolog uses when it tries to deduce new information from old, using modus ponens
Unification • Recall previous example, where we said that Prolog unifieswoman(X)withwoman(mia)thereby instantiating the variable X with the atom mia.
Unification • Working definition: • Two terms unify if they are the same term or • if they contain variables that can be uniformly instantiated with terms in such a way that the resulting terms are equal
Unification • This means that: • mia and mia unify • 42 and 42 unify • woman(mia) and woman(mia) unify • This also means that: • vincent and mia do not unify • woman(mia) and woman(jody) do not unify
Unification • What about the terms: • mia and X
Unification • What about the terms: • mia and X • woman(Z) and woman(mia)
Unification • What about the terms: • mia and X • woman(Z) and woman(mia) • loves(mia,X) and loves(X,vincent)
Instantiations • When Prolog unifies two terms it performs all the necessary instantiations, so that the terms are equal afterwards • This makes unification a powerful programming mechanism demonstrated through the use of evidence, supported with an example; specifically defined object through the replacement of some variables with values (Computer Programming)
Revised Definition • If T1 and T2 are constants, then T1 and T2 unify if they are the same atom, or the same number.
Revised Definition • If T1 and T2 are constants, then T1 and T2 unify if they are the same atom, or the same number. • If T1 is a variable and T2 is any type of term, then T1 and T2 unify, and T1 is instantiated to T2. (and vice versa)
Revised Definition • If T1 and T2 are constants, then T1 and T2 unify if they are the same atom, or the same number. • If T1 is a variable and T2 is any type of term, then T1 and T2 unify, and T1 is instantiated to T2. (and vice versa) • If T1 and T2 are complex terms then they unify if: • They have the same functor and arity, and • all their corresponding arguments unify, and • the variable instantiations are compatible.
Prolog unification ?- mia = mia. yes ?-
Prolog unification ?- mia = mia. yes ?- mia = vincent. no ?-
Prolog unification ?- mia = X. X=mia yes ?-
How will Prolog respond? ?- X=mia, X=vincent.
How will Prolog respond? ?- X=mia, X=vincent. no ?- Why? After working through the first goal, Prolog has instantiated X with mia, so that it cannot unify it with vincent anymore. Hence the second goal fails.
Example with complex terms ?- k(s(g),Y) = k(X,t(k)).
Example with complex terms ?- k(s(g),Y) = k(X,t(k)). X=s(g) Y=t(k) yes ?-
Example with complex terms ?- k(s(g),t(k)) = k(X,t(Y)).
Example with complex terms ?- k(s(g),t(k)) = k(X,t(Y)). X=s(g) Y=k yes ?-
book(“prolog”,”A.I”,”Gourge”,10,2000). book(“c++”,”programming”,”Rintice Hill”,5,2001). book(“Expert system”,”A.I”,”Daniel”,5,1994). book1(X,Y,A,b,C). book(A,B,C,D)