Post on 16-Mar-2016
description
cs774 (Prasad) L6Backtracking 1
Controlling Backtracking : Cuts
t.k.prasad@wright.eduhttp://www.knoesis.org/tkprasad/
Motivation• Efficiency by preventing needless
backtracking– Cf. CFL Parsing
• Lookaheads vs Backtracking vs Dynamic programming
• Avoiding duplicates or resatisfaction• Prolog as programming language
– Tailoring control strategy
cs774 (Prasad) L6Backtracking 2
Efficiency Cut • Preventing backtracking when faced with
mutually disjoint cases
sign(X, positive) :- X > 0.sign(X, negative) :- X < 0.sign(X, zero).
cs774 (Prasad) L6Backtracking 3
(cont’d)• Good use of cut if declarative reading
preserved• In general, reordering of clauses may not preserve
the declarative meaning.
sign(X, positive) :- X > 0, !.sign(X, negative) :- X < 0, !.sign(X, zero).
cs774 (Prasad) L6Backtracking 4
Green Cut vs Red Cut
• A use of a cut which improves only efficiency of a program, without altering its declarative meaning, is referred to as a green cut.
– In practice, prunes away irrelevant proofs, or proofs bound to fail.
– In practice, use them when mutually exclusive cases occur, or if non-determinism can be minimized.
cs774 (Prasad) L6Backtracking 5
Green Cut vs Red Cut• A use of a cut that alters the declarative meaning
of a program is referred to as a red cut.– In practice, eliminates unwanted logical
solutions • Note that mature Prolog implementations index
clauses for a predicate on the principal functor of the first argument in the head of a clause thereby reducing non-determinism.pp(ff(_),_,_) :- q1(…), …, qn(…).
cs774 (Prasad) L6Backtracking 6
Implementing Conditional• “p(x) :- if c(x) then r(x) else q(x)”
p(X) :- c(X), !, r(X).p(X) :- q(X).
• In this case, reordering of clauses changes the meaning.
cs774 (Prasad) L6Backtracking 7
Avoiding Duplicatesmember(X,[X|L]) :- !.member(X,[_|L]) :- member(X,L).• Without cut, the goal
?- member(a, [a, a, a]) will succeed thrice.
• Note that with cut member-predicate cannot be used to generate/enumerate elements in a list. That is, invertibility is destroyed.
cs774 (Prasad) L6Backtracking 8
Bugs with Cutsmin(X, Y, X) :- X =< Y, !.min(X, Y, Y).• Flaw: the goal
?- min(3,6,6) does not fail.
• Reason: min(3,6,6) does not unify with min(X,Y,X).
• Fix : change first rule to:
min(X, Y, Z) :- X =< Y,!,Z = X.
cs774 (Prasad) L6Backtracking 9
Effect of CutMatching Rule:H :- B1, B2, …, Bm,!, …, Bn.
Goal:?-G.When “!” is encountered, the bindings for variables in goals B1, …,Bm, and G are frozen. That is, alternate solutions to B1, …, Bm, and remaining alternatives for G are discarded.Note that the ordering of body literals and clauses becomes significant in the presence of cut.
cs774 (Prasad) L6Backtracking 10
Effect of Cutp(X) :- q(X), r(X), !, s(X).p(d).Declarative Reading (ignoring cut): { p(d)}Procedural reading (using cut): { p(d)}
?- p(X). -> one solution?- p(a). -> no?- p(d). -> yes
cs774 (Prasad) L6Backtracking 11
Effect of Cutp(X) :- q(X), r(X), !, s(X).p(d).
• Additional Facts: {q(a),r(a),s(a)}Declarative Reading : { p(a), p(d)}
Procedural reading : { p(a)} ?- p(X). -> X = a?- p(a). -> yes?- p(d). -> yescs774 (Prasad) L6Backtracking 12
(cont’d)p(X) :- q(X), r(X), !, s(X).p(d).
• Additional Facts: {q(b),s(b)}Declarative Reading (ignoring cut): { p(d)}Procedural reading (using cut): { p(d)}
?- p(X). -> X = d?- p(a). -> no?- p(d). -> yes
cs774 (Prasad) L6Backtracking 13
(cont’d)p(X) :- q(X), r(X), !, s(X).p(d).
• Additional Facts: {q(c),r(c)}Declarative Reading : { p(d)}
Procedural reading : { } ?- p(X). -> no?- p(c). -> no?- p(d). -> yes
cs774 (Prasad) L6Backtracking 14
(cont’d)p(X) :- q(X), r(X), !, s(X).p(d).
• Additional Facts: {q(a),r(a),s(a), q(b),r(b),s(b)}
?- p(X). Declarative Reading (ignoring cut): { p(a), p(b), p(d)}Procedural reading (using cut):
{ p(a)} cs774 (Prasad) L6Backtracking 15
Disadvantages of Cut• Destroys the declarative reading : Need to know
the behavior of the interpreter to understand the meaning (“side-effects”)p :- a, b.p :- c.
p :- a, !, b. p :- c. p :- c. p :- a, !, b.
cs774 (Prasad) L6Backtracking 16
cbap )(
)()( cabap
)( bacp
Conditional vs Cuttp(X,Y) :- q(X) -> r(Y) ; s(Y).tp(m,m).tp(n,n).
is not equivalent tosp(X,Y) :- q(X),!,r(Y).
sp(X,Y) :- s(Y).sp(m,m).sp(n,n).
q(a). q(c). r(e). r(f). s(g). s(h).
cs774 (Prasad) L6Backtracking 17
(cont’d)
• ?- tp(X,Y).
X = a Y = eX = a Y = fX = m Y = mX = n Y = n
– Local cut
• ?- sp(X,Y).
X = a Y = eX = a Y = f – sp-goal is not
resatisfied for sp-facts because of the cut.
cs774 (Prasad) L6Backtracking 18
Other uses of Cut• Implementing default or otherwise clause. a(X,Y) :- p1(X), !, q1(X,Y).…a(X,Y) :- pn(X), !, qn(X,Y).a(X,Y) :- r(X,Y).
• Cut-Fail combination to formalize conditions under which failure is guaranteed. a(X) :- p(X), !, fail.
cs774 (Prasad) L6Backtracking 19