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.

Download Report

Transcript 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.

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].
variable
– X= [_G11,3| _].
% _G.., system generated
% 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
• 2nd order: Can’t ask what is relationship
between heart and lungs?
• Probabilities: What is likelihood of fire
destroying Julian?