Logic Programming Lecture 8: Term manipulation Meta-programming.
-
Upload
isabel-hines -
Category
Documents
-
view
235 -
download
0
description
Transcript of Logic Programming Lecture 8: Term manipulation Meta-programming.
![Page 1: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/1.jpg)
Logic Programming
Lecture 8: Term manipulation & Meta-programming
![Page 2: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/2.jpg)
James Cheney Logic Programming November 10, 2014
Outline for today•Special predicates for examining &
manipulating terms• var, nonvar, functor, arg, =..
•Meta-programming• call/1
• Symbolic programming• Prolog self-interpretation
![Page 3: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/3.jpg)
James Cheney Logic Programming November 10, 2014
var/1 and nonvar/1
•var(X) holds•var(a) does not hold•nonvar(X) does not hold•nonvar(a) holds• (tutorial questions...)
•None of these affects binding
![Page 4: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/4.jpg)
James Cheney Logic Programming November 10, 2014
Other term structure predicates
nonvar/1nonvar/1
atomic/1atomic/1
atom/1atom/1
a,b,ac,a,b,ac,......
number/1number/1
integer/1integer/1...,-1,0,1,2,3......,-1,0,1,2,3...
float/1float/10.1,10.42,...0.1,10.42,...
f(X,a)
[]
![Page 5: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/5.jpg)
James Cheney Logic Programming November 10, 2014
Structural equality•The ==/2 operator tests whether two
terms are exactly identical • Including variable names! (No unification!)
?- X == X.
yes
?- X == Y.
no
![Page 6: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/6.jpg)
James Cheney Logic Programming November 10, 2014
Structural comparison
•\==/2: tests that two terms are not identical
?- X \== X.
no
?- X \== Y.
yes
![Page 7: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/7.jpg)
James Cheney Logic Programming November 10, 2014
From last week:Breadth-first search
• Keep track of all possible solutions, try shortest ones first• Maintain a "queue" of solutions
bfs([[Node|Path],_], [Node|Path]) :-
goal(Node).
bfs([Path|Paths], S) :-
extend(Path,NewPaths),
append(Paths,NewPaths,Paths1),
bfs(Paths1,S).
bfs_start(N,P) :- bfs([[N]],P).
![Page 8: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/8.jpg)
James Cheney Logic Programming November 10, 2014
\== means \== means "not equal as "not equal as
term"term"
A difference list implementation
bfs_dl([[Node|Path]|_], _, [Node|Path]) :-
goal(Node).
bfs_dl([Path|Paths], Z, Solution) :-
extend(Path,NewPaths),
append(NewPaths,Z1,Z),
Paths \== Z1, %% (Paths,Z1) is not empty DL
bfs_dl(Paths,Z1,Solution).
bfs_dl_start(N,P) :- bfs_dl([[N]|X],X,P).
![Page 9: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/9.jpg)
James Cheney Logic Programming November 10, 2014
functor/3• Takes a term T, gives back the atom and
arity?- functor(a,F,N).
F = a
N = 0
?- functor(f(a,b),F,N).
F = f
N = 2
![Page 10: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/10.jpg)
James Cheney Logic Programming November 10, 2014
arg/3•Given a number N and a complex term T
•Produce the Nth argument of T?- arg(1,f(a,b),X).
X = a
?- arg(2,f(a,b),X).
X = b
![Page 11: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/11.jpg)
James Cheney Logic Programming November 10, 2014
=../2 ("univ")•We can convert between terms and
"universal" representation?- f(a,f(b,c)) =.. X.
X = [f,a,f(b,c)]
?- F =.. [g,a,f(b,c)].
F = g(a,f(b,c))
![Page 12: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/12.jpg)
James Cheney Logic Programming November 10, 2014
Variables as goals•Suppose we doX = append([1],[2],Y), X.
•What happens? (In Sicstus at least...)Y = [1,2]
•Clearly, this behavior is nonlogical• i.e. this does not work:X, X = append([1],[2],Y).
![Page 13: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/13.jpg)
James Cheney Logic Programming November 10, 2014
call/1•Given a Prolog term G, solve it as a goal?- call(append([1],[2],X)).
X = [1,2].
?- read(X), call(X).
|: member(Y,[1,2]).
X = member(1,[1,2])
• A variable goal X is implicitly treated as call(X)
![Page 14: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/14.jpg)
James Cheney Logic Programming November 10, 2014
Call + =..• Can do some evil things...callwith(P,Args)
:- Atom =.. [P|Args], call(Atom).
map(P,[],[]).
map(P,[X|Xs],[Y|Ys])
:- callwith(P,[X,Y]), map(P,Xs,Ys)
plusone(N,M) :- M is N+1.
?- map(plusone,[1,2,3,4,5],L).
L = [2,3,4,5,6].
![Page 15: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/15.jpg)
James Cheney Logic Programming November 10, 2014
Symbolic programming
• Logical formulasprop(true).
prop(false).
prop(and(P,Q)) :- prop(P), prop(Q).
prop(or(P,Q)) :- prop(P), prop(Q).
prop(imp(P,Q)) :- prop(P), prop(Q).
prop(not(P)) :- prop(P).
![Page 16: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/16.jpg)
James Cheney Logic Programming November 10, 2014
Formula simplification
simp(and(true,P),P).
simp(or(false,P),P).
simp(imp(P,false), not(P)).
simp(imp(true,P), P).
simp(and(P,Q), and(P1,Q)) :-
simp(P,P1).
...
![Page 17: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/17.jpg)
James Cheney Logic Programming November 10, 2014
Satisfiability checking
• Given a formula, find a satisfying assignment for the atoms in it
• Assume atoms given [p1,...,pn].
• A valuation is a list [(p1,true|false),...]
gen([],[]).
gen([P|Ps], [(P,V)|PVs]) :-
(V=true;V=false),
gen(Ps,PVs).
![Page 18: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/18.jpg)
James Cheney Logic Programming November 10, 2014
Evaluationsat(V,true).
sat(V,and(P,Q)) :- sat(V,P), sat(V,Q).
sat(V,or(P,Q)) :- sat(V,P) ; sat(V,Q).
sat(V,imp(P,Q)) :- \+(sat(V,P))
; sat(V,Q).
sat(V,not(P)) :- \+(sat(V,P)).
sat(V,P) :- atom(P),
member((P,true),V).
![Page 19: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/19.jpg)
James Cheney Logic Programming November 10, 2014
Satisfiability•Generate a valuation•Test whether it satisfies Qsatisfy(Ps,Q,V) :- gen(Ps,V),
sat(V,Q).
•(On failure, backtrack & try another valuation)
![Page 20: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/20.jpg)
James Cheney Logic Programming November 10, 2014
Prolog in Prolog• Represent definite clausesrule(Head,[Body,....,Body]).
• A Prolog interpreter in Prolog:prolog(Goal) :- rule(Goal,Body),
prologs(Body)
prologs([]).
prologs([Goal|Goals]) :- prolog(Goal),
prologs(Goals).
![Page 21: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/21.jpg)
James Cheney Logic Programming November 10, 2014
Examplerule(p(X,Y), [q(X), r(Y)]).
rule(q(1)).
rule(r(2)).
rule(r(3)).
?- prolog(p(X,Y)).
X = 1
Y = 2
![Page 22: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/22.jpg)
James Cheney Logic Programming November 10, 2014
OK, but so what?•Prolog interpreter already runs
programs...•Self-interpretation is interesting
because we can examine or modify behavior of interpreter.
![Page 23: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/23.jpg)
James Cheney Logic Programming November 10, 2014
Rules with "justifications"
rule_pf(p(1,2), [], rule1).
rule_pf(p(X,Y), [q(X), r(Y)],
rule2(X,Y)).
rule_pf(q(1),[],rule3).
rule_pf(r(2),[],rule4).
rule_pf(r(3),[],rule5).
![Page 24: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/24.jpg)
James Cheney Logic Programming November 10, 2014
Witnesses• Produce proof trees showing which rules were
usedprolog_pf(Goal,[Tag|Proof]) :-
rule_pf(Goal,Body,Tag),
prologs_pf(Body,Proof).
prologs_pf([],[]).
prologs_pf([Goal|Goals],[Proof|Proofs]) :-
prolog_pf(Goal,Proof),
prologs_pf(Goals,Proofs).
![Page 25: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/25.jpg)
James Cheney Logic Programming November 10, 2014
Witnesses•"Is there a proof of p(1,2) that
doesn't use rule 1?"?- prolog_pf(p(1,2),Prf),
\+(member(rule1,Prf)).
Prf = [rule2,[rule3, rule4]].
![Page 26: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/26.jpg)
James Cheney Logic Programming November 10, 2014
Other applications•Tracing•Can implement trace/1 this way
•Declarative debugging•Given an error in output, "zoom in"
on input rules that were used•These are likely to be the ones with
problems
![Page 27: Logic Programming Lecture 8: Term manipulation Meta-programming.](https://reader035.fdocuments.us/reader035/viewer/2022062302/5a4d1b727f8b9ab0599b59e8/html5/thumbnails/27.jpg)
James Cheney Logic Programming November 10, 2014
•Further reading:• LPN, ch. 9•Bratko, ch. 23
•Next time•Constraint logic programming•Course review