160 likes | 567 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.
E N D
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 • 2nd order: Can’t ask what is relationship between heart and lungs? • Probabilities: What is likelihood of fire destroying Julian?