# Prolog

AI and Robotics

Oct 24, 2013 (4 years and 6 months ago)

82 views

Prolog

The language of logic

History

Kowalski: late 60’s Logician who showed
logical proof can support computation.

Colmerauer: early 70’s Developed early
version of Prolog for natural language
processing, mainly multiple parses.

Warren: mid 70’s First version of Prolog
that was efficient.

Characteristics

Prolog approximates first
-
order logic.

Every program is a set of Horn clauses.

Inference is by resolution.

Search is by backtracking with unification.

Basic data structure is term or tree.

Variables are unknowns not locations.

Prolog does not distinguish between inputs
and outputs. It solves relations/predicates.

SWI
-
Prolog Notes

To load a file:

consult( ‘C:
\
\
kibler
\
\
prolog
\
\
test’).

For help:

help(predicate
-
name).

“ ; “ will give you next solution.

listing(member) will give definition.

Example

Facts: ()

likes(john,mary).

likes(john,X). % Variables begin with capital

Queries

?
-

likes(X,Y).

X=john, y=Mary. % hit “;” for more

?
-

likes(X,X).

X=john.

Example

Rules

likes(john,X) :
-

likes(X,wine). % :
-

= if

likes(john,X):
-

female(X), likes(X,john).

Note: variables are dummy. Standarized apart

Some Facts:

likes(bill,wine). female(mary). female(sue).

Query: ?
-

likes(john,Y).

Y = bill ;

no.

Family

father(a,b).

father(e,d).

mother(c,b).

mother(d,f).

parent(X,Y) :
-

father(X,Y).

parent(X,Y) :
-

mother(X,Y).

grandfather(X,Y):
-

father(X,Z),parent(Z,Y).

% Do your own for practice.

Informal Summary

Program is facts + rules. (horn clauses).

Query = conjunct of predicates.

First set of bindings for variables that solve
query are reported. If none, then Prolog
returns no.

Use “;” to get other solutions.

Can be viewed as constraint satisfaction
program.

MapColoring

color(r). color(g). color(b).

colormap(C1,C2,C3):
-
color(C1),color(C2),color(C3), C1
\
==C2,

C1
\
==C3, C2
\
==C3.

Query: colormap(X,Y,Z).

X = r, Y= g, Z=b.

Is that it. Yes! Turn on trace.

Unification: (matching) terms

Two terms UNIFY if there is a common
substitution for all variables which makes them
identical.

f(g(X),Y) = f(Z,Z). % = cheap unification

X = _G225, Y=g(_G225).

Look at parse tree for each term.

variables match

variable matches anything (set the binding)

function symbols only match identical function
symbols.

Satisfiability: uses unification

sat(true). % base case

sat(not(false)). % base case

sat(or(X,Y)):
-

sat(X).

sat(or(X,Y)):
-
sat(Y).

sat(and(X,Y)):
-
sat(X),sat(Y).

test1(X,Y):
-

sat(and(not(X),X)).

test2(X,Y):
-

sat(and(X,not(Y))).

List Operator [H |T]

[a,b,c] is a list in Prolog.

[H|T] = [a,b,c] results in

H = a i.e. the head of list

T = [b,c] i.e. the tail of the list.

membership definition

member(H,[H|T]). % base case first. Why?

member(H,[_|T]):
-

member(H,T).

Use it.

Member Tests

?
-

member(3,X).

X = [3| _G109]. % _G.., system generated
variable

X= [_G11,3| _]. % etc.

?
-

member(X,Y).

X = _G131, Y= [_G131|, _G321].

Permutation & Insert

insert(X,L, [X|L]).

insert(X,[H|T],[H|T1]):
-

insert(X,T,T1).

perm([],[]).

perm([H|T],P):
-
perm(T,T1),insert(H,T1,P).

DFS

% solve(goal, solution Path)

% s(state, successor
-
state)

dfs(N,[N]) :
-

goal(N).

dfs(N,[N|Sol1]):
-

s(N,N1), dfs(N1,Sol1).

s(a,b). s(a,c). s(b,d). s(b,e). s(c,f).

s(c,g). s(d,h). s(e,i). s(e,j). s(f,k).

goal(i). goal(f).

?
-

dfs(a,N).

N = [a, b, e, i] ;

N = [a, c, f] ;

Limitations

2
nd

order: Can’t ask what is relationship
between heart and lungs?

Probabilities: What is likelihood of fire
destroying Julian?