COMP313A Programming Languages

1 / 20

COMP313A Programming Languages - PowerPoint PPT Presentation

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

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

PowerPoint Slideshow about 'COMP313A Programming Languages' - Roberta

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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