[m-dev.] for review: represent bugs directly

Mark Anthony BROWN dougl at cs.mu.OZ.AU
Wed Feb 23 13:53:24 AEDT 2000


Hi,

This is for review by anyone.

Cheers,
Mark.

Estimated hours taken: 10

Represent bugs directly rather than with edt nodes.

browser/declarative_analyser.m:
	- In the mercury_edt/2 typeclass, change edt_root/3 to
	  edt_root_question/3 and add the method edt_root_e_bug/3.
	- Add the type prime_suspect/1 which keeps track of the
	  evidence (oracle answers) which implicates a particular
	  edt node.
	- Use the new bug representation.

browser/declarative_debugger.m:
browser/declarative_oracle.m:
	- Move oracle_confirmation to declarative_debugger.m, and
	  rename it decl_confirmation.

browser/declarative_debugger.m:
	- Change decl_bug/1 to decl_bug/0.  Instead of a bug being
	  represented by an edt node, decl_bug now represents
	  directly the different sorts of bugs possible.
	- Add an implementation for the new mercury_edt method.

browser/declarative_oracle.m:
browser/declarative_user.m:
	- Update the confirmation to use the new types.

tests/debugger/declarative/*.{exp,exp2}:
	- Update test results.

Index: browser/declarative_analyser.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_analyser.m,v
retrieving revision 1.2
diff -u -r1.2 declarative_analyser.m
--- browser/declarative_analyser.m	2000/02/04 03:45:26	1.2
+++ browser/declarative_analyser.m	2000/02/23 02:23:46
@@ -26,8 +26,13 @@
 		
 		% Gives the root node of an EDT.
 		%
-	pred edt_root(S, T, decl_question),
-	mode edt_root(in, in, out) is det,
+	pred edt_root_question(S, T, decl_question),
+	mode edt_root_question(in, in, out) is det,
+	
+		% If this node is an e_bug, then find the bug.
+		%
+	pred edt_root_e_bug(S, T, decl_e_bug),
+	mode edt_root_e_bug(in, in, out) is det,
 
 		% Gives the list of children of a tree.  If the tree is
 		% represented implicitly, then the procedure fails.
@@ -45,7 +50,7 @@
 	
 			% A suspect who is guilty.
 			%
-	;	bug_found(decl_bug(T))
+	;	bug_found(decl_bug)
 
 			% The analyser desires answers to any of a list
 			% of queries.
@@ -89,125 +94,243 @@
 :- type analyser_state(T)
 	--->	analyser(
 				% Current incorrect node (initially `no').
+				% This is the most recent node that the
+				% oracle has said is incorrect.
 				%
-			maybe(T),	
+			maybe(prime_suspect(T)),
 
 				% Current suspects.
 				%
 			list(suspect(T))
 	).
 
-	% A suspect is a suspect tree along with its corresponding
-	% root node.
-	%
-:- type suspect(T) == pair(T, decl_question).
-
 analyser_state_init(analyser(no, [])).
 
 start_analysis(Store, Tree, Response, _, Analyser) :-
-	edt_root(Store, Tree, Root),
-	Response = oracle_queries([Root]),
-	Analyser = analyser(no, [Tree - Root]).
+	edt_root_question(Store, Tree, Question),
+	Response = oracle_queries([Question]),
+	create_suspect(Store, Tree, Suspect),
+	Analyser = analyser(no, [Suspect]).
 
 continue_analysis(Store, Answers, Response, Analyser0, Analyser) :-
 	(
-		find_incorrect_suspect(Answers, Analyser0, Node)
+		find_incorrect_suspect(Answers, Analyser0, Suspect)
 	->
-		make_new_suspects(Store, Node, Response, Analyser)
+		make_new_prime_suspect(Store, Suspect, Response, Analyser0,
+				Analyser)
 	;
-		remove_suspects(Answers, Response, Analyser0, Analyser)
+		remove_suspects(Store, Answers, Response, Analyser0, Analyser)
 	).
 
 
 	% Find an answer which is `no' and find the suspect that
 	% corresponds to it, or else fail.
 	%
-:- pred find_incorrect_suspect(list(decl_answer), analyser_state(T), T).
+:- pred find_incorrect_suspect(list(decl_answer), analyser_state(T),
+		suspect(T)).
 :- mode find_incorrect_suspect(in, in, out) is semidet.
 
 find_incorrect_suspect([Answer | Answers], Analyser, Child) :-
 	Analyser = analyser(_, Suspects),
 	(
-		Answer = Node - no,
-		find_matching_suspects(Node, Suspects, [Match | _], _)
+		Answer = _ - no,
+		find_matching_suspects(Answer, Suspects, [Match | _], _)
 	->
-		Match = Child - _
+		Match = Child
 	;
 		find_incorrect_suspect(Answers, Analyser, Child)
 	).
 
-	% Create a new suspect list from the given tree, which is
-	% assumed to have an incorrect root.
+	% Create a new prime suspect from the given suspect, which is
+	% assumed to be incorrect.
 	%
-:- pred make_new_suspects(S, T, analyser_response(T), analyser_state(T))
-		<= mercury_edt(S, T).
-:- mode make_new_suspects(in, in, out, out) is det.
+:- pred make_new_prime_suspect(S, suspect(T), analyser_response(T),
+		analyser_state(T), analyser_state(T)) <= mercury_edt(S, T).
+:- mode make_new_prime_suspect(in, in, out, in, out) is det.
 
-make_new_suspects(Store, Tree, Response, Analyser) :-
+make_new_prime_suspect(Store, Suspect, Response, Analyser0, Analyser) :-
+	Analyser0 = analyser(MaybeOldPrime, _),
+	suspect_get_edt_node(Suspect, Tree),
+	create_prime_suspect(Suspect, MaybeOldPrime, Prime),
 	(
 		edt_children(Store, Tree, Children)
 	->
 		make_suspects(Store, Children, Suspects, Queries),
-		Analyser = analyser(yes(Tree), Suspects),
 		(
 			Queries = []
 		->
-			Response = bug_found(e_bug(Tree))
+			edt_root_e_bug(Store, Tree, EBug),
+			Response = bug_found(e_bug(EBug))
 		;
 			Response = oracle_queries(Queries)
 		)
 	;
-		Response = require_explicit(Tree),
-		Analyser = analyser(yes(Tree), [])
-	).
+			% The real suspects cannot be found, so we
+			% just use the empty list.
+			%
+		Suspects = [],
+		Response = require_explicit(Tree)
+	),
+	Analyser = analyser(yes(Prime), Suspects).
 
 :- pred make_suspects(S, list(T), list(suspect(T)), list(decl_question))
 		<= mercury_edt(S, T).
 :- mode make_suspects(in, in, out, out) is det.
 
 make_suspects(_, [], [], []).
-make_suspects(Store, [Tree | Trees], [Tree - Root | Ss], [Root | Qs]) :-
-	edt_root(Store, Tree, Root),
+make_suspects(Store, [Tree | Trees], [Suspect | Ss], [Query | Qs]) :-
+	create_suspect(Store, Tree, Suspect),
+	Suspect = suspect(_, Query),
 	make_suspects(Store, Trees, Ss, Qs).
 
 	% Go through the answers (none of which should be `no') and
 	% remove the corresponding children from the suspect list.
 	%
-:- pred remove_suspects(list(decl_answer), analyser_response(T),
-		analyser_state(T), analyser_state(T)).
-:- mode remove_suspects(in, out, in, out) is det.
+:- pred remove_suspects(S, list(decl_answer), analyser_response(T),
+		analyser_state(T), analyser_state(T)) <= mercury_edt(S, T).
+:- mode remove_suspects(in, in, out, in, out) is det.
 
-remove_suspects([], Response, Analyser, Analyser) :-
-	Analyser = analyser(MaybeTree, Suspects),
+remove_suspects(Store, [], Response, Analyser, Analyser) :-
+	Analyser = analyser(MaybePrime, Suspects),
 	(
 		Suspects = []
 	->
 		(
-			MaybeTree = yes(Tree)
+			MaybePrime = yes(Prime)
 		->
-			Response = bug_found(e_bug(Tree))
+			prime_suspect_get_edt_node(Prime, Tree),
+			edt_root_e_bug(Store, Tree, EBug),
+			Response = bug_found(e_bug(EBug))
 		;
 			Response = no_suspects
 		)
 	;
-		list__map(snd, Suspects, Queries),
+		list__map(suspect_get_question, Suspects, Queries),
 		Response = oracle_queries(Queries)
 	).
+
+remove_suspects(Store, [Answer | Answers], Response, Analyser0,
+		Analyser) :-
+
+	(
+		Answer = _ - yes
+	->
+		Analyser0 = analyser(MaybeTree, Suspects0),
+		find_matching_suspects(Answer, Suspects0, _, Suspects),
+		Analyser1 = analyser(MaybeTree, Suspects),
+		remove_suspects(Store, Answers, Response, Analyser1, Analyser)
+	;
+		error("remove_suspects: unexpected incorrect node")
+	).
+
+%-----------------------------------------------------------------------------%
+
+:- type suspect(T)
+	--->	suspect(T, decl_question).
+
+:- pred create_suspect(S, T, suspect(T)) <= mercury_edt(S, T).
+:- mode create_suspect(in, in, out) is det.
+
+create_suspect(S, T, Suspect) :-
+	edt_root_question(S, T, Question),
+	Suspect = suspect(T, Question).
+
+:- pred suspect_get_edt_node(suspect(T), T).
+:- mode suspect_get_edt_node(in, out) is det.
+
+suspect_get_edt_node(suspect(Node, _), Node).
 
-remove_suspects([Node - yes | Answers], Response, Analyser0, Analyser) :-
-	Analyser0 = analyser(MaybeTree, Suspects0),
-	find_matching_suspects(Node, Suspects0, _, Suspects),
-	Analyser1 = analyser(MaybeTree, Suspects),
-	remove_suspects(Answers, Response, Analyser1, Analyser).
+:- pred suspect_get_question(suspect(T), decl_question).
+:- mode suspect_get_question(in, out) is det.
 
-remove_suspects([_ - no | _], _, _, _) :-
-	error("remove_suspects: unexpected incorrect node").
+suspect_get_question(suspect(_, Question), Question).
 
-:- pred find_matching_suspects(decl_question, list(suspect(T)),
+:- pred suspect_answer_match(suspect(T), decl_answer, decl_truth).
+:- mode suspect_answer_match(in, in, out) is semidet.
+
+suspect_answer_match(suspect(_, Question), Question - Truth, Truth).
+
+:- pred find_matching_suspects(decl_answer, list(suspect(T)),
 		list(suspect(T)), list(suspect(T))).
 :- mode find_matching_suspects(in, in, out, out) is det.
 
-find_matching_suspects(Node, Suspects, Matches, NoMatches) :-
-	P = (pred(A::in) is semidet :- A = _ - Node),
+find_matching_suspects(Answer, Suspects, Matches, NoMatches) :-
+	P = (pred(S::in) is semidet :- suspect_answer_match(S, Answer, _)),
 	list__filter(P, Suspects, Matches, NoMatches).
+
+%-----------------------------------------------------------------------------%
+
+:- type prime_suspect(T)
+	--->	prime_suspect(
+				% Incorrect node.
+				%
+			suspect(T),
+
+				% Evidence: the oracle said these nodes
+				% were either correct or inadmissible.
+				%
+			list(suspect(T)),
+
+				% Earliest inadmissible child, if there
+				% have been any at all.  This child
+				% is also included in the list of
+				% evidence.
+				%
+			maybe(suspect(T)),
+
+				% Previous prime suspects.
+				%
+			list(suspect(T))
+		).
+
+	% Create a prime suspect from a suspect, and maybe the previous
+	% prime suspect (if there was one).
+	%
+:- pred create_prime_suspect(suspect(T), maybe(prime_suspect(T)),
+		prime_suspect(T)).
+:- mode create_prime_suspect(in, in, out) is det.
+
+create_prime_suspect(Suspect, MaybeOldPrime, Prime) :-
+	(
+		MaybeOldPrime = yes(OldPrime)
+	->
+		OldPrime = prime_suspect(OldSuspect, _, _, Previous0),
+		PreviousPrimes = [OldSuspect | Previous0]
+	;
+		PreviousPrimes = []
+	),
+	Prime = prime_suspect(Suspect, [], no, PreviousPrimes).
+
+:- pred prime_suspect_get_edt_node(prime_suspect(T), T).
+:- mode prime_suspect_get_edt_node(in, out) is det.
+
+prime_suspect_get_edt_node(prime_suspect(Suspect, _, _, _), EDT) :-
+	suspect_get_edt_node(Suspect, EDT).
+
+	% Get all the suspects who are children of the prime suspect,
+	% and who are deemed correct or inadmissible.  Maybe get
+	% the earliest inadmissible child (if there was one).
+	%
+:- pred prime_suspect_get_evidence(prime_suspect(T), list(suspect(T)),
+		maybe(suspect(T))).
+:- mode prime_suspect_get_evidence(in, out, out) is det.
+
+prime_suspect_get_evidence(prime_suspect(_, E, M, _), E, M).
+
+	% Add to the evidence against the prime suspect a child who
+	% is deemed correct or inadmissible.
+	% This predicate will be more interesting when decl_truth
+	% has three values.
+	%
+:- pred prime_suspect_add_evidence(prime_suspect(T), suspect(T), decl_truth,
+		prime_suspect(T)).
+:- mode prime_suspect_add_evidence(in, in, in, out) is det.
+
+prime_suspect_add_evidence(Prime0, Suspect, yes, Prime) :-
+	Prime0 = prime_suspect(S, Evidence0, M, P),
+	Evidence = [Suspect | Evidence0],
+	Prime = prime_suspect(S, Evidence, M, P).
+
+prime_suspect_add_evidence(_, _, no, _) :-
+	error("prime_suspect_add_evidence: not evidence").
 
Index: browser/declarative_debugger.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_debugger.m,v
retrieving revision 1.13
diff -u -r1.13 declarative_debugger.m
--- browser/declarative_debugger.m	2000/02/23 02:17:54	1.13
+++ browser/declarative_debugger.m	2000/02/23 02:23:50
@@ -29,16 +29,54 @@
 	%
 :- type decl_truth == bool.
 
+	% This type represents the possible responses to being
+	% asked to confirm that a node is a bug.
+	%
+:- type decl_confirmation
+	--->	confirm_bug
+	;	overrule_bug
+	;	abort_diagnosis.
+
 	% This type represents the bugs which can be diagnosed.
 	% The parameter of the constructor is the type of EDT nodes.
+	%
+:- type decl_bug
+			% An EDT whose root node is incorrect,
+			% but whose children are all correct.
+			%
+	--->	e_bug(decl_e_bug)
+
+			% An EDT whose root node is incorrect, and
+			% which has no incorrect children but at
+			% least one inadmissible one.
+			%
+	;	i_bug(decl_i_bug).
+
+:- type decl_e_bug
+	--->	incorrect_contour(
+			decl_atom,	% The head of the clause, in its
+					% final state of instantiation.
+			decl_contour	% The path taken through the body.
+		)
+	;	partially_uncovered_atom(
+			decl_atom	% The called atom, in its initial
+					% state.
+		).
+
+:- type decl_i_bug
+	--->	inadmissible_call(
+			decl_atom,	% The parent atom, in its initial
+					% state.
+			decl_position,	% The location of the call in the
+					% parent's body.
+			decl_atom	% The inadmissible child, in its
+					% initial state.
+		).
+
+	% XXX not yet implemented.
 	%
-:- type decl_bug(T)
-	--->	e_bug(T)	% An EDT whose root node is incorrect,
-				% but whose children are all correct.
-
-	;	i_bug(T).	% An EDT whose root node is incorrect, and
-				% which has no incorrect children but at
-				% least one inadmissible one.
+:- type decl_contour == unit.
+:- type decl_position == unit.
 
 	% Values of this type represent goal behaviour.  This representation
 	% is used by the front end (in this module), as well as the
@@ -138,10 +176,10 @@
 handle_analyser_response(_, no_suspects, no_bug_found, D, D) -->
 	[].
 
-handle_analyser_response(Store, bug_found(Bug), Response, Diagnoser0,
+handle_analyser_response(_, bug_found(Bug), Response, Diagnoser0,
 		Diagnoser) -->
 
-	confirm_bug(Store, Bug, Response, Diagnoser0, Diagnoser).
+	confirm_bug(Bug, Response, Diagnoser0, Diagnoser).
 
 handle_analyser_response(Store, oracle_queries(Queries), Response,
 		Diagnoser0, Diagnoser) -->
@@ -176,22 +214,13 @@
 handle_oracle_response(_, abort_diagnosis, no_bug_found, D, D) -->
 	io__write_string("Diagnosis aborted.\n").
 
-:- pred confirm_bug(S, decl_bug(edt_node(R)), diagnoser_response,
-		diagnoser_state(R), diagnoser_state(R), io__state, io__state)
-		<= annotated_trace(S, R).
-:- mode confirm_bug(in, in, out, in, out, di, uo) is det.
+:- pred confirm_bug(decl_bug, diagnoser_response, diagnoser_state(R),
+		diagnoser_state(R), io__state, io__state).
+:- mode confirm_bug(in, out, in, out, di, uo) is det.
 
-confirm_bug(Store, Bug, Response, Diagnoser0, Diagnoser) -->
-	{
-		Bug = e_bug(Node),
-		Message = "Incorrect node found:\n"
-	;
-		Bug = i_bug(Node),
-		Message = "Inadmissible call node found:\n"
-	},
+confirm_bug(Bug, Response, Diagnoser0, Diagnoser) -->
 	{ diagnoser_get_oracle(Diagnoser0, Oracle0) },
-	{ edt_root(wrap(Store), Node, Question) },
-	oracle_confirm_bug(Message, Question, Confirmation, Oracle0, Oracle),
+	oracle_confirm_bug(Bug, Confirmation, Oracle0, Oracle),
 	{ diagnoser_set_oracle(Diagnoser0, Oracle, Diagnoser) },
 	{
 		Confirmation = confirm_bug,
@@ -243,7 +272,8 @@
 
 :- instance mercury_edt(wrap(S), edt_node(R)) <= annotated_trace(S, R)
 	where [
-		pred(edt_root/3) is trace_root,
+		pred(edt_root_question/3) is trace_root_question,
+		pred(edt_root_e_bug/3) is trace_root_e_bug,
 		pred(edt_children/3) is trace_children
 	].
 
@@ -252,10 +282,11 @@
 	%
 :- type wrap(S) ---> wrap(S).
 
-:- pred trace_root(wrap(S), edt_node(R), decl_question) <= annotated_trace(S, R).
-:- mode trace_root(in, in, out) is det.
+:- pred trace_root_question(wrap(S), edt_node(R), decl_question)
+		<= annotated_trace(S, R).
+:- mode trace_root_question(in, in, out) is det.
 
-trace_root(wrap(Store), dynamic(Ref), Root) :-
+trace_root_question(wrap(Store), dynamic(Ref), Root) :-
 	det_trace_node_from_id(Store, Ref, Node),
 	(
 		Node = fail(_, CallId, RedoId)
@@ -284,6 +315,20 @@
 		get_answers(Store, NextId, [Atom | As0], As)
 	;
 		As = As0
+	).
+
+:- pred trace_root_e_bug(wrap(S), edt_node(R), decl_e_bug)
+		<= annotated_trace(S, R).
+:- mode trace_root_e_bug(in, in, out) is det.
+
+trace_root_e_bug(S, T, Bug) :-
+	trace_root_question(S, T, Q),
+	(
+		Q = wrong_answer(Atom),
+		Bug = incorrect_contour(Atom, unit)
+	;
+		Q = missing_answer(Atom, _),
+		Bug = partially_uncovered_atom(Atom)
 	).
 
 :- pred trace_children(wrap(S), edt_node(R), list(edt_node(R)))
Index: browser/declarative_execution.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_execution.m,v
retrieving revision 1.6
diff -u -r1.6 declarative_execution.m
--- browser/declarative_execution.m	2000/02/23 02:17:54	1.6
+++ browser/declarative_execution.m	2000/02/23 02:23:58
@@ -106,9 +106,8 @@
 			list(maybe(univ))
 		).
 
-	% If the following two type is modified, some of
-	% the macros in trace/mercury_trace_declarative.h may need
-	% to be updated.
+	% If the following type is modified, some of the macros in
+	% trace/mercury_trace_declarative.h may need to be updated.
 	%
 :- type goal_status
 	--->	succeeded
Index: browser/declarative_oracle.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_oracle.m,v
retrieving revision 1.7
diff -u -r1.7 declarative_oracle.m
--- browser/declarative_oracle.m	2000/02/22 10:45:38	1.7
+++ browser/declarative_oracle.m	2000/02/23 02:24:00
@@ -25,7 +25,7 @@
 :- module mdb__declarative_oracle.
 :- interface.
 :- import_module mdb__declarative_debugger.
-:- import_module list, io, string.
+:- import_module list, io.
 
 	% A response that the oracle gives to a query about the
 	% truth of an EDT node.
@@ -35,13 +35,6 @@
 	;	no_oracle_answers
 	;	abort_diagnosis.
 
-	% A response that the oracle gives when asked to confirm a bug.
-	%
-:- type oracle_confirmation
-	--->	confirm_bug
-	;	overrule_bug
-	;	abort_diagnosis.
-
 	% The oracle state.  This is threaded around the declarative
 	% debugger.
 	%
@@ -63,12 +56,10 @@
 :- mode query_oracle(in, out, in, out, di, uo) is det.
 
 	% Confirm that the node found is indeed an e_bug or an i_bug.
-	% The first argument is a message from the caller to be
-	% prefixed to the question.
 	%
-:- pred oracle_confirm_bug(string, decl_question, oracle_confirmation,
-		oracle_state, oracle_state, io__state, io__state).
-:- mode oracle_confirm_bug(in, in, out, in, out, di, uo) is det.
+:- pred oracle_confirm_bug(decl_bug, decl_confirmation, oracle_state,
+		oracle_state, io__state, io__state).
+:- mode oracle_confirm_bug(in, out, in, out, di, uo) is det.
 
 %-----------------------------------------------------------------------------%
 
@@ -104,23 +95,10 @@
 		{ Oracle = Oracle0 }
 	).
 
-oracle_confirm_bug(Message, Question, Confirmation, Oracle0, Oracle) -->
+oracle_confirm_bug(Bug, Confirmation, Oracle0, Oracle) -->
 	{ get_oracle_user(Oracle0, User0) },
-	user_confirm_bug(Message, Question, UserResponse, User0, User),
-	{ set_oracle_user(Oracle0, User, Oracle) },
-	{
-		UserResponse = user_answer(_ - yes),
-		Confirmation = confirm_bug
-	;
-		UserResponse = user_answer(_ - no),
-		Confirmation = overrule_bug
-	;
-		UserResponse = no_user_answer,
-		error("oracle_confirm_bug: no user answer")
-	;
-		UserResponse = abort_diagnosis,
-		Confirmation = abort_diagnosis
-	}.
+	user_confirm_bug(Bug, Confirmation, User0, User),
+	{ set_oracle_user(Oracle0, User, Oracle) }.
 
 %-----------------------------------------------------------------------------%
 		
Index: browser/declarative_user.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/declarative_user.m,v
retrieving revision 1.5
diff -u -r1.5 declarative_user.m
--- browser/declarative_user.m	2000/02/22 10:45:39	1.5
+++ browser/declarative_user.m	2000/02/23 02:24:03
@@ -15,7 +15,7 @@
 :- module mdb__declarative_user.
 :- interface.
 :- import_module mdb__declarative_debugger.
-:- import_module list, io, string.
+:- import_module list, io.
 
 :- type user_response
 	--->	user_answer(decl_answer)
@@ -38,9 +38,9 @@
 
 	% Confirm that the node found is indeed an e_bug or an i_bug.
 	%
-:- pred user_confirm_bug(string, decl_question, user_response, user_state,
-		user_state, io__state, io__state).
-:- mode user_confirm_bug(in, in, out, in, out, di, uo) is det.
+:- pred user_confirm_bug(decl_bug, decl_confirmation, user_state, user_state,
+		io__state, io__state).
+:- mode user_confirm_bug(in, out, in, out, di, uo) is det.
 
 %-----------------------------------------------------------------------------%
 
@@ -120,6 +120,13 @@
 browse_edt_node(_Node, User, User) -->
 	io__write_string("Sorry, not implemented.\n").
 
+:- pred browse_decl_bug(decl_bug, user_state, user_state,
+		io__state, io__state).
+:- mode browse_decl_bug(in, in, out, di, uo) is det.
+
+browse_decl_bug(_Bug, User, User) -->
+	io__write_string("Sorry, not implemented.\n").
+
 	% Reverse the first argument and append the second to it.
 	%
 :- pred reverse_and_append(list(T), list(T), list(T)).
@@ -214,20 +221,18 @@
 
 %-----------------------------------------------------------------------------%
 
-user_confirm_bug(Message, Question, Response, User0, User) -->
-	{ User0 = user(_, OutStr) },
-	io__write_string(OutStr, Message),
-	write_decl_question(Question, User0),
+user_confirm_bug(Bug, Response, User0, User) -->
+	write_decl_bug(Bug, User0),
 	get_command("Is this a bug? ", Command, User0, User1),
 	(
 		{ Command = yes }
 	->
-		{ Response = user_answer(Question - yes) },
+		{ Response = confirm_bug },
 		{ User = User1 }
 	;
 		{ Command = no }
 	->
-		{ Response = user_answer(Question - no) },
+		{ Response = overrule_bug },
 		{ User = User1 }
 	;
 		{ Command = abort }
@@ -237,11 +242,11 @@
 	;
 		{ Command = browse }
 	->
-		browse_edt_node(Question, User1, User2),
-		user_confirm_bug(Message, Question, Response, User2, User)
+		browse_decl_bug(Bug, User1, User2),
+		user_confirm_bug(Bug, Response, User2, User)
 	;
 		user_confirm_bug_help(User1),
-		user_confirm_bug(Message, Question, Response, User1, User)
+		user_confirm_bug(Bug, Response, User1, User)
 	).
 
 %-----------------------------------------------------------------------------%
@@ -267,6 +272,28 @@
 		io__write_string(OutStr, "Solutions:\n"),
 		list__foldl(write_decl_atom(OutStr, "\t"), Solns)
 	).
+
+:- pred write_decl_bug(decl_bug, user_state, io__state, io__state).
+:- mode write_decl_bug(in, in, di, uo) is det.
+
+write_decl_bug(e_bug(EBug), User) -->
+	{ User = user(_, OutStr) },
+	(
+		{ EBug = incorrect_contour(Atom, _) },
+		io__write_string(OutStr, "Found incorrect contour:\n"),
+		write_decl_atom(OutStr, "", Atom)
+	;
+		{ EBug = partially_uncovered_atom(Atom) },
+		io__write_string(OutStr, "Found partially uncovered atom:\n"),
+		write_decl_atom(OutStr, "", Atom)
+	).
+
+write_decl_bug(i_bug(IBug), User) -->
+	{ User = user(_, OutStr) },
+	{ IBug = inadmissible_call(Parent, _, Call) },
+	io__write_string(OutStr, "Found inadmissible call:\n"),
+	write_decl_atom(OutStr, "Parent", Parent),
+	write_decl_atom(OutStr, "Call ", Call).
 
 :- pred write_decl_atom(io__output_stream, string, decl_atom,
 		io__state, io__state).
Index: tests/debugger/declarative/aadebug.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/aadebug.exp,v
retrieving revision 1.3
diff -u -r1.3 aadebug.exp
--- tests/debugger/declarative/aadebug.exp	2000/02/22 10:46:09	1.3
+++ tests/debugger/declarative/aadebug.exp	2000/02/23 02:24:23
@@ -17,7 +17,7 @@
 Valid? yes
 s(10, 30)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p('a', 30)
 Is this a bug? yes
       15:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -28,7 +28,7 @@
 mdb> dd
 p('a', 31)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p('a', 31)
 Is this a bug? yes
       20:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -47,7 +47,7 @@
 Call q('b', _)
 No solutions.
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p('a', 32)
 Is this a bug? yes
       35:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -67,12 +67,8 @@
 	q('a', 'a')
 	q('a', 'b')
 Complete? yes
-Incorrect node found:
-Call p('a', _)
-Solutions:
-	p('a', 30)
-	p('a', 31)
-	p('a', 32)
+Found partially uncovered atom:
+p('a', _)
 Is this a bug? yes
       41:      2  2 FAIL pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
 mdb> continue
Index: tests/debugger/declarative/aadebug.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/aadebug.exp2,v
retrieving revision 1.2
diff -u -r1.2 aadebug.exp2
--- tests/debugger/declarative/aadebug.exp2	2000/02/22 10:46:09	1.2
+++ tests/debugger/declarative/aadebug.exp2	2000/02/23 02:24:23
@@ -17,7 +17,7 @@
 Valid? yes
 s(10, 30)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p('a', 30)
 Is this a bug? yes
       15:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -28,7 +28,7 @@
 mdb> dd
 p('a', 31)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p('a', 31)
 Is this a bug? yes
       22:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -47,7 +47,7 @@
 Call q('b', _)
 No solutions.
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p('a', 32)
 Is this a bug? yes
       39:      2  2 EXIT pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
@@ -67,12 +67,8 @@
 	q('a', 'a')
 	q('a', 'b')
 Complete? yes
-Incorrect node found:
-Call p('a', _)
-Solutions:
-	p('a', 30)
-	p('a', 31)
-	p('a', 32)
+Found partially uncovered atom:
+p('a', _)
 Is this a bug? yes
       47:      2  2 FAIL pred aadebug:p/2-0 (nondet) aadebug.m:24 (aadebug.m:9)
 mdb> continue
Index: tests/debugger/declarative/app.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/app.exp,v
retrieving revision 1.5
diff -u -r1.5 app.exp
--- tests/debugger/declarative/app.exp	2000/02/22 10:46:10	1.5
+++ tests/debugger/declarative/app.exp	2000/02/23 02:24:23
@@ -31,7 +31,7 @@
 Valid? no
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Is this a bug? yes
       19:      2  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:13)
@@ -61,7 +61,7 @@
 Valid? no
 app([0, 1, 2, 3, 4, 5], [6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8])
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Is this a bug? yes
       67:      8  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:18)
Index: tests/debugger/declarative/app.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/app.exp2,v
retrieving revision 1.5
diff -u -r1.5 app.exp2
--- tests/debugger/declarative/app.exp2	2000/02/22 10:46:10	1.5
+++ tests/debugger/declarative/app.exp2	2000/02/23 02:24:23
@@ -31,15 +31,15 @@
 Valid? no
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Is this a bug? yes
       19:      2  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:13)
 mdb> continue
 append([1, 2, 3, 4, 5], [6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8]).
-      24:    584  2 CALL pred app:app/3-0 (det) app.m:26 (app.m:18)
+      24:    608  2 CALL pred app:app/3-0 (det) app.m:26 (app.m:18)
 mdb> finish -n
-      71:    584  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:18)
+      71:    608  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:18)
 mdb> dd
 app([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5], [6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8])
 Valid? no
@@ -61,9 +61,9 @@
 Valid? no
 app([0, 1, 2, 3, 4, 5], [6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8])
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 app([3, 4, 5], [6, 7, 8], [3, 4, 5, 6, 7, 8])
 Is this a bug? yes
-      71:    584  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:18)
+      71:    608  2 EXIT pred app:app/3-0 (det) app.m:26 (app.m:18)
 mdb> continue
 append([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5], [6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8]).
Index: tests/debugger/declarative/args.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/args.exp,v
retrieving revision 1.1
diff -u -r1.1 args.exp
--- tests/debugger/declarative/args.exp	2000/02/22 10:46:12	1.1
+++ tests/debugger/declarative/args.exp	2000/02/23 02:24:23
@@ -13,7 +13,7 @@
 Valid? no
 my_succeed
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 16, 3, 20, 5)
 Is this a bug? yes
        7:      2  2 EXIT pred args:p/5-0 (nondet) args.m:24 (args.m:10)
@@ -24,7 +24,7 @@
 mdb> dd
 p(1, -2, 3, 2, 5)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p(1, -2, 3, 2, 5)
 Is this a bug? yes
       14:      2  2 EXIT pred args:p/5-0 (nondet) args.m:24 (args.m:10)
@@ -38,11 +38,8 @@
 	p(1, 16, 3, 20, 5)
 	p(1, -2, 3, 2, 5)
 Complete? no
-Incorrect node found:
-Call p(1, _, 3, _, 5)
-Solutions:
-	p(1, 16, 3, 20, 5)
-	p(1, -2, 3, 2, 5)
+Found partially uncovered atom:
+p(1, _, 3, _, 5)
 Is this a bug? yes
       18:      2  2 FAIL pred args:p/5-0 (nondet) args.m:24 (args.m:10)
 mdb> continue
Index: tests/debugger/declarative/args.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/args.exp2,v
retrieving revision 1.1
diff -u -r1.1 args.exp2
--- tests/debugger/declarative/args.exp2	2000/02/22 10:46:12	1.1
+++ tests/debugger/declarative/args.exp2	2000/02/23 02:24:23
@@ -13,7 +13,7 @@
 Valid? no
 my_succeed
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 16, 3, 20, 5)
 Is this a bug? yes
        9:      2  2 EXIT pred args:p/5-0 (nondet) args.m:24 (args.m:10)
@@ -24,7 +24,7 @@
 mdb> dd
 p(1, -2, 3, 2, 5)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p(1, -2, 3, 2, 5)
 Is this a bug? yes
       20:      2  2 EXIT pred args:p/5-0 (nondet) args.m:24 (args.m:10)
@@ -38,11 +38,8 @@
 	p(1, 16, 3, 20, 5)
 	p(1, -2, 3, 2, 5)
 Complete? no
-Incorrect node found:
-Call p(1, _, 3, _, 5)
-Solutions:
-	p(1, 16, 3, 20, 5)
-	p(1, -2, 3, 2, 5)
+Found partially uncovered atom:
+p(1, _, 3, _, 5)
 Is this a bug? yes
       26:      2  2 FAIL pred args:p/5-0 (nondet) args.m:24 (args.m:10)
 mdb> continue
Index: tests/debugger/declarative/backtrack.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/backtrack.exp,v
retrieving revision 1.2
diff -u -r1.2 backtrack.exp
--- tests/debugger/declarative/backtrack.exp	2000/02/22 10:46:14	1.2
+++ tests/debugger/declarative/backtrack.exp	2000/02/23 02:24:23
@@ -23,7 +23,7 @@
 	q(1, 2)
 	q(1, 3)
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, no)
 Is this a bug? yes
       17:      2  2 EXIT pred backtrack:p/2-0 (det) backtrack.m:23 (backtrack.m:9)
Index: tests/debugger/declarative/big.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/big.exp,v
retrieving revision 1.3
diff -u -r1.3 big.exp
--- tests/debugger/declarative/big.exp	2000/02/22 10:46:15	1.3
+++ tests/debugger/declarative/big.exp	2000/02/23 02:24:23
@@ -24,7 +24,7 @@
 Valid? yes
 f(6, -12)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-12)
 Is this a bug? yes
       26:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -39,7 +39,7 @@
 Valid? yes
 f(7, -14)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-14)
 Is this a bug? yes
       33:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -64,7 +64,7 @@
 Valid? yes
 f(10, -20)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-20)
 Is this a bug? yes
       65:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -79,7 +79,7 @@
 Valid? yes
 f(11, -22)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-22)
 Is this a bug? yes
       72:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -105,7 +105,7 @@
 	c(2, 6)
 	c(2, 7)
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p(2)
 Is this a bug? yes
      109:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -149,14 +149,8 @@
 Valid? yes
 g(9, 99)
 Valid? yes
-Incorrect node found:
-Call p(_)
-Solutions:
-	p(-12)
-	p(-14)
-	p(-20)
-	p(-22)
-	p(2)
+Found partially uncovered atom:
+p(_)
 Is this a bug? yes
      137:      2  2 FAIL pred big:p/1-0 (nondet) big.m:23 (big.m:11)
 mdb> continue
Index: tests/debugger/declarative/big.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/big.exp2,v
retrieving revision 1.3
diff -u -r1.3 big.exp2
--- tests/debugger/declarative/big.exp2	2000/02/22 10:46:16	1.3
+++ tests/debugger/declarative/big.exp2	2000/02/23 02:24:23
@@ -24,7 +24,7 @@
 Valid? yes
 f(6, -12)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-12)
 Is this a bug? yes
       28:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -39,7 +39,7 @@
 Valid? yes
 f(7, -14)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-14)
 Is this a bug? yes
       35:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -64,7 +64,7 @@
 Valid? yes
 f(10, -20)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-20)
 Is this a bug? yes
       71:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -79,7 +79,7 @@
 Valid? yes
 f(11, -22)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(-22)
 Is this a bug? yes
       78:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -105,7 +105,7 @@
 	c(2, 6)
 	c(2, 7)
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p(2)
 Is this a bug? yes
      115:      2  2 EXIT pred big:p/1-0 (nondet) big.m:23 (big.m:11)
@@ -149,14 +149,8 @@
 Valid? yes
 g(9, 99)
 Valid? yes
-Incorrect node found:
-Call p(_)
-Solutions:
-	p(-12)
-	p(-14)
-	p(-20)
-	p(-22)
-	p(2)
+Found partially uncovered atom:
+p(_)
 Is this a bug? yes
      143:      2  2 FAIL pred big:p/1-0 (nondet) big.m:23 (big.m:11)
 mdb> continue
Index: tests/debugger/declarative/gcf.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/gcf.exp,v
retrieving revision 1.5
diff -u -r1.5 gcf.exp
--- tests/debugger/declarative/gcf.exp	2000/02/22 10:46:16	1.5
+++ tests/debugger/declarative/gcf.exp	2000/02/23 02:24:23
@@ -17,7 +17,7 @@
 Valid? yes
 f(11)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a(11)
 Is this a bug? yes
       23:      2  2 EXIT pred gcf:a/1-0 (nondet) gcf.m:26 (gcf.m:10)
@@ -32,7 +32,7 @@
 Valid? yes
 f(12)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a(12)
 Is this a bug? yes
       30:      2  2 EXIT pred gcf:a/1-0 (nondet) gcf.m:26 (gcf.m:10)
@@ -49,7 +49,7 @@
 Valid? yes
 f(20)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a(20)
 Is this a bug? yes
       42:      2  2 EXIT pred gcf:a/1-0 (nondet) gcf.m:26 (gcf.m:10)
Index: tests/debugger/declarative/if_then_else.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/if_then_else.exp,v
retrieving revision 1.5
diff -u -r1.5 if_then_else.exp
--- tests/debugger/declarative/if_then_else.exp	2000/02/22 10:46:18	1.5
+++ tests/debugger/declarative/if_then_else.exp	2000/02/23 02:24:23
@@ -15,7 +15,7 @@
 Valid? yes
 b(1)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 ite(0, 1)
 Is this a bug? yes
        9:      2  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:8)
@@ -30,7 +30,7 @@
 Call a(1)
 No solutions.
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 ite(1, 0)
 Is this a bug? yes
       17:      5  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
Index: tests/debugger/declarative/if_then_else.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/if_then_else.exp2,v
retrieving revision 1.5
diff -u -r1.5 if_then_else.exp2
--- tests/debugger/declarative/if_then_else.exp2	2000/02/22 10:46:18	1.5
+++ tests/debugger/declarative/if_then_else.exp2	2000/02/23 02:24:23
@@ -15,24 +15,24 @@
 Valid? yes
 b(1)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 ite(0, 1)
 Is this a bug? yes
        9:      2  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:8)
 mdb> continue
 ite(0, 1).
-      16:    368  2 CALL pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
+      16:    387  2 CALL pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
 mdb> finish
-      23:    368  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
+      23:    387  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
 mdb> dd
 ite(1, 0)
 Valid? no
 Call a(1)
 No solutions.
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 ite(1, 0)
 Is this a bug? yes
-      23:    368  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
+      23:    387  2 EXIT pred if_then_else:ite/2-0 (det) if_then_else.m:22 (if_then_else.m:12)
 mdb> continue
 ite(1, 0).
Index: tests/debugger/declarative/lpe_example.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/lpe_example.exp,v
retrieving revision 1.3
diff -u -r1.3 lpe_example.exp
--- tests/debugger/declarative/lpe_example.exp	2000/02/22 10:46:20	1.3
+++ tests/debugger/declarative/lpe_example.exp	2000/02/23 02:24:23
@@ -15,7 +15,7 @@
 Valid? yes
 r(3, 13)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 13)
 Is this a bug? yes
       10:      2  2 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17
@@ -28,7 +28,7 @@
 Valid? no
 r(3, 23)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 23)
 Is this a bug? yes
       15:      2  2 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17
@@ -39,7 +39,7 @@
 mdb> dd
 p(1, 3)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p(1, 3)
 Is this a bug? yes
       20:      2  2 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17
@@ -59,12 +59,8 @@
 	r(3, 13)
 	r(3, 23)
 Complete? yes
-Incorrect node found:
-Call p(1, _)
-Solutions:
-	p(1, 13)
-	p(1, 23)
-	p(1, 3)
+Found partially uncovered atom:
+p(1, _)
 Is this a bug? yes
       22:      2  2 FAIL pred lpe_example:p/2-0 (nondet) lpe_example.m:17
 mdb> continue
Index: tests/debugger/declarative/lpe_example.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/lpe_example.exp2,v
retrieving revision 1.3
diff -u -r1.3 lpe_example.exp2
--- tests/debugger/declarative/lpe_example.exp2	2000/02/22 10:46:20	1.3
+++ tests/debugger/declarative/lpe_example.exp2	2000/02/23 02:24:23
@@ -15,7 +15,7 @@
 Valid? yes
 r(3, 13)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 13)
 Is this a bug? yes
       11:      3  3 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17 (std_util.m:590)
@@ -28,7 +28,7 @@
 Valid? no
 r(3, 23)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 23)
 Is this a bug? yes
       16:      3  3 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17 (std_util.m:590)
@@ -39,7 +39,7 @@
 mdb> dd
 p(1, 3)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p(1, 3)
 Is this a bug? yes
       21:      3  3 EXIT pred lpe_example:p/2-0 (nondet) lpe_example.m:17 (std_util.m:590)
@@ -59,12 +59,8 @@
 	r(3, 13)
 	r(3, 23)
 Complete? yes
-Incorrect node found:
-Call p(1, _)
-Solutions:
-	p(1, 13)
-	p(1, 23)
-	p(1, 3)
+Found partially uncovered atom:
+p(1, _)
 Is this a bug? yes
       23:      3  3 FAIL pred lpe_example:p/2-0 (nondet) lpe_example.m:17 (std_util.m:590)
 mdb> continue
Index: tests/debugger/declarative/neg_conj.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/neg_conj.exp,v
retrieving revision 1.3
diff -u -r1.3 neg_conj.exp
--- tests/debugger/declarative/neg_conj.exp	2000/02/22 10:46:21	1.3
+++ tests/debugger/declarative/neg_conj.exp	2000/02/23 02:24:24
@@ -26,7 +26,7 @@
 	q(0, 0)
 	q(0, 1)
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p(0)
 Is this a bug? yes
       18:      2  2 EXIT pred neg_conj:p/1-0 (semidet) neg_conj.m:19 (neg_conj.m:9)
Index: tests/debugger/declarative/negation.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/negation.exp,v
retrieving revision 1.3
diff -u -r1.3 negation.exp
--- tests/debugger/declarative/negation.exp	2000/02/22 10:46:23	1.3
+++ tests/debugger/declarative/negation.exp	2000/02/23 02:24:24
@@ -24,7 +24,7 @@
 	r(1, 11)
 	r(1, 21)
 Complete? yes
-Incorrect node found:
+Found incorrect contour:
 p(1, 42)
 Is this a bug? yes
       23:      2  2 EXIT pred negation:p/2-0 (det) negation.m:29 (negation.m:14)
Index: tests/debugger/declarative/oracle_db.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/oracle_db.exp,v
retrieving revision 1.5
diff -u -r1.5 oracle_db.exp
--- tests/debugger/declarative/oracle_db.exp	2000/02/22 10:46:23	1.5
+++ tests/debugger/declarative/oracle_db.exp	2000/02/23 02:24:24
@@ -13,7 +13,7 @@
 Valid? no
 b(99)
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a(99, 99, 99)
 Is this a bug? yes
       10:      2  2 EXIT pred oracle_db:a/3-0 (semidet) oracle_db.m:19 (oracle_db.m:9)
Index: tests/debugger/declarative/propositional.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/propositional.exp,v
retrieving revision 1.6
diff -u -r1.6 propositional.exp
--- tests/debugger/declarative/propositional.exp	2000/02/22 10:46:25	1.6
+++ tests/debugger/declarative/propositional.exp	2000/02/23 02:24:24
@@ -15,7 +15,7 @@
 Valid? no
 c
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a
 Is this a bug? yes
       11:      2  2 EXIT pred propositional:a/0-0 (semidet) propositional.m:27 (propositional.m:10)
@@ -30,7 +30,7 @@
 Valid? no
 i
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 f
 Is this a bug? yes
       22:      5  2 EXIT pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
Index: tests/debugger/declarative/propositional.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/propositional.exp2,v
retrieving revision 1.5
diff -u -r1.5 propositional.exp2
--- tests/debugger/declarative/propositional.exp2	2000/02/22 10:46:25	1.5
+++ tests/debugger/declarative/propositional.exp2	2000/02/23 02:24:25
@@ -15,14 +15,14 @@
 Valid? no
 c
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 a
 Is this a bug? yes
       15:      2  2 EXIT pred propositional:a/0-0 (semidet) propositional.m:27 (propositional.m:10)
 mdb> continue
-      16:    299  2 CALL pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
+      16:    315  2 CALL pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
 mdb> finish
-      30:    299  2 EXIT pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
+      30:    315  2 EXIT pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
 mdb> dd
 b
 Valid? no
@@ -30,9 +30,9 @@
 Valid? no
 i
 Valid? yes
-Incorrect node found:
+Found incorrect contour:
 f
 Is this a bug? yes
-      30:    299  2 EXIT pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
+      30:    315  2 EXIT pred propositional:b/0-0 (semidet) propositional.m:29 (propositional.m:10)
 mdb> continue
 yes
Index: tests/debugger/declarative/queens.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/queens.exp,v
retrieving revision 1.5
diff -u -r1.5 queens.exp
--- tests/debugger/declarative/queens.exp	2000/02/22 10:46:26	1.5
+++ tests/debugger/declarative/queens.exp	2000/02/23 02:24:26
@@ -51,9 +51,8 @@
 Solutions:
 	qdelete(1, [1], [])
 Complete? yes
-Incorrect node found:
-Call qperm([1], _)
-No solutions.
+Found partially uncovered atom:
+qperm([1], _)
 Is this a bug? yes
      161:      3  2 FAIL pred queens:queen/2-0 (nondet) queens.m:41 (queens.m:15)
 mdb> continue
Index: tests/debugger/declarative/small.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/declarative/small.exp,v
retrieving revision 1.3
diff -u -r1.3 small.exp
--- tests/debugger/declarative/small.exp	2000/02/22 10:46:28	1.3
+++ tests/debugger/declarative/small.exp	2000/02/23 02:24:26
@@ -11,7 +11,7 @@
 mdb> dd
 p(42)
 Valid? no
-Incorrect node found:
+Found incorrect contour:
 p(42)
 Is this a bug? yes
        3:      2  2 EXIT pred small:p/1-0 (det) small.m:14 (small.m:8)
-- 
Mark Brown, PhD student            )O+  |  "Another of Fortran's breakthroughs
(m.brown at cs.mu.oz.au)                   |  was the GOTO statement, which was...
Dept. of Computer Science and Software  |  uniquely simple and understandable"
Engineering, University of Melbourne    |              -- IEEE, 1994
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list