Prolog

blabbingunequaledAI and Robotics

Oct 24, 2013 (3 years and 11 months ago)

76 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


Free! Down Loadable


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?