200 likes | 360 Views
COMP313A Programming Languages. Logic Programming (1). Lecture Outline. Conceptual foundations of Logic Programming The Basics of Logic Programming Predicate Calculus A little bit of logic programming Prolog. Conceptual Foundations. What versus how specification versus implementation
E N D
COMP313A Programming Languages Logic Programming (1)
Lecture Outline • Conceptual foundations of Logic Programming • The Basics of Logic Programming • Predicate Calculus • A little bit of logic programming • Prolog
Conceptual Foundations • What versus how • specification versus implementation • Declarative Programming • Programmer declares the logical properties that describe the property to be solved • From this a solution is inferred • Inference engine
An example Searching for an element in a list Predicate is_in(x,L) true whenever element x is in the list L. For all elements x and lists L: is_in(x,L) IFF L = [x] or L = L1 . L2 and (is_in (x,L1) or is_in(x, L2))
Example continuedImplementation • Need to know how to split a list into right and left sublists • How to order the elements stored in the list
A solution in C++ int binary_search(const int val, const int size, const int array[]){ int high, low, mid; if size <= 0{ return (-1); } high = size; low = 0; for(;;) { mid = (high + low) / 2; if (mid = low){ return (val != array[low]) ?-1:mid; } if (val < array[mid]) { high = mid; } else if (val > array[mid]) { low = mid; } else return mid }}}
A Declarative Solution • Given an element x and a list L, to prove that x is in L, • proceed as follows: • Prove that L is [x] • Otherwise split L into L1 . L2 and prove one of the following • (2.1) x is in L1, or • (2.2) x is in L2
A sorting example A predicate sort(X,Y) Sort(X,Y) is true if the nonempty list Y is the sorted version of X Use two auxiliary predicates: permutation(X,Y) and is_sorted(Y) For all integer lists X,Y: sort(X,Y) iff permutation(X,Y) and sorted(Y)
Logic and Logic Programming • First-order predicate calculus • Logic statements Examples John is a man. man(John). John is a human. human(John). Tristan is the son of Margaret. son(Margaret,Tristan). A horse is a mammal. loathes(Margaret, Heavy_Metal). 0 is a natural number . natural(0). Mammals have four legs and no arms or two legs and two arms. For all X, mammal (x) -> legs(x,4) and arms(x,0) or legs(x,2) and arms(x,2). Humans have two legs and two arms. For all X, human(x) -> legs(x,2) and arms(x,2). If x is a natural number then so is the successor of x. For all x, natural(x) -> natural(successor(x)).
First-Order Predicate Calculus • Constants • Predicates • Functions • Variables that stand for as yet unamed quantities • Atomic sentences • Connectives construct more complex sentences • Quantifiers • Punctuation • Arguments to predicates can only be terms – variables, constants and functions
First-Order Predicate Calculus cont… • Quanitifiers • Universal, existential • Express properties of entire collections of objects • Universal quantifiers make statements about every object, "x A cat is a mammal "x Cat(x) ÞMammal(x) Cat(Spot) Þ Mammal(Spot) Ù Cat(Rebecca) Þ Mammal(Rebecca) Ù Cat(Felix) Þ Mammal(Felix) Ù Cat(Richard) Þ Mammal(Richard) Ù Cat(John) Þ Mammal(John) Ù …
First-Order Predicate Calculus cont… • Existential Quantifiers make statements about some objects, $x Spot has a sister who is a cat $x Sister(x, Spot) Ù Cat(x) (Sister(Spot, Spot) Ù Cat(Spot)) Ú (Sister(Rebecca, Spot) Ù Cat(Rebecca)) Ú (Sister(Felix, Spot) Ù Cat(Felix)) Ú (Sister(Richard, Spot) Ù Cat(Richard)) Ú (Sister(John, Spot) Ù Cat(John)) Ú …
First-Order Predicate Calculus cont… • Connections between $and " • Negation Everyone dislikes rugbyº Noone likes rugby "x ØLikes (x, rugby) ºØ$x Likes(x, rugby) Everyone likes icecream º Noone dislikes icecream "x Likes (x, icecream) ºØ$x ØLikes(x, icecream)
First-Order Predicate Calculus cont… • " is a conjunction over the universe of objects • $Is a disjunction over the universe of objects "x ØP ºØ$x P Ø "x P º$x ØP "x P ºØ$x ØP Ø "x ØP º$x P
De Morgan’s Laws ØPÙØQ º (PÚQ) Ø(PÙQ) ºØPÚØQ PÙQ ºØ(ØPÚØQ) Ø(ØPÙØQ) º PÚ Q
Using First-Order Predicate Calculus • Marcus was a man • Marcus was a Pompeian • All Pompeians were Romans • Caesar was a ruler • All Romans were either loyal to Caesar or hated him
Everyone is loyal to someone • People only try to assassinate rulers they are not loyal to • Marcus tried to assassinate Caesar Was Marcus loyal to Caesar? Prove Ø loyalto(Marcus, Caesar)
Turn the following sentences into formulae in first order predicate logic • John likes all kinds of food • Apples are food • Chicken is food • Anything anyone eats and isn’t killed by is food • Bill eats peanuts and is still alive • Sue eats everything Bill eats • Prove that John likes peanuts using backward chaining
A little bit of Prolog • Objects and relations between objects • Facts and rules parent(pam, bob). parent(tom,bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat, jim). ? parent(bob, pat). ? parent(bob, liz). ? parent(bob, ben). ? parent(bob, X). ? parent(X, Y).
Prolog grandparent (X,Y) :- parent(X, Z), parent(Z, Y). For all X and Y X is the grandparent of Y if X is a parent of Z and Z is a parent of Y sister (X,Y) :- parent(Z, X), parent(Z, Y), female(X) For all X and Y X is the sister of Y if Z is the parent of both X and Y and X is a female